首页/数据/数据库速查/全量重同步风暴与无盘同步(repl-diskless-sync)
Redis 运维与场景124 条

全量重同步风暴与无盘同步(repl-diskless-sync)

多个从库同时全量同步会同时 fork 快照 + 传输:用 repl-diskless-sync 避免落盘、用延迟窗口合并传输、并错开从库上线时间。

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

全量重同步为什么会形成风暴

从库与主库断开后重连时,若无法增量续传就会触发全量重同步:主库 fork 生成快照并把整份数据传给从库。多个从库同时上线意味着多份快照与多路传输叠加,主库的内存峰值、磁盘 IO 与网络带宽会被同时占满。缓解手段集中在三点:避免快照落盘、用延迟窗口合并多路同步请求、把从库上线时间错峰。

基本信息

适用平台Redis 4.0+ 支持无盘同步,7.0 起默认开启
相关参数repl-diskless-sync、repl-diskless-sync-delay、repl-diskless-load
触发条件首次同步或增量续传失败
观察指标INFO replication 的 sync_full 与 sync_partial_err
常见诱因backlog 太小、网络闪断、从库长时间离线

典型使用场景

  • 批量扩容从库:多台新副本需要同时初始化
  • 机房迁移:新环境搭建副本期间与旧集群并行运行
  • 网络抖动后大量从库同时重连
  • 从库长时间离线后重新加入
  • 故障恢复:快速拉起替换节点的副本

配置与观察

配置与观察
CONFIG GET repl-diskless-sync
CONFIG GET repl-diskless-sync-delay
CONFIG GET repl-backlog-size
# 观察全量同步与增量同步的失败次数
INFO replication | grep -E 'sync_full|sync_partial_ok|sync_partial_err'
# 查看从库列表与状态
INFO replication | head -20
# 从库批量上线要错峰,避免同时触发多份快照
# for r in r1 r2 r3; do sync_replica $r; sleep 300; done

参数与影响

参数作用设置建议
repl-diskless-sync直接通过 socket 传快照,不落盘磁盘慢或空间紧张时开启
repl-diskless-sync-delay等待窗口,合并多路同步请求默认几秒,短窗口可接受即可
repl-diskless-load从库侧无盘加载方式需评估从库内存余量
repl-backlog-size增量复制缓冲区大小偏小会导致频繁全量同步
client-output-buffer-limit replica从库输出缓冲上限过小会断开同步,过大有内存风险
全量同步是必要但不便宜的机制:与其优化它的速度,不如减少它发生的次数——合理设置 backlog、保持网络稳定、避免从库长时间离线。
同时挂载多个从库:主库需要为每路同步分别 fork 与传输,内存与带宽被同时打满,可能反过来影响在线请求。

易错点

  • 同时接入多个新从库:主库生成多份快照,内存峰值与带宽同时飙升,形成同步风暴
  • repl-backlog-size 设置过小:网络轻微抖动就退化为全量同步,反复消耗资源
  • 无盘同步配合大内存从库直接加载:加载阶段把内存吃到上限,可能触发淘汰或 OOM
  • 把从库输出缓冲上限设得过大:异常从库占用大量内存,主库反被拖垮

数据来源与参考

  • Redis 官方文档: repl-diskless-sync
  • Redis 官方文档: 复制(无盘同步)

相关工具

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