Skip to main content

Redis 哨兵主观下线与客观下线

在Redis的高可用架构中,主观下线(SDOWN)客观下线(ODOWN) 是哨兵(Sentinel)机制进行故障检测时的两个核心状态。简单来说,这是一个从“单点判断”到“集群共识”的过程。

👤 主观下线(SDOWN):单点的怀疑

主观下线,全称是Subjectively Down(SDOWN)

  • 定义单个哨兵(Sentinel)节点根据自己的检测,认为某个Redis实例(通常是主节点)无法连通,从而做出的下线判断。
  • 触发条件:哨兵会持续向Redis实例发送PING命令。如果在配置的down-after-milliseconds时间内没有收到有效回复(或收到错误回复),该哨兵就会将其标记为主观下线。
  • 特点:这只是一个哨兵的“一面之词”,存在误判可能,比如网络瞬时抖动也可能导致PING不通。

👥 客观下线(ODOWN):集群的共识

客观下线,全称是Objectively Down(ODOWN)

  • 定义:当多个哨兵节点都确认某个主节点主观下线,并达成一致后,才认定该主节点确实下线了。
  • 触发条件:当一个哨兵判定主节点主观下线后,会询问其他哨兵的意见。当同意主观下线的哨兵数量达到配置的法定票数(quorum 时,该主节点就会被标记为客观下线。
  • quorum的配置quorum值通常建议设置为超过哨兵总数的一半,例如N/2 + 1。生产环境通常至少部署3个哨兵实例。
  • 特点:这相当于启动了“少数服从多数”的决策机制,能有效避免单点误判,是触发后续自动故障转移的可靠信号。

⚖️ 两者对比

对比维度主观下线 (SDOWN)客观下线 (ODOWN)
判断主体单个哨兵节点多个哨兵节点(达到quorum数量)
判断依据自身发出的PING命令是否超时收集并统计其他哨兵对“主观下线”的投票
性质单方面的怀疑猜测经过投票验证的、集群的最终判决
后果标记状态,启动询问流程触发自动故障转移(如选举新主库)

💡 补充:Redis Cluster中的类似概念

值得注意的是,在Redis集群模式(Redis Cluster)中,也存在类似机制,但术语略有不同:主观下线被称为**PFAIL(Possible Fail),客观下线被称为FAIL**。

🛠️ 关键配置参数

  • down-after-milliseconds:决定主观下线判定快慢的超时时间。
  • quorum:决定客观下线所需票数的阈值。

总而言之,主观下线是哨兵个体的“怀疑”,而客观下线是哨兵集群经投票确认后的“判决”。这个机制确保了故障发现的准确性,是Redis实现高可用性的基石。