首页/数据/Redis 进阶速查/无盘复制:repl-diskless-sync
主从与哨兵51 条

无盘复制:repl-diskless-sync

无盘复制让主库直接把 RDB 通过网络写给从库,不落地中间文件,适合磁盘紧张或快照慢的场景;repl-diskless-sync-delay 控制等待更多从库加入的窗口。

Redis 进阶速查数据更新于 2026-10-13

无盘复制是什么

主从首次全量同步时,主库默认先把 RDB 写到本地磁盘再发送给从库。repl-diskless-sync 设为 yes 后,主库直接通过 socket 把 RDB 流式写给从库,不落中间文件,适合磁盘紧张或落盘很慢的实例。配套的 repl-diskless-sync-delay 控制首次同步的等待窗口:主库先等几秒,把随后到达的从库合并进同一次全量传输,避免每个从库都单独触发一次 fork。

基本信息

开关repl-diskless-sync yes / no
等待窗口repl-diskless-sync-delay,默认 5 秒
收益省掉中间文件与磁盘写入,从库扩容更快
代价对网络稳定性更敏感,抖动可能整体重来
接收侧从库可用无盘加载把收到的流直接写内存

典型使用场景

  • 主库磁盘 IO 慢或容量紧张,落盘快照本身就成了瓶颈
  • 云主机本地盘带宽受限,写快照会明显拖慢主库
  • 批量扩容多个从库,用等待窗口把它们的首次同步合并
  • 主库磁盘写放大明显,希望减少一次全量写盘的字节数
  • 演练环境快速搭建主从,缩短从库追赶时间

查看与开启

查看与开启
redis-cli CONFIG GET repl-diskless-sync repl-diskless-sync-delay
redis-cli CONFIG SET repl-diskless-sync yes           # 开启无盘复制
redis-cli CONFIG SET repl-diskless-sync-delay 5       # 等待窗口,批量加入时留出合并时间
redis-cli INFO replication | grep -E 'sync_full|sync_partial_ok'  # 观察全量同步次数
tail -f /var/log/redis/redis.log | grep -i diskless  # 看是否走了无盘路径

参数与取舍

参数默认值作用与建议
repl-diskless-syncno开启后不落中间文件,磁盘紧张时收益最明显
repl-diskless-sync-delay5 秒等待更多从库加入同一轮,从库很少时可适当调小
repl-diskless-loaddisabled从库侧的接收方式,需按版本支持情况确认
sync_full 计数累计值持续增长说明全量同步频繁,要查断连原因
等待窗口内第一个到达的从库必须等够时间才开始同步,从库数量少或扩容是单台时,把窗口调到 0 可以更快开始,代价是失去合并机会。
无盘复制要求传输链路稳定,网络抖动导致传输失败时整轮要重来,可靠性优先的场景里传统落盘模式反而更稳。

易错点

  • 同时加入的从库很多且窗口设置偏大,第一个从库的等待时间被明显拉长,扩容窗口不可控
  • 网络质量差还强行开无盘复制,反复重试把主库网络与 CPU 都占满
  • 从库侧无盘加载配置与该版本支持情况不匹配,同步反复失败却只盯着网络排查
  • 只开了主库开关而没确认从库版本行为,混跑版本时恢复路径与预期不同

数据来源与参考

  • Redis 官方文档:无盘复制配置说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌