MST

星途 面试题库

面试题:Redis Sentinel故障转移的基本流程是什么

请详细描述Redis Sentinel在进行故障转移时,从发现主节点故障到完成新主节点选举及配置更新的基本步骤。
49.6万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试
  1. 主观下线(SDOWN)
    • Sentinel节点会定期向主节点和从节点发送PING命令来检测其健康状态。当某个Sentinel节点在一定时间(可配置,默认30秒)内连续多次未收到主节点的有效回复时,该Sentinel节点会将主节点标记为“主观下线”(Subjectively Down,简称SDOWN)。这只是单个Sentinel节点的判断,并不意味着主节点真的不可用。
  2. 客观下线(ODOWN)
    • 当一个Sentinel节点将主节点标记为SDOWN后,它会向其他Sentinel节点发送 SENTINEL is - master - down - by - addr 命令,询问其他Sentinel节点对主节点状态的判断。
    • 如果在一定时间内,超过指定数量(可配置,一般为Sentinel节点总数的半数以上)的Sentinel节点都认为主节点处于下线状态,那么该主节点就会被标记为“客观下线”(Objectively Down,简称ODOWN)。这表明主节点确实发生了故障,需要进行故障转移。
  3. 选举领导者Sentinel
    • 当主节点被标记为ODOWN后,Sentinel集群需要选举出一个领导者Sentinel节点来执行故障转移操作。选举过程如下:
      • 每个发现主节点客观下线的Sentinel节点都有资格成为领导者。
      • 这些Sentinel节点会向其他Sentinel节点发送 SENTINEL is - master - down - by - addr 命令,并带上自己的选举票数。
      • 其他Sentinel节点在接收到这些命令后,会根据一定的规则(如先到先得,且每个Sentinel节点只能投一票)进行投票。
      • 当某个Sentinel节点获得超过半数以上(且大于等于配置的quorum值)的选票时,它就会被选举为领导者Sentinel节点。
  4. 选择新的主节点
    • 领导者Sentinel节点开始从该主节点的从节点中选择一个作为新的主节点。选择规则如下:
      • 过滤掉处于主观下线或断线状态的从节点。
      • 过滤掉最近5秒内没有回复过领导者Sentinel节点INFO命令的从节点。
      • 过滤掉与已下线主节点连接断开超过指定时长(down - after - milliseconds配置的时长的10倍)的从节点。
      • 优先选择优先级最高的从节点(可通过 slave - priority 配置,数值越低优先级越高)。
      • 如果优先级相同,则优先选择复制偏移量最大(即数据最完整)的从节点。
      • 如果复制偏移量也相同,则选择运行ID最小的从节点。
  5. 故障转移操作
    • 领导者Sentinel节点向选中的从节点发送 SLAVEOF no one 命令,将其提升为新的主节点。
    • 领导者Sentinel节点向其他从节点发送 SLAVEOF <new - master - ip> <new - master - port> 命令,让它们成为新主节点的从节点,开始复制新主节点的数据。
  6. 配置更新
    • 领导者Sentinel节点更新自身关于主节点和从节点的配置信息,记录新的主节点地址和端口等信息。
    • 领导者Sentinel节点向其他Sentinel节点发送 SENTINEL set <master - name> <config - option> <value> 命令,通知其他Sentinel节点更新主节点的配置信息。
    • 各个Sentinel节点会将新的配置信息持久化到本地的配置文件中,以便在重启后仍然能够使用最新的配置。同时,客户端连接的Sentinel节点也会将新的主节点信息返回给客户端,客户端可以根据这些信息重新连接到新的主节点,从而完成整个故障转移过程。