Назад | Перейти на главную страницу

Резервное копирование с помощью rsync мучительно медленное

Я использую rsync для резервного копирования с сервера NFS, размещенного в AWS, на другой экземпляр EC2 в той же зоне доступности, команда rsync, которую я использую на сервере резервного копирования, следующая:

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

Моя резервная копия состоит из нескольких тысяч или может быть более миллиона небольших файлов (.pdf, около 200/500 КБ).

Проблема, с которой я столкнулся, заключается в том, что добавочный список файлов отправляется очень быстро (пока все хорошо), но когда rsync начинает копировать файлы очень медленно, он копирует примерно 20 файлов, затем останавливается на 3 или 4 минуты, затем он копирует еще несколько файлов и так далее.

Я запускаю процесс rsync в crontab каждые 2 часа, и в большинстве случаев у меня есть очень длинный список незавершенных процессов rsync, что заставляет меня перезагружать сервер.

Это мой айоваит:

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, и проблема не устранена, алгоритм обновил intance, но безуспешно.

Любые идеи?

Я запускаю процесс rsync в crontab каждые 2 часа, и в большинстве случаев у меня есть очень длинный список незавершенных процессов rsync, что заставляет меня перезагружать сервер.

Начните с запуска только одного экземпляра rsync-backup.
например используя flock команда в сценарии оболочки.

В качестве альтернативы вы можете использовать run-one если у вас это есть в раздаче. [предложено Майкл - sqlbot]
Кажется, это предоставляется Linux / Ubuntu.

Еще одна вещь, которую следует учитывать, - это отключить сжатие. Мы пытались передать БД (MySQL / MariaDB) между 2 узлами ec2 в AWS и наблюдали, что эта передача выполняется со скоростью 15-20 МБ / с.

НОТА: Мы ожидали увидеть на порядок больше с инстансами 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/