面试题答案
一键面试选举触发条件
- 主观下线(SDOWN):每个 Sentinel 节点会定期向其他 Redis 实例(包括主节点和从节点)发送 PING 命令来检测其健康状态。如果在指定时间内(通常是配置的
down-after-milliseconds
)没有收到有效回复,Sentinel 会将该实例标记为 SDOWN,即主观认为该实例下线。 - 客观下线(ODOWN):当一个 Sentinel 节点将主节点标记为 SDOWN 后,它会向其他 Sentinel 节点询问该主节点的状态。如果超过指定数量(配置的
quorum
)的 Sentinel 节点都认为该主节点下线,那么这个主节点就会被标记为 ODOWN,即客观下线。此时,选举领头 Sentinel 的流程就会被触发,目的是为了进行故障转移,选出新的主节点。
选举大致流程
- 资格检查:每个认为主节点客观下线的 Sentinel 节点,首先会检查自己是否有资格成为领头 Sentinel。条件包括:自身没有处于 ODOWN 状态、与其他 Sentinel 节点的连接正常等。
- 发起选举:符合资格的 Sentinel 节点会向其他 Sentinel 节点发送
SENTINEL is-master-down-by-addr
命令,请求对方选举自己为领头 Sentinel。 - 投票阶段:收到选举请求的 Sentinel 节点,如果还没有给其他 Sentinel 节点投过票,并且认为发送请求的 Sentinel 节点有资格成为领头 Sentinel,就会投出一票。
- 选举结果:当一个 Sentinel 节点获得超过半数(
quorum
)且大于配置的majority
(一般majority
默认为quorum
)的票数时,它就会当选为领头 Sentinel。如果在规定时间内没有 Sentinel 节点获得足够票数,会重新进行选举。 - 故障转移:当选的领头 Sentinel 负责执行故障转移操作,从众多从节点中挑选一个晋升为主节点,并让其他从节点指向新的主节点,从而完成 Redis 集群的自动恢复。