Linux

使用 rsync 進行備份非常緩慢

  • September 5, 2019

我正在使用 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/

引用自:https://serverfault.com/questions/915555