redis哨兵通过主观下线(sdown)和客观下线(odown)两级判定机制确认主节点真实故障:单个哨兵在down-after-milliseconds内未收到有效响应即标记sdown;当至少quorum个哨兵达成一致,才升级为odown并触发故障转移,避免网络抖动导致误切。

Redis 哨兵集群中,主节点是否真正下线,不是由单个哨兵说了算,而是通过两级判定机制来保障准确性:先有“主观下线”,再升级为“客观下线”。这个设计核心是为了避免网络抖动、临时延迟等偶然因素引发误切换。
主观下线(SDOWN)怎么触发
这是单个哨兵的本地判断,不具全局效力,也不触发任何故障转移动作。
- 哨兵默认每秒向主节点发送一次 PING 命令;
- 如果在 down-after-milliseconds 配置的时间内(例如 5000 毫秒),未收到 +PONG、-LOADING 或 -MASTERDOWN 任一有效响应,该哨兵就将主节点标记为 SDOWN;
- 这个阈值同样适用于它所监控的从节点和其他哨兵节点——也就是说,一个哨兵可能同时对主库、从库、甚至另一个哨兵判 SDOWN;
- 不同哨兵可配置不同的 down-after-milliseconds 值,所以它们进入 SDOWN 的时间点可能不一致。
客观下线(ODOWN)怎么触发
只有当足够多的哨兵达成共识,才会升级为主节点“客观下线”,这是启动故障转移的必要前提。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 一旦某个哨兵判定主节点为 SDOWN,它会主动向其他哨兵发送 SENTINEL is-master-down-by-addr 命令,询问它们对该主节点状态的看法;
- 当收到至少 quorum 个哨兵(注意:不是多数,而是配置值,如 sentinel monitor mymaster 127.0.0.1 6379 2 中的 2)返回“是,我也认为它 SDOWN”时,该哨兵就将主节点标记为 ODOWN;
- ODOWN 只针对主节点定义,从节点或哨兵节点即使被多数判定为 SDOWN,也不会触发故障转移;
- 标记 ODOWN 后,哨兵集群立即进入领导者选举阶段(基于类 Raft 投票),由选出的 Leader 执行后续选主与切换流程。
关键配置项说明
两个参数直接决定判定逻辑是否稳健:
- down-after-milliseconds:单次探测超时阈值,设太短易误判,设太长影响故障发现速度;
- quorum:触发 ODOWN 所需的最小同意哨兵数,必须 ≤ 哨兵总数,且建议设为 ⌊N/2⌋+1(即过半),才能防止单点误判和脑裂。
为什么需要两级判定
单纯依赖一个哨兵的判断风险太高。比如某哨兵所在机器 CPU 过载、网络短暂丢包,或主节点正经历慢查询高峰,都可能导致假 SDOWN。引入 quorum 约束后,只有多个独立路径同时失效,才认定真实故障,大幅降低误切概率,也提升了系统整体容错能力。










