ElastiCache for Redis中redis-cli执行set命令长期卡住无响应如何排查?
Amazon ElastiCache for Redis执行set命令无响应排查方案
常见触发原因
- 安全组/网络ACL规则异常:仅放通了Redis端口的入站规则,未放通对应出站规则导致回包被拦截,或规则仅允许连接建立请求,未放通后续数据传输流量
- 集群开启集群模式(Cluster Mode Enabled),但redis-cli连接时未加
-c参数,写入key被哈希到其他slot时节点返回重定向,原生redis-cli默认不处理重定向会出现卡住现象 - 节点资源不足:内存使用率超过
maxmemory阈值且淘汰策略配置为noeviction,或CPU、网络带宽跑满,导致写入请求无法被处理 - 客户端与集群之间MTU不匹配:VPC默认MTU为9001(巨帧),若客户端所在网络MTU为1500且未开启PMTUd发现机制,大数据包传输时会出现丢包卡住
- 节点处于临时不可用状态:正执行故障切换、备份、扩容等运维操作,会临时拒绝写入请求
排查解决步骤
- 校验网络配置与端口正确性
首先确认集群端口,Redis默认端口为6379,你操作命令中填写的6739为异常值,优先确认集群实际监听端口是否填写错误。
再通过nc命令验证网络连通性:nc -zv ${aws-elasticache-cluster-url} 实际端口号
同时检查ElastiCache关联的安全组、网络ACL规则,双向都要放通客户端IP对应的Redis端口流量。 - 确认集群模式适配
连接集群后执行以下命令查看集群模式是否开启:cluster info
若返回结果中cluster_enabled:1,说明是集群模式,需要重新用-c参数启动redis-cli支持重定向:redis-cli -c -h ${aws-elasticache-cluster-url} -p 实际端口号 - 检查节点资源与配置
执行命令查看内存使用情况:info memory
核对used_memory与maxmemory参数,若内存占用已达阈值且maxmemory-policy为noeviction,需要调整内存淘汰策略或扩容集群内存。
再通过AWS控制台查看节点的CPU利用率、网络进出流量指标,若长期超过80%阈值,需要升级节点规格。 - 验证MTU适配性
通过ping命令测试大包传输是否正常:ping -M do -s 8972 ${aws-elasticache-cluster-url}
如果出现丢包,说明MTU不匹配,可将客户端所在服务器MTU调整为1500,或开启PMTUd功能。 - 检查集群运维状态
登录AWS ElastiCache控制台查看集群事件与状态,确认是否存在正在进行的备份、扩容、故障切换操作,等待运维操作完成后再尝试写入。
内容的提问来源于stack exchange,提问作者Lee Dat
相关产品推荐
相关产品推荐

