两个票数别搞混
哨兵体系里有两个容易混淆的票数:quorum 是判定客观下线的门槛,由 monitor 行最后一个数字指定;多数派(majority)是授权某次故障转移所需票数,等于「当前所有哨兵数除以 2 再加 1」,自动计算、不可配置。quorum 达标只说明主库被判定为客观下线,能不能真正切换还要看多数派是否形成。
基本信息
| quorum | 配置项,判定主观下线升级为客观下线的票数门槛 |
|---|---|
| majority | 自动计算,N 台哨兵需要 N/2+1 票才能授权切换 |
| 检查命令 | SENTINEL CKQUORUM <master-name> |
| 容错能力 | 3 台可容忍 1 台故障,5 台可容忍 2 台 |
| 部署建议 | 至少 3 台,分布在不同物理机或不同交换机下 |
典型使用场景
- 设计哨兵数量时做容量与容错规划
- 排查「主库被判下线却没有切换」这类问题
- 故障演练中核对投票路径是否通顺
- 哨兵缩容或迁移前做安全检查
- 向业务解释为什么两台哨兵不算高可用
检查票数是否够
检查票数是否够
redis-cli -p 26379 SENTINEL CKQUORUM mymaster
# OK 2 usable Sentinels. Quorum and failover authorization can be reached
redis-cli -p 26379 SENTINEL master mymaster
# 关注 quorum 与 num-other-sentinels 两个字段
# 3 台哨兵:quorum 可设 2,多数派=2
# 5 台哨兵:quorum 可设 2,多数派=3
redis-cli -p 26379 SENTINEL sentinels mymaster # 其它哨兵是否可见概念对照
| 概念 | 取值来源 | 影响 |
|---|---|---|
| quorum | monitor 行末数字 | 决定多久判定客观下线,不决定能否切换 |
| majority | 哨兵总数除以 2 加 1 | 决定能否授权故障转移,不可配置 |
| ckquorum | 检查命令 | 直接告诉你当前能否形成多数派 |
| num-other-sentinels | SENTINEL master 输出 | 为 0 说明哨兵之间没有互相发现 |
| 容错能力 | 哨兵总数 | 3 台容忍 1 台,2 台则任何一台故障即失效 |
只有当前存活的哨兵参与投票:5 台挂了 2 台还剩 3 台,仍能形成多数派;挂到只剩 2 台就再也切不动,主库故障时只能人工介入。
把 quorum 当成切换票数是最常见的误读:设了 2 却只部署 2 台哨兵,一台故障后永远无法完成切换,自动恢复能力直接归零。
哨兵数量取奇数更划算:4 台与 3 台的多数派都是 3,多出来的那台不提升容错,只增加配置漂移与误判面。