使用 rsync 备份速度非常慢

使用 rsync 备份速度非常慢

我正在使用 rsync 从托管在 AWS 中的 NFS 服务器备份到同一 AZ 中的另一个 EC2 实例,我在备份服务器中使用的 rsync 命令如下:

 rsync -avzb --backup-dir=someDirectory 172.19.0.151:/origin/* /opt/destination/

我的备份包含几千个,甚至可能超过一百万个小文件(.pdf 大约 200/500 KB)

我遇到的问题是增量文件列表发送得非常快(到目前为止一切顺利)但是当 rsync 开始复制文件时速度非常慢,它复制大约 20 个文件,然后停止 3 或 4 分钟,然后再复制一些文件,依此类推。

我每 2 小时在 crontab 中运行一次 rsync 进程,大多数时候我都有一长串未完成的 rsync 进程,这迫使我重新启动服务器。

这是我的 iowait:

iostat 
Linux 4.4.0-1060-aws (prd-turecibo-backup)  06/06/2018  _x86_64_    (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.29    0.00    0.74   84.56    0.00   14.41

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
nvme1n1           0.22         6.00         0.00      20984          0
nvme2n1         240.45       959.12        17.95    3354430      62788
nvme0n1           3.43        65.19         2.03     227995       7112

通常 iowait 为 90%。

我已经更换了 EBS 卷,但问题仍然存在,算法升级了实例,但没有运气。

有任何想法吗?

答案1

我每 2 小时在 crontab 中运行一次 rsync 进程,大多数时候我都有一长串未完成的 rsync 进程,这迫使我重新启动服务器。

首先运行一个 rsync-backup 实例,
例如使用flockshell 脚本中的命令。

您也可以使用run-one如果你的发行版提供了它。[建议 Michael - sqlbot]
它似乎是由Linux/Ubuntu提供的。

答案2

另一件需要考虑的事情是禁用压缩。我们尝试在 AWS 中的 2 个 ec2 节点之间传输数据库 (MySQL/MariaDB),并发现此传输速度约为 15-20MB/s。

笔记:我们原本期望使用 m4.2xlarge 实例时看到更高的数量级,它们位于 2 个不同的可用区,但考虑到所有这些较小的传输(例如这些),AWS 并未施加任何限制:

$ truncate -s 500MB 500MB.file
$ ll | grep 500MB
-rw-rw-r--. 1 smingolelli smingolelli 500000000 Sep  5 14:55 500MB.file

$ rsync --progress -h -v 500MB.file 10.16.87.187:~
500MB.file
        500.00M 100%   81.55MB/s    0:00:05 (xfr#1, to-chk=0/1)

sent 500.12M bytes  received 35 bytes  66.68M bytes/sec
total size is 500.00M  speedup is 1.00

我们在关闭压缩的情况下重复了测试,并看到传输数字攀升至我们预期的水平。因此,您可能想尝试不带以下内容的命令-z

$ rsync -avb --backup-dir=someDirectory 172.19.0.151:/origin/* /opt/destination/

相关内容