redis之哨兵机制

0. 前言

我们知道,只有主库才能有写操作,而从库只能进行读操作,那么当主库宕机后,如何保证服务的正常进行呢?

本文主要介绍的是 Redis 提供的哨兵机制,通过哨兵监控主库的状况,如果发现主库下线,则会从从库中选择一个状态优秀的当做主库,从而保证服务的高可用。

1. 哨兵如何保证高可用?

1.1 监控

哨兵进程会发送 PING 命令给主从库检测网络连接,如果超时,则判断为"主观下线"。

但是如果哨兵误判可能会导致主从切换,导致性能的额外开销,所以引入了哨兵集群,只有多数哨兵认为主库已经主观下线,主库会被标记为"客观下线",这时才会进行主从切换。

1.2 选择新主库

通过一定的筛选条件,把不符合条件的从库去掉,再按照一定规则给从库打分,得分最高的为新主库

筛选条件:

  • 当前从库的状态
  • 之前一段时间的网络状态

打分规则:

  • 用户可以给从库 slave-priority 配置优先级
  • 主从库同步程度
  • ID 号小的得分高

1.3 通知

哨兵会把新主库的连接信息发给其他从库,让它们执行 replicaof 命令,和新主库建立连接,并进行数据复制。同时,哨兵会把新主库的连接信息通知给客户端,让它们把请求操作发到新主库上。

2. 哨兵集群的组建

哨兵实例之间互相发现是基于 Redis 提供的 pub/sub 机制,发布/订阅机制。

哨兵只要与主库建立连接,会在主库 __sentinel__:hello 频道上发布消息,比如自己的 ip 地址和端口信息,订阅了该频道的其他哨兵会获取到发布消息哨兵的 IP 和端口,即可以与其建立网络连接,之后相互间就可以通过网络连接进行通信。

2.1 哨兵与从库建立连接

哨兵还需要和从库建立连接,这样才能监控从库的连接状态,当主库下线后,才能从它们中选举出新的主库。

哨兵使用 INFO 命令发送给主库,主库会返回从库列表连接信息,这样也能和从库建立连接并进行监控

2.2 哨兵与客户端建立连接

当主库下线后,客户端需要得知主库下线的消息,写操作需要切换到新的主库中,所以哨兵需要与客户端建立连接,并及时通知客户端。

客户端可以从哨兵订阅消息,获取到主从切换的各种事件。

客户端读取哨兵的配置文件,获取哨兵的地址和端口,建立连接,然后即可订阅消息。

3. 由哪个哨兵来执行主从切换 ?

任何一个哨兵判断主库 主观下线 就会向其他哨兵发送 is-master-down-by-addr 命令。其他实例会更具自己与主库的连接情况投出赞成票或反对票。当多数哨兵投赞成票时,则主库被认为 客观下线

此时,该哨兵再发命令给其他哨兵进行 leader选举,希望由自己来进行主从切换。在这个过程中,任何一个哨兵都可以参与选举,只要票数半数以上并且大于等于 quorum 值,则可以成为 leader

4. 参考文章

  • 本文主要是学习《极客时间-redis 核心技术与实战》专栏总结而来
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值