集群故障转移是怎么做的
集群里主节点故障时,它的从节点会在多数派主节点授权后自动提升为新主节点,槽也会随之迁移。计划内维护则用主动切换命令:在目标从节点上执行,它会与主节点协商、等待数据追平后再完成角色互换,过程对业务影响最小。
基本信息
| 主动切换 | 在从节点执行,与主节点协商并等待复制追平 |
|---|---|
| 强制模式 | 主节点不可达时忽略偏移校验,存在丢数据风险 |
| 直接接管 | 不与集群协商立即接管,仅用于仲裁完全失效的兜底 |
| 执行位置 | 只能在从节点执行,在主节点上执行会报错 |
| 仲裁要求 | 自动转移依赖多数派主节点可通信 |
典型使用场景
- 计划内维护:需要在可控时间把某个分片的主节点换到另一台机器
- 主节点负载不均:把主节点角色转移到资源更充裕的节点
- 机房级调整:迁移前先把主节点切走,减少单次影响范围
- 仲裁失效兜底:多数派不可用时用接管模式快速恢复写入
- 演练验证:确认从节点能正常提升且客户端能跟随重定向
计划内切换
计划内切换
# 在目标从节点上执行(不是在主节点上)
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模式对照
| 模式 | 行为 | 风险 |
|---|---|---|
| 默认模式 | 与主节点握手,等复制追平后互换 | 需要主节点在线 |
| 强制模式 | 主节点不可达时忽略偏移校验 | 可能丢失未同步的数据 |
| 接管模式 | 不与集群协商直接接管 | 可能出现双主与数据丢失 |
默认切换之所以安全,是因为它会先确认从节点数据足够新;主节点已宕机时则由集群仲裁完成自动转移。
接管模式绕过协商:在还能通信的环境里使用,会造成双主与数据分叉,恢复代价远大于收益。