redit高可用之哨兵

哨兵(sentinel)在Redis主从架构中是一个非常重要的组件,是在Redis2.8版本引入的。它的主要作用就是监控所有的Redis实例,并实现master节点的故障转移。哨兵是一个特殊的redis服务,它不负责数据的读写,只用来监控Redis实例。

Redis sentinel工作原理

在哨兵模式架构中,client端在首次访问Redis服务时,实际上访问的是哨兵(sentinel),sentinel会将自己监控的Redis实例的master节点信息返回给client端,client后续就会直接访问Redis的master节点,并不是每次都从哨兵处获取master节点的信息。

sentinel会实时监控所有的Redis实例是否可用,当监控到Redis的master节点发生故障后,会从剩余的slave节点中选举出一个作为新的master节点提供服务,并将新master节点的地址通知给client端,其他的slave节点会通过slaveof命令重新挂载到新的master节点下。当原来的master节点恢复后,也会作为slave节点挂在新的master节点下。

在这里插入图片描述

 

哨兵架构下client端第一次从哨兵找出redis的主节点(client不是一开始就连接redis服务,而是先连接哨兵服务,从哨兵服务上获取到redis服务的信息后,之后直接访问redis服务),后续就直接访问redis的主节点,不会每次都通过sentinel代理访问redis的主节点。

当redis的主节点发生变化( master节点如果挂掉之后,哨兵会选举出新的master节点),哨兵会第一时间感知到,并且 将新的redis主节点通知给client端(这样就可以实现高可用了,即一个master节点挂了之后,哨兵会自动选举出另一个新的master节点,并将新master节点的信息发送给客户端)(这里面redis的client端一般都实现了订阅功能,订阅sentinel发布的节点变动消息)。

深入思考:

我们客户端连接哨兵模式的redis的时候,连接地址自然是要写哨兵的,肯定不能写某个redis服务的IP+端口。为什么?

一旦我们的redis服务的主节点挂掉之后,如果我们采用的是直接写redis服务的IP+端口的模式,根本不可能成功访问,因为这个服务已经挂掉了。

所以说我们要找一个中介点,让其管理redis服务的连接信息,而我们客户端只需要连接到这个中介点上,每次都动态的去这个中介点上去拉取redis的主节点的连接信息就好了。

这样,即使redis服务的主节点挂了,redis服务会把新选举出来的主节点的信息更新到这个中介点上,我们服务端只需要去这个中介点上再拉取一次,就可以获取到新的主节点的信息了,而此时我们对于这个中介点的配置是没有改变的,所以这样就实现了Redis的高可用。

这种思想与使用KeepAlive + HAproxy是一模一样的,IP地址不能写真实服务地址,而是写一个中间服务的地址,然后由这个中间服务去拉取真实的服务地址。

本文为CSDN博主「桑榆_晚」的原创文章。
原文链接:https://blog.csdn.net/qq_43631716/article/details/118335156

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

璀璨的夜晚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值