那怎么减少误判呢?在日常生活中,当我们要对一些重要的事情做判断的时候,经常会和家人或朋友一起商量一下,然后再做决定 。
哨兵机制也是类似的,它通常会采用多实例组成的集群模式进行部署,这也被称为哨兵集群 。引入多个哨兵实例一起来判断,就可以避免单个哨兵因为自身网络状况不好,而误判主库下线的情况 。同时,多个哨兵的网络同时不稳定的概率较小,由它们一起做决策,误判率也能降低 。
如何选定新主库?
一般来说,我把哨兵选择新主库的过程称为“筛选 + 打分” 。简单来说,我们在多个从库中,先按照一定的筛选条件,把不符合条件的从库去掉 。然后,我们再按照一定的规则,给剩下的从库逐个打分,将得分最高的从库选为新主库,如下图所示:

文章插图
第一轮:优先级最高的从库得分高 。
用户可以通过 slave-priority 配置项,给不同的从库设置不同优先级 。比如,你有两个从库,它们的内存大小不一样,你可以手动给内存大的实例设置一个高优先级 。在选主时,哨兵会给优先级高的从库打高分,如果有一个从库优先级最高,那么它就是新主库了 。如果从库的优先级都一样,那么哨兵开始第二轮打分 。
第二轮:和旧主库同步程度最接近的从库得分高 。
这个规则的依据是,如果选择和旧主库同步最接近的那个从库作为主库,那么,这个新主库上就有最新的数据 。
第三轮:ID 号小的从库得分高 。
每个实例都会有一个 ID,这个 ID 就类似于这里的从库的编号 。目前,Redis 在选主库时,有一个默认的规定:在优先级和复制进度都相同的情况下,ID 号最小的从库得分最高,会被选为新主库 。
总结
哨兵机制,它是实现 Redis 不间断服务的重要保证 。具体来说,主从集群的数据同步,是数据可靠的基础保证;而在主库发生故障时,自动的主从切换是服务不间断的关键支撑 。
Redis 的哨兵机制自动完成了以下三大功能,从而实现了主从库的自动切换,可以降低 Redis 集群的运维开销:
- 监控主库运行状态,并判断主库是否客观下线;
- 在主库客观下线后,选取新主库;
- 选出新主库后,通知从库和客户端 。
推荐阅读
- Linux select/poll机制原理分析
- 机制针形名优茶工艺,西湖龙井等名优茶机制率达95%
- 防御sqlmap攻击之动态代码防御机制
- 什么是Java可变参数列表?怎么和重载机制配合使用?
- Linux分段系统中的地址映射和基本机制
- 什么是“内存管理机制”?
- WebSocket心跳检测和重连机制
- 如何利用自媒体平台的「推荐机制」,写出叫好又叫座的爆文来?
- MySQL-锁机制详述
- C语言的编译机制:分制原则与三种文件
