首页/数据/Redis 进阶速查/哨兵公告地址:announce-ip/port
主从与哨兵51 条

哨兵公告地址:announce-ip/port

NAT 或容器环境下用 sentinel announce-ip/port 公告哨兵自身可达地址,否则其他哨兵与客户端拿到的地址不可用。

Redis 进阶速查数据更新于 2026-10-13

公告地址解决什么

哨兵之间要互相投票、哨兵要把「现在的主库是谁」告诉客户端,这些交互依赖每个节点对外可达的地址。默认情况下哨兵上报的是它本机探测到的网卡地址,一旦中间隔着 NAT、端口映射或容器网络,别人拿到的地址就连不上。sentinel announce-ip / announce-port 让哨兵主动声明自己被外部访问时应使用的地址与端口。

基本信息

配置项sentinel announce-ip <ip> / sentinel announce-port <port>
生效范围哨兵自身(对其他哨兵与客户端公告)
配置位置sentinel.conf,属于全局项
生效方式改配置文件后重启哨兵进程,无在线改名命令

典型使用场景

  • 哨兵部署在 NAT 之后,需要让其他哨兵用映射后的公网地址联系自己
  • 容器或 K8s 环境里固定映射端口,公告与映射一致的地址与端口
  • 同一集群内不同哨兵处于不同网段,需要统一一个都能访问的地址平面
  • 跨机房哨兵互联时,让投票流量走可达链路而不是本机网卡地址
  • 排查哨兵选举失败时,先用公告地址核对各节点看到的信息是否一致

配置与核对

配置与核对
sentinel announce-ip 203.0.113.20      # 其他哨兵与客户端应使用的地址
sentinel announce-port 26379           # 对外可达端口,与容器映射保持一致
sentinel monitor mymaster 10.0.0.11 6379 2   # 监控目标仍写内网真实地址
# 核对:redis-cli -p 26379 SENTINEL SENTINELS mymaster  # 看各哨兵公告的地址是否可达
# 核对:redis-cli -p 26379 SENTINEL MASTERS             # 看主库公告地址是否可被客户端访问

相关配置对照

配置项写在哪作用对象
sentinel announce-ip/portsentinel.conf哨兵自身的公告地址
replica-announce-ip/portredis.conf数据实例向哨兵公告的地址
sentinel monitor 的地址sentinel.conf哨兵首次发现主库用的真实地址
bind / protected-mode各自配置文件实际监听的网卡与访问限制
公告地址和实际监听是两件事:announce 改变的是「告诉别人我在哪」,不会改变监听端口,bind、防火墙和安全组仍要按真实监听地址放行。
公告地址写错时,SENTINEL CKQUORUM 往往照样通过,但选举会失败或反复重连;排查顺序是先看日志里的连接报错,再逐个核对 SENTINEL SENTINELS 输出的地址。

易错点

  • 只给部分哨兵配了 announce-ip,哨兵之间看到的地址互相矛盾 → 投票与仲裁结果异常 → 三台哨兵统一下发配置并逐个核对输出
  • 容器用随机端口映射时公告端口写死也无效 → 其他哨兵永远连不上 → 先固定端口映射再公告,端口号与映射保持一致
  • 同一集群里有的哨兵公告公网地址、有的公告内网地址 → 跨网络不可达 → 统一选用所有哨兵都能访问的那一个地址平面
  • 改完 sentinel.conf 忘记重启哨兵进程 → 实际仍按旧地址公告,误判成配置已生效 → 重启后重新跑一遍核对命令

数据来源与参考

  • Redis 官方文档:Sentinel announce 配置说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌