记录一下那天晚上的排查过程。自建 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 是集群的元数据,丢了等于失忆,部署时把它放到持久目录并纳入备份;修槽位前先停掉业务写入。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189