reids(五)sentinel哨兵

高可用

sentinel 哨兵就是 特殊的redis服务器。因为他里面保存着的对象是其他服务器的信息,被设计出来就是为了高可用性。
下面会以各种角度来分析高可用性。

命令连接和订阅连接

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过上面的3张图,我们可以看到sentinel分别会对主服务器、从服务器 建立2条连接,一条是命令连接,还有一条是订阅连接。和其他集群的sentinel建立的只有命令连接。
并且命令连接订阅的是:_sentinel_:hello 频道

连接发送信息的频率和作用

sentinel 会每10秒发送一次Info命令,来获取主从服务器的信息。发送给主服务器,会返回主服务器的自身信息,同时还会返回从服务器的信息,这对监控着主从服务器可以判断是否有机器断开了连接。
sentinel会每2秒发送一次对针对hello频道的信息命令如下:

PUBLIST __sentinel__:hello "<s_ip>,<s_port>,<s_runid>,<s_epoch>,<m_name>,<m_ip>,<m_port>,<m_epoch>"

上面包含了sentinel的ip、端口、runid、选举周期、主服务器的名字、ip、端口、选举周期。
该命令会发送给主从服务器。

但是这条并不是作用于主从服务器上,而是针对集群中的其他sentinel。因为其他的sentinel也订阅了这个频道,只要其中一台发送了命令,其他的sentinel就可以知道发送者sentinel和当前主服务器的信息。

每1秒发送一个ping的命令给所有的主从服务器和其他的sentinel,这么频繁的ping主要是为了保障即使获取系统中的变化,以便作出应对,这就是sentinel被设计出来的目的。

判断是否下线

主观下线

服务器内会配置down-after-milliseconds 参数,该参数设置后,当无法ping通某台服务器后,经过设置的时间,sentinel就会认为对方已经下线了,这个称为主观下线状态
如果不同的sentinel设定的时间不同,则会根据不同的时间,sentinel自己作出主观的判断。

客观下线

客观下线则需要进行配置,如果配置的是2。则需要2个sentinel都回复了该主机已经下线。

选举领头sentinel(当主服务器客观下线后)

为什么需要选举领头sentinel,因为sentinel是以集群的方式存在的。所以需要选取一个领头的sentinel来进行决策,选取一个新的主服务器。
选举sentinel是根据raft算法来的,里面主要的参数是:epoch(选举周期)runId(sentinel运行的id)

  • 每个sentinel 都可以成为领头,但是在同一个选举周期里面每个sentinel只会选一个作为领头,选定后则会拒绝其他sentinel设置领头的请求。
  • 设置的标识就是 runid。
  • 如果超过半数的sentinel设置来某个runid,则runid与半数设置的runid相等的那台sentinel则会成为领头。
  • 如果都没有半数则会进行下一轮的选举。

故障转移

当挑选出sentinel领头后,则会开始故障转移。
转移的步骤:

  1. 从“从”服务器中挑选一个新的master
  2. 让所有从服务器改变他们的master
  3. 让新master设置他们的slave(从服务器)

第一步的新master肯定不是随意选择的。

  • 先过滤掉已经掉线的从服务器
  • 根据优先级选择优先级最高的
  • 优先级相同,则选择服务器内offset值最大的(offset值越大保存的信息就越完整)
  • offset值一样,则选择runId最小的,runId根据一定规则会增大,所以后来的服务器的runId会比较小,所以选择选择资格最老的从服务器成为新的master。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值