记录一下那天晚上的排查过程。自建 Redis 6.2 三主三从集群,一台主节点重启后 redis-cli --cluster check 显示只有 16381 个槽在服务,业务写入直接报 CLUSTERDOWN The cluster is down,客户端连接被拒。
刚开始盯着「扩容时槽位迁移做到一半,源节点和目标节点都认为槽在自己这」,折腾了半个多小时,排掉了。
排查方向其实有限,先把可能性排一排。重启的节点没有自动加载 nodes.conf,槽位信息丢了。少数情况下是集群的 cluster-config-file 指向了临时目录,重启后文件不存在。
还有一种情况,cluster-node-timeout 太短,节点频繁被判下线触发故障转移失败。
先看集群状态和槽位分布
redis-cli --cluster check 10.0.0.11:6379
随后确认节点的集群配置文件还在
ls -l /var/lib/redis/nodes.conf && redis-cli CLUSTER INFO
接着把缺失的槽补回给对应节点
redis-cli --cluster fix 10.0.0.11:6379
剩下的就是核对每个节点负责的槽区间
redis-cli -p 6379 CLUSTER SLOTS
改完先别撤,确认这几项。CLUSTER INFO 里 cluster_state 是 ok,cluster_slots_assigned 等于 16384,业务写入恢复正常。
提醒一点。nodes.conf 是集群的元数据,丢了等于失忆,部署时把它放到持久目录并纳入备份;修槽位前先停掉业务写入。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
