面试题答案
一键面试基本原理
- Raft算法变种:Redis Sentinel使用一种基于Raft算法变种的选举机制。在这个机制中,每个Sentinel节点都有机会成为领导者(领头Sentinel)。
- 节点状态:Sentinel节点有不同状态,如追随者(Follower)、候选者(Candidate)和领导者(Leader)。初始状态下,所有Sentinel节点都是追随者。
关键步骤
- 主观下线判断:
- 每个Sentinel节点会定期向主节点和其他从节点发送PING命令。
- 如果在一定时间内(可配置的down-after-milliseconds参数)没有收到响应,该Sentinel节点会将主节点标记为“主观下线”(Subjectively Down,简称SDOWN)。
- 客观下线判断:
- 当一个Sentinel节点将主节点标记为SDOWN后,会向其他Sentinel节点发送SENTINEL is-master-down-by-addr命令。
- 当同意主节点为下线状态的Sentinel节点数量达到配置的quorum值时,主节点会被标记为“客观下线”(Objectively Down,简称ODOWN)。
- 选举领头Sentinel:
- 当主节点被标记为ODOWN后,检测到ODOWN的Sentinel节点会发起选举。
- 发起选举的Sentinel节点会向其他Sentinel节点发送SENTINEL is-master-down-by-addr命令,并带上自己的配置纪元(configuration epoch)。
- 收到选举请求的Sentinel节点,在一个配置纪元内,只会对第一个收到的选举请求进行投票。
- 当某个Sentinel节点获得超过半数(包括quorum值)的Sentinel节点投票时,该Sentinel节点成为领头Sentinel。
- 故障转移:
- 领头Sentinel负责执行故障转移操作。它会从从节点中挑选一个晋升为主节点,并让其他从节点指向新的主节点。