哨兵集群

2021/01/19 posted in  基础

哨兵集群能保证及时有哨兵实例宕机,其他哨兵也能协作完成判断主库下线,选择新主库以及通知从库和客户端

 ** 哨兵集群部署命令
 sentinel monitor <master-name> <ip> <redis-port> <quorum> 
 

基于 pub/sub 机制的哨兵组成机制

哨兵只要和主库建立连接,就可以在主库上发布消息,同时它也可以在主库上订阅消息,获取其他哨兵的连接信息,当多个哨兵实例都在主库上订阅发布消息,这样多个哨兵实例之间就可以建立连接,在主从集群中,主库上有一个名为 sentinel:hello 的频道,不同哨兵就是通过它来相互发现,实现互相通信的。

哨兵如何知道从库

哨兵向主库发送 INFO 命令,主库收到命令后会把从库列表返回给哨兵,之后哨兵就可以从列表中获取连接信息,并和从库建立连接,之后这个连接上持续的监控

基于 pub/sub 机制的客户端通知机制

客户端读取哨兵的配置文件,获取哨兵的连接信息,和哨兵建立网络来连接后,客户端从哨兵订阅消息获取不同的事件消息。
哨兵选出新的主库后,客户端就能看到 switch-master 事件,其中包含新的连接信息

哨兵的选主

任何一个哨兵实例只要判断主库是 主观下线,就会给其他实例发送 is-master-down-by-addr ,之后其它实例根据自己和主库的连接,做出 Y 或者是 N 的响应,一个实例获得了仲裁所需的赞成票后,就可以标记为 客观下线

投票

  1. 半数以上的赞成票
  2. 赞成票数要大于等于配置文件中的quorum值

选主过程

注意

保证哨兵实例的配置一致,尤其是主观下线的判断值 down-after-milliseconds