Backup, partea 2: Revizuirea și testarea instrumentelor de backup bazate pe rsync.

Backup, partea 2: Revizuirea și testarea instrumentelor de backup bazate pe rsync.
Această notă continuă

ciclul despre backup-uri

  1. Backup, partea 1: De ce este necesar backup-ul, revizuirea metodelor, tehnologiilor.
  2. Backup, partea 2: Prezentare generală și testare a soluțiilor de backup bazate pe rsync
  3. Backup, partea 3: Prezentare generală și testare duplicity, duplicaty, deja dup
  4. Backup, partea 4: Revizuirea și testarea zbackup, restic, borgbackup
  5. Backup, partea 5: Testarea bacula și veeam backup pentru linux.
  6. Backup, partea 6: Comparația uneltelor de backup
  7. Backup, partea 7: Concluzii

Așa cum am menționat în primul articol, există un număr destul de mare de programe de backup bazate pe rsync.

Dintre cele care se potrivesc cel mai bine cerințelor noastre, voi analiza 3: rdiff-backup, rsnapshot și burp.

Seturi de fișiere de testare

Seturile de fișiere pentru testare vor fi identice pentru toți candidații, inclusiv articolele viitoare.

Primul set: 10 GB de fișiere media și aproximativ 50 MB — codul sursă al site-ului pe php, dimensiunile fișierelor variind de la câțiva kilobytes pentru codul sursă, până la zeci de megabytes pentru fișierele media. Scopul este simularea unui site static.

Al doilea set: se obține din primul prin redenumirea subdirectorului cu fișierele media de 5 GB. Scopul este studierea comportamentului sistemului de backup la redenumirea directorului.

Al treilea set: se obține din primul prin ștergerea a 3 GB de fișiere media și adăugarea a 3 GB noi de fișiere media. Scopul este studierea comportamentului sistemului de backup la o operațiune tipică de actualizare a site-ului.

Obținerea rezultatelor

Orice backup este efectuat de minimum 3 ori și este însoțit de golirea cache-urilor sistemului de fișiere cu comenzile sync și echo 3 > /proc/sys/vm/drop_caches atât pe serverul de testare, cât și pe serverul de stocare a backup-urilor.

Pe serverul care va fi sursa backup-urilor, este instalat un software de monitorizare — netdata, cu ajutorul căruia va fi evaluată încărcarea serverului în timpul copiei, ceea ce este necesar pentru evaluarea sarcinii serverului în procesul de backup.

De asemenea, consider că serverul de stocare a backup-urilor este mai lent din punct de vedere al procesorului decât serverul principal, dar are discuri mai mari cu o viteză relativ mică de scriere aleatoare — cea mai frecventă situație în timpul backup-ului, și din cauza faptului că serverul de backup nu ar trebui să îndeplinească alte sarcini în afară de realizarea backup-ului, nu voi urmări încărcarea sa cu netdata.

De asemenea, s-au schimbat serverele pe care voi verifica diferitele sisteme pentru backup.

Acum au următoarele specificațiiProcesor

sysbench --threads=2 --time=30 --cpu-max-prime=20000 cpu run
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Se rulează testul cu următoarele opțiuni:
Numărul de fire: 2
Inițializarea generatorului de numere aleatorii din timpul curent


Limită numere prime: 20000

Inițializarea firelor de muncă...

Firele au fost pornite!

Viteza CPU:
    evenimente pe secundă:  1081.62

Statistici generale:
    timpul total:                          30.0013s
    numărul total de evenimente:              32453

Latența (ms):
         min:                                    1.48
         medie:                                  1.85
         max:                                   9.84
         percentilă 95:                          2.07
         sumă:                                59973.40

Echitatea firelor:
    evenimente (medie/abateri standard):       16226.5000/57.50
    timp de execuție (medie/abateri standard): 29.9867/0.00

Memorie RAM, citire…

sysbench --threads=4 --time=30 --memory-block-size=1K --memory-scope=global --memory-total-size=100G --memory-oper=read memory run
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Se rulează testul cu următoarele opțiuni:
Numărul de fire: 4
Inițializarea generatorului de numere aleatorii din timpul curent


Se rulează testul de viteză a memoriei cu următoarele opțiuni:
  dimensiune bloc: 1KiB
  dimensiune totală: 102400MiB
  operație: citire
  domeniu: global

Inițializarea firelor de muncă...

Firele au fost pornite!

Total operații: 104857600 (5837637.63 pe secundă)

102400.00 MiB transferate (5700.82 MiB/sec)


Statistici generale:
    timpul total:                          17.9540s
    numărul total de evenimente:              104857600

Latența (ms):
         min:                                    0.00
         medie:                                  0.00
         max:                                   66.08
         percentilă 95:                          0.00
         sumă:                                18544.64

Echitatea firelor:
    evenimente (medie/abateri standard):       26214400.0000/0.00
    timp de execuție (medie/abateri standard): 4.6362/0.12

… și scriere

sysbench --threads=4 --time=30 --memory-block-size=1K --memory-scope=global --memory-total-size=100G --memory-oper=write memory run
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Se rulează testul cu următoarele opțiuni:
Numărul de fire: 4
Inițializarea generatorului de numere aleatorii din timpul curent


Se rulează testul de viteză a memoriei cu următoarele opțiuni:
  dimensiune bloc: 1KiB
  dimensiune totală: 102400MiB
  operație: scriere
  domeniu: global

Inițializarea firelor de muncă...

Firele au fost pornite!

Total operații: 91414596 (3046752.56 pe secundă)

89272.07 MiB transferate (2975.34 MiB/sec)


Statistici generale:
    timpul total:                          30.0019s
    numărul total de evenimente:              91414596

Latența (ms):
         min:                                    0.00
         medie:                                  0.00
         max:                                 1022.90
         percentilă 95:                          0.00
         sumă:                                66430.91

Echitatea firelor:
    evenimente (medie/abateri standard):       22853649.0000/945488.53
    timp de execuție (medie/abateri standard): 16.6077/1.76

Disk pe serverul sursă de date

sysbench --threads=4 --file-test-mode=rndrw --time=60 --file-block-size=4K --file-total-size=1G fileio run
sysbench 1.0.17 (folosind system LuaJIT 2.0.4)

Se rulează testul cu următoarele opțiuni:
Numărul de threads: 4
Inițializând generatorul de numere aleatoare din timpul curent


Extra file open flags: (none)
128 fișiere, 8MiB fiecare
1GiB dimensiune totală fișier
Dimensiunea blocului 4KiB
Numărul de cereri IO: 0
Raport citire/scriere pentru testul combinat de IO aleator: 1.50
FSYNC periodic activat, apelând fsync() la fiecare 100 de cereri.
Apelând fsync() la sfârșitul testului, activat.
Folosind modul de I/O sincron
Executând testul aleator r/w
Inițializând threads-urile de lucru...

Threads started!


Operațiuni cu fișiere:
    citiri/s:                      4587.95
    scrieri/s:                     3058.66
    fsyncs/s:                     9795.73

Prinput:
    citire, MiB/s:                  17.92
    scris, MiB/s:               11.95

Statistici generale:
    timp total:                          60.0241s
    numărul total de evenimente:              1046492

Latenta (ms):
         min:                                    0.00
         medie:                                    0.23
         max:                                   14.45
         95th percentile:                        0.94
         sumă:                               238629.34

Echitatea thread-urilor:
    evenimente (medie/stddev):           261623.0000/1849.14
    timp de execuție (medie/stddev):   59.6573/0.00

Disc pe serverul de stocare a copiilor de rezervă

sysbench --threads=4 --file-test-mode=rndrw --time=60 --file-block-size=4K --file-total-size=1G fileio run
sysbench 1.0.17 (folosind system LuaJIT 2.0.4)

Se rulează testul cu următoarele opțiuni:
Numărul de threads: 4
Inițializând generatorul de numere aleatoare din timpul curent


Extra file open flags: (none)
128 fișiere, 8MiB fiecare
1GiB dimensiune totală fișier
Dimensiunea blocului 4KiB
Numărul de cereri IO: 0
Raport citire/scriere pentru testul combinat de IO aleator: 1.50
FSYNC periodic activat, apelând fsync() la fiecare 100 de cereri.
Apelând fsync() la sfârșitul testului, activat.
Folosind modul de I/O sincron
Executând testul aleator r/w
Inițializând threads-urile de lucru...

Threads started!


Operațiuni cu fișiere:
    citiri/s:                      11.37
    scrieri/s:                     7.58
    fsyncs/s:                     29.99

Prinput:
    citire, MiB/s:                  0.04
    scris, MiB/s:               0.03

Statistici generale:
    timp total:                          73.8868s
    numărul total de evenimente:              3104

Latenta (ms):
         min:                                    0.00
         medie:                                   78.57
         max:                                 3840.90
         95th percentile:                      297.92
         sumă:                               243886.02

Echitatea thread-urilor:
    evenimente (medie/stddev):           776.0000/133.26
    timp de execuție (medie/stddev):   60.9715/1.59

Viteza rețelei între servere

iperf3 -c backup
Conectându-se la gazda backup, portul 5201
[  4] local x.x.x.x port 59402 conectat la y.y.y.y port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   419 MBytes  3.52 Gbits/sec  810    182 KBytes
[  4]   1.00-2.00   sec   393 MBytes  3.30 Gbits/sec  810    228 KBytes
[  4]   2.00-3.00   sec   378 MBytes  3.17 Gbits/sec  810    197 KBytes
[  4]   3.00-4.00   sec   380 MBytes  3.19 Gbits/sec  855    198 KBytes
[  4]   4.00-5.00   sec   375 MBytes  3.15 Gbits/sec  810    182 KBytes
[  4]   5.00-6.00   sec   379 MBytes  3.17 Gbits/sec  765    228 KBytes
[  4]   6.00-7.00   sec   376 MBytes  3.15 Gbits/sec  810    180 KBytes
[  4]   7.00-8.00   sec   379 MBytes  3.18 Gbits/sec  765    253 KBytes
[  4]   8.00-9.00   sec   380 MBytes  3.19 Gbits/sec  810    239 KBytes
[  4]   9.00-10.00  sec   411 MBytes  3.44 Gbits/sec  855    184 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  3.78 GBytes  3.25 Gbits/sec  8100             sender
[  4]   0.00-10.00  sec  3.78 GBytes  3.25 Gbits/sec                  receiver

Metodologia de testare

  1. Pe serverul de testare, sistemul de fișiere este pregătit cu primul set de teste, iar pe serverul de stocare a copiilor de siguranță, repositoarele sunt inițializate dacă este necesar.
    Se inițiază procesul de copiere de rezervă și se măsoară timpul acestuia.
  2. Pe serverul de testare se migrează fișierele către al doilea set de teste. Se inițiază procesul de copiere de rezervă și se măsoară timpul acestuia.
  3. Pe serverul de testare se migrează către al treilea set de teste. Se inițiază procesul de copiere de rezervă și se măsoară timpul acestuia.
  4. Al treilea set de teste obținut devine noul prim set; punctele 1-3 se repetă de încă 2 ori.
  5. Datele sunt introduse în tabelul rezumativ, se adaugă grafice cu netdata.
  6. Se întocmește un raport pentru metoda individuală de copiere de rezervă.

Rezultatele așteptate

Deoarece toți cei 3 candidați se bazează pe aceeași tehnologie (rsync), se așteaptă ca rezultatele să fie apropiate de rsync obișnuit, incluzând toate avantajele sale, și anume:

  1. Fișierele din repositoar vor fi păstrate "așa cum sunt".
  2. Dimensiunea repositoarului va crește doar inclusiv diferența dintre copii de siguranță.
  3. Va exista o încărcare comparativ mare pe rețea la transferul de date, precum și o mică încărcare pe procesor.

Testul standard al rsync obișnuit va fi aplicat ca etalon, iar rezultatele sale

sunt următoareleBackup, partea 2: Revizuirea și testarea instrumentelor de backup bazate pe rsync.

Punctul critic a fost pe serverul de stocare a copiilor de siguranță, reprezentat printr-un disc bazat pe HDD, ceea ce se poate observa clar pe grafice ca un zigzag.

Datele au fost copiate în 4 minute și 15 secunde.

Testarea rdiff-backup

Primul candidat este rdiff-backup, un script în Python care efectuează rezervarea unui director într-un altul. Astfel, copia de rezervă curentă este stocată „așa cum este”, iar copiile de rezervă realizate anterior sunt păstrate într-un subdirector special în mod incremental, economisind astfel spațiu.

Vom verifica modul de operare standard, adică inițierea procesului de rezervare este efectuată de client, iar pe server este lansat un proces care primește datele pentru rezervare.

Să vedem, la ce este capabil în condițiile noastre.

Backup, partea 2: Revizuirea și testarea instrumentelor de backup bazate pe rsync.

Timpul de execuție pentru fiecare test:

Prima lansare
A doua lansare
A treia lansare

Primul set
16m32s
16m26s
16m19s

Al doilea set
2h5m
2h10m
2h8m

Al treilea set
2h9m
2h10m
2h10m

Rdiff-backup reacționează destul de dur la orice modificare mare a datelor, de asemenea, nu utilizează complet rețeaua.

Testarea rsnapshot

Al doilea candidat este rsnapshot, un script în Perl, a cărui cerință principală pentru funcționare eficientă este suportul pentru link-uri hard. Astfel, se economisește spațiu pe disc. În plus, fișierele care nu s-au modificat de la ultima copie de rezervă vor face referire la fișierul original prin intermediul link-urilor hard.

De asemenea, logica procesului de rezervare este inversată: serverul se deplasează activ printre clienții săi și preia datele.

Rezultatele testării

au rezultat următoareleBackup, partea 2: Revizuirea și testarea instrumentelor de backup bazate pe rsync.

Prima lansare
A doua lansare
A treia lansare

Primul set
4m22s
4m19s
4m16s

Al doilea set
2m6s
2m10s
2m6s

Al treilea set
1m18s
A funcționat destul de rapid, mult mai repede decât rdiff-backup și foarte aproape de rsync curat.
A funcționat destul de rapid, mult mai repede decât rdiff-backup și foarte aproape de rsync curat.

Testarea burp

O altă variantă este implementarea în C deasupra librsync – burp, care are o arhitectură client-server, inclusiv autentificarea clienților, precum și un web interface (nu este inclus în pachetul de bază). O altă caracteristică interesantă este rezervarea fără drept de recuperare pentru clienți.

Să ne uităm la

11m21sperformanța.

Backup, partea 2: Revizuirea și testarea instrumentelor de backup bazate pe rsync.

Prima lansare
A doua lansare
A treia lansare

Primul set
11m10s
10m56s
5m37s

Al doilea set
3m33s
5m40s
5m35s

Al treilea set
3m24s
3m40s
A funcționat de 2 ori mai lent decât rsnapshot, dar totuși destul de repede, și cu siguranță mai repede decât rdiff-backup. Graficele sunt ușor zimțate - performanța din nou este limitată de subsistemul de disc al serverului de rezervare, deși acest lucru nu este atât de evident ca în cazul rsnapshot.

A funcționat de două ori mai lent decât rsnapshot, dar totuși suficient de repede și cu siguranță mai rapid decât rdiff-backup. Graficele sunt ușor ondulate — performanța se bazează din nou pe subsistemul de discuri al serverului de backup, deși acest lucru nu este atât de pronunțat ca la rsnapshot.

Rezultate

Dimensiunea repositoarelor pentru toți candidații a fost aproximativ aceeași, adică, inițial a crescut până la 10 GB, apoi până la 15 GB, apoi până la 18 GB etc., ceea ce este legat de specificul funcționării rsync. De asemenea, merită menționată unicitatea tuturor candidaților (încărcarea pe procesor era de aproximativ 50% pe o mașină cu două nuclee). Toți cei 3 candidați oferă posibilitatea de a restaura ultima copie de rezervă „așa cum este”, adică se puteau restaura fișiere fără a utiliza programe externe, inclusiv cele utilizate pentru crearea repositoarelor. Aceasta este, de asemenea, o „moștenire” a rsync.

Conclusions

Cu cât sistemul de backup este mai complex și cu atât are mai multe funcționalități, cu atât va funcționa mai lent, dar pentru proiecte nu foarte exigente, oricare dintre ele va fi potrivită, cu excepția, poate, a rdiff-backup.

Anunț

Această notă continuă ciclul despre backup-uri

Backup, partea 1: De ce este necesar backup-ul, revizuirea metodelor, tehnologiilor.
Backup, partea 2: Revizuirea și testarea instrumentelor de backup bazate pe rsync.
Backup, partea 3: Prezentare generală și testare duplicity, duplicaty, deja dup
Backup, partea 4: Revizuirea și testarea zbackup, restic, borgbackup
Backup, partea 5: Testarea bacula și veeam backup pentru linux.
Backup, partea 6: Comparația uneltelor de backup
Backup, partea 7: Concluzii

Autorul publicației: Pavel Demkovici

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster