Redis Sentinel 架构原理详解(二)

前言

前面在Redis Sentinel 架构原理详解(一)中,我们学习了redis哨兵中的主从切换原理,也知道了sentinel集群在redis高可用架构中的作用。这里再和大家一起学习下sentinel 集群是如何实现节点监控的。

sentinel集群的监控功能详解

sentinel 集群通过三个定时监控任务完成对各个节点发现和监控。

1. 每隔10秒,每个 sentinel 节点会向主节点和从节点发送 info 命令获取 redis 主从架构的最新情况。例如,发送info replication命令可以得到以下信息:

node01:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.239.102,port=6379,state=online,offset=18621889,lag=1
slave1:ip=192.168.239.103,port=6379,state=online,offset=18621889,lag=1

这样,sentinel集群就可以得知master和slave的基本信息,通过向主节点执行info命令,获取从节点的信息,所以sentinel节点不需要显式配置监控从节点,当有新的从节点加入时都可以立刻感知出来,当master节点故障或者故障转移后,可以通过info命令实时更新redis主从信息。

2. 每隔2秒,每个sentinel节点会向redis 数据节点的__sentinel__:hello这个channel(频道)发送一条消息,消息的内容是:

   
   

每个sentinel节点会订阅该channel,来了解其他sentinel节点以及它们对主节点的判断,所以这个定时任务可以完成以下两个工作:

  • 发现新的 sentinel节点:通过订阅主节点的__sentinel__:hello了解其他的sentinel 节点信息,如果是新加入的sentinel 节点,将该sentinel 节点信息保存起来,并与该sentinel节点创建连接
  • sentinel节点之间交换主节点的状态,用于确认master下线和故障处理的leader选举。

3. 每隔1秒,每个 sentinel 节点会向主节点、从节点、其余 sentinel 节点发送一条ping命令做一次心跳检测,来确认这些节点是否可达。通过定时发送ping命令,sentinel 节点对主节点、从节点、其余 sentinel 节点都建立起连接,实现了对每个节点的监控,这个定时任务是节点下线判定的重要依据。

sdown(主观下线)和odown(客观下线)

  1. 主观下线
    每个 sentinel节点每隔1秒对主节点、从节点、其他sentinel节点发送ping 命令做心跳检测,当这些节点超过
    down-after-milliseconds没有进行有效回复,sentinel节点就会认为该节点下线,这个行为叫做主观下线。主观下线是某个 sentinel 节点的判断,并不是 sentinel 集群的判断,所以存在误判的可能。

  2. 客观下线
    当 sentinel 主观下线的节点是主节点时,该 sentinel 节点会通过sentinel ismaster-down-by-addr命令向其他 sentinel 节点询问对主节点的判断,当超过个数(quorum可配置)的 sentinel 节点认为主节点确实有问题,这时该 sentinel 节点会做出客观下线的决定,这样客观下线的含义是比较明显了,也就是大部分是 sentinel 节点都对主节点的下线做了同意的判定,那么这个判定就是客观的。

介绍一下sentinel is-master-down-by-addr命令:

sentinel is-master-down-by-addr    

ip、port:询问此 ip:port的redis进程是否下线
current_epoch:当前配置版本
runid:如果为当前sentinel节点的runid,则此命令用于申请自己成为故障处理的leader,如果是*,则此命令用于向其他sentinel 节点确认master 是否下线。

此命令返回结果包括3个信息:

  • down_state:目标 sentinel 节点对于主节点的下线判断,1是下线,0是在线。
  • leader_runid:当leader_runid等于*时,代表返回结果是说明主节点是否不可达,当 leader_runid 等于具体的runid,代表目标节点同意该 runid sentinel 节点成为 leader。
  • leader_epoch:leader 版本。

总结

上面介绍了redis集群中sentinel的三种定时监控任务,还了解了主观下线,客观下线的概念,以及sentinel is-master-down-by-addr命令的作用,后续我们再一起学习下进行故障转移前sentinel如何选举leader,以及redis集群中新的master如何选择。

 

 

 

你可能感兴趣的:(redis)