欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Redis(设计与实现):--->Sentinel之检测服务器、Sentinel下线状态(down-after-milliseconds、quorum、is-master-down-by-addr)

程序员文章站 2022-07-07 14:42:44
...

一、检测主观下线状态

在默认情况下,Sentinel会以每秒一次的频率向所有与它创建了命令连接的实例(包括主服务器、从服务器、其他Sentinel在内)发送PING命令,并通过实例返回的PING命令回复来判断实例是否在线.

图示
下图展示的例子中,带箭头的连线显示了Sentinel1和Sentinel2是如何向实例发送PING命令的:
Sentinel1将向Sentinel2、主服务器master、从服务器slave1和slave2发送PING命令.
Sentinel2将向Sentinel1、主服务器master、从服务器slave1和slave2发送PING命令.
Redis(设计与实现):--->Sentinel之检测服务器、Sentinel下线状态(down-after-milliseconds、quorum、is-master-down-by-addr)
实例对PING命令的回复可以分为以下两种情况:

有效回复:实例返回+PONG、-LOADING、-MASTERDOWN三种回复的其中一种

无效回复:实例返回除+PONG、-LOADING、-MASTERDOWN三种回复之外的其他 回复,或者在指定时限内没有返回任何回复

Redis(设计与实现):--->Sentinel之检测服务器、Sentinel下线状态(down-after-milliseconds、quorum、is-master-down-by-addr)
Redis(设计与实现):--->Sentinel之检测服务器、Sentinel下线状态(down-after-milliseconds、quorum、is-master-down-by-addr)
注意事项:
Redis(设计与实现):--->Sentinel之检测服务器、Sentinel下线状态(down-after-milliseconds、quorum、is-master-down-by-addr)
Redis(设计与实现):--->Sentinel之检测服务器、Sentinel下线状态(down-after-milliseconds、quorum、is-master-down-by-addr)

二、检测客观下线状态

当Sentinel将一个主服务器判断为主观下线之后,为了确认这个主服务器是否真的下线 了,它会向同样监视这一主服务器的其他Sentinel进行询问,看它们是否也认为主服务器已经进入了下线状态(可以是主观下线或者客观下线)。当Sentinel从其他Sentinel那里接收到足够数量的已下线判断之后,Sentinel就会将从服务器判定为客观下线,并对主服务器执行故障转移操作

Redis(设计与实现):--->Sentinel之检测服务器、Sentinel下线状态(down-after-milliseconds、quorum、is-master-down-by-addr)
演示案例: 如果被Sentinel判断为主观下线的主服务器的IP为127.0.0.1,端口号为6379, 并且Sentinel当前的配置纪元为0,那么Sentinel将向其他Sentinel发送以下命令:

SENTINEL is-master-down-by-addr 127.0.0.1 6379 0 *

Redis(设计与实现):--->Sentinel之检测服务器、Sentinel下线状态(down-after-milliseconds、quorum、is-master-down-by-addr)

1) <down_state>
2) <leader_runid>
3) <leader_epoch>

回复的含义如下:
Redis(设计与实现):--->Sentinel之检测服务器、Sentinel下线状态(down-after-milliseconds、quorum、is-master-down-by-addr)
演示案例:如果一个Sentinel返回以下回复作为SENTINEL is-master-down-by-addr命令的回复,那么说明Sentinel也同意主服务器已下线:

1) 1
2) *
3) 0

Redis(设计与实现):--->Sentinel之检测服务器、Sentinel下线状态(down-after-milliseconds、quorum、is-master-down-by-addr)
Redis(设计与实现):--->Sentinel之检测服务器、Sentinel下线状态(down-after-milliseconds、quorum、is-master-down-by-addr)

quorum参数
Redis(设计与实现):--->Sentinel之检测服务器、Sentinel下线状态(down-after-milliseconds、quorum、is-master-down-by-addr)
Redis(设计与实现):--->Sentinel之检测服务器、Sentinel下线状态(down-after-milliseconds、quorum、is-master-down-by-addr)
来源参考:
《Redis设计与实现》