repl-timeout合理值为60秒(redis 7.0起点),但须据网络rtt和负载动态调整:低于30秒易假断连,高于120秒会延迟故障感知;需配合repl-backlog-size与client-output-buffer-limit协同调优。

repl-timeout 配置值设多少才不频繁断连
直接结论:repl-timeout 不是“越大越好”,设为 60 是 Redis 7.0 的合理起点,但必须结合你的网络 RTT 和主从负载动态调整。低于 30 秒在跨机房或高负载场景下极易触发假断连;高于 120 秒会掩盖真实故障,延迟感知。
这个超时控制三类操作的等待上限:主节点发 PING 后等从节点 ACK、从节点发 REPLCONF ACK 后等主节点响应、AOF rewrite 或 RDB 传输过程中的 socket 阻塞等待。它不是心跳周期,而是单次通信失败阈值。
- 用
redis-cli -h $slave info replication | grep master_last_io_seconds_ago观察实际 IO 间隔,该值应稳定小于repl-timeout的 60%(比如 timeout=60,则理想值 ≤36) - 若
master_last_io_seconds_ago偶尔跳到 45–55,说明当前 timeout 已无余量,建议上调至90 - Linux 系统级
tcp_retries2默认为 15(约 15–30 分钟才真正断链),和repl-timeout无直接关系,别混淆
repl-ping-slave-period 和 repl-timeout 的配合关系
repl-ping-slave-period 是主节点向从节点发 PING 的间隔,默认 10 秒;repl-timeout 是主节点发完 PING 后最多等多久回包。二者共同决定“断连判定窗口”——如果 repl-ping-slave-period 太小而 repl-timeout 不够宽,一次瞬时网络抖动就会被记为 master_link_status:down。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 当网络平均 RTT > 80ms(比如跨可用区部署),建议将
repl-ping-slave-period调大到15或20,同时repl-timeout至少设为90 - 不要把
repl-ping-slave-period设成5却只配repl-timeout 30:这等于每 5 秒就发起一次 30 秒等待,连接状态极不稳定 - 该参数只在主节点生效,从节点不读取也不响应此配置;它不影响从节点主动上报 ACK 的频率(那是
repl-conf自动行为)
为什么调大 repl-timeout 后 still 有 master_link_status:down
常见误判:看到 master_link_status:down 就以为是 repl-timeout 不够,其实更大概率是底层 TCP 连接已中断,或者从节点卡在 AOF rewrite / RDB load 中无法响应 —— 此时调大 repl-timeout 毫无作用。
- 先查
redis-cli -h $slave info replication | grep loading:若loading:1,说明从节点正在加载快照,期间不处理任何复制命令,PING 必然超时 - 检查
redis-cli -h $slave info | grep used_memory_peak_human,对比主节点峰值内存,若从节点 peak 明显更高,可能是 AOF buffer 积压导致 write() 阻塞 - 抓包确认:在从节点执行
tcpdump -i any port <master-port> and host <master-ip></master-ip></master-port>,看是否有持续 30+ 秒无 ACK 的 PING 流量 —— 若没有,说明连接早就断了,问题在中间网络或repl-backlog-size不足导致断连后无法部分重同步
生产环境必须联动调整的三个参数
repl-timeout 单独调优意义有限,它必须和 repl-backlog-size、client-output-buffer-limit replica 形成闭环。三者失衡时,哪怕 timeout 设到 180,照样秒断。
-
repl-backlog-size至少为「峰值写入带宽 × 断连容忍时间」× 1.5:例如主节点峰值写入 8MB/s,允许断连 45 秒,则 backlog 至少设为540mb(8 × 45 × 1.5) -
client-output-buffer-limit replica推荐设为512mb 256mb 60:防止从节点因网络慢或自身慢导致输出缓冲区爆满,触发强制断连(此时repl-timeout根本没机会生效) - 所有参数修改后,必须用
CONFIG REWRITE持久化,并重启从节点验证 —— Redis 7.0 对 runtime 修改的部分参数(如repl-timeout)支持热生效,但某些组合变更仍需重启才彻底生效
repl-timeout 生效的前提是 TCP 连接还活着。一旦网卡丢包、防火墙静默丢连接、或从节点 OOM killer 杀掉 redis 进程,再大的 timeout 也救不回链路。所以监控里除了看 master_link_status,更要盯紧 tcp_established 连接数和 instantaneous_ops_per_sec 在从节点是否归零。










