复制延迟排查是什么
复制本质是命令流回放:主库执行过的写命令在从库重放一遍,因此任何让单条命令变慢的因素都会直接放大延迟。排查顺序建议是——先比较两侧 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 时会与回放争抢磁盘和内存,延迟明显上升;把这类维护安排在低峰,并监控重写与快照是否在进行中。