公告地址解决什么
哨兵之间要互相投票、哨兵要把「现在的主库是谁」告诉客户端,这些交互依赖每个节点对外可达的地址。默认情况下哨兵上报的是它本机探测到的网卡地址,一旦中间隔着 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/port | sentinel.conf | 哨兵自身的公告地址 |
| replica-announce-ip/port | redis.conf | 数据实例向哨兵公告的地址 |
| sentinel monitor 的地址 | sentinel.conf | 哨兵首次发现主库用的真实地址 |
| bind / protected-mode | 各自配置文件 | 实际监听的网卡与访问限制 |
公告地址和实际监听是两件事:announce 改变的是「告诉别人我在哪」,不会改变监听端口,bind、防火墙和安全组仍要按真实监听地址放行。
公告地址写错时,SENTINEL CKQUORUM 往往照样通过,但选举会失败或反复重连;排查顺序是先看日志里的连接报错,再逐个核对 SENTINEL SENTINELS 输出的地址。