首页/数据/数据库速查/集群故障转移与 CLUSTER FAILOVER
Redis 运维与场景124 条

集群故障转移与 CLUSTER FAILOVER

主节点故障时其从节点经多数派授权自动提升;计划内维护用 CLUSTER FAILOVER(需在从节点执行)主动切换,TAKEOVER 为强切(危险)。

数据库速查数据更新于 2026-10-13

集群故障转移是怎么做的

集群里主节点故障时,它的从节点会在多数派主节点授权后自动提升为新主节点,槽也会随之迁移。计划内维护则用主动切换命令:在目标从节点上执行,它会与主节点协商、等待数据追平后再完成角色互换,过程对业务影响最小。

基本信息

主动切换在从节点执行,与主节点协商并等待复制追平
强制模式主节点不可达时忽略偏移校验,存在丢数据风险
直接接管不与集群协商立即接管,仅用于仲裁完全失效的兜底
执行位置只能在从节点执行,在主节点上执行会报错
仲裁要求自动转移依赖多数派主节点可通信

典型使用场景

  • 计划内维护:需要在可控时间把某个分片的主节点换到另一台机器
  • 主节点负载不均:把主节点角色转移到资源更充裕的节点
  • 机房级调整:迁移前先把主节点切走,减少单次影响范围
  • 仲裁失效兜底:多数派不可用时用接管模式快速恢复写入
  • 演练验证:确认从节点能正常提升且客户端能跟随重定向

计划内切换

计划内切换
# 在目标从节点上执行(不是在主节点上)
redis-cli -c -h 10.0.0.11 -p 6379 CLUSTER FAILOVER
# 观察角色变化
redis-cli -c -p 6379 CLUSTER NODES | grep -E "master|slave"
# 主节点已不可达时忽略偏移校验(可能丢数据)
redis-cli -c -h 10.0.0.11 -p 6379 CLUSTER FAILOVER FORCE
# 不协商直接接管,仅在仲裁完全失效时使用
redis-cli -c -h 10.0.0.11 -p 6379 CLUSTER FAILOVER TAKEOVER
# 核对槽分布是否完整
redis-cli -c -p 6379 CLUSTER INFO | grep cluster_slots_assigned

模式对照

模式行为风险
默认模式与主节点握手,等复制追平后互换需要主节点在线
强制模式主节点不可达时忽略偏移校验可能丢失未同步的数据
接管模式不与集群协商直接接管可能出现双主与数据丢失
默认切换之所以安全,是因为它会先确认从节点数据足够新;主节点已宕机时则由集群仲裁完成自动转移。
接管模式绕过协商:在还能通信的环境里使用,会造成双主与数据分叉,恢复代价远大于收益。

易错点

  • 在错误节点执行切换:只有从节点能执行,主节点上执行直接报错
  • 滥用接管模式:绕过仲裁可能造成双主与数据丢失
  • 切换后不核对槽分配:槽未完整覆盖时部分键无法访问
  • 不通知客户端侧改造:切换期间出现大量重定向,客户端未适配会报错

数据来源与参考

  • Redis 官方文档: CLUSTER FAILOVER
  • Redis 官方文档: 集群故障转移

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌