Backup-Speicher für Tausende virtuelle Maschinen mit kostenlosen Tools

Backup-Speicher für Tausende virtuelle Maschinen mit kostenlosen Tools

Hallo, ich bin kürzlich auf ein interessantes Problem gestoßen: das Einrichten eines Speichers für die Sicherung einer großen Anzahl von Blockgeräten.

Jede Woche sichern wir alle virtuellen Maschinen in unserer Cloud. Daher müssen wir in der Lage sein, Tausende von Sicherungen zu verwalten und dies so schnell und effizient wie möglich zu tun.

Leider Standardkonfigurationen RAID5, RAID6 In diesem Fall dürfen wir dies nicht tun, da der Wiederherstellungsprozess auf so großen Festplatten wie unserer schmerzhaft langwierig sein wird und höchstwahrscheinlich nie enden wird.

Schauen wir uns an, welche Alternativen es gibt:

Erasure Codierung — Ähnlich wie RAID5, RAID6, jedoch mit konfigurierbarer Paritätsstufe. In diesem Fall erfolgt die Reservierung nicht blockweise, sondern für jedes Objekt separat. Der einfachste Weg, Erasure Coding auszuprobieren, ist die Erweiterung minium.

DRAID ist eine derzeit unveröffentlichte ZFS-Funktion. Im Gegensatz zu RAIDZ verfügt DRAID über einen verteilten Paritätsblock und nutzt während der Wiederherstellung alle Festplatten des Arrays gleichzeitig, wodurch es besser in der Lage ist, Festplattenausfälle zu überstehen und nach einem Ausfall schneller wiederherzustellen.

Backup-Speicher für Tausende virtuelle Maschinen mit kostenlosen Tools

Backup-Speicher für Tausende virtuelle Maschinen mit kostenlosen Tools

Server verfügbar Fujitsu Primergy RX300 S7 mit Prozessor Intel Xeon CPU E5-2650L 0 bei 1.80 GHz, neun RAM-Sticks Samsung DDR3-1333 8 GB PC3L-10600R ECC registriert (M393B1K70DH0-YH9), Festplattenregal Supermicro SuperChassis 847E26-RJBOD1, verbunden über Dual-LSI-SAS2X36-Expander und 45 Scheiben Seagage ST6000NM0115-1YZ110 auf 6TB alle

Bevor wir etwas entscheiden, müssen wir zunächst alles gründlich testen.

Dazu habe ich verschiedene Konfigurationen vorbereitet und getestet. Dazu habe ich minio verwendet, das als S3-Backend fungierte und es in verschiedenen Modi mit unterschiedlicher Anzahl von Zielen startete.

Grundsätzlich wurde das Minio-Gehäuse im Vergleich zu Software-Raid und Erasure-Coding mit der gleichen Anzahl an Festplatten und der gleichen Festplattenparität getestet, und zwar: RAID6, RAIDZ2 und DRAID2.

Als Referenz: Wenn Sie minio mit nur einem Ziel starten, arbeitet minio im S3-Gateway-Modus und stellt Ihr lokales Dateisystem in Form von S3-Speicher bereit. Wenn Sie minio unter Angabe mehrerer Ziele starten, wird automatisch der Erasure Coding-Modus aktiviert, der die Daten zwischen Ihren Zielen verteilt und gleichzeitig Fehlertoleranz bietet.

Standardmäßig unterteilt minio Ziele in Gruppen von 16 Festplatten mit 2 Paritäten pro Gruppe. Diese. Es können zwei Festplatten gleichzeitig ausfallen, ohne dass Daten verloren gehen.

Um die Leistung zu testen, habe ich 16 Festplatten mit jeweils 6 TB verwendet und kleine Objekte mit einer Größe von 1 MB darauf geschrieben. Dies beschrieb unsere zukünftige Auslastung am genauesten, da alle modernen Backup-Tools Daten in Blöcke von mehreren Megabyte aufteilen und sie auf diese Weise schreiben.

Um den Benchmark durchzuführen, verwendeten wir das Dienstprogramm s3bench, das auf einem Remote-Server gestartet wurde und Zehntausende solcher Objekte in Hunderten von Threads an Minio sendete. Danach habe ich versucht, sie auf die gleiche Weise zurückzufordern.

Die Benchmark-Ergebnisse sind in der folgenden Tabelle dargestellt:

Backup-Speicher für Tausende virtuelle Maschinen mit kostenlosen Tools

Wie wir sehen können, schneidet minio in seinem eigenen Erasure-Coding-Modus beim Schreiben deutlich schlechter ab als minio, das auf Software-RAID6, RAIDZ2 und DRAID2 in derselben Konfiguration läuft.

Getrennt von mir habe gefragt Testen Sie Minio auf ext4 vs. XFS. Überraschenderweise erwies sich XFS für meine Art von Arbeitslast als deutlich langsamer als ext4.

In der ersten Testreihe zeigte Mdadm eine Überlegenheit gegenüber ZFS, später jedoch Gmelikow empfohlendass Sie die ZFS-Leistung verbessern können, indem Sie die folgenden Optionen festlegen:

xattr=sa atime=off recordsize=1M

und danach wurden die Tests mit ZFS viel besser.

Sie können auch feststellen, dass DRAID gegenüber RAIDZ keinen großen Leistungsgewinn bietet, aber theoretisch viel sicherer sein sollte.

In den letzten beiden Tests habe ich auch versucht, Metadaten (speziell) und ZIL (Log) von der SSD auf den Spiegel zu übertragen. Aber das Entfernen von Metadaten brachte keinen großen Gewinn an Aufnahmegeschwindigkeit, und beim Entfernen von ZIL, meine SSDSC2KI128G8 Bei einer Auslastung von 100 % ist die Obergrenze erreicht, daher betrachte ich diesen Test als gescheitert. Ich schließe nicht aus, dass, wenn ich schnellere SSD-Laufwerke hätte, dies meine Ergebnisse vielleicht erheblich verbessern könnte, aber leider hatte ich sie nicht.

Am Ende habe ich mich für DRAID entschieden und trotz seines Beta-Status ist es in unserem Fall die schnellste und effizienteste Speicherlösung.

Ich habe ein einfaches DRAID2 in einer Konfiguration mit drei Gruppen und zwei verteilten Ersatzteilen erstellt:

# zpool status data
  pool: data
 state: ONLINE
  scan: none requested
config:

    NAME                 STATE     READ WRITE CKSUM
    data                 ONLINE       0     0     0
      draid2:3g:2s-0     ONLINE       0     0     0
        sdy              ONLINE       0     0     0
        sdam             ONLINE       0     0     0
        sdf              ONLINE       0     0     0
        sdau             ONLINE       0     0     0
        sdab             ONLINE       0     0     0
        sdo              ONLINE       0     0     0
        sdw              ONLINE       0     0     0
        sdak             ONLINE       0     0     0
        sdd              ONLINE       0     0     0
        sdas             ONLINE       0     0     0
        sdm              ONLINE       0     0     0
        sdu              ONLINE       0     0     0
        sdai             ONLINE       0     0     0
        sdaq             ONLINE       0     0     0
        sdk              ONLINE       0     0     0
        sds              ONLINE       0     0     0
        sdag             ONLINE       0     0     0
        sdi              ONLINE       0     0     0
        sdq              ONLINE       0     0     0
        sdae             ONLINE       0     0     0
        sdz              ONLINE       0     0     0
        sdan             ONLINE       0     0     0
        sdg              ONLINE       0     0     0
        sdac             ONLINE       0     0     0
        sdx              ONLINE       0     0     0
        sdal             ONLINE       0     0     0
        sde              ONLINE       0     0     0
        sdat             ONLINE       0     0     0
        sdaa             ONLINE       0     0     0
        sdn              ONLINE       0     0     0
        sdv              ONLINE       0     0     0
        sdaj             ONLINE       0     0     0
        sdc              ONLINE       0     0     0
        sdar             ONLINE       0     0     0
        sdl              ONLINE       0     0     0
        sdt              ONLINE       0     0     0
        sdah             ONLINE       0     0     0
        sdap             ONLINE       0     0     0
        sdj              ONLINE       0     0     0
        sdr              ONLINE       0     0     0
        sdaf             ONLINE       0     0     0
        sdao             ONLINE       0     0     0
        sdh              ONLINE       0     0     0
        sdp              ONLINE       0     0     0
        sdad             ONLINE       0     0     0
    spares
      s0-draid2:3g:2s-0  AVAIL   
      s1-draid2:3g:2s-0  AVAIL   

errors: No known data errors

Okay, wir haben den Speicher geklärt, jetzt reden wir darüber, was wir sichern werden. Hier möchte ich gleich über drei Lösungen sprechen, die ich ausprobiert habe, und diese sind:

Benji-Backup - Gabel Backy2, eine spezialisierte Lösung für die Sicherung von Blockgeräten, ist eng in Ceph integriert. Kann Unterschiede zwischen Snapshots erstellen und daraus ein inkrementelles Backup erstellen. Unterstützt eine große Anzahl von Speicher-Backends, einschließlich lokaler und S3. Erfordert eine separate Datenbank zum Speichern der Deduplizierungs-Hash-Tabelle. Nachteile: in Python geschrieben, hat eine etwas nicht reagierende CLI.

Borg-Backup - Gabel Dachboden, ein seit langem bekanntes und bewährtes Backup-Tool, kann Daten gut sichern und deduplizieren. Kann Backups sowohl lokal als auch über scp auf einem Remote-Server speichern. Kann Blockgeräte sichern, wenn es mit der Flagge gestartet wird --special, einer der Nachteile: Beim Erstellen eines Backups wird das Repository vollständig blockiert, daher wird empfohlen, für jede virtuelle Maschine ein separates Repository zu erstellen. Im Prinzip ist dies kein Problem, zum Glück sind sie sehr einfach zu erstellen.

Rest ist ein sich aktiv entwickelndes Projekt, geschrieben in Go, ziemlich schnell und unterstützt eine große Anzahl von Speicher-Backends, einschließlich lokalem Speicher, SCP, S3 und vielem mehr. Unabhängig davon möchte ich darauf hinweisen, dass es sich um eine speziell erstellte handelt Rest-Server für Restic, mit dem Sie Speicher schnell für die Remote-Nutzung exportieren können. Von all dem hat es mir am besten gefallen. Kann von stdin sichern. Es hat fast keine nennenswerten Nachteile, aber es gibt mehrere Features:

  • Zuerst habe ich versucht, es im allgemeinen Repository-Modus für alle virtuellen Maschinen (wie Benji) zu verwenden, und es hat sogar ganz gut funktioniert, aber die Wiederherstellungsvorgänge haben sehr lange gedauert, weil ... Restic versucht jedes Mal vor der Wiederherstellung, die Metadaten aller Backups zu lesen. Dieses Problem ließ sich wie bei Borg leicht lösen, indem für jede virtuelle Maschine ein separates Repository erstellt wurde. Dieser Ansatz hat sich auch für die Verwaltung von Backups als sehr effektiv erwiesen. Separate Repositories können ein separates Passwort für den Datenzugriff haben, und wir müssen auch keine Angst haben, dass das globale Repo irgendwie kaputt gehen könnte. Sie können neue Repositorys genauso einfach erstellen wie beim Borg-Backup.

    In jedem Fall wird die Deduplizierung nur relativ zur vorherigen Version des Backups durchgeführt; das vorherige Backup wird durch den Pfad für das angegebene Backup bestimmt. Wenn Sie also verschiedene Objekte von stdin in ein gemeinsames Repository sichern, vergessen Sie nicht, den anzugeben Möglichkeit --stdin-filename, oder geben Sie die Option jedes Mal explizit an --parent.

  • Zweitens dauert die Wiederherstellung auf stdout aufgrund der parallelen Natur viel länger als die Wiederherstellung auf das Dateisystem. Für die Zukunft planen wir, die Unterstützung für Backups für Blockgeräte zu erweitern.

  • Drittens wird die Verwendung derzeit empfohlen Version vom Master, Weil Version 0.9.6 weist einen Fehler bei der langen Wiederherstellung großer Dateien auf.

Um die Effektivität des Backups und die Geschwindigkeit des Schreibens/Wiederherstellens aus einem Backup zu testen, habe ich ein separates Repository erstellt und versucht, ein kleines Image einer virtuellen Maschine (21 GB) zu sichern. Es wurden zwei Sicherungen durchgeführt, ohne das Original zu ändern. Dabei wurde mit jeder der aufgeführten Lösungen überprüft, wie schneller/langsamer die deduplizierten Daten kopiert wurden.

Backup-Speicher für Tausende virtuelle Maschinen mit kostenlosen Tools

Wie wir sehen können, weist Borg Backup das beste anfängliche Backup-Effizienzverhältnis auf, ist jedoch sowohl hinsichtlich der Schreib- als auch der Wiederherstellungsgeschwindigkeit schlechter.

Restic erwies sich als schneller als Benji Backup, aber die Wiederherstellung auf stdout dauert länger und weiß leider noch nicht, wie man direkt auf ein Blockgerät schreibt.

Nachdem ich alle Vor- und Nachteile abgewogen hatte, entschied ich mich für eine Entscheidung zurückhaltend с Rest-Server als die bequemste und erfolgsversprechendste Backup-Lösung.

Backup-Speicher für Tausende virtuelle Maschinen mit kostenlosen Tools

In diesem Screencast können Sie sehen, wie ein 10-Gigabit-Kanal bei mehreren gleichzeitig laufenden Backup-Vorgängen vollständig ausgelastet wird. Es ist erwähnenswert, dass das Festplattenrecycling nicht über 30 % ansteigt.

Ich war mehr als zufrieden mit der Lösung, die ich erhalten habe!

Source: habr.com

Kommentar hinzufügen