面试题答案
一键面试基本机制和方法
- 心跳检测
- Sentinel 通过定期向主从服务器发送 PING 命令来检测它们的健康状态。这不仅用于判断服务器是否存活,还为负载均衡提供基础数据。例如,如果某个从服务器长时间没有响应 PING 命令,Sentinel 会标记其为下线状态,从而避免向其发送信息。
- 主观下线和客观下线判断
- 主观下线:Sentinel 节点自己判断某个服务器(主或从)是否下线。比如一个 Sentinel 节点在配置的
down-after-milliseconds
时间内未收到服务器的有效回复,就标记该服务器为主观下线。 - 客观下线:当多个 Sentinel 节点都认为某个主服务器主观下线时,经过法定人数的 Sentinel 节点同意,就将该主服务器标记为客观下线。客观下线的判定机制能更准确地确定服务器状态,避免误判,确保负载均衡建立在准确的服务器状态信息基础上。
- 主观下线:Sentinel 节点自己判断某个服务器(主或从)是否下线。比如一个 Sentinel 节点在配置的
- 选举领头 Sentinel
- 当主服务器被标记为客观下线时,多个 Sentinel 节点需要选举出一个领头 Sentinel 来执行故障转移操作。选举过程基于 Raft 算法的变种。每个 Sentinel 节点会向其他 Sentinel 节点发送投票请求,获得超过半数且大于配置的
quorum
值票数的 Sentinel 节点成为领头 Sentinel。只有领头 Sentinel 才能执行故障转移,确保故障转移过程的一致性和唯一性,避免多个 Sentinel 同时进行操作导致混乱,影响负载均衡。
- 当主服务器被标记为客观下线时,多个 Sentinel 节点需要选举出一个领头 Sentinel 来执行故障转移操作。选举过程基于 Raft 算法的变种。每个 Sentinel 节点会向其他 Sentinel 节点发送投票请求,获得超过半数且大于配置的
- 故障转移
- 从服务器选择:领头 Sentinel 从众多从服务器中选择一个作为新的主服务器。选择依据包括从服务器的复制偏移量(复制越完整越好)、优先级(通过
slave-priority
配置)等。例如,选择优先级高且复制偏移量大的从服务器作为新主,这样可以保证新主的数据完整性和处理能力,实现负载在新主从架构上的合理分布。 - 重新配置:领头 Sentinel 会向剩余的从服务器发送命令,让它们复制新的主服务器;同时通知客户端新的主服务器地址。这一过程重新构建了主从结构,使得负载能够重新在新的主从集群中均衡分配。
- 从服务器选择:领头 Sentinel 从众多从服务器中选择一个作为新的主服务器。选择依据包括从服务器的复制偏移量(复制越完整越好)、优先级(通过
- 发布与订阅机制
- Sentinel 使用发布与订阅机制在 Sentinel 节点之间交换关于主从服务器的状态信息。每个 Sentinel 节点会订阅特定频道,同时向该频道发布自己对于主从服务器状态的判断。这样所有 Sentinel 节点都能获取到最新的服务器状态信息,从而在进行负载均衡相关决策(如故障转移)时保持信息一致。