首页/数据/Redis 进阶速查/FAILOVER 命令:受控切换
主从与哨兵51 条

FAILOVER 命令:受控切换

6.2 起提供 FAILOVER 命令做协调式切换:主库等待从库追平后提升目标从库并把其他从库指向新主,减少手工步骤与分叉风险。

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

协调式切换命令

FAILOVER 在 Redis 6.2 引入,事件发生在待下线的主库上:主库先等目标从库把偏移追平,再把它提升为新主库,并把其余从库重新指向新主。全过程由主库协调,替代了手工在两台机器上执行降级与提升的做法,能明显压低造出双主与数据分叉的概率。

基本信息

适用版本Redis 6.2 及以上
执行位置必须连到当前主库,在从库上执行无效
语法FAILOVER [TO host port [FORCE]] [ABORT] [TIMEOUT 毫秒]
过程查看INFO replication 中的 master_failover_state

典型使用场景

  • 计划内维护:不停机把主库切到另一台机器,然后下线原主做硬件或系统维护
  • 机房搬迁:把主库漂移到目标机房节点上,避免长时间跨机房写延迟
  • 切换演练:不杀进程也能走一遍完整的切换流程,用于验证客户端恢复能力
  • 故障兜底:原主仍在线但已不适合继续承担写入(如磁盘故障或机器异常)

使用示例

使用示例
redis-cli -h 10.0.0.11 FAILOVER TO 10.0.0.12 6379      # 指定目标从库执行切换
redis-cli -h 10.0.0.11 FAILOVER                         # 不带 TO 时由主库自行挑选从库
redis-cli -h 10.0.0.11 INFO replication | grep master_failover_state   # 观察进度
redis-cli -h 10.0.0.11 FAILOVER ABORT                   # 中止尚未完成的切换
redis-cli -h 10.0.0.12 INFO replication | grep role     # 确认新主已就位
redis-cli -h 10.0.0.11 INFO replication | grep role     # 确认原主已降为从库

过程状态读法

master_failover_state含义下一步动作
no-failover当前没有切换在进行可以发起新的切换
waiting-for-sync正在等待目标从库追平偏移观察从库 offset 是否收敛
failover-in-progress正在提升目标并重指向其他从库耐心等待收敛,不要同时手工提升
切换完成后 role 变化原主变为从库,目标从库成为主库同步更新客户端入口(DNS 或代理)
FORCE 必须与 TO 一起使用,它会跳过与目标从库的同步校验。只有在目标宁可丢一点数据也要完成切换的紧急场景才用它,否则可能丢掉尚未同步到从库的写入。
TIMEOUT 控制等待目标从库追平的上限,单位毫秒。等待期间主库仍接受写入、偏移持续推进,因此写入量大的实例要给足时间,否则切换会因为追不平而失败。
6.2 以前没有这个命令,老版本要么手工 REPLICAOF NO ONE 加上指向新主的 REPLICAOF,要么交给哨兵或集群处理。没有协调机制时切勿在两边同时提升,双主一旦形成清理起来非常麻烦。
FAILOVER 只解决 Redis 侧的主从关系,客户端如何找到新主仍需要配套机制:哨兵、代理层、DNS 切换或服务发现都行,但必须和应用一起演练过。

易错点

  • 计划内切换不带 TO:由主库自行挑选从库,选中的可能不是容量或机房符合预期的那台,正式操作应写全目标地址
  • 切换完成后没同步更新客户端入口:应用仍连着旧地址持续报错,等于换了主库却没人知道,必须把 DNS 或代理更新纳入流程
  • 为了赶时间用 FORCE 跳过同步校验:会丢掉未同步的写入,事后还要人工核对数据差异,属于紧急手段而非常规操作
  • 切换进行中又手工执行 PROMOTE 或另一套协调动作:与主库的协调流程冲突,可能造出双主,等待状态机走完就好

数据来源与参考

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