使用 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 卷並且問題仍然存在,算法升級了實例但沒有運氣。
有任何想法嗎?
我每 2 小時在 crontab 中執行 rsync 程序,而且大多數時候我有一個很長的未完成的 rsync 程序列表,這迫使我重新啟動伺服器。
從只執行一個 rsync-backup 實例開始,例如通過在 shell 腳本中
使用命令。
flock
run-one
如果您的發行版提供它,您也可以使用它。[ Michael - sqlbot建議]它似乎是由 Linux/Ubuntu 提供的。
要考慮的另一件事是禁用壓縮。我們試圖在 AWS 的 2 個 ec2 節點之間傳輸一個數據庫(MySQL/MariaDB),並且看到這種傳輸執行在 15-20MB/s 左右。
**注意:**我們期望看到我們使用的 m4.2xlarge 實例會高出一個數量級,它們位於 2 個不同的 AZ 中,但考慮到所有這些較小的傳輸,例如這些,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/