哨兵监控失效的根源在于连不上主节点,必须确保sentinel monitor三要素(唯一master-name、真实可连通的ip和端口)、防火墙放行三类端口、正确配置sentinel announce-ip、以及密码/acl三方一致,否则后续所有逻辑均不触发。

sentinel monitor 三要素写错,哨兵压根不拉从节点
哨兵发现主从拓扑的唯一入口就是 sentinel monitor 这一行配置。它不是“可选建议”,而是启动后所有后续逻辑(包括自动拉取从节点、故障转移投票)的前提。写错任意一个字段,哨兵进程会静默跳过该主节点,INFO SENTINEL 里可能只显示 master0:status=none 或直接不出现该 master 条目。
-
master-name必须全哨兵集群内唯一;多个主库共存时(如mymaster和cache2),重名会导致后加载的配置覆盖前一个 -
ip和port必须是主节点当前真实可连通的地址——不能写127.0.0.1或localhost,尤其当哨兵和 Redis 实例不在同一台机器上时,这等于直接断联 - 检查方式:用
redis-cli -p 26379连哨兵,执行SENTINEL get-master-addr-by-name mymaster;返回空或报错说明sentinel monitor未生效
防火墙没放行哨兵端口,PING 心跳全丢
哨兵靠周期性 PING 检测主从节点存活,但默认只开哨兵监听端口(如 26379),却常忽略主从节点的 Redis 端口(如 6379)是否双向可达。现象是哨兵日志里大量 Connection refused 或 timeout,SENTINEL masters 显示 num-down-sentinels:0 却始终卡在 odown。
Redis 8.2.3 是一款安全优先的高性能键值存储系统。该版本紧急修复了可能引发远程代码执行(RCE)的高危漏洞(CVE-2025-62507),并解决了 HyperLogLog 及 Cuckoo Filter 等数据结构在特定场景下的崩溃问题。建议所有用户立即升级,以保障生产环境的系统稳定与数据安全。
- 必须同时放行三类端口:
哨兵自身端口(如26379)、主节点 Redis 端口(如6379)、从节点 Redis 端口(如6380) - Linux 上用
iptables -L -n | grep :6379或firewall-cmd --list-ports确认;Docker 部署需加--publish显式暴露,不能只靠EXPOSE - 跨云厂商(如阿里云安全组)还要检查入方向规则是否允许源 IP 访问目标端口
sentinel announce-ip 没配或配错,从节点同步失败
哨兵拿到主节点地址后,会告诉从节点“去连这个 IP 复制数据”。但如果哨兵自己对外宣告的 IP 不对(比如容器内网 IP、Docker bridge IP),从节点就会尝试连一个根本不可达的地址,导致全量同步卡死,INFO REPLICATION 里长期显示 master_link_status:down。
-
sentinel announce-ip必须设成哨兵进程对外可被其他节点访问的真实 IP,不是127.0.0.1,也不是容器内部172.x.x.x - 若哨兵与 Redis 实例混部在同一台物理机,且都监听
0.0.0.0,仍需明确设announce-ip,否则部分版本哨兵会误取 loopback 接口 - 验证方法:在从节点上执行
redis-cli -p 6380 INFO REPLICATION | grep master_host,看返回的master_host是否是你期望的、能 ping 通的 IP
密码或 ACL 配置不一致,认证静默失败
主节点带密码时,哨兵和从节点必须三方密码完全一致,否则连接会在认证阶段静默中断。典型表现是哨兵日志几乎无报错,INFO SENTINEL 显示 master0:status=odown,但从节点 INFO REPLICATION 里 master_link_status 始终为 down,且 master_last_io_seconds_ago 持续增长。
- 三个地方必须严格一致:
requirepass(主节点)、masterauth(从节点)、sentinel auth-pass <master-name><password></password></master-name>(哨兵) - Redis 6+ 启用 ACL 时,还需额外加
sentinel masteruser <username></username>,否则即使密码对,也会因用户名缺失认证失败 - 测试链路是否通:用
redis-cli -h <master-ip> -p 6379 -a <password> PING</password></master-ip>手动连主节点;再用redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster看哨兵能否正确返回地址
down-after-milliseconds,先确保 SENTINEL get-master-addr-by-name 能返回真实可用的地址。










