受控切换与三种模式
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 重定向逐步收敛到新主。除了看节点角色,还要观察一段时间内的重定向次数与业务错误率:角色变了但请求仍在报错,说明客户端路由或连接池没有及时刷新。