故障转移

语法
FAILOVER [TO host port [FORCE]] [ABORT] [TIMEOUT milliseconds]
从以下位置开始可用:
6.2.0
时间复杂度:
O(1)
ACL 类别:
@admin, @slow, @dangerous,

此命令将在当前连接到 master 与其副本之一之间启动协调故障转移。 故障转移不是同步的,而是由后台任务处理协调故障转移。 它旨在限制故障转移期间集群的数据丢失和不可用。 此命令类似于CLUSTER FAILOVER命令,类似于 Sentinel 提供的故障转移支持。

默认故障转移流的具体详细信息如下:

  1. master 将在内部启动CLIENT PAUSE WRITE,这将暂停传入写入并防止新数据在复制流中累积。
  2. 主服务器将监控其副本,等待副本指示它已完全使用复制流。如果 master 有多个副本,则它只会等待第一个副本赶上。
  3. 然后,主服务器会将自身降级为副本。这样做是为了防止任何双主方案。注意:主服务器不会丢弃其数据,因此如果副本在下一步中拒绝故障转移请求,它将能够回滚。
  4. 前一个 master 将向目标副本发送一个特殊的 PSYNC 请求,PSYNC FAILOVER,指示目标副本成为主副本。
  5. 前一个 Master 收到确认后,PSYNC FAILOVER被接受,它将取消暂停其客户端。如果 PSYNC 请求被拒绝,主服务器将中止故障转移并恢复正常。

该领域master_failover_stateINFO replication可用于跟踪故障转移的当前状态,该状态具有以下值:

  • no-failover:没有正在进行的协调故障转移。
  • waiting-for-sync:主服务器正在等待副本赶上其复制偏移量。
  • failover-in-progress:主副本已降级自身,并尝试将所有权移交给目标副本。

如果前一个主节点附加了其他副本,则它们将继续作为链式副本从该主节点复制。您需要手动执行REPLICAOF直接从新的主服务器开始复制。

可选参数

存在以下可选参数来修改故障转移流的行为:

  • TIMEOUT milliseconds -- 此选项允许指定主服务器在waiting-for-sync状态,然后中止故障转移尝试并回滚。 这是为了设置 Redis 集群可能遇到的写入中断的上限。 故障转移通常在不到一秒的时间内发生,但如果有大量写入流量或副本已经滞后于使用复制流,则可能需要更长的时间。 如果未指定此值,则可以认为超时为 “无限”。

  • TO HOST PORT -- 此选项允许通过主机和端口指定要故障转移到的特定副本。主服务器将专门等待此副本赶上其复制偏移量,然后故障转移到该副本。

  • FORCE-- 如果TIMEOUTTOoptions 时,force 标志还可用于指定一旦超时过后,主服务器应故障转移到目标副本,而不是回滚。 这可用于尽最大努力尝试故障转移,而不会丢失数据,但限制写入中断。

注意:如果PSYNC FAILOVER请求被目标副本拒绝。

故障转移中止

故障转移命令旨在防止数据丢失和损坏,但可能会遇到一些无法自动修复并且可能会卡住的情况。 为此,FAILOVER ABORT命令,这将中止正在进行的故障转移并将 master 恢复到正常状态。 如果在waiting-for-sync状态,但可以在failover-in-progress州。 如果遇到多主服务器场景,您将需要手动识别哪个主服务器具有最新数据,并将其指定为主服务器并拥有其他副本。

注意:REPLICAOF,这是为了防止与故障转移的意外交互,这可能会导致数据丢失。

RESP2/RESP3 回复

简单的字符串回复OK如果该命令被接受并且正在进行协调故障转移。如果无法执行作,则出错。
为本页评分
返回顶部 ↑