浅谈哨兵机制的原理

哨兵机制的基本流程

哨兵其实就是一个运行在特殊模式下的 Redis 进程,主从库实例运行的同时,它也在运行。哨兵主要负责的就是三个任务:监控、选主和通知。

监控:

监控是指哨兵进程在运行时,周期性地给所有的主从库发送 PING 命令,检测它们是否仍然在线运行。如果从库没有在规定时间内响应哨兵的 PING 命令,哨兵就会把它标记为“下线状态”;同样,如果主库也没有在规定时间内响应哨兵的 PING 命令,哨兵就会判定主库下线,然后开始自动切换主库的流程。

这个流程首先是执行哨兵的第二个任务,选主。主库挂了以后,哨兵就需要从很多个从库里,按照一定的规则选择一个从库实例,把它作为新的主库。这一步完成后,现在的集群里就有了新主库。

然后,哨兵会执行最后一个任务:通知。在执行通知任务时,哨兵会把新主库的连接信息发给其他从库,让它们执行 replicaof 命令,和新主库建立连接,并进行数据复制。同时,哨兵会把新主库的连接信息通知给客户端,让它们把请求操作发到新主库上。

img

主观下线和客观下线

主观下线:

哨兵进程会使用 PING 命令检测它自己和主、从库的网络连接情况,用来判断实例的状态。如果哨兵发现主库或从库对 PING 命令的响应超时了,那么,哨兵就会先把它标记为“主观下线”。(单个哨兵做出的判断)

如果检测的是从库,那么,哨兵简单地把它标记为“主观下线”就行了,因为从库的下线影响一般不太大,集群的对外服务不会间断。

但是如果检测的是主库,就不能向上述所说的那样简单的标记为主观下线。因为主库可能是由于压力过大等一些原因被误判了,这样走后续流程,包括像选新主库和通知其它从库新主库的信息操作,这些操作会给 Redis 带来不必要的开销。

客观下线:

哨兵机制通常会采用多实例组成的集群模式进行部署,这也被称为哨兵集群。引入多个哨兵实例一起来判断,就可以避免单个哨兵因为自身网络状况不好,而误判主库下线的情况。同时,多个哨兵的网络同时不稳定的概率较小,由它们一起做决策,误判率也能降低。

在判断主库是否下线时,不能由一个哨兵说了算,只有大多数的哨兵实例,都判断主库已经“主观下线”了,主库才会被标记为“客观下线”,这个叫法也是表明主库下线成为一个客观事实了。这个判断原则就是:少数服从多数。

选主:

一般来说,哨兵选择新主库的过程称为“筛选 + 打分”。

筛选:

在选主时,除了要检查从库的当前在线状态,还要判断它之前的网络连接状态。如果从库总是和主库断连,而且断连次数超出了一定的阈值,我们就有理由相信,这个从库的网络状况并不是太好,就可以把这个从库筛掉了。

打分:

接下来就要给剩余的从库打分了。我们可以分别按照三个规则依次进行三轮打分,这三个规则分别是从库优先级、从库复制进度以及从库 ID 号。只要在某一轮中,有从库得分最高,那么它就是主库了,选主过程到此结束。如果没有出现得分最高的从库,那么就继续进行下一轮。

通知:

可以看我这篇文章详解哨兵之间是如何通信的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis哨兵模式是一种特殊的模式,它通过独立运行的哨兵进程来监控运行的多个Redis实例。该模式的主要原理包括以下几个步骤: 1. 哨兵模式的配置:首先需要配置哨兵模式,指定监控的Redis实例以及其他相关参数。 2. 异常检测(主观下线):哨兵通过发送命令并等待Redis服务器响应来监控运行的多个Redis实例,如果某个实例没有及时响应或者出现异常情况,哨兵会将其标记为主观下线状态。 3. 客观下线:当多个哨兵实例都将某个Redis实例标记为主观下线时,哨兵会将其标记为客观下线状态,并触发故障转移的操作。 4. 故障转移:当Redis主节点出现故障或主观下线时,哨兵会自动选举一个新的主节点,并将其他的Redis从节点切换到新的主节点上,保证系统的高可用性。 5. 哨兵的使用:在使用哨兵模式时,客户端只需要连接到哨兵进程,通过哨兵进程获取当前可用的Redis主节点地址,并进行正常的读写操作。 总结来说,Redis哨兵模式的原理就是通过独立的哨兵进程来监控运行的多个Redis实例,实现故障检测和故障转移,以保证系统的高可用性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis哨兵模式原理](https://blog.csdn.net/qq_21539375/article/details/124729142)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis哨兵模式(原理剖析)](https://blog.csdn.net/qq_41107231/article/details/111957208)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值