[redis] sentinel

1.sentinel会发送ping给master、slave和其他sentinel,如果ping master超时,便将该master标记为主观下线SDOWN

2.如果该SDOWN的实例还是master的话,会向其他sentinel询问是否该master也被他们标记为SDOWN了,然后统计收到的sentinel认为其主观下线的数量是否大于等于quorum,quorum值在sentinel monitor name host port quorum中设置,如果达到了,则标记为ODOWN,客观下线

3.对于客观下线,会进入故障转移状态机,状态为SENTINEL_FAILOVER_STATE_WAIT_START

4.当处于SENTINEL_FAILOVER_STATE_WAIT_START,会通过指令SENTINEL is-master-down-by-addr中填写自己的myid,来获取选票

5.当选票超过一半后,则自己sentinel会成为leader,进入SENTINEL_FAILOVER_STATE_SELECT_SLAVE状态,而其他sentinel会因为超时而自动退出failover状态,变回SENTINEL_FAILOVER_STATE_NONE状态

6.成为leader的sentinel会负责故障迁移,从slave中选取复制偏移量大的,runid小的slave成为master,进入SENTINEL_FAILOVER_STATE_SEND_SLAVEOF_NOONE状态

7.发送slaveof no one给选择slave,成为master,进入SENTINEL_FAILOVER_STATE_WAIT_PROMOTION状态

8.等待定时INFO指令,当检测到被选举为master的slave完成升级后,会进入SENTINEL_FAILOVER_STATE_RECONF_SLAVES状态

9.发送slaveof new_master_ip new_master_port给剩下的slave,完成master的切换工作,最后进入SENTINEL_FAILOVER_STATE_UPDATE_CONFIG状态

10.对于进入SENTINEL_FAILOVER_STATE_UPDATE_CONFIG状态,并且发送切换master的信息到订阅了+switch-master主题的client中,因此client可以通过订阅+switch-master来获取切换信息

题外:client第一个可以通过"get-master-addr-by-name"指令来获取master的地址,后续通过订阅+switch-master主题来获取master切换的事件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值