Я использую 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/