*Redis CLUSTER FAILOVER 命令
强制当前从节点发起故障转移,晋升为主节点。
*语法
CLUSTER FAILOVER [FORCE | TAKEOVER]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| FORCE | 标志 | 否 | 强制故障转移,不等待主节点确认 |
| TAKEOVER | 标志 | 否 | 直接接管,不检查主节点状态(用于网络分区) |
*返回值
| 条件 | 返回值 |
|---|---|
| 成功 | OK |
| 失败 | 错误 |
*时间复杂度
O(1)
*
*示例
> CLUSTER FAILOVER
OK
# 强制故障转移
> CLUSTER FAILOVER FORCE
OK
# 直接接管(网络分区场景)
> CLUSTER FAILOVER TAKEOVER
OK
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| 当前节点是主节点 | CLUSTER FAILOVER 只能从节点执行 | 在从节点上执行 |
| 集群未配置 | 单机模式不支持集群命令 | 确认在集群模式下运行 |
| TAKEOVER 后脑裂风险 | 网络分区场景使用 TAKEOVER | 恢复后人工干预合并集群状态 |
*最佳实践
- 手动切换:主节点维护时,手动在从节点执行 CLUSTER FAILOVER 切换。
FORCE 慎用:FORCE 会立即切换,可能导致短暂数据丢失。
网络分区场景:网络分区时使用 TAKEOVER,恢复后需要人工干预合并集群状态。
监控复制偏移量:执行 FORCE/TAKEOVER 前检查 INFO REPLICATION 中的 masterreploffset,评估可能丢失的数据量。
*5. 自动化切换:生产环境建议依赖 Redis Cluster 自动故障转移,手动 FAILOVER 仅用于维护和灾备。
*FAQ
Q1: CLUSTER FAILOVER 和自动故障转移有什么区别? A: CLUSTER FAILOVER 是手动触发,由管理员在从节点执行;自动故障转移由集群检测主节点下线后自动执行,无需人工干预。
Q2: FORCE 和 TAKEOVER 有什么区别? A: FORCE 会尝试与主节点通信确认,但如果主节点无响应也会执行;TAKEOVER 完全不检查主节点状态,直接接管,用于网络分区场景。
Q3: 主节点可以执行 CLUSTER FAILOVER 吗? A: 不可以。CLUSTER FAILOVER 只能从节点执行,主节点执行会返回错误。
Q4: 执行 CLUSTER FAILOVER 后原主节点会变成从节点吗? A: 通常不会自动变回从节点。如果需要恢复原拓扑,需要手动在原主节点执行 CLUSTER REPLICATE。
Q5: CLUSTER FAILOVER 会导致数据丢失吗? A: 正常情况下不会。使用 FORCE 时,如果主节点有未同步的写操作,这些数据会丢失。使用 TAKEOVER 风险更高,因为它不检查复制偏移量。