Redis Sentinel的故障转移过程

一、什么是Redis Sentinel?

当主节点出现故障时,Redis Sentinel能自动完成故障发现和故障转移,并通知应用方,从而实现真正的高可用。

Redis Sentinel是一个分布式架构,其中包含若干个Sentinel节点和Redis数据节点。Redis Sentinel的拓扑图如下:
在这里插入图片描述

二、故障转移的步骤

Redis Sentinel实现故障转移的四个步骤:

  1. 监控:每个Sentinel节点定时监控Redis数据节点和其它的所有Sentinel节点。
  2. 通知:Sentinel节点会将故障转移的结果通知给应用方。
  3. 主节点故障转移:实现从节点晋升为主节点并维护后续的正确的主从关系。
  4. 配置提供者:客户端初始化的是Sentinel节点集合,需要从中获取主节点信息。

在这里插入图片描述
故障转移后的状态:
在这里插入图片描述

三、主观下线

Sentinel节点一家之言,当执行ping命令超时,也就是超过down-after-milliseconds没有回复,Sentinel节点就会对该节点做失败判定,这个行为叫做主观下线。
在这里插入图片描述

四、客观下线

当Sentinel主观下线的节点是主节点时,该Sentinel节点会通过sentinel is-master-down-by-addr命令,向其它Sentinel节点询问对主节点的判断,当超过quorum个数,Sentinel节点认为主节点客观下线。

从节点、Sentinel节点在主观下线后,没有后续的故障转移操作。

在这里插入图片描述

sentinel is-master-down-by-addr ip port current_epoch runid

runid等于*时,Sentinel节点直接交换对主节点下线的判定。

runid是Sentinel节点的runid时,希望目标Sentinel节点同意自己成为领导者的请求。

返回结果包含三个参数:

  • down_state:目标节点对于主节点的下线判断,1是下线,0是在线。
  • leader_runid:*主节点是否可达,runid代表目标节点同意runid成为领导者。
  • leader_epoch:领导者纪元。

五、Sentinel领导者选举

每个节点只能投票一次,每个Sentinel节点都参与选举,都有可能成为领导者,当Sentinel认为主节点主观下线时,就会向其它Sentinel节点发送自己要成为领导者的请求。别的节点没有同意过其它Sentinel节点,就会同意此请求。

采用Raft算法,选举过程非常快,一般先完成客观下线的节点会成为领导者。而且一旦产生足够的票数后,不会再进行无用的过程了。

六、选择新的主节点

在这里插入图片描述

发布了95 篇原创文章 · 获赞 32 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/jiangxiulilinux/article/details/104993777