全量与部分同步是什么
从库首次挂载或偏移量已经滑出主库积压缓冲时,只能走全量同步:主库生成快照传给从库。反之如果从库断线时间短、缓冲里还留有缺失的增量,就走部分同步,主库只补发差额。全量同步成本高得多,因此积压缓冲的大小直接决定了网络抖动的影响面。
基本信息
| 积压缓冲 | 主库上的环形缓冲区,默认 1MB,供断线重连续传 |
|---|---|
| 缓冲保留时长 | 从库全部断开后缓冲保留的时间,默认 3600 秒 |
| 全量触发条件 | 首次挂载、缓冲太小、主库重启丢失偏移 |
| 从库视角 | 可观察是否正在全量同步、目标文件与传输字节数 |
| 调整方式 | 积压缓冲大小可动态修改,写入配置文件才能持久 |
典型使用场景
- 网络抖动后频繁全量:优先怀疑积压缓冲偏小
- 高写入实例容量规划:按「预估断连时长乘以写入速率」估算缓冲大小
- 主库重启后从库重建:未开持久化的实例偏移归零,从库被迫全量
- 新增从库:首次同步必然全量,要安排在低峰并关注磁盘与带宽
- 排障确认:从库状态里确认当前是全量还是部分同步,避免误判
查看与调整
查看与调整
redis-cli -h 主库 INFO replication | grep -E "repl_backlog|master_repl_offset"
redis-cli -h 主库 CONFIG GET repl-backlog-size
redis-cli -h 主库 CONFIG SET repl-backlog-size 64mb # 动态调整
# 看从库是否正在全量同步
redis-cli -h 从库 INFO replication | grep -E "master_sync_in_progress|master_link_status|slave_repl_offset"
# 估算:断连 60 秒、写入 2MB/s,缓冲至少需要 128MB 余量指标逐项读法
| 指标 | 含义 | 判读 |
|---|---|---|
| 积压缓冲大小 | 当前配置的环形缓冲容量 | 偏小会导致重连退化为全量同步 |
| 积压缓冲起点 | 缓冲覆盖的偏移范围 | 从库偏移低于起点就只能全量 |
| 同步进行中 | 从库是否正在接收全量快照 | 为真时该从库不可用于读流量 |
| 链路状态 | 从库与主库的连接是否正常 | 异常时可结合日志判断原因 |
积压缓冲是按写入量评估的,不是按实例数量;写多读少的实例尤其容易在网络抖动后退化为全量同步。
主库不开启持久化:重启后偏移归零,所有从库必须全量重同步,恢复时间长且期间读能力下降。