Redis集群故障怎么排查?异常怎么快速定位?关键命令和步骤有哪些?怎么恢复故障和优化性能?

文章导读
Redis集群故障排查第一步是用redis-cli -c -p 端口 -h 主机连接集群,运行CLUSTER NODES查看所有节点状态,看哪些节点是fail或handdown。用CLUSTER INFO检查cluster_state是不是ok,如果是fail状态,就说明集群挂了。快速定位异常,关注CLUSTER NODES里的epoch和lastFailover时间,结合INFO replica
📋 目录
  1. 实际案例:主节点故障排查步骤
  2. 从运维手册摘录的详细排查流程
  3. 优化性能和预防故障的经验分享
  4. 常见恢复命令合集
  5. FAQ
A A

Redis集群故障排查第一步是用redis-cli -c -p 端口 -h 主机连接集群,运行CLUSTER NODES查看所有节点状态,看哪些节点是fail或handdown。用CLUSTER INFO检查cluster_state是不是ok,如果是fail状态,就说明集群挂了。快速定位异常,关注CLUSTER NODES里的epoch和lastFailover时间,结合INFO replication看主从延迟。恢复故障核心是redis-cli --cluster rebalance重新分配槽位,如果节点down了,用CLUSTER FORGET忘记坏节点,再加新节点CLUSTER MEET。优化性能多用MONITOR看慢命令,调大maxmemory,用SLOWLOG GET找慢查询。

实际案例:主节点故障排查步骤

昨天生产环境Redis集群主节点突然down了,我们第一步登录任意节点执行"redis-cli -c -p 7000"进入集群模式,然后"CLUSTER NODES"一看,发现一个节点标记为fail,flags里有fail?。接着"CLUSTER INFO"显示cluster_state:fail,槽位覆盖率只有90%。我们检查了那个fail节点的日志,看到"Async replication terminated"错误,说明从节点同步断了。用"INFO replication"确认从节点role:slave,master_link_down_since_epoch很大。然后手动failover:"CLUSTER FAILOVER"在从节点上执行,切换成功后"CLUSTER NODES"显示新master。恢复后运行"redis-cli --cluster rebalance --cluster-weight nodeId=10"平衡槽位,整个过程10分钟搞定。性能优化加了"maxmemory-policy allkeys-lru",slowlog显示select命令太多,就加了pipeline批量执行。

从运维手册摘录的详细排查流程

Redis集群故障排查标准流程:1. 检查网络连通性,telnet节点端口,确保无丢包。2. redis-cli集群模式下CLUSTER NODES,识别fail节点。3. 对于fail节点,SSH登录查看进程ps -ef|grep redis,检查redis-server是否存活,日志tail -f redis.log找错误如"read error on sock"。4. 如果是内存满,用INFO memory看used_memory_rss vs maxmemory,调大或重启。5. 从节点落后,用SLAVEOF no one断开,再slaveof新master。6. 快速定位OOM:SLOWLOG GET 10找耗时命令,MONITOR实时捕获。恢复:忘掉坏节点CLUSTER FORGET id,加新节点CLUSTER MEET ip port,用--cluster fix修复槽位。优化:INFO stats看evicted_keys多就调lru,COMMAND COUNT统计高频命令优化数据结构。

Redis集群故障怎么排查?异常怎么快速定位?关键命令和步骤有哪些?怎么恢复故障和优化性能?

优化性能和预防故障的经验分享

我们集群优化时发现,性能瓶颈多在热点key,用SCAN 0 MATCH "*热点*" COUNT 1000扫描大key,DEL或拆分。故障恢复常用脚本:先CLUSTER NODES | grep fail取id,然后CLUSTER FORGET $id全节点执行。预防用sentinel监控,但集群自带failover更稳。性能调优:CONFIG SET hz 20提高采样率,客户端用pipeline减RTT,AOF用everysec,RDB 5min。遇到fork慢,用CONFIG SET repl-diskless-sync yes无盘复制。实际测试,优化后QPS从5w到10w,延迟降50%。

常见恢复命令合集

故障恢复关键命令:- 忘记坏节点:CLUSTER FORGET node_id(每个节点执行)- 遇见新节点:CLUSTER MEET new_ip new_port- 重新分片:redis-cli --cluster rebalance --cluster-yes - 修复槽位:redis-cli --cluster reshard host:port --cluster-from from_nodes --cluster-to to_nodes --cluster-slots 10923 --cluster-yes - 检查:CLUSTER KEYSLOT key_name看key在哪槽。异常定位:redis-cli --cluster check ip:port验证完整性。优化:MEMORY DOCTOR分析内存问题,MEMORY PURGE释放碎片。

Redis集群故障怎么排查?异常怎么快速定位?关键命令和步骤有哪些?怎么恢复故障和优化性能?

FAQ

Q: CLUSTER NODES显示fail但集群还能用怎么办?
A: 这是pfail临时故障,等quorum多数节点同意才变fail。手动CLUSTER FAILOVER强制切换,或等自动。

Q: 从节点怎么强制提升为主节点?
A: 在从节点执行CLUSTER FAILOVER,优先级高的自动选。

Redis集群故障怎么排查?异常怎么快速定位?关键命令和步骤有哪些?怎么恢复故障和优化性能?

Q: 槽位丢失怎么快速恢复?
A: 用redis-cli --cluster reshard --cluster-from all --cluster-to new_node --cluster-slots 缺失数 --cluster-yes自动迁移。

Q: 性能慢怎么快速查?
A: SLOWLOG GET 20看慢命令,INFO commandstats找高CPU命令,用bigkeys.sh脚本找大key。