首页/数据/数据库速查/全量/部分同步与 repl-backlog 机制
Redis 运维与场景124 条

全量/部分同步与 repl-backlog 机制

首次复制或 offset 已滑出积压缓冲时走全量同步(生成 RDB 传输);否则走部分同步(PSYNC 续传 backlog 中的增量)。

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

全量与部分同步是什么

从库首次挂载或偏移量已经滑出主库积压缓冲时,只能走全量同步:主库生成快照传给从库。反之如果从库断线时间短、缓冲里还留有缺失的增量,就走部分同步,主库只补发差额。全量同步成本高得多,因此积压缓冲的大小直接决定了网络抖动的影响面。

基本信息

积压缓冲主库上的环形缓冲区,默认 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 余量

指标逐项读法

指标含义判读
积压缓冲大小当前配置的环形缓冲容量偏小会导致重连退化为全量同步
积压缓冲起点缓冲覆盖的偏移范围从库偏移低于起点就只能全量
同步进行中从库是否正在接收全量快照为真时该从库不可用于读流量
链路状态从库与主库的连接是否正常异常时可结合日志判断原因
积压缓冲是按写入量评估的,不是按实例数量;写多读少的实例尤其容易在网络抖动后退化为全量同步。
主库不开启持久化:重启后偏移归零,所有从库必须全量重同步,恢复时间长且期间读能力下降。

易错点

  • 网络抖动后从库总是全量重同步:积压缓冲太小是首要嫌疑
  • 主库重启未开持久化:偏移归零,从库集体全量,恢复窗口很长
  • 全量同步期间仍把从库挂在读流量上:业务读到不完整数据
  • 动态调整缓冲大小不写配置文件:重启后回到默认值,问题复现

数据来源与参考

  • Redis 官方文档: PSYNC
  • Redis 官方文档: repl-backlog-size

相关工具

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