哨兵模式

哨兵的主要作用

为实现主从切换,主要功能为监控、选主、通知

监控

哨兵发送ping命令检查主从库的网络连接状态,若ping响应超时,则标记为“主观下线”,如果存在半数以上的哨兵判断主库为“主观下线”,则标识主库为“客观下线”。

选主

主库“客观下线”之后,会重新选主。选主流程如下:
过滤掉 已经下线后的从库 和 总是和主库断连的从库(超过断连次数的阈值)
在剩下的从库中按照一定的规则对从库进行打分,得分高者升级为主库

  • 优先级高的从库得分高,可通过slave-priority设置从库的优先级
  • 同步进度最快的从库,得分高,比较从库的slave-repli-offset
  • 从库ID号小的得分高

通知

通知从库重新同步新主库的数据。哨兵会把新主库的地址写入自己实例的pubsub(switch-master)中,客户端订阅pubsub 就能感知到主库

哨兵集群

特点: 哨兵集群存在故障节点时,只要集群中大部分节点正常,集群依旧能对外提供服务。 “拜占庭问题”。

问题: 主库下线后由谁来执行新主库的切换?

答: 从哨兵中选举出一个哨兵领导者。 每个哨兵设置一个随机超时时间,超时后向其他哨兵请求投票,其他哨兵会给第一个向自己发送投票请求的哨兵进行投票,可能经过多次投票后(若在一个回合中没有投出来,哨兵集群会等待一段时间(也就是哨兵故障转移超时时间的 2 倍),再重新进行投票),投票数超过半数且投票数大于等于哨兵配置文件中的 quorum 值的为哨兵领导者。

需要注意的是,如果哨兵集群只有 2 个实例,此时,一个哨兵要想成为 Leader,必须获得 2 票,而不是 1 票。所以,如果有个哨兵挂掉了,那么,此时的集群是无法进行主从库切换的。因此,通常我们至少会配置 3 个哨兵实例。这一点很重要,你在实际应用时可不能忽略了

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容