Redis哨兵无法触发自动故障转移,八成因quorum值设置不合理或未生效:值大于当前可通信哨兵数(如设3但仅2台在线)直接卡在missing+quorum;须用SENTINEL ckquorum验证、SENTINEL set动态更新并SENTINEL master确认生效,且quorum推荐设为⌊N/2⌋+1。

Redis 哨兵无法触发主从自动切换,八成卡在 quorum 仲裁环节——不是值设得太大(超过当前可通信哨兵数),就是根本没生效。其他常见硬性阻塞点包括:哨兵之间网络不通、sentinel monitor 配置不一致、主从节点密码或权限配置错位。
quorum 值大于实际在线哨兵数,直接卡死在 missing+quorum
这是最常见、也最容易被忽略的硬性失败点。只要 sentinel monitor mymaster 192.168.1.100 6379 3 中的 3 大于当前能互相通信的哨兵数量(比如只有 2 台能通),故障转移流程连第一步都迈不出去。
-
SENTINEL ckquorum mymaster返回ERR missing+quorum就是铁证 - 日志里反复出现
+sdown master mymaster,但始终没有+odown,说明投票门槛都没过 - 执行
redis-cli -p 26379 SENTINEL sentinels mymaster看返回几条记录——不是看进程数或容器数,网络不通、防火墙拦截、配置未同步都会导致“逻辑上线”但“物理失联” - 推荐值是
⌊N/2⌋ + 1(N 为部署总数):3 台哨兵设 2,5 台设 3;设成 1 容易误切,设成 N 则单点失联即瘫痪
quorum 改了但没真正生效
哨兵不热重载 quorum,改完 sentinel.conf 不等于改完了。配置写错、没重启、或只改了一台,都会让整个集群失效。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 启动失败场景:
sentinel monitor行末尾的quorum写成"2"、2.0或带空格,redis-sentinel直接退出,报Invalid argument 'quorum' - 运行中修改必须用命令:
redis-cli -p 26379 SENTINEL set mymaster quorum 2,逐台执行,不能只改一台 - 验证是否生效:执行
redis-cli -p 26379 SENTINEL master mymaster,看输出里的quorum字段——它显示的是当前协商值,不是配置文件原始值 - 别跳过
--test-conf:改完配置先跑redis-sentinel /path/to/sentinel.conf --test-conf,语法错当场暴露
哨兵之间无法同步监控配置,各管各的主库
哨兵靠 hello 消息广播 sentinel monitor 规则。如果某台哨兵没收到完整广播,它眼里就没有这个主节点,自然不会参与投票。
- 现象:
SENTINEL masters在不同哨兵上输出不一致——有的返回空,有的返回fail,有的压根没mymaster这个名字 - 原因包括:新哨兵刚启动还没等够 30 秒(默认
default-down-after-milliseconds的两倍)就遭遇故障;某台哨兵长期离线后重启,缓存了旧monitor配置 - 修复动作:不能只依赖广播,必须手动强制刷新——在每台哨兵上执行
SENTINEL monitor mymaster 192.168.1.100 6379 2(地址和端口务必统一,别混用 IP 和域名)
主从节点基础配置不闭环,哨兵有心无力
哨兵只负责决策和下发指令,但真正执行 SLAVEOF、认证、重连这些动作,全靠 Redis 实例自己响应。任何一环权限或配置缺失,都会让 failover 卡在中间。
- 主节点
redis.conf必须设masterauth,否则旧主恢复后无法自动变成新主的从库 - 所有节点(主、从、哨兵)的密码必须一致:哨兵用
masterauth去连从库执行SLAVEOF,若从库密码不匹配,指令静默失败 - 检查
protected-mode no和bind 0.0.0.0,否则哨兵发来的命令连不到从库 - 确认从库未设
slave-read-only yes以外的限制(如replica-serve-stale-data no),否则可能拒绝接受新主同步
真正难排查的从来不是“有没有切”,而是“为什么看起来像切了但客户端还在往旧主写”。这往往意味着哨兵完成了 +switch-master,但客户端没及时调用 SENTINEL get-master-addr-by-name 拉新地址——或者拉到了,却因为 DNS 缓存、连接池复用、重试逻辑缺陷而继续打到旧实例上。这类问题不会出现在哨兵日志里,得从客户端侧倒查。

















