MST

星途 面试题库

面试题:Redis高可用性配置之哨兵模式

请阐述Redis哨兵模式是如何实现高可用性配置的?在哨兵模式下,主从切换的具体流程是什么?
49.7万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

Redis哨兵模式实现高可用性配置的方式

  1. 监控(Monitoring)
    • 哨兵节点会定期向主节点和从节点发送 PING 命令,以检测它们是否正常运行。如果在指定时间内没有收到响应,哨兵就会认为该节点处于主观下线(Subjectively Down,简称SDOWN)状态。
    • 多个哨兵之间也会互相监控,以确保整个哨兵系统的健壮性。
  2. 自动故障检测(Automatic Failure Detection)
    • 当一个哨兵节点认为主节点主观下线后,它会询问其他哨兵节点是否也认为该主节点下线。如果达到一定数量(quorum)的哨兵都认为主节点下线,那么主节点就会被标记为客观下线(Objectively Down,简称ODOWN)。
  3. 自动故障转移(Automatic Failover)
    • 当主节点被判定为客观下线后,哨兵系统会从从节点中选举出一个新的主节点。选举算法基于 Raft 算法,通过投票机制选出一个哨兵来执行故障转移操作。
    • 被选中的哨兵会将一个从节点提升为新的主节点,并让其他从节点重新配置,指向新的主节点。同时,会向客户端发送新主节点的地址信息,以便客户端能够继续进行数据操作。
  4. 配置传播(Configuration Propagation)
    • 执行故障转移的哨兵会将新的主从配置信息传播给其他哨兵节点,使得整个哨兵系统的配置保持一致。这样,即使有新的客户端连接到任何一个哨兵节点,都能获取到最新的主从配置信息。

哨兵模式下主从切换的具体流程

  1. 主观下线
    • 某个哨兵节点向主节点发送 PING 命令,在规定时间内没有收到主节点的响应,该哨兵节点将主节点标记为 SDOWN
  2. 客观下线
    • 标记主节点为 SDOWN 的哨兵节点,会向其他哨兵节点发送 is - master - down - by - addr 命令,询问其他哨兵是否也认为主节点下线。
    • 当认为主节点下线的哨兵数量达到配置的 quorum 时,主节点被标记为 ODOWN
  3. 选举领导者哨兵
    • 所有哨兵节点开始进行领导者选举,基于 Raft 算法,每个哨兵节点会向其他哨兵节点发送投票请求。
    • 第一个获得超过半数投票的哨兵节点成为领导者哨兵,负责执行故障转移操作。
  4. 选择新主节点
    • 领导者哨兵从当前存活的从节点中选择一个作为新的主节点。选择规则一般如下:
      • 优先选择优先级(slave - priority 配置项)最高的从节点,如果有多个优先级相同的从节点,则继续下面的规则。
      • 选择复制偏移量最大(即数据最完整)的从节点。
      • 如果上述条件都相同,则选择运行ID最小的从节点。
  5. 故障转移
    • 领导者哨兵向选中的从节点发送 SLAVEOF NO ONE 命令,将其提升为新的主节点。
    • 领导者哨兵向其他从节点发送 SLAVEOF <new - master - ip> <new - master - port> 命令,让它们成为新主节点的从节点。
  6. 通知客户端
    • 哨兵系统会将新主节点的信息(IP和端口)通知给客户端,以便客户端能够连接到新的主节点进行数据操作。
  7. 配置传播
    • 领导者哨兵将新的主从配置信息传播给其他哨兵节点,使整个哨兵系统的配置保持一致。