redis cluster在主节点宕机且无可用从节点时将进入fail状态,拒绝写操作并可能影响读操作,需人工介入验证拓扑、强制接管槽位、修复配置并校验集群状态。

主节点挂掉且没有可用从节点时,Redis Cluster会直接失去对应槽位(slot)的服务能力。由于16384个槽位未被完全覆盖,集群将进入fail状态,拒绝写操作,部分读也可能失败——这是设计使然,不是异常,而是强一致性保障机制的体现。
确认是否真无从节点可用
先别急着重建,用命令验证真实拓扑:
- 执行
redis-cli -c -h -p cluster nodes,检查目标主节点的从节点是否真的全部离线,还是仅状态显示为fail或noaddr - 若从节点进程仍在运行但未加入集群,可能是握手失败或配置中
cluster-announce-ip错误,需核对各节点 conf 中的绑定地址与实际网络可达性 - 注意:某些情况下从节点日志里报
Waiting for master to be up,说明它在等原主恢复,而非已不可用
强制接管槽位并重建主从关系
确认确实无健康从节点后,必须人工介入以恢复槽位服务:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 选一个数据相对完整、时间最新的节点(可以是其他主节点的从节点,或曾同步过该主数据的独立实例),停止其服务,清空其
appendonly.aof和dump.rdb,然后修改其redis.conf中的cluster-config-file路径,避免加载旧集群纪元信息 - 启动该节点,用
redis-cli --cluster add-node --cluster-slave --cluster-master-id将其作为新从节点加入 - 若原主节点ID已彻底丢失(如磁盘损坏),则需使用
redis-cli --cluster fix配合--cluster-fix-with-unreachable-masters强制重新分配槽位,并指定新主节点接管对应 slot 范围
修复后必须校验的关键项
操作完成后不等于恢复完成,以下三点缺一不可:
- 执行
redis-cli --cluster check,确保输出中不再出现[ERR],且16384 slots covered显示为 true - 连接新主节点,运行
cluster slots,确认其负责的 slot 区间与预期一致;再查info replication,验证是否有从节点正常连接并处于up状态 - 检查所有节点的
cluster_epoch是否统一——若存在多个 epoch 值,说明集群纪元分裂,需手动停掉旧纪元节点或重写nodes.conf并重启
预防同类故障的硬性建议
单点主节点无从节点是高危配置,后续务必加固:
- 每个主节点至少配一个从节点,且主从**不得部署在同一物理机或同一可用区**,避免宿主机级故障导致双挂
- 启用
cluster-require-full-coverage no(谨慎开启),允许集群在部分槽位不可用时仍接受读请求,降低雪崩风险 - 定期用
redis-cli --cluster info监控connected_slaves数值,配合告警规则(如某主节点 connected_slaves










