Redis哨兵机制

主库挂了,如何不间断服务?

  • 无论是写服务中断,还是从库无法进行数据同步,都是不能接受的。
  • 涉及到三个问题:
    • 主库真的挂了么?
    • 该选择哪个从库作为主库?
    • 怎么把新主库的相关信息通知给从库和客户端呢?
  • 在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制,它有效地解决了主从复制模式下故障转移的这三个问题。

哨兵机制

  • 哨兵其实就是一个运行在特殊模式下的 Redis 进程,主从库实例运行的同时,它也在运行。哨兵主要负责的就是三个任务:监控、选主和通知

监控

  • 监控是指哨兵进程在运行时,周期性地给所有的主从库发送 PING 命令,检测它们是否仍然在线运行。
  • 如果从库没有在规定时间内响应哨兵的 PING 命令,哨兵就会把它标记为“下线状态”;
  • 同样,如果主库也没有在规定时间内响应哨兵的 PING 命令,哨兵就会判定主库下线,然后开始自动切换主库的流程。
  • 实际使用过程中,往往存在哨兵集群,多个哨兵都PING不通主库,才会判定为真正下线(客观下线)。

选主

  • 主库挂了以后,哨兵就需要从很多个从库里,按照一定的规则选择一个从库实例,把它作为新的主库。
  • 这一步完成后,现在的集群里就有了新主库。
  • 规则包含筛选+打分,筛选掉不符合条件的从库,然后给剩余实例打分,分高者作为新主库。
  • 筛选:从库要在线,且网络要好,可以使用配置项down-after-milliseconds * 10,down-after-milliseconds 是主从库断连的最大连接超时时间,断连超过10次,可以认为该从库的网络不好。
  • 打分,某一轮存在最高分的从库,则结束打分,该从库变为新主库:
    • 第一轮:优先级高的,参考 slave-priority这个配置
    • 第二轮:和旧主库同步程度最接近的,同步游标slave_repl_offset 最接近 master_repl_offset
    • 第三轮:ID 号小的,从库的编号。

通知

  • 在执行通知任务时,哨兵会把新主库的连接信息发给其他从库,让它们执行 replicaof 命令,和新主库建立连接,并进行数据复制。
  • 同时,哨兵会把新主库的连接信息通知给客户端,让它们把请求操作发到新主库上。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值