公告地址解决什么问题
节点自己记住的是 bind 与 port 推导出的本地地址,但其他节点和客户端需要的是「真正能连上的地址」。在 NAT、端口映射、容器编排这类环境里两者并不相同,于是要用 cluster-announce-ip、cluster-announce-port、cluster-announce-bus-port 显式公告对外地址。公告值会写进节点保存的拓扑记录并通过 gossip 传播,也决定 MOVED 重定向返回给客户端的地址。
基本信息
| 配置项 | cluster-announce-ip / cluster-announce-port / cluster-announce-bus-port |
|---|---|
| 适用环境 | NAT 网关、端口映射、容器编排、多网卡主机 |
| 默认行为 | 未设置时按 bind 与 port 推导实际地址 |
| 核对方式 | CLUSTER NODES 中显示的地址是否为外部可达 |
| 影响范围 | 节点间通信、客户端重定向目标地址 |
典型使用场景
- 容器编排环境用 NodePort 或主机端口映射暴露实例,集群内外部地址不一致
- 云主机位于 NAT 网关后面,对外呈现地址与网卡地址不同
- 同一主机多网卡,需要明确指定业务网段而避免走管理网卡
- 机房搬迁或网络改造后对外地址变化,需要同步更新公告
- 排查 MOVED 返回的地址客户端连不上,定位到公告地址配置错误
配置与核对
配置与核对
cluster-announce-ip 203.0.113.30 # 对外可达地址
cluster-announce-port 7000 # 业务端口映射后对外呈现的端口
cluster-announce-bus-port 17000 # 总线端口映射后对外呈现的端口验证命令
验证命令
redis-cli -p 7000 CLUSTER NODES | head -3 # 检查每行地址是否外部可达
redis-cli -p 7000 CLUSTER INFO | grep cluster_state # 公告错误会影响状态
redis-cli -h <公告地址> -p 7000 PING # 从客户端侧验证可达性配置项与配错表现
| 配置项 | 含义 | 配错的表现 |
|---|---|---|
| cluster-announce-ip | 对外可见的主机地址 | 其他节点连接超时,节点被反复判为不可达 |
| cluster-announce-port | 对外可见的业务端口 | 客户端按 MOVED 重定向后连不上 |
| cluster-announce-bus-port | 对外可见的总线端口 | gossip 不通,拓扑长期不收敛 |
| 三项留空 | 按本地地址推导 | 内网直连环境正常,经映射即失效 |
公告地址同时被客户端用于路由,改错不只是节点之间连不上,业务侧会收到指向不可达地址的重定向。
修改公告配置需要重启节点才生效,滚动进行并逐个确认拓扑收敛,避免一次性重启引发误判。