Redis哨兵机制

        在Redis集群中,哨兵机制是实现主库和从库切换的关键机制,他有效的解决了主从复制模式下的故障转移。

哨兵机制的基本流程

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

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

切换主库的流程:

哨兵就会从很多的从库里,按照一定的规则选择一个从库实例,把它作为新的主库。这一步完成之后,现在的集群里就又了新的主库。最后哨兵会把新的主库连接信息发送给其他从库,让他们执行replicaof命令,和新的主库连接,并进行数据的复制。同时,哨兵会把新主库的连接信息通知给客户端,让他们把请求发送到新主库上。

哨兵需要做出很重要的两个决策:

1.在监控任务中,哨兵需要判断主库是否处于下线状态;

2.在选主任务中,哨兵也要决定选择哪个从库作为主库。

哨兵判断主观下线和客观下线

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

如果哨兵判定的是从库,一般对外的业务影响不大。集群对外的服务也不会间断。如果检测的主库“主观下线”,开启主从切换,有一种可能存在,这次判断主库的网络访问压力大,没有及时响应。这样就造成了误判。

一旦哨兵判断主库下线了,会开始切换主库,切换主库时,从库和新主库进行数据的同步,这个过程本身就在消耗开销,在误判的情况下主库本身就不需要切换,所以这个过程的开销就是没有价值的。我们需要减少误判。

在判断主库是否下线时,不能由一个哨兵决定,只有大多数的哨兵实例,都判断主库已经“主观下线”,主库才会标记为客观下线,这样也就解决了误判。

如何选定新主库

1.优先级最高的从库的分高:

用户可以通过配置slave-priority配置项,给不同的从库设计优先级。

2.和旧主库同步最接近的从库的分高。

主库会用master_repl_offset记录当前的最新写操作在repl_backlog_buffer中的位置,而从库会用slave_repl_offset这个记录当前的复制进度。

第三轮:ID号小的从库得分高

在优先级和复制进度都相同的情况下,ID号最小的从库得分最高,会被选为新主库。

Redis的哨兵机制自动完成以下三大功能,从而实现了主从的自动切换,可以降低Redis集群的韵味开销:

        监控主库的运行状态,并判断主库是否客观下线;

        在主库客观下线后,选取新主库;

        选出新主库后,通知从库和客户端;

你可能感兴趣的:(Redis哨兵机制)