Einführung
Backups sind für Cloud-Server sehr wichtig. Ob Sie ein einzelnes Projekt mit allen seinen Daten auf einem einzigen Server ausführen oder direkt von Git zu virtuellen Maschinen bereitstellen, die hochgefahren und heruntergefahren werden, während ein Mindestsatz von Protokollen beibehalten wird, sollten Sie immer einen Ausfallszenario planen. Dies kann je nach den verwendeten Anwendungen, der Bedeutung eines sofortigen Failovers und den erwarteten Problemen viele verschiedene Dinge bedeuten.
In diesem Leitfaden werden die verschiedenen Ansätze zur Bereitstellung von Backups und Datenredundanz erkundet. Da unterschiedliche Anwendungsfälle unterschiedliche Lösungen erfordern, kann Ihnen dieser Artikel keine Einheitslösung bieten, aber Sie erfahren, was in verschiedenen Szenarien wichtig ist und welche Implementierungen am besten für Ihren Betrieb geeignet sind.
Im ersten Teil dieses Leitfadens werden mehrere Backup-Lösungen betrachtet und die jeweiligen Vorzüge jeder Lösung überprüft, damit Sie den Ansatz auswählen können, der zu Ihrer Umgebung passt. Im zweiten Teil werden Redundanzoptionen erkundet.
Teil 1 — Was ist der Unterschied zwischen Redundanz und Backup?
Die Definitionen der Begriffe redundant und Backup überschneiden sich oft und werden in vielen Fällen verwechselt. Es handelt sich um zwei unterschiedliche Konzepte, die miteinander verbunden sind, aber dennoch verschieden sind. Einige Lösungen bieten beides.
Redundanz
Redundanz bei Daten bedeutet, dass es im Falle eines Systemproblems sofortigen Failover gibt. Ein Failover bedeutet, dass wenn ein Satz von Daten (oder ein Host) nicht verfügbar wird, sofort eine andere perfekte Kopie in die Produktion eingefügt wird, um seinen Platz einzunehmen. Dies führt zu praktisch keiner wahrnehmbaren Ausfallzeit, und die Anwendung oder Website kann weiterhin Anfragen bearbeiten, als ob nichts passiert wäre. In der Zwischenzeit haben Sie als Systemadministrator (in diesem Fall Sie) die Möglichkeit, das Problem zu beheben und das System in einen voll funktionsfähigen Zustand zurückzuversetzen.
Eine Redundanzlösung ist jedoch in der Regel nicht auch eine Backup-Lösung. Redundante Speicherung bietet nicht unbedingt Schutz vor einem Ausfall, der die gesamte Maschine oder das gesamte System betrifft. Wenn Sie beispielsweise eine gespiegelte RAID konfiguriert haben (wie RAID 1), sind Ihre Daten redundant, sodass im Falle eines Ausfalls eines Laufwerks das andere weiterhin verfügbar ist. Wenn jedoch die Maschine selbst ausfällt, können alle Ihre Daten verloren gehen.
Mit Redundanzlösungen wie MySQL Group Replication wird jede Operation typischerweise auf jeder Kopie der Daten ausgeführt. Dazu gehören auch bösartige oder versehentliche Operationen. Nach Definition sollte eine Backup-Lösung es auch ermöglichen, von einem früheren Zeitpunkt wiederherzustellen, an dem die Daten als intakt bekannt sind.
Backup
Im Allgemeinen müssen funktionale Backups für Ihre wichtigen Daten aufrechterhalten werden. Je nach Situation kann dies bedeuten, Anwendungs- oder Benutzerdaten oder eine gesamte Website oder Maschine zu sichern. Die Idee hinter Backups ist, dass Sie im Falle eines System-, Maschinen- oder Datenverlusts Ihre Daten wiederherstellen, erneut bereitstellen oder anderweitig darauf zugreifen können. Das Wiederherstellen aus einem Backup kann Ausfallzeiten erfordern, aber es kann den Unterschied zwischen dem Starten von vor einem Tag und dem Starten von Grund auf bedeuten. Alles, was Sie nicht verlieren können, sollte nach Definition gesichert werden.
In Bezug auf die Methoden gibt es verschiedene Ebenen von Backups. Diese können je nach Bedarf geschichtet werden, um verschiedene Arten von Problemen zu berücksichtigen. Zum Beispiel können Sie eine Konfigurationsdatei vor der Änderung sichern, damit Sie bei Problemen zu Ihren alten Einstellungen zurückkehren können. Dies ist ideal für kleine Änderungen, die Sie aktiv überwachen. Dieses Setup würde jedoch im Falle eines Festplattenausfalls oder eines komplexeren Problems versagen. Sie sollten auch regelmäßige, automatisierte Backups an einem entfernten Standort haben.
Backups allein bieten keine automatische Failover-Funktion. Dies bedeutet, dass Ihre Ausfälle Sie möglicherweise keine Daten kosten (vorausgesetzt, Ihre Backups sind zu 100 % aktuell), aber sie können Ihnen Betriebszeit kosten. Dies ist ein Grund, warum Redundanz und Backups häufig in Kombination verwendet werden.
Teil 2 — Dateiebene-Backup
Eine der bekanntesten Formen von Backups ist das Dateiebene-Backup. Diese Art von Backup verwendet normale Dateisystem-Kopiertools, um Dateien an einen anderen Ort oder ein anderes Gerät zu übertragen.
Verwendung des cp-Befehls
Theoretisch könnten Sie eine Linux-Maschine, wie Ihren Cloud-Server, mit dem cp
-Befehl sichern. Dies kopiert Dateien von einem lokalen Speicherort zu einem anderen. Auf einem lokalen Computer könnten Sie ein Wechsellaufwerk einbinden und dann Dateien darauf kopieren:
In diesem Beispiel wird ein Wechseldatenträger, sdc
, als /mnt/my-backup
eingebunden und dann das Verzeichnis /etc
auf den Datenträger kopiert. Anschließend wird das Laufwerk ausgehängt, das an einem anderen Ort aufbewahrt werden kann.
Verwendung von Rsync
A better alternative to cp
is the rsync
command. Rsync is a powerful tool that provides a wide array of options for replicating files and directories across many different environments, with built-in checksum validation and other features. Rsync can perform the equivalent of the cp
operation above like so:
-azvP
ist eine typische Reihe von Rsync-Optionen. Hier ist eine Aufschlüsselung dessen, was jede davon bewirkt:
a
enables “Archive Mode” for this copy operation, which preserves file modification times, owners, and so on. It is also the equivalent of providing each of the-rlptgoD
options individually (yes, really). Notably, the-r
option tells Rsync to recurse into subdirectories to copy nested files and folders as well. This option is common to many other copy operations, such ascp
andscp
.z
compresses data during the transfer itself, if possible. This is useful for any transfers over slow connections, especially when transferring data that compresses very effectively, like logs and other text.v
enables verbose mode, so you can read more details of your transfer while it is in progress.P
tells Rsync to retain partial copies of any files that do not transfer completely, so that transfers can be resumed later.
Sie können weitere Rsync-Optionen auf seiner Manpage überprüfen.
Natürlich würde man in einer Cloud-Umgebung normalerweise nicht jedes Mal Dateien auf ein eingehängtes Laufwerk kopieren. Rsync kann auch entfernte Backups über ein Netzwerk durchführen, indem SSH-ähnliche Syntax bereitgestellt wird. Dies funktioniert auf jedem Host, zu dem Sie eine SSH-Verbindung herstellen können, solange Rsync an beiden Enden installiert ist. Da Rsync als ein Kernwerkzeug von Linux gilt, ist dies fast immer eine sichere Annahme, auch wenn Sie lokal an einem Mac- oder Windows-Rechner arbeiten.
Dies sichert das Verzeichnis /etc
des lokalen Rechners in ein Verzeichnis auf remote_host
unter /backup
. Dies gelingt, wenn Sie Berechtigung haben, in dieses Verzeichnis zu schreiben, und ausreichend Speicherplatz vorhanden ist.
Sie können auch weitere Informationen dazu finden, wie Sie Rsync verwenden, um lokale und entfernte Verzeichnisse zu synchronisieren.
Wie man andere Backup-Tools verwendet
Obwohl cp
und rsync
nützlich und weit verbreitet sind, sind sie allein keine vollständige Lösung. Um Backups mit Rsync zu automatisieren, müssten Sie Ihre eigenen automatisierten Abläufe, Backup-Zeitpläne, Protokollrotation usw. erstellen. Während dies für einige sehr kleine Implementierungen angemessen sein kann, die keine externen Dienste nutzen möchten, oder für sehr große Implementierungen, die dedizierte Ressourcen für die Wartung sehr granularer Skripte für verschiedene Zwecke haben, möchten viele Benutzer in ein dediziertes Backup-Angebot investieren.
Bacula
Bacula ist eine komplexe, flexible Lösung, die auf einem Client-Server-Modell basiert. Bacula ist mit separaten Konzepten für Clients, Backup-Speicherorte und Direktoren (die Komponente, die das eigentliche Backup orchestriert) konzipiert. Es konfiguriert auch jede Backup-Aufgabe in eine Einheit namens „Job“.
Dies ermöglicht eine äußerst granulare und flexible Konfiguration. Sie können mehrere Clients auf einem Speichergerät sichern, einen Client auf mehrere Speichergeräte sichern und das Backup-Schema durch Hinzufügen von Knoten oder Anpassen ihrer Details ändern. Es funktioniert gut in einer vernetzten Umgebung und ist erweiterbar und modular, was es ideal macht, um eine Website oder Anwendung über mehrere Server hinweg zu sichern.
Duplicity
Duplicity ist ein weiteres Open-Source-Backup-Tool. Es verwendet standardmäßig GPG-Verschlüsselung für Übertragungen.
Der offensichtliche Vorteil der Verwendung von GPG-Verschlüsselung für Dateisicherungen besteht darin, dass die Daten nicht im Klartext gespeichert werden. Nur der Besitzer des GPG-Schlüssels kann die Daten entschlüsseln. Dies bietet ein gewisses Maß an Sicherheit, um die zusätzlichen Sicherheitsmaßnahmen auszugleichen, die erforderlich sind, wenn Ihre Daten an mehreren Standorten gespeichert sind.
Ein weiterer Vorteil, der denen, die GPG nicht regelmäßig verwenden, möglicherweise nicht sofort klar ist, besteht darin, dass jede Transaktion überprüft werden muss, um vollständig korrekt zu sein. GPG, ähnlich wie Rsync, erzwingt eine Hash-Überprüfung, um sicherzustellen, dass während der Übertragung keine Daten verloren gegangen sind. Dies bedeutet, dass Sie beim Wiederherstellen von Daten aus einem Backup wesentlich seltener auf Dateikorruption stoßen werden.
Teil 3 — Blockebenen-Backups
A slightly less common, but important alternative to file-level backups are block-level backups. This style of backup is also known as “imaging” because it can be used to duplicate and restore entire devices. Block-level backups allow you to copy on a deeper level than a file. While a file-based backup might copy file1, file2, and file3 to a backup location, a block-based backup system would copy the entire “block” that those files reside on. Another way of explaining the same concept is to say that block-level backups copy information bit after bit. They do not know about the files that may span those bits.
Ein Vorteil der Blockebenen-Backups besteht darin, dass sie in der Regel schneller sind. Während Dateibasierte Backups normalerweise für jede separate Datei einen neuen Transfer initiieren, überträgt ein blockbasiertes Backup Blöcke, was bedeutet, dass weniger nicht sequenzielle Übertragungen initiiert werden müssen, um das Kopieren abzuschließen.
Verwenden von dd zur Durchführung von Blockebenen-Backups
Die gängigste Methode zur Durchführung von Block-Level-Backups erfolgt mit dem Dienstprogramm dd
. dd
kann verwendet werden, um komplette Festplattenabbilder zu erstellen, und wird auch häufig zum Archivieren von Wechselmedien wie CDs oder DVDs verwendet. Das bedeutet, dass Sie eine Partition oder Festplatte in eine einzelne Datei oder ein Raw-Gerät sichern können, ohne vorherige Schritte.
Um dd
zu verwenden, müssen Sie einen Eingabeort und einen Ausgabeort angeben, wie folgt:
In diesem Szenario gibt das Argument if=
den Eingabegerät- oder -ort an. Das Argument of=
gibt die Ausgabedatei oder den -ort an. Achten Sie darauf, diese nicht zu verwechseln, da Sie sonst aus Versehen eine ganze Festplatte löschen könnten.Zum Beispiel können Sie eine Partition mit Ihren Dokumenten, die sich unter /dev/sda3
befindet, sichern, indem Sie einen Ausgabepfad für eine .img
-Datei angeben:
Eine der Hauptmotivationen für das Sichern von Daten besteht darin, eine frühere Version einer Datei im Falle einer unerwünschten Änderung oder Löschung wiederherstellen zu können. Während alle bisher genannten Sicherungsmechanismen dies liefern können, können Sie auch eine granularere Lösung implementieren.
Zum Beispiel könnte eine manuelle Methode zur Durchführung dessen darin bestehen, eine Sicherung einer Datei vor dem Bearbeiten in nano
zu erstellen:
Du könntest diesen Prozess sogar automatisieren, indem du zeitgestempelte versteckte Dateien erstellst, jedes Mal wenn du eine Datei mit deinem Editor bearbeitest. Zum Beispiel könntest du dies in deiner ~/.bashrc
-Datei platzieren, sodass jedes Mal, wenn du nano
von deiner bash
-Shell ausführst (d. h. $
), automatisch ein Backup erstellt wird, das mit Jahr (%y
), Monat (%m
), Tag (%d
) usw. versehen ist:
Dies funktioniert in dem Maße, wie du Dateien manuell mit nano
bearbeitest, ist jedoch begrenzt und könnte schnell eine Festplatte füllen. Du kannst sehen, wie es schlechter werden könnte als das manuelle Kopieren von Dateien, die du bearbeiten möchtest.
Eine Alternative, die viele der Probleme löst, die in diesem Design inhärent sind, besteht darin, Git als Versionskontrollsystem zu verwenden. Obwohl es hauptsächlich zur Versionierung von reinem Text entwickelt wurde, normalerweise Quellcode, Zeile für Zeile, kannst du Git verwenden, um fast jede Art von Datei zu verfolgen. Um mehr zu erfahren, kannst du Wie man Git effektiv verwendet überprüfen.
Teil 5 — Server-Level-Backups
Die meisten Hosting-Anbieter bieten auch ihre eigene optionale Backup-Funktionalität an. Die Backup-Funktion von DigitalOcean führt regelmäßig automatisierte Backups für Droplets durch, die diesen Dienst aktiviert haben. Du kannst dies während der Erstellung des Droplets aktivieren, indem du das Kontrollkästchen „Backups“ aktivierst:
Dies sichert regelmäßig das gesamte Abbild Ihres Cloud-Servers. Das bedeutet, dass Sie es aus dem Backup neu bereitstellen oder als Basis für neue Droplets verwenden können.
Für einmalige Abbilder Ihres Systems können Sie auch Snapshots erstellen. Diese funktionieren ähnlich wie Backups, sind jedoch nicht automatisiert. Obwohl es in einigen Kontexten möglich ist, ein Abbild eines laufenden Systems zu erstellen, wird dies je nachdem, wie Sie auf Ihr Dateisystem schreiben, nicht immer empfohlen:
Weitere Informationen zu DigitalOcean-Backups und Snapshots finden Sie in der Dokumentation zu Containern und Abbildern.
GitOps
Abschließend ist es erwähnenswert, dass es einige Umstände gibt, unter denen Sie möglicherweise nicht unbedingt Backups auf Serverebene implementieren möchten. Wenn Ihre Bereitstellung beispielsweise den Prinzipien von GitOps folgt, können Sie viele Ihrer einzelnen Cloud-Server als austauschbar behandeln und stattdessen entfernte Datenquellen wie Git-Repositories als die effektive Quelle der Wahrheit für Ihre Daten behandeln. Komplexe, moderne Bereitstellungen wie diese können in vielen Fällen skalierbarer und weniger anfällig für Ausfälle sein. Sie möchten jedoch weiterhin eine Backup-Strategie für Ihre Datenstores selbst oder für einen zentralisierten Protokollserver implementieren, an den möglicherweise Informationen von diesen austauschbaren Servern gesendet werden. Überlegen Sie, welche Aspekte Ihrer Bereitstellung möglicherweise nicht gesichert werden müssen, und welche dies tun.
Abschluss
In diesem Artikel haben Sie verschiedene Backup-Konzepte und -Lösungen erkundet. Als nächstes möchten Sie möglicherweise Lösungen zur Aktivierung von Redundanz überprüfen.