面试题答案
一键面试Redis哨兵模式实现高可用性配置的方式
- 监控(Monitoring):
- 哨兵节点会定期向主节点和从节点发送
PING
命令,以检测它们是否正常运行。如果在指定时间内没有收到响应,哨兵就会认为该节点处于主观下线(Subjectively Down,简称SDOWN)状态。 - 多个哨兵之间也会互相监控,以确保整个哨兵系统的健壮性。
- 哨兵节点会定期向主节点和从节点发送
- 自动故障检测(Automatic Failure Detection):
- 当一个哨兵节点认为主节点主观下线后,它会询问其他哨兵节点是否也认为该主节点下线。如果达到一定数量(quorum)的哨兵都认为主节点下线,那么主节点就会被标记为客观下线(Objectively Down,简称ODOWN)。
- 自动故障转移(Automatic Failover):
- 当主节点被判定为客观下线后,哨兵系统会从从节点中选举出一个新的主节点。选举算法基于
Raft
算法,通过投票机制选出一个哨兵来执行故障转移操作。 - 被选中的哨兵会将一个从节点提升为新的主节点,并让其他从节点重新配置,指向新的主节点。同时,会向客户端发送新主节点的地址信息,以便客户端能够继续进行数据操作。
- 当主节点被判定为客观下线后,哨兵系统会从从节点中选举出一个新的主节点。选举算法基于
- 配置传播(Configuration Propagation):
- 执行故障转移的哨兵会将新的主从配置信息传播给其他哨兵节点,使得整个哨兵系统的配置保持一致。这样,即使有新的客户端连接到任何一个哨兵节点,都能获取到最新的主从配置信息。
哨兵模式下主从切换的具体流程
- 主观下线:
- 某个哨兵节点向主节点发送
PING
命令,在规定时间内没有收到主节点的响应,该哨兵节点将主节点标记为SDOWN
。
- 某个哨兵节点向主节点发送
- 客观下线:
- 标记主节点为
SDOWN
的哨兵节点,会向其他哨兵节点发送is - master - down - by - addr
命令,询问其他哨兵是否也认为主节点下线。 - 当认为主节点下线的哨兵数量达到配置的
quorum
时,主节点被标记为ODOWN
。
- 标记主节点为
- 选举领导者哨兵:
- 所有哨兵节点开始进行领导者选举,基于
Raft
算法,每个哨兵节点会向其他哨兵节点发送投票请求。 - 第一个获得超过半数投票的哨兵节点成为领导者哨兵,负责执行故障转移操作。
- 所有哨兵节点开始进行领导者选举,基于
- 选择新主节点:
- 领导者哨兵从当前存活的从节点中选择一个作为新的主节点。选择规则一般如下:
- 优先选择优先级(
slave - priority
配置项)最高的从节点,如果有多个优先级相同的从节点,则继续下面的规则。 - 选择复制偏移量最大(即数据最完整)的从节点。
- 如果上述条件都相同,则选择运行ID最小的从节点。
- 优先选择优先级(
- 领导者哨兵从当前存活的从节点中选择一个作为新的主节点。选择规则一般如下:
- 故障转移:
- 领导者哨兵向选中的从节点发送
SLAVEOF NO ONE
命令,将其提升为新的主节点。 - 领导者哨兵向其他从节点发送
SLAVEOF <new - master - ip> <new - master - port>
命令,让它们成为新主节点的从节点。
- 领导者哨兵向选中的从节点发送
- 通知客户端:
- 哨兵系统会将新主节点的信息(IP和端口)通知给客户端,以便客户端能够连接到新的主节点进行数据操作。
- 配置传播:
- 领导者哨兵将新的主从配置信息传播给其他哨兵节点,使整个哨兵系统的配置保持一致。