Backup, parte 2: Panoramica e test di strumenti di backup basati su rsync

Backup, parte 2: Panoramica e test di strumenti di backup basati su rsync
Con questo articolo continuiamo

il ciclo sul backup

  1. Backup, parte 1: Perché è necessario il backup, panoramica dei metodi e delle tecnologie
  2. Backup, parte 2: Panoramica e test di strumenti di backup basati su rsync
  3. Backup, parte 3: Panoramica e test di duplicity, duplicaty, deja dup
  4. Backup, parte 4: Panoramica e test di zbackup, restic, borgbackup
  5. Backup, parte 5: Test di Bacula e Veeam Backup for Linux
  6. Backup, parte 6: Confronto degli strumenti di backup
  7. Backup, parte 7: Conclusioni

Come abbiamo già scritto nel primo articolo, ci sono un numero piuttosto elevato di programmi di backup basati su rsync.

Di quelli che si adattano meglio alle nostre esigenze, esaminerò 3: rdiff-backup, rsnapshot e burp.

Set di file di prova

I set di file per il test saranno identici per tutti i candidati, comprese le future articoli.

Primo set: 10 GB di file multimediali e circa 50 MB di codice sorgente del sito in PHP, con dimensioni dei file che vanno da pochi kilobyte per il codice sorgente a decine di megabyte per i file multimediali. L'obiettivo è simulare un sito statico.

Secondo set: deriva dal primo rinominando la sottocartella con file multimediali di 5 GB. L'obiettivo è studiare il comportamento del sistema di backup alla rinomina della directory.

Terzo set: deriva dal primo rimuovendo 3 GB di file multimediali e aggiungendo 3 GB di nuovi file multimediali. L'obiettivo è studiare il comportamento del sistema di backup durante un'operazione tipica di aggiornamento del sito.

Ottenere risultati

Qualsiasi backup viene eseguito almeno 3 volte e accompagnato dal flush della cache del file system tramite i comandi sync e echo 3 > /proc/sys/vm/drop_caches sia dal lato del server di test che dal server di archiviazione del backup.

Sul server, che sarà fonte dei backup, è installato il software di monitoraggio — netdata, attraverso il quale verrà valutato il carico sul server durante il backup, necessario per valutare il carico del processo di backup.

Credo anche che il server di archiviazione dei backup sia più lento a livello di CPU rispetto al server principale, ma abbia dischi più capienti con una velocità di scrittura casuale relativamente bassa — una situazione comune durante il backup, e poiché il server di backup non dovrebbe eseguire altre attività oltre al backup, non monitorerò il suo carico con netdata.

Ho anche cambiato i server su cui verificherò diversi sistemi di backup.

Attualmente hanno le seguenti caratteristicheProcessore

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

Eseguendo il test con le seguenti opzioni:
Numero di thread: 2
Inizializzando il generatore di numeri casuali dal tempo attuale


Limite dei numeri primi: 20000

Inizializzando i thread di lavoro...

Thread avviati!

Velocità CPU:
    eventi al secondo:  1081.62

Statistiche generali:
    tempo totale:                          30.0013s
    numero totale di eventi:              32453

Latenza (ms):
         min:                                    1.48
         avg:                                    1.85
         max:                                    9.84
         95esimo percentile:                        2.07
         somma:                                59973.40

Equità dei thread:
    eventi (avg/stddev):           16226.5000/57.50
    tempo di esecuzione (avg/stddev):   29.9867/0.00

Memoria RAM, lettura…

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 (utilizzando system LuaJIT 2.0.4)

Eseguendo il test con le seguenti opzioni:
Numero di thread: 4
Inizializzando il generatore di numeri casuali dal tempo attuale


Eseguendo il test di velocità della memoria con le seguenti opzioni:
  dimensione blocco: 1KiB
  dimensione totale: 102400MiB
  operazione: lettura
  campo: globale

Inizializzando i thread di lavoro...

Thread avviati!

Operazioni totali: 104857600 (5837637.63 al secondo)

102400.00 MiB trasferiti (5700.82 MiB/sec)


Statistiche generali:
    tempo totale:                          17.9540s
    numero totale di eventi:              104857600

Latenza (ms):
         min:                                    0.00
         avg:                                    0.00
         max:                                   66.08
         95esimo percentile:                        0.00
         somma:                                18544.64

Equità dei thread:
    eventi (avg/stddev):           26214400.0000/0.00
    tempo di esecuzione (avg/stddev):   4.6362/0.12

… e scrittura

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 (utilizzando LuaJIT 2.0.4 del sistema)

Esecuzione del test con le seguenti opzioni:
Numero di thread: 4
Inizializzando il generatore di numeri casuali dall'orario attuale


Esecuzione del test di velocità della memoria con le seguenti opzioni:
  dimensione del blocco: 1KiB
  dimensione totale: 102400MiB
  operazione: scrittura
  ambito: globale

Inizializzazione dei thread di lavoro...

Thread avviati!

Operazioni totali: 91414596 (3046752.56 al secondo)

89272.07 MiB trasferiti (2975.34 MiB/sec)


Statistiche generali:
    tempo totale:                          30.0019s
    numero totale di eventi:              91414596

Latenza (ms):
         min:                                    0.00
         avg:                                    0.00
         max:                                 1022.90
         percentile 95:                        0.00
         somma:                                66430.91

Equità dei thread:
    eventi (avg/stddev):           22853649.0000/945488.53
    tempo di esecuzione (avg/stddev):   16.6077/1.76

Disco sul server di origine dati

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

Esecuzione del test con le seguenti opzioni:
Numero di thread: 4
Inizializzando il generatore di numeri casuali dall'orario attuale


Flag di apertura file extra: (nessuno)
128 file, 8MiB ciascuno
1GiB dimensione totale del file
Dimensione del blocco 4KiB
Numero di richieste di I/O: 0
Rapporto di lettura/scrittura per il test di I/O casuale combinato: 1.50
FSYNC periodico abilitato, chiamando fsync() ogni 100 richieste.
Chiamando fsync() alla fine del test, abilitato.
Utilizzando la modalità I/O sincrona
Esecuzione del test di r/w casuale
Inizializzazione dei thread di lavoro...

Thread avviati!


Operazioni su file:
    letture/s:                      4587.95
    scritture/s:                     3058.66
    fsyncs/s:                     9795.73

Throughput:
    lettura, MiB/s:                  17.92
    scritti, MiB/s:               11.95

Statistiche generali:
    tempo totale:                          60.0241s
    numero totale di eventi:              1046492

Latenza (ms):
         min:                                    0.00
         avg:                                    0.23
         max:                                   14.45
         percentile 95:                        0.94
         somma:                               238629.34

Equità dei thread:
    eventi (avg/stddev):           261623.0000/1849.14
    tempo di esecuzione (avg/stddev):   59.6573/0.00

Disco sul server di archiviazione dei backup

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

Esecuzione del test con le seguenti opzioni:
Numero di thread: 4
Inizializzazione del generatore di numeri casuali dall'ora attuale


Flag di apertura file extra: (nessuno)
128 file, 8MiB ciascuno
1GiB dimensione totale del file
Dimensione del blocco 4KiB
Numero di richieste IO: 0
Rapporto Read/Write per il test IO casuale combinato: 1.50
FSYNC periodico abilitato, chiamando fsync() ogni 100 richieste.
Chiamata a fsync() alla fine del test, abilitata.
Utilizzando la modalità I/O sincrona
Eseguendo il test casuale r/w
Inizializzazione dei thread di lavoro...

Thread avviati!


Operazioni sui file:
    letture/s:                      11.37
    scritture/s:                     7.58
    fsyncs/s:                     29.99

Prestazioni:
    lettura, MiB/s:                  0.04
    scritto, MiB/s:               0.03

Statistiche generali:
    tempo totale:                          73.8868s
    numero totale di eventi:              3104

Latenza (ms):
         minima:                                    0.00
         media:                                   78.57
         massima:                                 3840.90
         percentile 95:                      297.92
         somma:                               243886.02

Equità dei thread:
    eventi (media/deviazione standard):           776.0000/133.26
    tempo di esecuzione (media/deviazione standard):   60.9715/1.59

Velocità della rete tra i server

iperf3 -c backup
Connessione all'host backup, porta 5201
[  4] locale x.x.x.x porta 59402 connesso a y.y.y.y porta 5201
[ ID] Intervallo           Trasferimento     Larghezza di banda       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] Intervallo           Trasferimento     Larghezza di banda       Retr
[  4]   0.00-10.00  sec  3.78 GBytes  3.25 Gbits/sec  8100             mittente
[  4]   0.00-10.00  sec  3.78 GBytes  3.25 Gbits/sec                  ricevente

Metodo di test

  1. Sul server di test viene preparato il file system con il primo set di test, sul server di backup il repository viene inizializzato se necessario.
    Si avvia il processo di backup e si misura il suo tempo.
  2. Sul server di test viene eseguita la migrazione dei file al secondo set di test. Si avvia il processo di backup e si misura il suo tempo.
  3. Sul server di test viene eseguita la migrazione al terzo set di test. Si avvia il processo di backup e si misura il suo tempo.
  4. Il terzo set di test ottenuto viene considerato come nuovo primo; i punti 1-3 vengono ripetuti altre 2 volte.
  5. I dati vengono inseriti nella tabella di sintesi, vengono aggiunti grafici con netdata.
  6. Si elabora un rapporto sul singolo metodo di backup.

Risultati attesi

Poiché tutti e 3 i candidati si basano sulla stessa tecnologia (rsync), ci si aspetta che i risultati siano vicini a quelli del normale rsync, comprese tutte le sue vantaggi, ovvero:

  1. I file nel repository verranno memorizzati 'così come sono'.
  2. La dimensione del repository crescerà solo includendo la differenza tra i backup.
  3. Ci sarà un carico relativamente elevato sulla rete durante il trasferimento dei dati, e un carico ridotto sulla CPU.

Il test di un normale rsync sarà utilizzato come punto di riferimento, i suoi risultati

sono i seguentiBackup, parte 2: Panoramica e test di strumenti di backup basati su rsync

Il collo di bottiglia si trovava sul server di archiviazione dei backup sotto forma di disco basato su HDD, che è chiaramente visibile nei grafici a forma di sega.

I dati sono stati copiati in 4 minuti e 15 secondi.

Testing di rdiff-backup

Il primo candidato è rdiff-backup, uno script in python che esegue il backup di una cartella in un'altra. In questo modo, il backup corrente è conservato 'così com'è', mentre i backup effettuati in precedenza vengono memorizzati in una sottocartella speciale in modo incrementale, risparmiando spazio.

Controlliamo la modalità operativa tipica, cioè l'avvio del processo di backup è iniziato autonomamente dal cliente, mentre sul server viene avviato un processo che riceve i dati.

Vediamo di cosa è capace nelle nostre condizioni.

Backup, parte 2: Panoramica e test di strumenti di backup basati su rsync

Tempo di esecuzione di ciascun avvio di test:

Primo avvio
Secondo avvio
Terzo avvio

Primo set
16m32s
16m26s
16m19s

Secondo set
2h5m
2h10m
2h8m

Terzo set
2h9m
2h10m
2h10m

Rdiff-backup reagisce in modo molto sensibile a qualsiasi grande cambiamento nei dati, e non ottimizza completamente la rete.

Testing di rsnapshot

Il secondo candidato è rsnapshot, uno script in perl il cui principale requisito per un funzionamento efficace è il supporto per i link rigidi. In questo modo si risparmia spazio su disco. I file che non sono cambiati dalla precedente copia di sicurezza rimanderanno al file originale tramite link rigidi.

Inoltre, è stata invertita la logica del processo di backup: il server 'va attivamente' dai suoi clienti e raccoglie i dati.

Risultati dei test

sono stati i seguentiBackup, parte 2: Panoramica e test di strumenti di backup basati su rsync

Primo avvio
Secondo avvio
Terzo avvio

Primo set
4m22s
4m19s
4m16s

Secondo set
2m6s
2m10s
2m6s

Terzo set
1m18s
1m10s
1m10s

Ha funzionato molto velocemente, molto più veloce di rdiff-backup e molto vicino a rsync puro.

Testing di burp

Un'altra opzione è l'implementazione in C sopra librsync – burp, che ha un'architettura client-server inclusa l'autenticazione dei clienti, oltre a un'interfaccia web (non inclusa nella fornitura di base). Un'altra caratteristica interessante è il backup senza diritto di ripristino per i clienti.

Diamo un'occhiata aprestazioni.

Backup, parte 2: Panoramica e test di strumenti di backup basati su rsync

Primo avvio
Secondo avvio
Terzo avvio

Primo set
11m21s
11m10s
10m56s

Secondo set
5m37s
5m40s
5m35s

Terzo set
3m33s
3m24s
3m40s

Ha lavorato 2 volte più lentamente di rsnapshot, tuttavia è comunque abbastanza veloce, sicuramente più veloce di rdiff-backup. I grafici presentano una leggera ondulazione – le prestazioni si scontrano ancora con il sottosistema di archiviazione dei backup, anche se questo non è così pronunciato come con rsnapshot.

Risultati

La dimensione dei repository per tutti i candidati era abbastanza simile, cioè inizialmente crescevano fino a 10 GB, poi fino a 15 GB, poi fino a 18 GB e così via, il che è legato alla particolare modalità operativa di rsync. È anche importante notare che tutti i candidati utilizzano un solo thread (carico CPU di circa il 50% su una macchina dual-core). Tutti e tre i candidati offrivano la possibilità di ripristinare l'ultimo backup "così com'è", il che significa che era possibile ripristinare file senza utilizzare alcun programma di terze parti, inclusi quelli utilizzati per creare i repository. Questo è anche un'eredità di rsync.

Conclusioni

Più complesso è il sistema di backup e più opzioni ha, più lentamente funzionerà, ma per progetti non particolarmente esigenti basterà uno qualsiasi di essi, forse eccetto rdiff-backup.

Annuncio

Questa nota prosegue il ciclo sui backup

Backup, parte 1: Perché è necessario il backup, panoramica dei metodi e delle tecnologie
Backup, parte 2: Panoramica e test di strumenti di backup basati su rsync
Backup, parte 3: Panoramica e test di duplicity, duplicaty, deja dup
Backup, parte 4: Panoramica e test di zbackup, restic, borgbackup
Backup, parte 5: Test di Bacula e Veeam Backup for Linux
Backup, parte 6: Confronto degli strumenti di backup
Backup, parte 7: Conclusioni

Autore della pubblicazione: Pavel Demkovich

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS - ProHoster