Backup cu rsync dureros de lent (Administrarea sistemului, Linux, Amazon Web Services, Backup, Rsync, Io)

nikolaigauss a intrebat.

Folosesc rsync pentru a efectua backup-uri de pe un server NFS găzduit în AWS pe o altă instanță EC2 din același AZ, comanda rsync pe care o folosesc în serverul de backup este următoarea:

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

Copia mea de rezervă constă în câteva mii, sau poate fi mai mult de un milion, de fișiere mici (.pdf-uri în jur de 200/500 KB)

Problema cu care mă confrunt este că lista de fișiere incrementale este trimisă foarte repede (până acum totul este bine), dar când rsync începe să copieze fișierele este dureros de lent, copiază cam sau 20 de fișiere, apoi se oprește timp de 3 sau 4 minute, apoi mai copiază câteva fișiere, și așa mai departe.

Rulez procesul rsync într-un crontab la fiecare 2 ore și de cele mai multe ori am o listă foarte lungă de procese rsync neterminate care mă obligă să repornesc serverul.

Acesta este iowaitul meu:

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

De obicei, iowait este la 90%.

Am înlocuit volumul EBS și problema persistă, algo am actualizat intanța, dar nu am avut noroc.

Aveți vreo idee?

Comentarii

  • Ce tip de volum și cât de mare folosiți pentru EBS? –  > Por B. Miller.
  • Veți avea nevoie de un boa mai mare^Walocare IOPS pentru EBS. –  > Por womble.
  • iostat -x 1 va oferi cifre mai semnificative, inclusiv procentul aproximativ de utilizare a fiecărui dispozitiv. –  > Por Michael – sqlbot.
  • Care sistem de fișiere este NFS, local sau la distanță? Cu rsync se recomandă să nu citiți/scrieți sisteme de fișiere NFS, ci să rulați rsync de preferință pe memoria locală a serverului NFS, deoarece rsync este conceput pentru a optimiza banda de rețea, sacrificând IO de pe disc; cu toate acestea, NFS IO este și IO de rețea, deci este foarte suboptimal. –  > Por wurtel.
  • dacă folosiți amazon efs, verificați volumul burst –  > Por c4f4t0r.
2 răspunsuri
AnFi

Rulez procesul rsync într-un crontab la fiecare 2 ore și de cele mai multe ori am o listă foarte lungă de procese rsync neterminate care mă obligă să repornesc serverul.

Începeți prin a face să ruleze o singură instanță de rsync-backup
de exemplu, utilizând flock comanda în scriptul shell.

Alternativ, puteți utiliza run-one dacă distribuția dvs. o furnizează. [sugerat de Michael – sqlbot]
Se pare că este furnizat de Linux/Ubuntu.

Comentarii

  • Sau x x x x x run-one rsync ... în crontab, care oferă același lucru, fără un script wrapper separat. Este posibil ca, dacă rulează mai multe rsync-uri, exact asta să fie cauza principală… toate acestea risipesc în esență iops. –  > Por Michael – sqlbot.
  • Mulțumesc pentru sugestie, voi încerca asta și vă voi anunța. –  > Por nikolaigauss.
  • Asta a făcut trucul! Am reușit să cer PID-ul folosind ‘pidof’ pentru a preveni ca 2 instanțe ale aceleiași execuții rsync să ruleze în paralel. Mulțumesc! –  > Por nikolaigauss.
  • A ajutat la rezolvarea (mai mult decât la reducerea) problemei principale? [rsync foarte lent] – [very slow rsync].  > Por AnFi.
slm

Celălalt lucru de luat în considerare este dezactivarea compresiei. Încercam să transferăm o BD (MySQL/MariaDB) între 2 noduri ec2 în AWS și vedeam că acest transfer se desfășura în jurul a 15-20MB/s.

NOTĂ: Ne așteptam să vedem un ordin de mărime mai mare cu instanțele m4.2xlarge pe care le foloseam, acestea fiind în 2 AZ-uri diferite, dar având în vedere toate acestea, transferurile mai mici, cum ar fi acestea, nu arătau nicio limitare impusă de 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

Am repetat testul cu compresia dezactivată și am văzut că cifrele de transferuri au crescut până la ceea ce ne-am fi așteptat. Așadar, poate doriți să încercați comanda dvs. fără -z:

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