记录一下那天晚上的排查过程。跨机房同步一个代码目录,文件数很多单个体积很小,跑了几个小时还没结束,带宽却只用了很小一部分。

真正麻烦的地方在于,几个原因的现象几乎一样。每个文件都要单独握手校验,往返时延被放大。还有一种是没有启用压缩,元数据开销占比高。

还有一种情况,校验方式过于严格,读了两端全部内容。

测实际吞吐

rsync -av --stats 源/ 目标/ | tail -20

再往下开启压缩减少传输量

rsync -avz --compress-level=3 源/ 目标/

然后用增量校验跳过未变文件

rsync -av --size-only 源/ 目标/

剩下的就是打包后再传减少文件数

tar czf - 源目录 | ssh 目标 'tar xzf - -C /data'

这台环境是别人交接的,不少默认值被动过,只能一项项核。

改完先别撤,确认这几项。同步耗时明显缩短,带宽利用率提升,文件数量与校验结果一致。

补一句。小文件场景打包传输往往比直接同步快一个数量级;但打包后无法增量,要按变更频率选择方式。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189