redis2.6高可用方案【2】

来源:互联网 发布:狮虎兽可以繁殖吗 知乎 编辑:程序博客网 时间:2024/04/30 14:03

SDOWN and ODOWN

已经简要地提及本文档中的Redis Sentinel涉及两个不同的关闭概念,一个被称为Subjectively Down conditionSDOWN,由本地哨兵实例发出关闭实例的条件另一种是Objectively Down condition (ODOWN)即有足够数量的Redis Sentinel发出了SDOWN并从其他的Sentinel获得SENTINEL is-master-down-by-addr命令作为返回状态。

Sentinel的角度来看,SDOWN 条件就是在设定时间内未收到有效的PING请求回复,而这个时间长度是由配置文件中的is-master-down-after-milliseconds参数确定的。

下面列出的是有效的PING请求回复:

  • +PONG
  • -LOADING error
  • -MASTERDOWN error

任何其他答复(或无应答被视为无

注意SDOWN的判定无效超时答复的时间由全局配置中确定例如,如果设置间隔为30000毫秒(30秒我们收到可接受PING回复在29,该实例将被视为工作

ODOWN判定仅适用与master。对于其他类型的实例Sentinel不需要任何协议,所以ODOWN状态不会到达slave其他sentinel

每一个Sentinel的行为如下描述。对于由多个Sentinel构成的分布式系统的行为只是每一个Sentinel实例执行规则的结果(The complete behavior of Sentinel as a distributed system composed of multiple Sentinels only results from this rules followed by every single Sentinel instance)。以下是第一组规则这个文件的过程中将添加更多的规则在适当的部分

Sentinel Rule #1:每个Sentinel每秒发送PING到每个已知的master、slave和Sentinel实例。

Sentinel Rule #2:判定实例处于Subjectively Down (SDOWN) 状态,如果最后一次PING答复是down-after-milliseconds参数设定的时间间隔以前。有效的PING答复:+PONG, -LOADING, -MASTERDOWN.

Sentinel Rule #3:每个哨兵是能够回复命令SENTINEL is-master-down-by-addr<ip> <port>.如果这个命令的回复是true并且指定的地址是一个master实例的,那么这个master判定处于SDOWN状态。

Sentinel Rule #4:当一个master处于SDOWN条件时,而且每一个Sentinel仍然在监听这个master,需要每秒使用SENTINEL is-master-down-by-addr命令来确认是否处于此状态。

Sentinel Rule #5:如果一个master满足SDOWN条件时,并且有足够的Sentinel认同master处于此状态,并且在5秒之前回复了SENTINEL is-master-down-by-addr,那么master就可以被标记为Objectively Down (ODOWN)。

Sentinel Rule #6:每间隔10秒,每个Sentinel将发送INFO请求到所有的已知master和slave。如果master处于ODOWN状态,它的slave将被要求每一秒应答INFO请求,而不是每隔10秒

Sentinel Rule #7:如果sentinel收到的第一个INFO回复是slave发出的而非预期的mater,sentinel将更新检测配置以INFO的输出日志作为master的检测报告替代。所以可以安全的启动针对slave的sentinel。


原创粉丝点击