redis 哨兵(sentinal)原理

本文深入探讨Redis Sentinel如何实现高可用,包括监控、故障通知、主从切换及配置更新等核心功能。Sentinel通过选举机制确保系统稳定,即使主节点故障也能自动恢复服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

当我们使用redis的主从架构时存在一个问题。当master 节点挂掉时,redis服务将不可用。需要人工干预,修改配置。

 

sentinal就是为了解决redis的高可用问题。主要功能如下:

 

1.监控所用节点(master,slave)的运行状态。

 

2.消息通知,当一个节点出现故障时,可能通过提供的API向管理员发送消息提醒。

 

3.故障转移,当master节点出现故障时,通过对slave的进行选举,升级为新的master

 

4.配置调整通知:当master节点变更时,会修改节点配置文件信息(master节点变更相关配置)、并通知其他sentinal节点变化。还会通知连接的客户端,告知新master节点信息。

 

 

 

当我们部署sentinal 分布式系统时,最少为三个节点。因为当主节点发生故障时,每一个sentinal 要进行对slave的投票选举。经典的三节点哨兵集群部署如下:

 

 

 

一、哨兵的监控原理:

1.1 

每个哨兵10秒会向主节点和从节点发送info命令,获取到最新的 拓扑结构。当配置哨兵时只用配置主节点信息即可,因为可以通过向主节点发送info信息得到从节点的信息,有新从节点加入时也能通过info知道。

 

1.2

哨兵之间的通讯是通过redis的publish和subscribe来完成。每一个哨兵2秒会向指定的通道发送自己监控情况和自身的节点信息。其他哨兵订阅消息来确定主节点的运行情况。当有新哨兵节点加入或哨兵节点异常时,相互之间也能感知到。

 

1.3

每个哨兵1秒会向主节点和从节点进行 ping 命令,当超过down-after-milliseconds时间无正确响应是则主观(sdown)认为该节点宕机。当宕机的节点为主节点时,哨兵会通过sentinel is-masterdown-by-addr命令获取到其他哨兵对主节点状态的反馈,如果超过 quorum 台哨兵都认为宕机,则转了客观宕机(odown),然后会进行选举切换操作。

 

 

二、选Leader Sentinel原理

 

当第一个哨兵发现主节点异常时,会向其他的哨兵发is-masterdown-by-addr命令来获取反馈,并建议自己成了leader sentinel来进行故障切换操作。每人上哨兵都有资格成为leader。

其他哨兵收到命令时同意或则拒绝申请升级的哨兵。当有超过一半+1的哨兵同意,那么申请者将升级为leader sentinel。这里使用的是Raft算法主要思想是同一期Term(Epoch)投票中少数服从多数原则达成一致,选出Leader 

https://www.jianshu.com/p/8e4bbe7e276c

 

 

 

三、故障转移机制

1.对从节点进行评估,先出一个从节点升级为主节点。

算法:

1.1跟master断开连接的时长,如果一个slave跟master断开连接已经超过了down-after-milliseconds的10倍,外加master宕机的时长,那么slave就被认为不适合选举为master

1.2slave优先级(配置文件中的 slave priority越低,优先级就越高)

1.3 复制offset越靠后(同步数据越多),优先级越高

1.4 run id 如果上面两个条件都相同,那么选择一个run id比较小的那个slave

 

2.将从节点升级为主节点,并修改配置信息。

 

3.将所有的从节点的master信息修改为新的主节点信息。

 

4.将老的主节点设置成为一个从节点。如果恢复则复制主节点信息。

 

5.将新的主节点信息生成,并发布到通道中,让其他订阅的哨兵知道最新主节点的信息(这里有一个变更配置version的概念,其他哨兵只会更新比自己高版本的配信息到本地,保证所用哨兵的配置信息统一)。

 

6.告知客户端主节点变更。让客户端重新连接到新的主节点上。

 

 

四、实战配置:

https://blog.csdn.net/zbw18297786698/article/details/52891695

https://blog.csdn.net/J080624/article/details/86370718

 

 

五:重要参数解释:

 

sentinel monitor name hostname port quorum

 

down-after-milliseconds:超过多少毫秒跟一个redis实例断了连接,哨兵就可能认为这个redis实例挂了

 

parallel-syncs:新的master别切换之后,同时有多少个slave被切换到去连接新master,重新做同步,数字越低,花费的时间越多

假设你的redis是1个master,4个slave,然后master宕机了,4个slave中有1个切换成了master,剩下3个slave就要挂到新的master上面去

这个时候,如果parallel-syncs是1,那么3个slave,一个一个地挂接到新的master上面去,1个挂接完,而且从新的master sync完数据之后,再挂接下一个

如果parallel-syncs是3,那么一次性就会把所有slave挂接到新的master上去

 

failover-timeout:执行故障转移的timeout超时时长

Redis哨兵模式是一种用于高可用性和自动故障转移的Redis部署架构。它通过监控Redis主节点和从节点的状态,实现自动故障检测和转移。以下是Redis哨兵模式的工作原理: 1. 哨兵节点:在Redis哨兵模式中,有一组特殊的Redis实例,称为哨兵节点。它们通过发送命令并接收响应来监控Redis服务器的状态。 2. 监控主节点:哨兵节点会定期发送命令到主节点,检查其是否正常运行。如果主节点未响应或被判定为不可用,哨兵节点会将其标记为下线。 3. 选举新主节点:当哨兵节点检测到主节点不可用时,它会发起一次领导者选举过程。哨兵节点会从剩余的Redis从节点中选出一个新的主节点,并将其升级为主节点。 4. 通知客户端:一旦新的主节点选举完成,哨兵节点会通知客户端发生了主节点切换。客户端可以根据通知来更新配置,连接到新的主节点。 5. 故障转移:如果旧的主节点重新上线,哨兵节点会检测到并将其重新配置为从节点。这样可以确保故障转移后的主从关系保持一致。 6. 监控多个主从集群:哨兵节点还可以监控多个Redis主从集群,以实现更高的可用性和故障转移能力。 总之,Redis哨兵模式通过哨兵节点的监控和领导者选举机制,实现了对Redis主节点的高可用性和自动故障转移。这种架构可以确保即使在主节点发生故障时,Redis服务仍然可用,并且能够自动恢复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值