主从断线后slave无法重连master的典型原因是master-read-repl-port未正确配置或未生效、安全组/防火墙未放行该端口、tls复制开关不一致或config rewrite未执行,导致连接请求无法发出或被拦截。

主从断线后slave无法重连master的典型现象
执行 INFO replication 发现 master_link_status:down,且 master_last_io_seconds_ago 持续增长;日志里反复出现 Unable to connect to MASTER 或 Connection refused。这不是网络抖动,而是重连请求压根没发出去或被拦截。
检查 master-read-repl-port 配置是否生效
Redis 7.0+ 引入了 master-read-repl-port 参数,专用于复制连接(区别于客户端端口 port)。如果只改了 port,但没显式设置该参数,slave 仍会尝试连默认的 6379 —— 即使 master 实际监听在其他端口。
-
master-read-repl-port必须在 master 的 redis.conf 中显式配置,且需与bind+protected-mode no(或正确配置requirepass)配合生效 - 修改后必须
redis-cli -p <port> CONFIG REWRITE</port>或重启,CONFIG GET master-read-repl-port能查到值才算真正加载 - slave 端无需配对应参数,它会从
INFO replication的master_repl_port字段自动获取该值
安全组/防火墙是否放行了复制专用端口
即使 master-read-repl-port 配对了,云厂商安全组或宿主机 iptables 仍可能只放行了主服务端口(如 6379),而忽略这个新端口。slave 发起的 TCP SYN 包会被直接丢弃,表现为超时而非拒绝连接。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 确认 master 实际监听的复制端口:
ss -tlnp | grep redis或lsof -i :<port></port> - 云平台安全组中,入方向规则需明确添加该端口(协议 TCP,源为 slave IP 段)
- 若用 Docker,检查
-p是否映射了该端口,且容器内netstat -tln确实监听在对应地址+端口
验证链路通断与认证兼容性
别跳过基础连通性测试:从 slave 机器用 telnet <master_ip><repl_port></repl_port></master_ip> 或 nc -zv <master_ip><repl_port></repl_port></master_ip> 直接测端口可达性。失败则问题不在 Redis 配置层。
- 若 master 启用了
requirepass,slave 的masterauth必须匹配,否则连接成功后立即被断开,日志报NOAUTH Authentication required - Redis 7.0+ 复制连接默认启用
tls-replication yes(若 master 开了 TLS),此时 slave 必须同步配置tls-replication yes和对应证书路径,否则握手失败 - 跨公网场景下,避免使用
127.0.0.1或localhost作为 master 地址 —— slave 解析后连的是自己,不是真正的 master
最容易被忽略的是:master-read-repl-port 值写错、CONFIG REWRITE 没执行、安全组规则没刷新、TLS 复制开关不一致 —— 这四点任一出问题,都会让重连卡在连接建立前,而不是认证或同步阶段。










