Sicherung, Teil 2: Überblick und Test von rsync-basierten Sicherungswerkzeugen

Sicherung, Teil 2: Überblick und Test von rsync-basierten Sicherungswerkzeugen
Mit diesem Artikel wird

der Zyklus über Datensicherung fortgesetzt

  1. Sicherung, Teil 1: Warum Backups nötig sind, Überblick über Methoden und Technologien
  2. Datensicherung, Teil 2: Überblick und Tests von rsync-basierten Datensicherungstools
  3. Datensicherung, Teil 3: Überblick und Tests von duplicity, duplicaty, deja dup
  4. Sicherung, Teil 4: Überblick und Test von zbackup, restic, borgbackup
  5. Backup, Teil 5: Tests von Bacula und Veeam Backup für Linux
  6. Backup, Teil 6: Vergleich von Backup-Tools
  7. Backup, Teil 7: Zusammenfassungen

Wie bereits im ersten Artikel erwähnt, gibt es eine sehr große Anzahl von Datensicherungsprogrammen, die auf rsync basieren.

Von denjenigen, die am besten zu unseren Anforderungen passen, werde ich 3 betrachten: rdiff-backup, rsnapshot und burp.

Testdateisätze

Die Testdateisätze werden für alle Kandidaten gleich sein, einschließlich zukünftiger Artikel.

Erster Satz: 10 GB Mediendateien und etwa 50 MB — Quellcode der Website in PHP, die Dateigrößen reichen von mehreren Kilobyte für den Quellcode bis zu mehreren Dutzend Megabyte für Mediendateien. Ziel — Simulation einer statischen Website.

Zweiter Satz: entsteht aus dem ersten durch Umbenennung des Unterverzeichnisses mit Mediendateien von 5 GB. Ziel — Untersuchung des Verhaltens des Datensicherungssystems bei der Umbenennung eines Verzeichnisses.

Dritter Satz: entsteht aus dem ersten, indem 3 GB Mediendateien entfernt und 3 GB neue Mediendateien hinzugefügt werden. Ziel — Untersuchung des Verhaltens des Datensicherungssystems bei typischen Aktualisierungen der Website.

Ergebnisse erhalten

Jede Datensicherung wird mindestens 3 Mal durchgeführt und begleitet von Cache-Löschbefehlen für das Dateisystem sync und echo 3 > /proc/sys/vm/drop_caches sowohl auf der Seite des Testservers als auch des Backup-Servers.

Auf dem Server, der die Sicherungen erstellt, ist eine Überwachungssoftware — netdata — installiert, mit der die Serverauslastung während des Kopierens bewertet wird. Dies ist notwendig, um die Serverlast während des Datensicherungsvorgangs zu beurteilen.

Ich gehe auch davon aus, dass der Backup-Server eine schwächere CPU als der Hauptserver hat, aber über größere Festplatten mit relativ niedrigerer zufälliger Schreibgeschwindigkeit verfügt — dies ist die häufigste Situation bei der Datensicherung. Da der Backup-Server idealerweise keine anderen Aufgaben außer der Datensicherung ausführen sollte, werde ich seine Last mit netdata nicht überwachen.

Auch meine Server haben sich geändert, auf denen ich verschiedene Systeme zur Datensicherung überprüfen werde.

Derzeit haben sie folgende EigenschaftenProzessor

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

Durchführung des Tests mit folgenden Optionen:
Anzahl der Threads: 2
Zufallszahlengenerator wird von der aktuellen Zeit initialisiert


Grenze für Primzahlen: 20000

Initialisierung der Arbeiter-Threads...

Threads gestartet!

CPU-Geschwindigkeit:
    Ereignisse pro Sekunde:  1081.62

Allgemeine Statistiken:
    Gesamtzeit:                          30.0013s
    Gesamtanzahl der Ereignisse:              32453

Latenz (ms):
         min:                                    1.48
         avg:                                    1.85
         max:                                    9.84
         95. Perzentile:                        2.07
         Summe:                                59973.40

Fairness der Threads:
    Ereignisse (avg/stddev):           16226.5000/57.50
    Ausführungszeit (avg/stddev):   29.9867/0.00

Arbeitsspeicher, Lesen…

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

Durchführung des Tests mit folgenden Optionen:
Anzahl der Threads: 4
Zufallszahlengenerator wird von der aktuellen Zeit initialisiert


Durchführung des Speichertests mit folgenden Optionen:
  Blockgröße: 1KiB
  Gesamtgröße: 102400MiB
  Operation: lesen
  Umfang: global

Initialisierung der Arbeiter-Threads...

Threads gestartet!

Gesamtoperationen: 104857600 (5837637.63 pro Sekunde)

102400.00 MiB übertragen (5700.82 MiB/sec)


Allgemeine Statistiken:
    Gesamtzeit:                          17.9540s
    Gesamtanzahl der Ereignisse:              104857600

Latenz (ms):
         min:                                    0.00
         avg:                                    0.00
         max:                                   66.08
         95. Perzentile:                        0.00
         Summe:                                18544.64

Fairness der Threads:
    Ereignisse (avg/stddev):           26214400.0000/0.00
    Ausführungszeit (avg/stddev):   4.6362/0.12

… und Schreiben

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

Durchführung des Tests mit folgenden Optionen:
Anzahl der Threads: 4
Zufallszahlengenerator wird von der aktuellen Zeit initialisiert


Durchführung des Speichertests mit folgenden Optionen:
  Blockgröße: 1KiB
  Gesamtgröße: 102400MiB
  Operation: schreiben
  Umfang: global

Initialisierung der Arbeiter-Threads...

Threads gestartet!

Gesamtoperationen: 91414596 (3046752.56 pro Sekunde)

89272.07 MiB übertragen (2975.34 MiB/sec)


Allgemeine Statistiken:
    Gesamtzeit:                          30.0019s
    Gesamtanzahl der Ereignisse:              91414596

Latenz (ms):
         min:                                    0.00
         avg:                                    0.00
         max:                                 1022.90
         95. Perzentile:                        0.00
         Summe:                                66430.91

Fairness der Threads:
    Ereignisse (avg/stddev):           22853649.0000/945488.53
    Ausführungszeit (avg/stddev):   16.6077/1.76

Festplatte auf dem Quellserver

sysbench --threads=4 --file-test-mode=rndrw --time=60 --file-block-size=4K --file-total-size=1G fileio ausführen
sysbench 1.0.17 (unter Verwendung von system LuaJIT 2.0.4)

Test wird mit folgenden Optionen ausgeführt:
Anzahl der Threads: 4
Zufallszahlen-Generator wird von der aktuellen Zeit initialisiert


Zusätzliche Datei-Öffnungsflags: (keine)
128 Dateien, jeweils 8MiB
1GiB Gesamtdateigröße
Blockgröße 4KiB
Anzahl der IO-Anforderungen: 0
Read/Write-Verhältnis für kombinierte zufällige IO-Test: 1.50
Periodisches FSYNC aktiviert, fsync() wird alle 100 Anforderungen aufgerufen.
fsync() am Ende des Tests aufrufen, aktiviert.
Verwendung des synchronen I/O-Modus
Zufälligen r/w-Test durchführen
Arbeiter-Threads werden initialisiert...

Threads gestartet!


Dateioperationen:
    reads/s:                      4587.95
    writes/s:                     3058.66
    fsyncs/s:                     9795.73

Durchsatz:
    read, MiB/s:                  17.92
    geschrieben, MiB/s:           11.95

Allgemeine Statistiken:
    Gesamtzeit:                          60.0241s
    Gesamtanzahl der Ereignisse:        1046492

Latenz (ms):
         min:                                    0.00
         avg:                                    0.23
         max:                                   14.45
         95. Perzentil:                           0.94
         sum:                               238629.34

Fairness der Threads:
    Ereignisse (avg/stddev):        261623.0000/1849.14
    Ausführungszeit (avg/stddev):   59.6573/0.00

Festplatte auf dem Backup-Speicherserver

sysbench --threads=4 --file-test-mode=rndrw --time=60 --file-block-size=4K --file-total-size=1G fileio ausführen
sysbench 1.0.17 (unter Verwendung von system LuaJIT 2.0.4)

Test wird mit folgenden Optionen ausgeführt:
Anzahl der Threads: 4
Zufallszahlen-Generator wird von der aktuellen Zeit initialisiert


Zusätzliche Datei-Öffnungsflags: (keine)
128 Dateien, jeweils 8MiB
1GiB Gesamtdateigröße
Blockgröße 4KiB
Anzahl der IO-Anforderungen: 0
Read/Write-Verhältnis für kombinierte zufällige IO-Test: 1.50
Periodisches FSYNC aktiviert, fsync() wird alle 100 Anforderungen aufgerufen.
fsync() am Ende des Tests aufrufen, aktiviert.
Verwendung des synchronen I/O-Modus
Zufälligen r/w-Test durchführen
Arbeiter-Threads werden initialisiert...

Threads gestartet!


Dateioperationen:
    reads/s:                      11.37
    writes/s:                     7.58
    fsyncs/s:                     29.99

Durchsatz:
    read, MiB/s:                  0.04
    geschrieben, MiB/s:           0.03

Allgemeine Statistiken:
    Gesamtzeit:                         73.8868s
    Gesamtanzahl der Ereignisse:        3104

Latenz (ms):
         min:                                    0.00
         avg:                                   78.57
         max:                                 3840.90
         95. Perzentil:                       297.92
         sum:                               243886.02

Fairness der Threads:
    Ereignisse (avg/stddev):        776.0000/133.26
    Ausführungszeit (avg/stddev):   60.9715/1.59

Netzwerkgeschwindigkeit zwischen den Servern

iperf3 -c backup
Verbindung zum Host backup, Port 5201
[  4] Lokale x.x.x.x Port 59402 verbunden mit y.y.y.y Port 5201
[ ID] Intervall           Übertragung     Bandbreite       Retr  Cwnd
[  4]   0.00-1.00   Sek   419 MBytes  3.52 Gbits/sec  810    182 KBytes
[  4]   1.00-2.00   Sek   393 MBytes  3.30 Gbits/sec  810    228 KBytes
[  4]   2.00-3.00   Sek   378 MBytes  3.17 Gbits/sec  810    197 KBytes
[  4]   3.00-4.00   Sek   380 MBytes  3.19 Gbits/sec  855    198 KBytes
[  4]   4.00-5.00   Sek   375 MBytes  3.15 Gbits/sec  810    182 KBytes
[  4]   5.00-6.00   Sek   379 MBytes  3.17 Gbits/sec  765    228 KBytes
[  4]   6.00-7.00   Sek   376 MBytes  3.15 Gbits/sec  810    180 KBytes
[  4]   7.00-8.00   Sek   379 MBytes  3.18 Gbits/sec  765    253 KBytes
[  4]   8.00-9.00   Sek   380 MBytes  3.19 Gbits/sec  810    239 KBytes
[  4]   9.00-10.00  Sek   411 MBytes  3.44 Gbits/sec  855    184 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Intervall           Übertragung     Bandbreite       Retr
[  4]   0.00-10.00  Sek  3.78 GBytes  3.25 Gbits/sec  8100             Sender
[  4]   0.00-10.00  Sek  3.78 GBytes  3.25 Gbits/sec                  Empfänger

Testmethodik

  1. Auf dem Testserver wird das Dateisystem mit dem ersten Testsatz vorbereitet, und auf dem Backup-Server wird bei Bedarf das Repository initialisiert.
    Der Backup-Prozess wird gestartet und dessen Zeit gemessen.
  2. Auf dem Testserver werden die Dateien bis zum zweiten Testsatz migriert. Der Backup-Prozess wird gestartet und dessen Zeit gemessen.
  3. Auf dem Testserver erfolgt die Migration bis zum dritten Testsatz. Der Backup-Prozess wird gestartet und dessen Zeit gemessen.
  4. Der erhaltene dritte Testsatz wird als neuer erster akzeptiert; Punkte 1-3 werden zweimal wiederholt.
  5. Die Daten werden in eine Übersichtstabelle eingetragen, und es werden Grafiken mit netdata hinzugefügt.
  6. Ein Bericht zu einer bestimmten Backup-Methode wird erstellt.

Erwartete Ergebnisse

Da alle 3 Kandidaten auf derselben Technologie (rsync) basieren, wird erwartet, dass die Ergebnisse den gewöhnlichen rsync ähnlich sind, einschließlich all seiner Vorteile, nämlich:

  1. Dateien im Repository werden 'wie sie sind' gespeichert.
  2. Die Größe des Repositories wird nur durch die Unterschiede zwischen den Backups wachsen.
  3. Es wird eine vergleichsweise hohe Netzwerklast bei der Datenübertragung geben, sowie eine geringe Prozessorlast.

Der Testlauf des gewöhnlichen rsync wird als Referenz dienen, dessen Ergebnisse

sind wie folgtSicherung, Teil 2: Überblick und Test von rsync-basierten Sicherungswerkzeugen

Der Engpass befand sich auf dem Backup-Server in Form einer HDD-basierten Festplatte, was auf den Grafiken deutlich als Zickzack zu erkennen ist.

Die Daten wurden in 4 Minuten und 15 Sekunden kopiert.

Test von rdiff-backup

Der erste Kandidat ist rdiff-backup, ein Python-Skript, das ein Backup eines Verzeichnisses in ein anderes erstellt. Dabei wird das aktuelle Backup "so wie es ist" gespeichert, und frühere Backups werden inkrementell in einem speziellen Unterverzeichnis abgelegt, wodurch Platz gespart wird.

Wir werden den typischen Betriebsmodus überprüfen, d.h. der Backup-Prozess wird vom Client selbst initiiert, und auf der Serverseite wird ein Prozess gestartet, der die Daten annimmt.

Lassen Sie uns einen Blick darauf werfen, was es unter unseren Bedingungen leisten kann..

Sicherung, Teil 2: Überblick und Test von rsync-basierten Sicherungswerkzeugen

Die Laufzeit jeder Testausführung:

Erster Start
Zweiter Lauf
Dritter Lauf

Erster Satz
16m32s
16m26s
16m19s

Zweiter Satz
2h5m
2h10m
2h8m

Dritter Satz
2h9m
2h10m
2h10m

Rdiff-backup reagiert sehr empfindlich auf große Datenänderungen und nutzt auch das Netzwerk nicht vollständig aus.

Test von rsnapshot

Der zweite Kandidat ist rsnapshot, ein Perl-Skript, dessen Hauptanforderung für eine effektive Arbeit die Unterstützung von harten Links ist. Dadurch wird Platz auf der Festplatte gespart. Dateien, die sich seit dem letzten Backup nicht geändert haben, verweisen über harte Links auf die Originaldatei.

Außerdem wurde die Logik des Backup-Prozesses umgekehrt: Der Server „geht“ aktiv zu seinen Clients und holt sich die Daten.

Testergebnisse

Es ergaben sich folgendeSicherung, Teil 2: Überblick und Test von rsync-basierten Sicherungswerkzeugen

Erster Start
Zweiter Lauf
Dritter Lauf

Erster Satz
4m22s
4m19s
4m16s

Zweiter Satz
2m6s
2m10s
2m6s

Dritter Satz
1m18s
1m10s
1m10s

Er arbeitete sehr schnell, viel schneller als rdiff-backup und sehr nah am reinen rsync.

Test von burp

Eine weitere Option ist die Implementierung in C über librsync - burp, das eine Client-Server-Architektur mit Client-Authentifizierung sowie einem Web-Interface (nicht in der Grundausstattung enthalten) hat. Eine weitere interessante Eigenschaft ist das Backup ohne Wiederherstellungsrecht für die Clients.

Lassen Sie uns einen Blick aufdie Leistung.

Sicherung, Teil 2: Überblick und Test von rsync-basierten Sicherungswerkzeugen

Erster Start
Zweiter Lauf
Dritter Lauf

Erster Satz
11m21s
11m10s
10m56s

Zweiter Satz
5m37s
5m40s
5m35s

Dritter Satz
3m33s
3m24s
3m40s

Es arbeitete doppelt so langsam wie rsnapshot, jedoch auch schnell und definitiv schneller als rdiff-backup. Die Grafiken sind etwas gezackt – die Leistung wird ebenfalls durch das Speichersystem des Backup-Servers begrenzt, obwohl dies nicht so ausgeprägt ist wie bei rsnapshot.

Ergebnisse

Die Größe der Repositories aller Kandidaten war ungefähr gleich, d. h. zunächst ein Anstieg auf 10 GB, dann auf 15 GB, dann auf 18 GB usw., was mit der Arbeitsweise von rsync zusammenhängt. Es ist auch zu beachten, dass alle Kandidaten eine Einstrangigkeit aufwiesen (CPU-Auslastung etwa 50 % bei einem Dual-Core-Rechner). Alle drei Kandidaten boten die Möglichkeit, das letzte Backup "wie es ist" wiederherzustellen, das heißt, man konnte Dateien ohne Verwendung jeglicher Drittanbieter-Software wiederherstellen, einschließlich derjenigen, die zur Erstellung der Repositories verwendet wurden. Dies ist ebenfalls das "Erbe" von rsync.

Das DBMS Tarantool ist ein attraktives, zukunftsträchtiges Produkt zur Erstellung von hochbelasteten Anwendungen.

Je komplexer das Backup-System ist und je mehr Möglichkeiten es hat, desto langsamer wird es arbeiten, aber für nicht allzu anspruchsvolle Projekte eignet sich jede von ihnen, außer möglicherweise rdiff-backup.

Ankündigung

Diese Notiz setzt die Reihe über das Backup fort.

Sicherung, Teil 1: Warum Backups nötig sind, Überblick über Methoden und Technologien
Sicherung, Teil 2: Überblick und Test von rsync-basierten Sicherungswerkzeugen
Datensicherung, Teil 3: Überblick und Tests von duplicity, duplicaty, deja dup
Sicherung, Teil 4: Überblick und Test von zbackup, restic, borgbackup
Backup, Teil 5: Tests von Bacula und Veeam Backup für Linux
Backup, Teil 6: Vergleich von Backup-Tools
Backup, Teil 7: Zusammenfassungen

Autor der Veröffentlichung: Pawel Demkowitsch

Quelle: habr.com

60GB SSD 8Gb DDR4