首页/数据/数据库速查/复制延迟排查(网络/慢命令/大 key/重写)
Redis 运维与场景124 条

复制延迟排查(网络/慢命令/大 key/重写)

从库延迟的排查顺序:先看 offset 差与主库写入速率,再看网络带宽、从库慢命令与磁盘、以及是否有重写/快照在抢资源。

数据库速查数据更新于 2026-10-13

复制延迟排查是什么

复制本质是命令流回放:主库执行过的写命令在从库重放一遍,因此任何让单条命令变慢的因素都会直接放大延迟。排查顺序建议是——先比较两侧 offset 与主库写入速率,再看网络带宽与延迟,然后看从库上是否有慢命令、AOF 重写或快照在争抢 CPU 与磁盘,最后确认是否存在大 key 拖慢单条命令。

基本信息

判断依据两侧 offset 差值及其变化趋势
常见原因网络带宽不足、大 key、从库重写或快照、从库读流量过大
观察工具INFO replication、SLOWLOG、INFO persistence、LATENCY LATEST
系统层工具ss 看连接与重传,iostat 看磁盘压力
缓解手段拆分大 key、错开维护窗口、对读流量限流

典型使用场景

  • 延迟告警处置:按顺序逐项排除而不是盲调参数
  • 大 key 治理:定位单条命令耗时长的键并拆分
  • 维护窗口安排:把重写与快照安排到低峰,避开业务高峰
  • 网络排查:确认带宽是否打满、是否存在重传
  • 从库读流量管理:读命令与回放争抢 CPU 导致 lag 上升
  • 复盘总结:记录每次延迟的根因与处置动作,形成经验库

排查路径

排查路径
INFO replication | grep master_repl_offset        # 主库侧偏移
INFO replication | grep slave_repl_offset         # 从库侧偏移,差值即落后字节
INFO replication | grep master_last_io_seconds_ago # 变大说明主库消息没到
SLOWLOG GET 10                    # 从库也在执行同样命令
INFO persistence | grep in_progress   # rdb_bgsave_in_progress / aof_rewrite_in_progress
LATENCY LATEST                    # 实例内部延迟事件
ss -tnp | grep 6379               # 连接与队列情况
iostat -x 1                       # 从库磁盘是否被打满
redis-cli --bigkeys               # 离线低峰巡检大 key

症状到根因对照

症状可能根因处置方向
offset 差值稳定增长从库回放能力不足或网络带宽受限查慢命令、看网络与磁盘
master_last_io_seconds_ago 变大主库无写入或链路异常核对主库写入与连接状态
延迟呈周期性尖峰从库重写或快照与回放争抢错开维护窗口
延迟骤升且持续出现大 key 或批量命令拆 key、限制单次批量大小
从库 CPU 饱和读命令过重与回放竞争读流量限流或增加只读副本
复制是命令流回放:从库执行慢命令(如大范围 ZRANGE)不影响延迟本身,但它与回放竞争资源会拉大 lag。
从库开启 AOF 重写或 BGSAVE 时会与回放争抢磁盘和内存,延迟明显上升;把这类维护安排在低峰,并监控重写与快照是否在进行中。

易错点

  • 只看到延迟就重启复制,掩盖了真正根因(大 key 或磁盘瓶颈)
  • 从库承担大量读请求却不做限流,回放被读命令挤占导致 lag 长期不收敛
  • 在业务高峰执行 AOF 重写或备份,延迟尖峰与业务峰值叠加
  • 忽略网络因素,先优化参数却始终解决不了带宽打满的问题
  • 没有大 key 巡检机制,直到某次写入触发超长回放才暴露

数据来源与参考

  • Redis 官方文档: 复制(延迟)
  • Redis 官方文档: LATENCY 命令

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌