详解Redis哨兵模式下,主节点掉线而重新选取主节点的流程

⭐最核心的结论:所谓选举的过程不是直接选出新的主节点,而是先在哨兵节点中选出 leader ,再由 leader 负责后续主节点的指定。


假定当前环境:

  • 三个哨兵(sentenal1, sentenal2, sentenal3)
  • 一个主节点(redis-master)
  • 两个从节点(redis-slave1, redis-slave2)

当主节点出现故障,就会触发以下一系列过程:

目录

一、判定主观下线

二、判定客观下线

三、选举出哨兵的 leader

1、每个哨兵节点都给其他所有哨兵节点发起⼀个 “拉票请求”。

2、收到拉票请求的节点会回复⼀个 “投票响应”,响应的结果有两种可能,即投 or 不投。

3、一轮投票完成之后,得票超过半数的哨兵节点将动成为 leader。

***选举leader的流程演示:

4、leader 节点负责挑选一个 slave 成为新的 master。

四、由leader挑选一个从节点作为新的主节点

挑选的规则

*哨兵节点的作用演示 


一、判定主观下线

哨兵节点通过心跳包判定 redis-master 服务器是否正常工作。如果心跳包没有如约而至,那么这个哨兵节点就会认为 redis-master 服务器挂了,这就是主观下线(SDown)。

注意,此时在在某一个哨兵节点的角度,还不能排除网络波动的对心跳包丢失的影响,所以只能是该哨兵节点单方面认为这个 redis-master 节点挂了,是“主观”的。


二、判定客观下线

此时,哨兵 sentenal1,sentenal2,sentenal3 均会对主节点故障这件事情进行投票。当故障得票数 >= 配置的法定票数之后,哨兵们就认为这个主节点确实挂了,即触发客观下线(ODown)。

法定票数可以在哨兵节点的配置文件中查看:

sentinel1.conf是哨兵节点sentinel1的配置文件

有些同学可能会有疑问,是否存在一种情况:出现非常严重的网络波动,导致所有的哨兵都联系不上 redis 主节点从而“误判”成主节点挂了呢?

当然是有的!然而,如果出现这个情况,怕是连用户的客户端也连不上 redis 主节点了,此时这个redis主节点基本也是无法正常工作的。

注意,“挂了”不一定指的就是进程崩了。只要无法正常访问主节点,都可以视为是主节点挂了。


三、选举出哨兵的 leader

接下来需要哨兵把剩余的 slave 中挑选出⼀个新的 master。

这个工作不需要所有的哨兵都参与,只需要选出个代表(称为 leader),由 leader 负责进行 slave 升级到 master 的提拔过程。这个选举的过程涉及到 Raft 算法

假定⼀共三个哨兵节点 S1,S2,S3:

### Redis 哨兵模式主节点故障处理机制 在Redis哨兵模式中,当主节点发生故障时,系统会启动一系列自动化流程来确保服务的连续性和数据的一致性。以下是详细的自动故障转移(failover)过程: #### 1. 故障检测 哨兵实例通过定期向所有已知的Master和Slave发送`PING`命令来进行健康检查。一旦某个哨兵认为主服务器不可达,则标记该主机处于主观下线状态(SDown)[^1]。 #### 2. 主观下线转客观下线 为了防止误判单个哨兵可能出现的网络分区问题,只有当大多数哨兵都同意某台机器已经进入SDOWN状态后才会将其置为ODown(客观下线),即确认这确实是一次真实的失败事件而不是简单的网络波动造成的短暂失联情况[^3]。 #### 3. 领导者选举 一旦进入了ODown阶段,各个哨兵之间就会发起投票选出一位领导者负责协调后续的操作。这个过程中每个哨兵都会尝试成为领导者并向其他成员广播自己的意图;最终得票最多的那个将成为实际执行者的角色。 #### 4. 主节点的选择与晋升 被选中的领导哨兵会选择一个主节点并发出指令让选定的从属节点升级为主节点。选择标准通常基于以下几个方面: - 数据同步进度最接近原主库; - 网络延迟较低; - 资源负载较小等条件综合考量得出最优解。 ```bash # 示例:查看当前集群状态 $ redis-cli -h <sentinel_ip> sentinel master mymaster ``` #### 5. 更客户端和其他副本的信息 完成上述操作之后,晋主机会立即接管原有业务流量的同时也会通知其余存活下来的副本来更其配置信息以便继续正常工作。此外还会告知外部应用层有关拓扑结构变化的消息使得它们能够及时调整访问路径指向最的写入入口地址。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值