从库的对外公告地址
从库在与主库握手时会报告自己的地址,默认用实际监听的 IP 与端口。在 NAT、端口映射或容器网络里,主库看到的是内网地址,外部根本连不上;replica-announce-ip 与 replica-announce-port 就是用来公告「别人应该用哪个地址来连我」。
基本信息
| 配置项 | replica-announce-ip、replica-announce-port |
|---|---|
| 默认值 | 空,即使用实际监听的地址与端口 |
| 典型环境 | NAT、端口映射、容器网络、多网卡云主机 |
| 修改方式 | 写入配置文件,或运行期用 CONFIG SET 动态调整 |
典型使用场景
- 容器部署:容器内监听 6379,宿主机做了端口映射,需要公告宿主机地址与映射端口
- 云主机多网卡:从库绑定私网地址,但要公告专线或公网地址供哨兵与客户端连接
- 端口映射部署:监听端口与对外端口不同,不公告会让主库与哨兵拿到错误端口
- 迁移窗口:临时把公告地址指向新位置,避免客户端拿着不可达地址反复重试
设置与核对
设置与核对
redis-cli CONFIG SET replica-announce-ip 203.0.113.10 # 公告对外地址
redis-cli CONFIG SET replica-announce-port 6380 # 公告对外端口
redis-cli CONFIG GET replica-announce-* # 核对当前生效值
redis-cli -h <主库地址> INFO replication | grep -E 'slave[0-9]' # 主库看到的从库地址
redis-cli INFO replication | grep -E 'master_host|master_link_status'到哪里验证生效
| 观察位置 | 关键字段 | 期望结果 |
|---|---|---|
| 主库 INFO replication | slaveN 的 ip 与 port | 与公告值一致 |
| 从库 INFO replication | master_link_status | up,复制链路正常 |
| 哨兵视角 | 从库列表中的地址 | 按公告地址可以直连 |
| 客户端连接日志 | 连接的目标地址 | 不再出现连接超时 |
公告地址不能替代网络打通:如果公告出去的地址别人也连不上(例如公网 IP 但安全组未放行),哨兵与客户端会持续连接失败,故障切换时的判断也更难预测。
公告项不改变实际监听,Redis 仍然只绑定配置中的地址与端口;公告值在复制握手时上报,因此链路重建或重连后才按新值生效,改完以主库 INFO 中显示的从库地址为准核对。