redis(六:redis哨兵集群的组成和运行机制)

哨兵之间互相发现,主要是通过redis的pub/sub实现的,也就是发布订阅模式。

哨兵只要和主库建立了连接就可以在主库上发布消息了,比如发布自己的ip和端口。同时也可以从主库上订阅消息,获取其他哨兵发布的连接信息。当多个哨兵在主库上做了发布订阅后,哨兵之间就知道彼此的ip和端口了。

为了区分不同的消息,redis会以频道的方式来管理不同的消息。只有订阅同一个频道的应用,才能通过发布的消息进行消息交换。

主库上有一个 叫做  __ sentinel _ :hello的哨兵频道,哨兵就是通过订阅这个消息,来实现哨兵之间互相发现的。

哨兵之间建立连接,也需要和从库建立连接,当主库发生切换,他们会通知从库与新的主库同步。

 

哨兵是如何知道从库的ip和端口?

哨兵通过INFO命令向主库发送请求。主库会返回从库的ip端口列表信息,然后哨兵再与从库建立连接并进行监控。 同时哨兵还要和客户端建立连接,主库发生切换也要告知客户端。

 

客户端可以通过pub/sub订阅哨兵的频道,从而知晓哨兵的同步,选主,通知等情况。

哨兵提供如下(重要的)频道,包含了主从库切换的不同关键事件。客户端可以根据如下频道监控主从切换过程中发生各个事件,了解主从切换的进度。

根据pub/sub机制,哨兵与哨兵,哨兵与主库,哨兵与从库都进行连接。

客户端订阅 实例进入主观下线 :   SUBSCRIBE  +sdown。

 

主观下线:哨兵对某个节点的个人认为。

客观下线:经过多个哨兵节点评选筛选结果,最终达成共识下线。

 

由哪个哨兵执行主库切换:

      哨兵集群判断主库下线的话,要有一定数量的哨兵都投票该主库主观下线,该主库才能客观下线。一个哨兵实例判断主库要下线,他就会给其他实例发送  is-master-down-by-addr  命令。其他实例会根据资深与主库的连接情况左右Y或者N的投票。此时该哨兵就可以再给其他哨兵发送,表明自己来执行主从切换,其他哨兵进行投票进行leader选举。最终执行主从切换的哨兵就leader。

那么哨兵什么条件下才能称为leader:  拿了半数以上哨兵的投票。  拿到的投票数必须大于哨兵配置文件里的值quorum。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值