MST

星途 面试题库

面试题:Redis Sentinel选举领头Sentinel的大致步骤是什么

请详细阐述Redis Sentinel在选举领头Sentinel时的主要执行步骤。
49.9万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试
  1. 主观下线(SDOWN)
    • Sentinel节点会定期向其他Redis实例(包括主节点和从节点)发送PING命令来检测其健康状态。如果在一定时间内(由配置项down - after - milliseconds决定)没有收到有效回复,Sentinel会将该实例标记为“主观下线”,即认为该实例在当前Sentinel节点视角下已经不可用。
  2. 客观下线(ODOWN)
    • 当一个Sentinel节点将主节点标记为SDOWN后,它会向其他Sentinel节点发送SENTINEL is - master - down - by - addr命令,询问其他Sentinel节点是否也认为该主节点下线。
    • 如果超过配置的quorum个Sentinel节点都认为主节点下线(包括当前发起询问的Sentinel节点),那么该主节点会被标记为“客观下线”(ODOWN)。这意味着从多个Sentinel节点的综合判断来看,主节点确实不可用了。
  3. 选举领头Sentinel
    • 当主节点被标记为ODOWN后,各个Sentinel节点会进入领头Sentinel选举阶段。
    • Sentinel节点之间通过SENTINEL is - master - down - by - addr命令的交互,互相交换自己的配置纪元(一个自增的整数,用于标识选举轮次)和自身的运行ID。
    • 每个发现主节点客观下线的Sentinel节点会要求其他Sentinel节点将它选举为领头Sentinel。要求发送的是SENTINEL ELECT命令。
    • Sentinel节点在接收到SENTINEL ELECT命令时,会进行判断:
      • 如果它还没有投票给其他Sentinel节点,并且要求选举的Sentinel节点的配置纪元大于它当前记录的配置纪元,或者配置纪元相同但要求选举的Sentinel节点的运行ID小于它当前记录的运行ID(运行ID是唯一且固定的,较小的运行ID代表优先级更高),那么它会投票给这个要求选举的Sentinel节点。
    • 当一个Sentinel节点获得了超过半数且大于quorum的Sentinel节点的投票时,它就会成为领头Sentinel。
  4. 故障转移
    • 领头Sentinel负责执行故障转移操作。它会从主节点的从节点中挑选一个作为新的主节点,挑选规则包括:
      • 首先排除处于下线或断线状态的从节点。
      • 选择优先级最高的从节点(优先级由slave - priority配置项决定,数值越小优先级越高)。如果多个从节点优先级相同,则选择复制偏移量最大的从节点(即复制数据最完整的从节点)。如果仍然相同,则选择运行ID最小的从节点。
    • 领头Sentinel会向选中的从节点发送SLAVEOF no one命令,使其成为新的主节点。
    • 然后领头Sentinel会向其他从节点发送SLAVEOF <new - master - ip> <new - master - port>命令,让它们成为新主节点的从节点。
    • 最后,领头Sentinel会更新对主节点和从节点的配置记录,将新主节点的信息同步给其他Sentinel节点。