LV klonen per SSH

Guten Morgen zusammen!

Wir haben seit einigen Monaten einen neuen KVM-Server, um in Sachen Moodle/Nextcloud/Collabora/… etwas flexibler zu sein und im Notfall keine längere Auszeit zu haben.

Dafür habe ich auf beiden Hosts alle unsere virtuellen Maschinen angelegt. Auch die Netzwerkkonfiguration ist identisch (2x 10G Bond, VLANs). Nur die IP der Hosts unterscheidet sich natürlich. Beide arbeiten derzeit parallel:

Server 1 (IP1): Webserver (läuft), Schulserver (heruntergefahren), …
Server 2 (IP2): Webserver (heruntergefahren), Schulserver (läuft), …

Speicher ist ein RAID-6-Verbund (auf dem alten mit HDs, auf dem neuen mit SSDs), welches Komplett per LVM genutzt wird.

Nun habe ich überlegt, ein Snapshot der LVs jede Nacht vom Server, auf dem die jeweilige VM läuft auf den jeweils anderen Server zu übertragen, auf dem die VM sozusagen im Ruhezustand wartet. So könnte ich - im Falle des „Abrauchens“ einfach die fehlende VM auf dem jeweils anderen Server starten und hätte praktisch keine Ausfallzeiten. Nur gleichzeitig laufen sollten sie natürlich nicht.

Dafür habe ich ein kleines Skript angefangen - es prüft, ob ein paar Rahmenbedingungen stimmen, legt dann ein Snapshot an und kopiert dieses per dd über SSH auf den anderen Server. Ich wollte vor allem wissen, ob letzteres geht und wie lange es dauert. Gestern habe ich es dann mal getestet und im laufenden Betrieb wird innerhalb von 8 Minuten unsere 80GB Webserver-Volume auf den zweiten Server geklont.

Das ist natürlich ein eher spezifischer Anwendungsfall, aber vielleicht kann es ja jemand gebrauchen - ganz oder Schnipsel davon. Man könnte die LVs z.B. auch alle auf ein NAS klonen und im Notfall von dort auf einen neuen Server. Das ersetzt kein regelmäßiges, inkrementelles Backup der Daten (da plane ich derzeit mit restic), aber für ein Vollbackup der VMs vielleicht für den ein oder anderen hilfreich.

Ich habe es mal ins Wiki gepackt.

Viele Grüße und bleibt gesund
Thomas

Hallo Thomas.
Für LVM ist das 'ne feine Sache. Ich bin anders vorgegangen, weil ich das ganze LVM nicht wollte und stattdessen lieber direkt auf ZFS gesetzt habe. Dazu habe ich die einzelnen Partitionen aus dem LVM „herausgeholt“ und alle auf einzelne ZVOLs gelegt. Nun hat der Server 5 virtuelle Platten (alles einzelne ZVOLs), von denen man mit den ZFS-Tools direkt einen Snapshot anlegen lassen kann.

Der Clou dabei: Storage Replication – es fährt also jeden Morgen ein zweiter Server hoch (genauer gesagt ist das unser alter Server, der für diesen Zweck aber noch gut genug ist) und holt sich den neuesten Snapshot vom Produktivsystem. So sind beide Server immer auf dem gleichen Stand und direkt startklar ohne umständlich die gepackten Backups wiederherstellen zu müssen. Das ist bei dir auch so, wenn ich es richtig sehe, oder?

Wenn der Produktivserver abrauchen sollte, reicht es, ein Netzwerkkabel umzustecken und mit dem Backupsystem weiter zu arbeiten, bis das Produktivsystem wieder läuft … (auf dem L3-Switch sind dazu zwei LAGs eingerichtet – zum Produktivsystem und zum Backupsystem).

Schöne Grüße,
Michael

Hallo Michael,

das zeigt, was für wunderbar flexible Szenarien denkbar sind.

Ich hatte lange kein LVM und finde es inzwischen doch sehr angenehm damit zu arbeiten (ich fürchte, ich hatte es einfach nicht verstanden). ZFS kenne ich nur vom Hörensagen - aber das klingt auch gut.

Bei uns läuft das alles während des Betriebs, da ein Server für alles (Schulnetz, Firewall, Webserver, Verwaltungsserver) dann doch wenig Ressourcen zum Verteilen lässt. Läuft zwar, aber ohne Leistungspuffer. Die Server laufen durchgängig und das Synchronisieren der Logical Volumes kann jederzeit passieren (ich habe es vorhin getestet - da gerät nichts an irgendwelche Grenzen).

Umstöpseln muss man nichts - beide KVM-Server sind mit verschiedenen Adressen im Netz und für dieselben virtuellen Netzwerke konfiguriert. Man muss nur darauf achten, nicht die gleiche virtuelle Maschine auf zwei Servern gleichzeitig zu starten (darum achtet das Skript am Anfang darauf).

Fällt ein Server aus, starte ich die VM auf dem anderen und sie ist gleich wieder erreichbar. Ein fast nahtloser Übergang (jenachdem, wie lange das Klonen der VM her ist). Theoretisch könnte ich das als Cron-Job einmal pro Stunde machen und hätte dann im Fall eines Abrauchens kaum spürbare Verluste.

Irgendwann werde ich das nochmal aufbohren und für jede VM einstellen auf welchem Server sie läuft und wo das Backup „wartet“. Theoretisch könnte man die Server dann sogar beobachten und automatisch in einen „Notbetrieb“ wechseln, wenn einer der Server nicht mehr erreichbar ist. Aber bevor ich mich ganz arbeitslos mache… :wink:

Viele Grüße
Thomas

Hi Thomas,
was mich an LVM schon immer genervt hat: Man muss zig Befehle anwenden, um z.B. das Dateisystem zu vergrößern. Das geht mit ZFS definitiv viel einfacher. In Sachen Snapshots tun sich beide Lösungen vielleicht gar nicht sooo viel. Aber die Videos von zfs rocks haben (nicht nur) mich überzeugt, einen HBA in den Server zu bauen und von da an komplett alles damit zu machen.

Übrigens: Erst gestern hörte ich im c’t Uplink Podcast, dass ZFS auch unter dem ganz normalen Ubuntu ab Version 20.x stärker verwendet werden soll. Also kommen auch da Snapshots stärker zum Einsatz als bisher. Es geht so wunderbar einfach und super schnell mit „zfs rollback“, dass ich immer wieder verblüfft bin… und zwar völlig egal, ob zwischendurch 4 kByte oder 4 TByte auf die Platten geschrieben wurden.

Ja, das ginge bei uns auch … also gestöpselt lassen aber die VMs nicht starten. Falls die zeitgleich doch mal zusammen laufen sollten, würde vermutlich ein großes Chaos ausbrechen, weil dann zwei Firewalls, zwei Server usw gleichzeitig da wären … daher habe ich das LAG lieber am Switch gezogen…

… dann noch etwas weiter gedacht und du kannst gleich auf einen ceph-Cluster wechseln :slight_smile:

ich habe nicht den Eindruck, dass es unter’m Strich weniger wird – eher im Gegenteil :thinking:

Schöne Grüße,
Michael