Übertragen einer auf einer LVM-Partition installierten virtuellen KVM-Maschine auf einen anderen Server mithilfe von lvmsync

Grüße Habr!

In dieser kurzen Anleitung möchte ich Ihnen meine Erfahrungen mit dem Dienstprogramm lvmsync mitteilen.

Mit diesem Dienstprogramm können Sie das Problem der Übertragung einer virtuellen Maschine von einem KVM-Server auf einen anderen mit minimaler Ausfallzeit der virtuellen Maschine lösen, ohne gemeinsam genutzten Speicher zu verwenden (nicht gemeinsam genutzter Speicher).
Wir übertragen die gesamte LVM-Partition, auf der die virtuelle Maschine installiert ist. Die Magie des LVM-Schnappschusses hilft uns dabei, Ausfallzeiten zu reduzieren. Informationen dazu finden Sie ganz einfach im Internet.

Hier ist eine Zusammenfassung der Migration der virtuellen Maschine:

  1. Machen Sie ein Foto des LVM-Abschnitts.
  2. Wir übertragen die Haupt-LVM-Partition über das Netzwerk, ohne unsere VM anzuhalten.
  3. Wenn die Übertragung der Hauptpartition beendet ist, stoppen Sie die VM.
  4. Führen Sie lvmsync aus, um den Snapshot über das Netzwerk zu übertragen. Es wird nicht das gesamte Bild übertragen, sondern nur die geänderten Blöcke.
  5. Wir bereiten die VM auf dem neuen Server vor und führen sie aus.

Wenn Sie also lvmsync verwenden, entspricht die Leerlaufzeit der virtuellen Maschine der Übertragungszeit der geänderten Blöcke im Snapshot der Hauptpartition.

Weitere Informationen zur Arbeit von lvmsync und weitere nützliche Informationen finden Sie auf der Projektseite .



Es wird weiterhin angenommen, dass wir Sudo-Rechte im System haben, der SSH-Zugriff über Schlüssel konfiguriert wird und der Root-Zugriff verweigert wird.

Beginnen wir mit der VM-Übertragung:

Installation:

Damit lvmsync funktioniert, benötigen wir Ruby 1.8 (oder höher), ssh und dmsetup.
Laden Sie lvmsync auf den lokalen Computer herunter:

wget https://github.com/mpalmer/lvmsync.git

Kopieren Sie lvmsync in das Stammverzeichnis PATH, z. B. nach / usr / bin /.

Vorbereiten des Remote-Servers (server2):

1) Laden Sie lvmsync herunter und installieren Sie es.
2) Erstellen Sie eine LVM-Partition für die replizierte VM.

server2# lvcreate vg -n new-virtual  -L 16G

Die Größe der Partition sollte der ursprünglichen Partition entsprechen (im Prinzip kann sie größer sein als das Original, aber ich habe diese Option nicht getestet).

Vorbereiten des lokalen Servers und Verschieben der VM.

Außerdem müssen alle Befehle auf dem Server ausgeführt werden, von dem aus die virtuelle Maschine (server1) verschoben werden soll.

1) Erstellen Sie eine XML-Definition:

server1# virsh dumpxml virtual > virtual.xml

2) Machen Sie ein Foto des Abschnitts:

server1# lvcreate --snapshot -L10G -n virtual-snap /dev/vg/virtual

Achtung!
Bitte beachten Sie, dass die Größe des Images von der Nutzungsintensität der VM abhängt. Weil Während wir den Hauptteil übertragen, werden alle Daten im Snapshot „gespeichert“.
Und wenn das Bild vollständig ausgefüllt ist, wird es automatisch deaktiviert .

3) Ohne die VM anzuhalten, übertragen wir die Hauptpartition mit dd:

server1# dd if=/dev/vg/virtual bs=1M | gzip -c | pv -ptrb | ssh me@server2 "gunzip -c | sudo dd of=/dev/vg/new-virtual"

Hier wird die Komprimierung der übertragenen Daten mit einem gzip hinzugefügt und der Fortschritt der Datenübertragung mit pv angezeigt.

4) Wenn die Übertragung abgeschlossen ist, stoppen Sie die virtuelle Maschine:

server1# virsh shutdown virtual

5) Starten Sie lvmsync, nachdem der Computer vollständig angehalten wurde, um das Bild zu übertragen:

server1# lvmsync --stdout /dev/vg/virtual-snap | ssh me@server2 sudo lvmsync --apply - /dev/vg/new-virtual

Dieser Vorgang überträgt nicht nur den Snapshot auf den neuen Server, sondern speichert ihn auch sofort in der Haupt-LVM-Partition.

6) Kopieren Sie die Definitions-XML auf den Remote-Server:

server1# scp virtual.xml me@server2:/home/me/new-virtual.xml


Vorbereiten und Starten einer virtuellen Maschine auf einem neuen Server:



1) Ändern Sie gegebenenfalls die Definition xml.

2) Erstellen Sie eine virtuelle Maschine basierend auf xml:

server2# virsh define new-virtual.xml

3) Wir starten unsere virtuelle Maschine und registrieren sie beim Autostart:

server2# virsh start new-virtual
server2# virsh autostart new-virtual


Die Migration der virtuellen Maschine ist abgeschlossen!

Hinweise

Das Dienstprogramm wurde auf Centos 6.4 getestet. Ich finde es schwierig, etwas über die Transferzeit zu sagen, weil Alles hängt von der Intensität der Arbeit mit der virtuellen Maschine während der Übertragung und dementsprechend von der Größe des Snapshots ab.

Jetzt auch beliebt: