回答
每个 Sentinel
节点每隔一秒就会向 Redis 节点发送 PING
命令,已确认节点是否在线。若一个 Sentinel
节点在规定时间内(默认是 sentinel down-after-milliseconds
配置项指定的时间)没有收到被监控 Redis 节点的响应,它会将该节点标记为主观下线(SDOWN
),即该 Sentinel
节点认为这个 Redis 节点不可达。
当一个 Redis 节点被标注为主观下线后,由于主观下线是一家之言,会存在误判的情况,所以该 Sentinel
会向其他 Sentinel
对该 Redis 节点的看法,如果超过一定数量(quorum
)的 Sentinel
都认为该 Redis 节点不可达,那么该节点会被标记为客观下线(ODOWN
),这是一个全局共识,意味着多数 Sentinel
认为该节点确实出现了问题。
扩展
主观下线
主观下线(SDOWN
)是指单个 Sentinel
根据自身的监控结果认为某个 Redis 节点(无论是主节点还是从节点)不可用的状态。主要包括如下两个步骤:
- 周期性心跳检测:
Sentinel
通过向监控的 Redis 实例每隔一秒发送PING
命令来检查其健康状态。 - 超时判断:每个
Sentinel
都有配置的超时参数(down-after-milliseconds
),如果在该超时时间内,Sentinel
没有收到来自 Redis 实例的PONG
响应,则Sentinel
认为该 Redis 实例可能出现问题。
主观下线是“主观”的,它仅仅只代表了该 Sentinel
的观点。在分布式系统中,网络波动是常见的问题,临时的网络波动并不能代表该 Redis 节点不可用,所以主观下线会存在误判的情况。
所以,一个 Redis 节点被某个 Sentinel
标注为主观下线,并不能代表该 Redis 节点不可用,Sentinel
系统需要更多的证据来共同决定该 Redis 节点是否真的不可用。