Redis Sentinel实现原理

Redis Sentinel实现主要包括几个方面:三个定时任务、主观下线和客观下线、Sentinel领导者选举、故障转移。

三个定时任务

1.每隔10秒,每个Sentinel节点会向主节点和从节点发送info命令获取最新的拓扑结构

  • 通过向主节点执行info命令,获取从节点的信息
  • 当有新的从节点加入时可以立即感知
  • 节点不可达或故障转移后,可以通过info命令实时更新节点拓扑信息

2.每隔2秒,每个Sentinel节点会向Redis数据节点的__sentinel__:hello 频道发送当前sentinel节点对于主节点的判断以及当前sentinel节点的信息,同时每个sentinel节点也会订阅此频道,来了解其他sentinel节点以及它们对主节点的判断。

  • 发现新的sentinel节点
  • sentinel节点之间交换节点的状态

3.每隔1秒,每个sentinel节点会向主节点、从节点、其余sentinel节点发送一条ping命令进行心跳检测。

主观下线和客观下线

1.主观下线
sentinel节点在每1秒发送ping命令进行心跳检测时,当其他节点超过down-after-milliseconds 没有回复时,sentinel节点会对此节点做失败判断,这就是主观下线
2.客观下线
当sentinel主观下线的是主节点时,该sentinel节点会通过 sentinel is-master-down-by-addr 命令向其他sentinel节点询问对主节点的判断,当超过 quorum个数,就会下判定,这就是客观判定。

Sentinel领导节点选举

Sentinel节点之间会做一个领导者选举的工作,选出一个leader进行故障转移的工作。redis使用raft算法实现领导者选举,大致思路如下:

  1. 当sentinel节点确认主节点主观下线时,会向其他sentinel节点发送 sentinel is-master-down-by-addr 命令,要求将自己设置为leader
  2. 收到命令的sentinel节点,如果没有同意过其他sentinel节点的 sentinel is-master-down-by-addr 命令,将同意该请求,否则拒绝。
  3. 如果该sentinel节点发现自己的票数大于等于max(quorum,num(sentinels)/2+1),那么它就成为leader。
  4. 如果此过程没有选出leader,进行下一次选举。

故障转移

Sentinel Leader负责故障转移:

  1. 在从节点中选出一个节点作为新的主节点;
  • 过滤:不健康(主观下线、断线)、5秒内没回复过 Sentinel 节点ping响应、与主节点失联超过 down-after-milliseconds*10秒
  • 选择 slave-priority (从节点优先级)最高的从节点
  • 选择复制偏移量最大的从节点
  • 选择runid最小的从节点
  1. Sentinel Leader节点会对第一步选出来的从节点执行 slaveof no one 命令让其成为主节点。
  2. Sentinel Leader 节点会向剩余的从节点发送命令,让他们成为新主节点的从节点
  3. Sentinel节点会将原来的主节点更新为从节点,并保持对其的关注
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值