2024-05-02
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/1662062797

回答

每个 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 节点是否真的不可用。