首页/数据/Redis 进阶速查/CLUSTER FAILOVER:集群受控切换

CLUSTER FAILOVER:集群受控切换

在从节点执行 CLUSTER FAILOVER 把其主节点降为从节点并接管:默认会等待偏移对齐(优雅切换),FORCE 跳过对齐,TAKEOVER 不做任何协商。

Redis 进阶速查数据更新于 2026-10-13

受控切换与三种模式

CLUSTER FAILOVER 在集群的某个从节点上执行,作用是让这个从节点接管它所属的分片,原主节点降为从节点;它不是自动故障转移,而是人为发起的受控切换。默认模式最安全:从节点会先与主节点协商,等主节点停止写入、复制偏移对齐之后再完成身份互换,过程中不丢数据。此外还有两个变体:FORCE 表示跳过与主节点的协商(主节点已不可达时使用),TAKEOVER 则完全不做协商直接接管,风险最高。

基本信息

执行位置必须是待接管的从节点,不是主节点
默认模式等待偏移对齐后完成切换
FORCE跳过协商,主节点不可达时的选择
TAKEOVER不做任何协商,可能造成双主
适用场景主节点维护、机器更换、主节点长时间失联

典型使用场景

  • 主节点要停机维护,先在从节点切换,实现滚动维护不停服务
  • 主节点网络分区不可达但不希望等待超时判定时使用 FORCE
  • 机器更换:先把分片切到从节点,再下线旧机器
  • 演练:验证分片级故障转移是否按预期发生
  • 主节点资源异常但进程还在(如内存打满)时的人工接管

执行与复核

执行与复核
redis-cli -p 7001 CLUSTER FAILOVER              # 默认模式,等待对齐后切换
redis-cli -p 7001 CLUSTER FAILOVER FORCE        # 主节点已不可达时使用
redis-cli -p 7000 CLUSTER NODES | grep -E '7000|7001'   # 确认角色已互换
redis-cli -p 7001 INFO replication | grep -E 'role|connected_slaves'
redis-cli --cluster check 10.0.0.11:7000        # 切换后复核整个拓扑
redis-cli -p 7001 INFO stats | grep -E 'total_error_replies'  # 观察切换后的错误量

三种模式对照

模式前置条件风险
默认主节点可达且能完成协商最低,日常维护优先选它
FORCE主节点不可达从节点未完全追平可能丢少量写入
TAKEOVER不做任何协商可能造成双主写入,只用于极端场景
共同前提从节点数据尽量新落后越多,切换后丢失越多
切换完成后客户端靠 MOVED 重定向逐步收敛到新主。除了看节点角色,还要观察一段时间内的重定向次数与业务错误率:角色变了但请求仍在报错,说明客户端路由或连接池没有及时刷新。

易错点

  • 原主节点仍能接受写入时使用 TAKEOVER,两个节点同时被写入,产生无法合并的数据分叉
  • 从节点复制明显落后时直接 FORCE,切换后这部分数据永久丢失
  • 切换完成后不复核拓扑,遗留的主从关系错乱要到下一次故障才暴露出来
  • 把集群的 CLUSTER FAILOVER 与主从架构的 FAILOVER 命令混用,在错误的节点上执行导致操作无效

数据来源与参考

  • Redis 官方文档:CLUSTER FAILOVER 命令
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌