首页/数据/Redis 进阶速查/SDOWN 与 ODOWN 判定流程
主从与哨兵51 条

SDOWN 与 ODOWN 判定流程

单个哨兵认定失联是主观下线(SDOWN);当达到 quorum 数量的哨兵都报告 SDOWN,状态升级为客观下线(ODOWN),随后才进入领导者选举与切换。

Redis 进阶速查数据更新于 2026-10-13

两阶段下线判定

哨兵判断主库是否真的不可用分两步。第一步是主观下线(SDOWN):某台哨兵在 down-after-milliseconds 时间内收不到主库回应,就把标记改为 s_down,这只是单台哨兵的视角。第二步是客观下线(ODOWN):这台哨兵向其他哨兵求证,达到 quorum 数量(含自己)都认为主库不可达,才升级为 o_down,之后才进入领导者选举与故障转移。这个两阶段设计把「单点观察到的抖动」和「多数确认的故障」区分开来。

基本信息

SDOWN 触发由 down-after-milliseconds 的判定窗口决定
ODOWN 触发达到 quorum 数量的哨兵一致确认
哨兵间交互IS-MASTER-DOWN-BY-ADDR 询问与应答
查看方式SENTINEL MASTER 看 flags,SENTINEL SENTINELS 看同伴
有效期ODOWN 只对本次判定有效,主库恢复即清除

典型使用场景

  • 切换迟迟没发生,先判断卡在 SDOWN 还是 ODOWN 阶段
  • 调整 down-after-milliseconds,给跨机房这类抖动较多的链路留容忍度
  • 核对 quorum 设置是否合理,过小会放大误判、过大可能永远无法确认下线
  • 故障复盘中还原「谁先报告、何时跨过多数派」的时间线
  • 多套主库共用一个哨兵集群时,确认各监控对象的 quorum 互相独立

观察判定状态

观察判定状态
redis-cli -p 26379 PING                          # 先确认哨兵自己活着
redis-cli -p 26379 SENTINEL MASTER mymaster      # flags 里是否出现 s_down / o_down
redis-cli -p 26379 SENTINEL MASTER mymaster | grep -E 'flags|quorum|down-after'
redis-cli -p 26379 SENTINEL SENTINELS mymaster   # 查看其他哨兵的观察结果
redis-cli -p 26379 SENTINEL CKQUORUM mymaster    # 检查当前是否还能达到法定票数

状态字段读法

状态含义后续动作
s_down单台哨兵认为主库不可达观察其他哨兵是否同样报告,先排除抖动
o_down达到 quorum 一致确认进入选举与切换流程,跟踪切换结果
仅一台报 s_down各哨兵观察不一致检查哨兵之间的网络连通与配置是否统一
quorum 不合理过小放大误判,过大难以确认按哨兵总数重新规划 quorum
ODOWN 只在这一次判定中有效:主库恢复响应后标志会清除,也不会继续触发切换。若故障期间某台哨兵自身不可达,其他哨兵拿不到它的确认,ODOWN 可能迟迟建立不起来,表现就是「主库确实挂了但没有发生切换」。

易错点

  • flags 长期停在 s_down,只盯主库而不查哨兵之间的互访,忽略被防火墙拦掉的哨兵内部端口
  • quorum 设得小于多数派,少数哨兵即可确认下线,误判风险显著上升
  • down-after-milliseconds 设得过短,主库慢查询造成的短暂无响应就触发 SDOWN,带来不必要的切换
  • 各哨兵上的监控配置不一致(down-after 或 quorum 不同),判定结论互相矛盾,排障时容易被带偏

数据来源与参考

  • Redis 官方文档:Sentinel 下线判定流程说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌