复制偏移量与延迟判断
复制偏移量是主从同步的进度坐标:主库每向从库传播一段写命令,就把 master_repl_offset 增加对应的字节数;从库接收并应用后更新自己的 slave_repl_offset。两者之差近似表示「还有多少复制流没有被从库处理」,是判断延迟最常用的指标。需要注意偏移量是字节位置而不是命令条数,一次大 key 写入就可能让数字跳很大一截,所以差值必须结合写入速率一起看,主库视角自带的 lag 秒数字段更适合直接做成告警阈值。
基本信息
| 主库字段 | master_repl_offset,表示复制流当前写入位置 |
|---|---|
| 主库看从库 | INFO replication 中每个从库一行,带 offset 与 lag(秒) |
| 从库字段 | slave_repl_offset 与 master_link_status(up/down) |
| 链路断开 | master_link_down_since_seconds 给出已断开时长 |
| 全量同步中 | master_sync_in_progress 为 1,此时数据尚未可用 |
| 写入位置 | 相关字段在 INFO replication 段落,不在 persistence 段落 |
典型使用场景
- 日常监控:主库侧采集每个从库的 offset 与 lag,作为复制健康的核心指标
- 故障排查:业务读到旧数据时先确认是链路断开还是只是暂时落后
- 扩容评估:新增从库做全量同步时观察主库开销与同步耗时,安排低峰执行
- 切换前检查:计划内切换前确认目标从库已经追平,避免提升后缺数据
- 压测验证:写入陡增时观察差值回升速度,判断从库能否跟上
查看与对比
查看与对比
redis-cli -h 10.0.0.11 -p 6379 INFO replication | grep -E 'role:master|master_repl_offset'
redis-cli -h 10.0.0.11 -p 6379 INFO replication | grep 'slave0:' # 从库地址、状态、offset 与 lag
redis-cli -h 10.0.0.12 -p 6379 INFO replication | grep -E 'role:slave|slave_repl_offset|master_link_status|master_last_io_seconds_ago'
redis-cli -h 10.0.0.12 -p 6379 INFO replication | grep master_sync_in_progress # 1 表示正在全量同步复制状态解读
| 现象 | 含义 | 建议动作 |
|---|---|---|
| 主库 offset 稳定上涨,从库紧随其后 | 同步正常,差值在正常波动范围 | 保持监控,记录基线与告警阈值 |
| 差值短暂拉大后回落 | 写入尖峰导致的临时落后 | 确认能自动追平即可,无需干预 |
| 差值持续扩大且链路为 up | 从库处理能力不足,网络带宽或磁盘受限 | 查从库负载、网络与从库上的慢命令 |
| master_link_status 为 down | 链路断开,从库数据停止更新 | 先查网络与进程,长期断开需重建复制 |
| master_sync_in_progress 为 1 | 正在做全量同步 | 等待完成,期间不要挂读流量 |
| 主库侧 lag 持续高于阈值 | 从库应用落后 | 结合差值判断是网络延迟还是从库自身慢 |
偏移量只反映「复制流处理到哪」,不等于业务数据一定一致:复制是异步的,从库上刚写完就读可能读到旧值。确实需要确认数据已落到多少个从库时,用 WAIT 副本数 超时毫秒 让主库阻塞等待确认,再决定后续逻辑。
链路断开后从库的 offset 不再变化,只看「主从差值」会误判为没有延迟。必须为 master_link_status 与「offset 多久没有推进」单独设置告警,否则从库可以静默停在几小时前的数据上。