Wie kann ich einen laufenden Linode-Server sichern?


21

Wir möchten ein Backup von allem auf unserem Debian-Server erstellen, der remote auf der anderen Seite der Welt läuft (gehostet von Linode), ohne ihn herunterzufahren.

Auf diesem System werden Shell, E-Mail, XMPP / Prosody und Web mit ein paar einfachen Nginx-Setups ausgeführt.
Wir möchten Dateien im Zusammenhang mit diesen Dingen sichern, um die Sicherheit zu gewährleisten. Beispielsweise haben Benutzer Dateien in ihren Basisverzeichnissen gespeichert.

Das vorhandene Setup muss nicht für jede einzelne / etc-Datei exakt kopiert werden. Der Grund, warum wir überhaupt das Backup machen, ist, dass wir alles auf ein neues Setup verschieben können (neuere Version von Debian immer noch auf Linode).

Ich sehe, dass Linode einen Backup-Service anbietet. Langfristig brauchen wir aber auch eigene Backups, für den Fall, dass sie untergehen oder etwas anderes Merkwürdiges passiert.

Der Grund für diese Frage ist, dass ich, als ich in der Vergangenheit versucht habe, Backups zu erstellen, immer wieder einen der beiden folgenden Fehler gemacht habe:

  • Ich habe "OK, ich kopiere nur /und alles darunter" und bin dann in einer seltsamen Endlosschleife hängengeblieben, weil das Laufwerk, auf das ich kopiert habe, unter / media / backup gemountet war und sich selbst rekursiv kopiert hat [obv Dieses spezifische Problem trifft hier nicht zu, da wir ein Backup über rsync oder ähnliches durchführen.] Oder es ist hängengeblieben, als würde versucht werden, "lebendige" Inhalte in / proc oder / var oder was auch immer zu kopieren. oder
  • Ich habe gesagt: "OK, ich nehme nur das Nötigste von dem, was wir brauchen ... hmm, alle Home-Verzeichnisse und unsere Webserver-Verzeichnisse (alle unter /var) und lass uns eine Kopie /etcund alle alten Mails unter / var / suchen. vmail "und dann habe ich ausnahmslos Dateiberechtigungen oder Zeitstempel versaut (um sicherzugehen, dass ich diesmal keine Unix-Dateien auf ein FAT-Laufwerk kopiere) oder etwas vergessen habe (" oh, schieß, ich hatte einige benutzerdefinierte Skripte in / usr / local / bin, die ich nirgendwo anders gespeichert habe, ich habe vergessen, diese zu bekommen, schätze, sie sind jetzt weg ").

Das obv-Kopieren des gesamten Laufwerks hat also zu Fallstricken geführt, und das selektive Kopieren von Verzeichnissen hat zu Fallstricken geführt. Ich möchte wissen, wie ich es richtig mache.

Die Frage nach dem Serverfehler Was wird für ein vollständiges Backup-System benötigt? deckt Philosophie und gute Praktiken ab, aber ich suche nach diesen spezifischeren Details von:

  • Welche Verzeichnisse muss ich kopieren und welche muss ich ausschließen (vorausgesetzt, es ist ein System, das gerade ausgeführt wird und ein Wiki, einen XMPP-Chat und E-Mails bereitstellt - mit neuen Nachrichten, die eingehen, während der Kopierauftrag ausgeführt wird)
  • Welche Dateiattribute wie Zeitstempel & Eigentümer & Gruppe muss ich präsentieren und wie mache ich das? ← Ich denke, ich kann diese Hälfte der Frage selbst mit so etwas wie ... ähm ... beantworten. rsync -HXazIch denke, das ist eine gute Option für uns? Das -zobv hat nicht wirklich mit der Frage zu tun, was ich bewahre

Ein Großteil der Sicherheitshinweise, die ich wie bei der Verwendung sehe, ddscheint davon auszugehen, dass das Laufwerk nicht gemountet ist und nicht verwendet wird. Aber soll ich nicht ausschließen „lebenden“ Verzeichnisse wie / proc und einige der Unterverzeichnisse unter / var (aber einige der Sachen unter / var Ich weiß , wir auf jeden Fall tun müssen halten) und / montieren? Woran muss ich in dieser Situation noch denken? Dann kann ich es wohl einfach mit rsync und ein paar --excludeFlags bearbeiten .

Oder gibt es bessere Ideen, besonders FOSS-freundliche?


Ich verstehe, dass diese Frage äußerst grundlegend erscheint, aber nachdem ich diese Art von Systemen so lange betrieben habe, habe ich dies immer wieder durcheinander gebracht und nie wirklich gewusst, wie es richtig gemacht wird
Sandra,


Für was es wert ist , cp -r -awird erhalten , wie viel Datei wie möglich Attribute beim Kopieren von Dateien (basierend auf , was das Zieldateisystem unterstützt). Das -aFlag weist cpan, Attribute beizubehalten. Das Kopieren über ein Netzwerk oder über ein Dateisystem, das die erforderlichen Attribute nicht unterstützt, tar -chat immer für mich funktioniert, obwohl ich glaube, dass es einige Randfälle gibt, die es nicht abdeckt, und insbesondere glaube ich, dass sie tarstandardmäßig von übereinstimmenden Benutzernamen abhängen beide Systeme. Trotzdem habe ich ein ganzes (nicht gemountetes) Linux-System tarohne offensichtliche Probleme kopiert .
Micheal Johnson

Gibt es auch einen bestimmten Grund, warum das System live kopiert werden muss?
Micheal Johnson

Verwenden Sie den Snapshot-Service von Linode?
Ivanivan

Antworten:


15

Sie möchten also Ihr gesamtes Laufwerk ohne diese bösen Fehler sichern und auch alle / proc- und anderen temporären Ordner herausfiltern?

Eine Option besteht darin, den Stammordner in einen anderen Ordner im Dateisystem einzuhängen:

$ cd /mnt
$ mkdir drive
$ mount --bind / drive

Dadurch erhalten Sie alle Dateien auf Ihrem Laufwerk, die nicht als temporär angesehen werden (z. B. die Ordner / proc oder / sys).

Jetzt, da Sie eine saubere Ansicht Ihres Stammordners haben, können Sie ihn einfach mit Standard cpoder auf Ihr Sicherungslaufwerk kopieren rsync. Etwas in der Art von:

cp -R /mnt/drive /mnt/backupdrive

Dies löst die beiden genannten Probleme:

  • Sie geraten nicht in Rekursion, da die Sicherungsdiskette nicht im Laufwerk eingebunden ist (Sicht)
  • Sie verpassen keine wichtigen Dateien, weil Sie sie alle nehmen

Siehe auch: Man Mount (8)


6
Achtung, mit dieser Lösung können Sie Dateien kopieren, die gerade geschrieben werden, z. B. Datenbanken. Ich empfehle, vor dem Kopieren der Dateien ein Skript auszuführen, um die Datenbank in einer separaten Datei zu sichern. Für MySQL können Sie beispielsweise mysqldump verwenden.
Marco Martinelli

10

In Linux ist alles eine Datei. Es ist über rsync möglich, aber es gibt Dinge zu beachten, die (bestenfalls) schwer zu umgehen sind.

Sie sollten zuerst über die Replikation nachdenken, insbesondere für Datenbanken. Dies ist auch eine gute Idee, um Proxy / Load Balancer vor Ihrem Primärserver einzurichten, damit Sie während des Übergangs problemlos zwischen Primär- und Spiegelservern wechseln können.

Auf der Hardware-Ebene ist es am besten, einen spiegelähnlichen Server auf einer anderen Seite mit der gleichen Anzahl von Ethernet-Ports, dem gleichen Festplattenlayout usw. zu haben. Alles, was sich unterscheidet, erfordert Änderungen der Systemkonfiguration.

Wenn Sie also über zwei eth-Ports verfügen, möchten Sie sicherstellen, dass die Netzwerkkonfiguration, die Firewall usw. mit dem Schnittstellennamen auf beiden Servern übereinstimmen. Falls dieser abweicht, müssen Sie entweder die Konfiguration nach rsync oder den Gerätenamen auf der zweiten ändern (Ziel-) Server.

Gleiches gilt für das Partitionslayout. Sie sollten dieselben Partitionen wie auf Ihrem Primärserver erstellen. Wenn Sie diese jedoch von Grund auf neu erstellen, erhalten Sie unterschiedliche UUIDs. Daher müssen Sie fstab, grub, mdadm (falls es sich um Soft-Raid handelt) usw. ändern .

Aber es gibt auch viele Dinge, die schief gehen können, wie Datenbanken, die inkonsistent sein können, wenn sie nicht zuvor gestoppt wurden (bevor Sie rsync ausführen).

Die beste Strategie besteht darin, zuerst die Hardware und das Dateisystem (Partitionen) vorzubereiten, um sie an die Konfiguration des Primärservers anzupassen. Mounten Sie dann leere Parititons über ein zwischengeschaltetes System (wie eine Live-CD mit vorübergehend installiertem ssh-Server). Sie erstellen ein leeres / proc, / dev, / sys und synchronisieren dann den Rest wie folgt:

rsync -avz -H --delete /etc /bin (...and so on) destserver:/mnt/yourrootfs/

Dann müssen Sie grub auf dem Gerät installieren und an der Konfiguration arbeiten, um es bootfähig zu machen, die Netzwerkkonfiguration, fstab und andere zuvor erwähnte Dinge zu ändern.

Sie können auch versuchen, ein neues System zu installieren (mit derselben Version, die Sie auf Ihrem Primärserver verwenden), es dann auszuschalten, es über ein anderes temporäres System (z. B. eine Live-CD) bereitzustellen und dann alles andere als / proc, / zu ersetzen. sys, / dev und / boot mit rsync.

Aber es ist nur eine allgemeine Idee. Je nachdem, was auf diesem Server tatsächlich vorhanden ist, wie Ihre Konfiguration, Ihr Netzwerk und Ihre Hardwarekonfiguration aussehen, kann dies zu Komplikationen führen. Und am Ende des Tages könnte dies wirklich schwierig oder unmöglich sein, ohne spürbare Ausfallzeiten.


Zu Datenbanken: Wenn Sie über die entsprechenden Dateisystemabstraktionen verfügen (z. B. ein LVM), können Sie möglicherweise einen konsistenten Snapshot des Laufwerks erstellen, ohne eine vollständige DB-Replikation durchführen zu müssen. Dies setzt jedoch voraus, dass Ihre Datenbank kill -9sicher ist, da sie sonst möglicherweise nicht wiederhergestellt werden kann. Eine gute Datenbank sollte diese Situation bewältigen, aber eine überraschende Anzahl von Produkten tut dies nicht (oder noch schlimmer, sie werden fast immer wiederhergestellt, versagen jedoch einmal in einem blauen Mond, wenn Sie sie wirklich brauchen, um zu funktionieren). In der Praxis ist die Replikation wahrscheinlich sowieso zuverlässiger.
Kevin

5

Was Sie tatsächlich wollen, ist die Wiederherstellung. Was auch immer Sie tun, Sie müssen es regelmäßig testen.


Linode hat einen Backup-Service. Die Snapshots können nach einem begrenzten vordefinierten Zeitplan oder mit einer API erstellt werden.

Ein Vorteil von Snapshot-basierten Backups ist, dass sie einen scharfen Zeitpunkt bieten, da sich die Daten während des Kopierens nicht ändern. Snapshots können auch problemlos auf einem anderen Host, in diesem Fall einem neuen Linode, wiederhergestellt werden.


Ich sehe nichts darüber, ob diese Backups noch funktionieren, wenn z. Linode geht bankrott.
Mark

Während ich eine der Änderungen an meiner Frage abtippte, erfuhr ich von Linodes Backup-Service. Ich habe es mit meinem Kollegen besprochen und wir haben es uns vorgenommen. Es hat unsere unmittelbare Krise gelöst, aber wir werden versuchen, einen Weg zu finden, um die Daten auch in unseren eigenen vier Wänden zu speichern. Also, um zu erwähnen, dass sie diesen Service haben, wusste ich nicht, als ich das erste Mal gepostet habe. Bei Wiederherstellungen tritt jedoch das folgende Problem auf: Wenn unser Server falsch konfiguriert ist, ein Ball aus Kaugummi und Drahtbügeln, möchten wir ihn nicht unbedingt auf genau denselben falsch konfigurierten Zustand zurücksetzen. Wir wollen jedoch unsere Lieblingsdaten.
Sandra

Ich habe etwas mehr darüber geschrieben, wie Sie dieses Backup auch in einen anderen Speicher exportieren können, wenn es für Ihr Wiederherstellungsziel und Ihre Fehlerdomänen geeignet ist. Aber ich habe das ausgelassen, um mich kurz zu fassen. Ein guter Business-Continuity-Plan, zu dem Backups lediglich gehören, identifiziert und behandelt solche Risiken.
John Mahowald

1

Ich verwende BackupPC für meinen kleinen virtuellen privaten Server. Dies funktioniert recht gut. BackupPC kann Rsync unter der Haube verwenden und unterstützt vollständige und inkrementelle Sicherungen. Schauen Sie sich das an und prüfen Sie, ob es Ihren Anforderungen entspricht.


1

Führen Sie Ihr System auf ZFS aus. Dann können Sie eine Momentaufnahme eines Atoms machen, die ungefähr so ​​aussieht wie:

# zfs snap -r tank@name-of-backup

Wo auch tankimmer Ihr ZFS-Pool heißt. Bei diesem Snapshot handelt es sich garantiert um einen Momentaufnahme des Dateisystems und aller seiner untergeordneten Dateisysteme.

Sobald Sie den Schnappschuss erstellt haben, können Sie ihn mit zfs sendund auf einen anderen Host übertragen ssh.


0

Ich meine Meinung Es kommt darauf an, was und wo Sie Server mit internem Linux-Befehl ausführen. Es ist nicht möglich, vollständige Daten und Bibliotheken zu imitieren / weiterzuleiten. Wenn Sie auf VMware ausgeführt und ordnungsgemäß konfiguriert haben, wird eine Livemigration bereitgestellt. Andernfalls müssen Sie Tools von Drittanbietern verwenden. Hoffe das wird dir helfen. Weitere Referenzen Wie erstelle ich ein Backup eines Live-Servers?

Rsync ist ein guter Befehl zum Synchronisieren der Daten zwischen Servern.


0

Es stehen 2 Lösungen zur Verfügung, bei denen Sie sich nicht mehr auf fehlende Teile sowie auf einen fehlenden Eintrag auf Ihrer Liste verlassen müssen, weil die Checkliste unvollständig ist oder nur etwas heißes übersehen wurde.

Erstens können Sie, wenn Sie dies auf eine Plattform verschieben, die mehr Kontrolle über die zugrunde liegende Hardwareplattform bietet, Festplatten-Snapshots aller Dateien erstellen, während der Server ausgeführt wird. In AWS können Sie beispielsweise einen Snapshot einer EBS-Festplatte erstellen und die Differenzen erst bezahlen, wenn Sie später einen weiteren Snapshot erstellen.

Zweitens empfehle ich, das Setup Ihres kompletten Servers mit einem Konfigurationsmanagementsystem wie Ansible zu skripten. Dieser Wille

  • dokumentieren Sie alles, was Sie in der Quellcodeverwaltung konfiguriert haben

  • Ermöglichen es Ihnen, den Server anhand von Backups oder Bare-Metal-Dateien neu zu erstellen, um sicherzustellen, dass Ihre Skripts auf dem neuesten Stand sind

  • Ermöglichen es Ihnen, das Skript auf einem neueren Betriebssystem erneut auszuführen, normalerweise mit geringfügigen Änderungen.


1
Es stellt sich heraus, dass Sie auch auf Linode Schnappschüsse machen können. Ich werde Ansible auschecken! Das ist eine Art Nebenthema zu dem, was ich ursprünglich wissen wollte, aber so etwas - und ich hatte noch nie davon gehört [ich meine, ich hatte aus den wundervollen hainischen Büchern von dem fiktiven Gerät gehört] - klingt wundervoll!
Sandra
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.