换机换 IP 时的复制信息
跨机迁移或更换 IP 时,除了用 REPLICAOF 指向新主库,还要处理从库对外上报的地址。容器、NAT 与端口映射环境下,从库实际监听的是内网地址,需要用 replica-announce-ip 与 replica-announce-port 告诉主库和哨兵自己的对外地址,否则监控与故障切换都会拿到不可达的地址。
基本信息
| 适用 | Redis 4.0 及以上(旧版本为 slave-announce-*) |
|---|---|
| replica-announce-ip | 向主库上报的对外 IP,供 INFO 与哨兵使用 |
| replica-announce-port | 对外端口,适用于端口映射场景 |
| 典型环境 | Docker、Kubernetes、NAT 端口映射 |
迁移流程
迁移流程
# 新实例启动后指向原主库
REPLICAOF 10.0.0.10 6379
INFO replication | grep -E 'master_link_status|master_last_io_seconds_ago' # up 且延迟接近 0 才算追平
# 容器或 NAT 场景配置对外地址(写进配置文件更稳)
CONFIG SET replica-announce-ip 203.0.113.5
CONFIG SET replica-announce-port 16379
INFO replication | grep -E 'slave_repl_offset|master_repl_offset' # 对比偏移量确认追平
# 切换流量后升主或重指新主
REPLICAOF NO ONE迁移检查项
| 检查项 | 命令或配置 | 目的 |
|---|---|---|
| 复制连通 | INFO replication 的 master_link_status | 确认已建立复制 |
| 追平程度 | 对比 master_repl_offset 与 slave_repl_offset | 确认数据一致后再切流量 |
| 对外地址 | replica-announce-ip / port | 让主库与哨兵看到可达地址 |
| 配置对齐 | maxmemory、持久化、密码 | 避免追平后一上流量就异常 |
| 读负载 | read-only 与只读账号 | 确认新实例可承担读流量 |
典型使用场景
- 纵向扩容换机:新实例追平后替换旧实例
- 机房迁移:跨网段复制并切换读写入口
- 容器化改造:Pod 重建导致 IP 变化时保持复制信息正确
- 加从库分担读流量,同时把新节点纳入哨兵监控
- 故障后重建从库并重新指向主库
迁移前把新实例的 maxmemory、淘汰策略、持久化与密码配置对齐,否则追平后流量一切入就会出现内存或认证类异常。
容器内不配置 announce 地址时,主库与哨兵记录的是容器网络 IP,故障切换会把流量打到不可达地址。
切换窗口的注意点
- 迁移窗口内保持短暂只读或双写,避免切换期间两边数据分叉
- 切换完成后确认旧主库不再接受写入,可改为只读或作为新主的从库
- 客户端与代理的拓扑缓存要同步刷新,必要时重启连接池让配置生效