quorum 与 majority 的区别
哨兵切换要闯两道投票关,很多人把它们混为一谈。第一道是 quorum:判定主库「客观下线」需要多少个哨兵认同,写在 monitor 行的最后一个参数里。第二道是 majority:客观下线之后,愿意执行切换的哨兵要选出领导者,得票必须超过哨兵总数的半数。quorum 只决定「能不能认定它挂了」,majority 才决定「能不能真的动手切换」。
基本信息
| quorum 位置 | sentinel monitor <name> <ip> <port> <quorum> 的最后一个参数 |
|---|---|
| quorum 作用 | 凑够票数即认定客观下线(ODOWN) |
| majority 计算 | 哨兵总数的一半加一,与 quorum 无关 |
| 常见配置 | 3 个哨兵配 quorum=2:任一哨兵怀疑、两台确认 |
| 检查命令 | SENTINEL CKQUORUM <name> 判断当前票数是否够判定 |
典型使用场景
- 三哨兵集群的标准配置:quorum 设为 2,避免单台哨兵误判就触发下线
- 五哨兵集群的取舍:quorum 可设 3,majority 为 3,容错能力更强但节点成本更高
- 切换失败排查:确认是「无法判定下线」还是「无法选举领导者」,两类问题方向完全不同
- 扩容哨兵前的评估:新增节点会改变 majority 门槛,需要重新确认切换在部分节点失联时仍可完成
- 演练验证:主动停掉主库与部分哨兵,观察在剩余节点数量下切换能否成功
检查票数状态
检查票数状态
redis-cli -p 26379 SENTINEL CKQUORUM mymaster # 票数是否够判定下线
redis-cli -p 26379 SENTINEL MASTER mymaster # 看 flags 中的 s_down / o_down
redis-cli -p 26379 SENTINEL SENTINELS mymaster # 已知的哨兵成员列表
redis-cli -p 26379 INFO sentinel # 哨兵自身的汇总信息
# 演练:停掉主库后观察日志里的投票与选举过程
tail -f /var/log/redis/sentinel.log两道门槛对照
| 门槛 | 配置位置 | 达不到的后果 |
|---|---|---|
| quorum | monitor 行参数 | 无法认定客观下线,永不进入切换流程 |
| majority | 哨兵总数的半数加一 | 无法选出领导者,切换停滞 |
| 两者关系 | quorum 决定判定,majority 决定执行 | quorum 小于半数时仍可能因多数派不足而卡住 |
| 典型值 | 3 哨兵用 quorum=2 | 只剩 1 台哨兵时既不判定也无法选举 |
CKQUORUM 的语义细节:它检查的是「当前在线哨兵能否凑够 quorum 票数」,因此在已经处于客观下线状态时返回错误是符合预期的,并不代表配置有误。判断配置是否合理应看正常状态下 CKQUORUM 是否返回成功。
把 quorum 设成哨兵总数等于要求全员在线才能判定下线:任意一台哨兵维护或网络抖动,主库真的挂了也无法进入切换流程。高可用的前提是允许部分节点失效,quorum 必须留出容错余量。