redis哨兵机制

在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制,哨兵其实就是一个运行在特殊模式下的 Redis 进程,主从库实例运行的同时,它也在运行。哨兵主要负责的就是三个任务:监控、选主(选择主库)和通知。

 

监控:主管下线与客观下线

         哨兵进程会使用 PING 命令检测它自己和主、从库的网络连接情况。如果哨兵发现主库或从库对 PING 命令的响应超时了,那么,哨兵就会先把它标记为“主观下线”。

1. 从库下线:直接标记一下就好了,不用做其他的操作。

2. 主库下线:为了避免误判,会连同其他节点的哨兵一起判断,少数服从多数原则。

 

选主

         选择新的主库要经过三个条件的筛选:

1. 当前状态与网络状态

         如果从库掉线了,当然不能参与选主。还有一个判断是判断他的网络连接状态,如果从库和主库断连次数超出了一定的阈值,就可以把这个从库筛掉。

         配置项 down-after-milliseconds就是主库和从库断连的最大超时时间,如果在这个时间内没有和主库连接,而且次数超过了10次,就会认为这个从库可以去掉。

 

2. 给从库打分

  • 分别按照从库优先级、从库复制进度以及从库 ID 号给从库打分,如果在某个轮次中选择出了最高分,那么就可以认为他是新主库了。

  • 优先级:通过 slave-priority 配置项,给不同的从库设置不同优先级。

  • 与旧主库同步程度:利用master_repl_offset和repl_backlog_buffer进行判断,看哪个最接近。

 

3. ID 号小的从库得分高

 在优先级和复制进度都相同的情况下,ID 号最小的从库得分最高,会被选为新主库。

 

哨兵集群

哨兵实例之间相互发现是通过pub/sub 机制,也就是发布 / 订阅机制。哨兵只要和主库建立了连接,那么就可以在主库上发布和订阅信息了,在主库上有一个名为“__sentinel__:hello”的频道,哨兵就是通过它来互相发现的。哨兵只要把自己的ip和端口发送到这个频道即可连接。

除了知道主库,哨兵还要知道从库的地址,因为在主从切换的时候需要通知从库。这就通过INFO命令完成的。哨兵发送INFO命给主库,主库会把从库的列表发送给哨兵,这样哨兵既可以获取从库的IP了。

 

哨兵与客户端的通信

         哨兵和客户端的通信也是通过 pub/sub 机制完成的。哨兵提供的消息订阅频道有很多,不同频道包含了主从库切换过程中的不同关键事件。

选择执行主从切换的哨兵

确定由哪个哨兵执行主从切换的过程,也是一个“投票仲裁”的过程。任何一个哨兵只要自身判断主库“主观下线”后,就会给其他实例发送 is-master-downby-addr 命令。接着,其他实例会根据自己和主库的连接情况,做出 Y 或 N 的响应,Y 相当于赞成票,N 相当于反对票。

获得了超过半数的票后,哨兵就会发出命令,希望由自己去执行本次主从切换,可以称为leader选举,给自己投一票,算上自己的超过半数就称为leader,然后发起主从切换。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值