哨兵机制-主库挂了如何不间断服务

主观下线和客观下线

哨兵进程会使用ping命令检测它自己和主、从库的网络连接情况,来判断实例的状态,如果哨兵发现主库或从库对PING命令的响应超时了,那么,哨兵就会先把它标记为“主观下线”。 如果检测的是从库,那么,哨兵简单地把它标记为“主观下线”就⾏了,因为从库的下线影响⼀般不太⼤, 集群的对外服务不会间断。在判断主库是否下线时,不能由⼀个哨兵说了算,只有⼤多数的哨兵实例,都判断主库已经“主观下 线”了,主库才会被标记为“客观下线”,这个叫法也是表明主库下线成为⼀个客观事实了。这个判断原则 就是:少数服从多数。同时,这会进⼀步触发哨兵开始主从切换流程。

如何选定新主库

先从多个从库中筛选掉不在线的和网络连接状态较差的,然后从库的优先级、从库的复制进度以及从库的ID号进行打分

  • 第⼀轮:优先级最⾼的从库得分⾼。
  • 第二轮:和旧主库同步程度最接近的从库得分高
  • 第三轮:ID号越小的从库得分高

Redis的哨兵机制⾃动完成了以下三⼤功能,从⽽实现了主从库的⾃动切换,可以降低Redis集群的运维开销:

  • 监控主库运⾏状态,并判断主库是否客观下线;
  • 在主库客观下线后,选取新主库;
  • 选出新主库后,通知从库和客⼾端。