Redis Sentinel(哨兵)

目录

一、功能背景

二、Redis Sentinel的高可用性

三、Redis Sentinel的实现原理

1.三个定时监控任务

2.主观下线和客观下线

3.领导者sentinel节点选举

4.故障转移


一、功能背景

Redis的主从复制模式下,一旦主节点由于故障不能提供服务,需要人工将从节点晋升为主节点,同时还要人工通知应用方更新主节点地址。Redis Sentinel可以自行处理这个问题。

手动处理流程:

1.主节点发生故障后,客户端链接主节点失败,两个从节点与主节点链接失败造成业务中断

2.如果主节点无法启动,需要选出一个从节点,使其成为新的主节点

3.原来的从节点成为新的主节点后,更新应用方的主节点信息,重新启动应用方

4.客户端命令另一个从节点去复制新的主节点

5.待原来的主节点恢复后,让它去复制新的主节点

二、Redis Sentinel的高可用性

Redis Sentinel是一个分布式架构,包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当他发现节点不可达时,会对节点做下线标识。如果被标识的是主节点,它还会和其他Sentinel节点进行协商,当大多数sentinel节点都认为主节点不可达时,它们会选出一个Sentinel节点来完成自动故障转移的工作,同时将这个变化实时通知给应用方。

功能:

1.监控:Sentinel节点会定期检测Redis数据节点、其余Sentinel节点是否可达

2.通知:Sentinel节点会将故障转移的结果通知给应用方

3.主节点故障转移:实现从节点晋升为主节点并维护后续正确的主从关系

4.配置提供者:在Redis Sentinel结构中,客户端在初始化的时候链接的是Sentinel节点集合,从中获取主节点信息

5.多个Sentinel节点的好处:

  • 对于节点的故障是由多个Sentinel共同完成的,这样可以有效的防止误判
  • Sentinel节点集合由若干个Sentinel节点组成,这样即使个别Sentinel节点不可用,整个Sentinel节点集合依然是健壮的

6.Redis Sentinel可以同时监控多个主节点

三、Redis Sentinel的实现原理

1.三个定时监控任务

  • 每隔10秒,每个Sentinel节点会向主节点和从节点发送info命令获取最新的拓扑结构
  • 每隔2秒,每个Sentinel节点会向Redis数据节点的__sentinel__:hello频道发送该Sentinel节点对于主节点的判断以及当前Sentinel节点的信息,同时每个Sentinel节点也会订阅该频道,来了解其他Sentinel节点以及它们对主节点的判断。(可以发现新的Sentinel节点和Sentinel节点间交换主节点的状态)
  • 每个1秒,每个Sentinel节点会向主节点、从节点以及其他sentinel节点发送一条ping命令做心跳检测,来确认这些节点是否可达。

2.主观下线和客观下线

主观下线:每个Sentinel节点会每隔1秒对主节点、从节点、其他Sentinel节点发送ping命令做心跳检测,当这些节点超过down-after-milliseconds参数 没有进行有效回复,sentinel节点对该节点做失败判定,这个行为是主观下线

客观下线:当sentinel主观下线的节点是主节点时,该sentinel节点会向其他sentinel节点询问对主节点的判断,当超过quorum个sentinel节点认为这个主节点确实有问题,这时该sentinel节点会做出客观下线的决定

3.领导者sentinel节点选举

Redis使用了Raft算法实现领导者选举

  • 每个在线的sentinel节点都有资格成为领导者,当他确认主节点客观下线的时候,会向其他sentinel节点发送sentinel is-master-down-by-addr命令,要求将自己设置为领导者
  • 收到命令的sentinel节点,如果没有同意过其他sentinel节点的请求命令,将同意该请求,否则拒绝
  • 如果该sentinel节点发现自己的票数已经大于等于半数sentinel节点+1,那么他将成为领导者
  • 如果此过程没有选举出领导者,将进入下一次选举

4.故障转移

领导者选举出的sentinel节点负责故障转移

  • 在从节点列表中选出一个节点作为新的主节点,选择方法如下:
  1. 过滤不健康、主观下线、断线的节点(5秒内没有回复过sentinel节点ping响应、与主节点失联超过dowm-after-milliseconds*10秒)
  2. 选择slave-priority(从节点优先级,可手动设置参数)最高的从节点列表
  3. 选择复制偏移量最大的从节点(从前主节点复制信息完整程度)
  4. 选择runid最小的从节点(自动生成)
  • Sentinel领导者节点会对第一步选出来的从节点执行slaveof no one命令让其成为主节点
  • Sentinel领导者会向剩余的从节点发送命令,让他们成为新主节点的从节点
  • Sentinel节点集合会将原来的主节点更新为从节点,并保持对其关注,当其恢复后命令他去复制新的主节点

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值