Ich frage mich, wie man eine VM richtig zwischen zwei KVM-Hosts verschiebt, ohne einen gemeinsamen Speicher zu verwenden
Würde es ausreichen, die Festplattendateien und den XML-Speicherauszug vom Quell-KVM-Rechner zum Ziel zu kopieren? Wenn ja, welche Befehle müssen ausgeführt werden, um die VM auf dem Ziel zu importieren?
Das Betriebssystem ist Ubuntu auf Dom0 und DomU.
Danke im Voraus
kvm-virtualization
ubuntu-12.04
Onitlikesonic
quelle
quelle
/dev/mapper/vgname-lvname
Da ich noch keinen Kommentar abgeben kann, muss ich diesen Zusatz zu dyasnys Antwort auf diese Weise posten.
Wenn die VM über Snapshots verfügt, die Sie beibehalten möchten, sollten Sie die Snapshot-XML-Dateien
virsh snapshot-dumpxml $dom $name > file.xml
für jeden Snapshot in der Snapshot-Liste der VM in der Quelle sichernvirsh snapshot-list --name $dom
.Verwenden Sie dann auf dem Ziel
virsh snapshot-create --redefine $dom file.xml
, um die Migration der Snapshots abzuschließen.Wenn es Ihnen auch wichtig ist, welcher Schnappschuss der aktuelle ist, dann machen Sie zusätzlich auf der Quelle:
virsh snapshot-current --name $dom
und auf dem Ziel:
virsh snapshot-current $dom $name
Anschließend können Sie
virsh snapshot-delete --metadata $dom $name
für jeden Schnappschuss die XML-Dateien in der Quelle löschen oder sie einfach von löschen/var/lib/libvirt/qemu/snapshots/$guestname
Quellen:
libvirt-users Mailingliste
http://kashyapc.com/2012/09/14/externaland-live-snapshots-with-libvirt/
quelle
Ja, es reicht aus, nur die XML-Datei und die Images der virtuellen Festplatte zu kopieren, aber dies schließt offensichtlich eine "Live" -Migration aus. Die VM muss während dieses Vorgangs ausgeschaltet sein.
Nach dem Kopieren in das Ziel
libvirtd
muss es neu geladen oder neu gestartet werden, um die neue XML-Datei zu erkennen.quelle
virsh
. Ich würde einfach die Dateien direkt kopieren und neu ladenlibvirtd
.Detaillierte Anweisungen zum Kopieren von VMs mit blocksync.py
Diese Anweisungen gelten für eine VM, die eine von LVM bereitgestellte Festplatte verwendet, und setzen voraus, dass sich Python auf jedem der Hosts befindet
Laden Sie das Skript blocksync.py von https://gist.github.com/rcoup/1338263 herunter und legen Sie sowohl den Quell- als auch den Zielhost in Ihrem Ordner / home / user ab.
Vorläufer
Sie müssen auch auf beiden Rechnern 'sudo'-Zugriff auf' root 'haben.
Alternativ können Sie alles als Root ausführen, aber nur, wenn Sie mit Ihrem SSH-Schlüssel als Root mindestens auf den Zielcomputer zugreifen können. ** Entfernen Sie in diesem Fall den Benutzernamen aus den Befehlszeilen.
Beispieleinstellungen
Verfahren
Erste Schritte auf dem Quellhost
Kopieren Sie die gedumpte Definition auf den neuen Rechner (den "Ziel" -Host), zB:
Sie können die interne IP-Adresse in den Namen Ihres Dom0-Zielservers ändern. ** Hinweis: Am besten verwenden Sie die IP-Adresse für das Ziel, z.Wenn Sie aufgrund von Schlüsseln die cat larry.xml nicht kopieren und kopieren können, können Sie ssh in eine andere Maschine kopieren und eine Datei erstellen und diese einfügen.
Ermitteln Sie die Größe und den Namen der VM-Festplatte mithilfe von
.** Der obige Befehl sollte die Größe genau in Bytes anzeigen. ** Der Laufwerksname des Computers befindet sich in der ersten Spalte der Liste, die Volume-Gruppe in der zweiten und die Größe in der letzten. ** Ermitteln Sie den Gerätenamen als / dev // ** Überprüfen Sie ihn mit einem 'll'-Befehl. Beispiel für diese Ausgabe: vm_larry vg1 -wi-ao ---- 69793218560B
Erste Schritte auf dem Zielhost
Erstellen Sie eine Volume-Definitionsdatei, zB:
oder mit den folgenden Zeilen: HINWEIS - Sie müssen die Größe in Byte von der ursprünglichen VM übernehmen und in das folgende Skript einfügen. Der Befehl auf dem Quellcomputer für Größe lautete sudo lvs --units BHinweis: Diese Definition gilt für eine 69793218560-Byte-Festplatte für VM Larry. Ändern Sie sie nach Bedarf für die tatsächliche VM.
Hinweis: Der Name und der letzte Teil des Pfads müssen übereinstimmen und werden als neuer Laufwerksname verwendet.
Erstellen Sie die neue Festplatte aus der Definition mit
Es wird Vol larry.domainname.com.au aus larry.domainname.com.au-vol.xml angezeigt
Machen Sie die Datenträger-Gerätedatei zugänglich:
Bearbeiten Sie die kopierte XML-Definition, zB:
Suchen Sie die Festplattendefinition in der Datei (suchen Sie nach "source dev =") und ersetzen Sie das Gerät durch das soeben erstellte (Sie können ls / dev / centos / verwenden, um vm anzuzeigen), z. B .: / dev / drbd4 -> / dev / centos / larry.domainname.com.au
Dieser Brückenwechsel war einzigartig für unsere Situation.
** Suchen Sie in den Zeilengruppen der Benutzeroberfläche nach Verweisen auf "br1" und ändern Sie sie in "br0", z
Letzte Schritte auf dem Quellhost
Melden Sie sich beim Quellhost an, z
Die beste Vorgehensweise wäre, die VM auf dem Quellhost herunterzufahren, bevor die endgültige Synchronisierung durchgeführt wird, dies ist jedoch nicht erforderlich. (Virsh Shutdown NameOfMachine)
Laden Sie das blocksync.py-Skript von https://gist.github.com/rcoup/1338263 herunter, sofern es nicht bereits auf dem Quellhost vorhanden ist
Wenn Ihr Benutzername beispielsweise user ist, kopieren Sie das Skript blocksync.py auf beide Rechner in / home / user und chown user: user und chmod 755 das Skript.
Befehl, der den Kopiervorgang ausführt
Hinweis: Der erste Gerätename gilt für den Quellhost, wie aus dem Befehl 'lvs' ermittelt. Dieser stammt von einem [[chewie]] Quellenhost.
Hinweis: Dies wird zerstören , den Inhalt der Zielscheibe, stellen Sie sicher , dass /dev/mapper/centos-larry.domainname.com.au korrekt ist!
Hinweis: Die Synchronisierung dauert sehr lange - ungefähr 100 Sekunden pro Gigabyte, dh: 90 Minuten für eine 60-Gigabyte-Festplatte.
Sie können jedoch eine Synchronisierung durchführen, während die VM verwendet wird. Nachfolgende Synchronisierungen können bis zu 25 Prozent schneller sein
Das Skript druckt die verwendeten Parameter aus (möglicherweise wird eine Meldung zu einem veralteten Modul angezeigt, dies ist in Ordnung). Anschließend wird der verwendete Befehl ssh angezeigt und ausgeführt (in diesem Fall wird nur die Meldung "Nur autorisierte Mitarbeiter" angezeigt). Während der Synchronisierung werden eine laufende Anzahl kopierter Blöcke und die durchschnittliche Geschwindigkeit angezeigt. Abschließend wird eine Abschlussmeldung mit der Anzahl der Sekunden gedruckt, die sie benötigt hat.
Sachen zu wissen
Sie können die Synchronisierung mit STRG + C abbrechen und später neu starten, indem Sie den Befehl erneut ausführen
Letzte Schritte auf dem Zielhost
Hinweis: Möglicherweise müssen Sie die Details der VM an die neue Umgebung anpassen.
quelle
Ich habe dieses Problem bei einigen meiner älteren KVM-Server festgestellt, aber es ist wirklich ärgerlich, wenn es passiert, und kann Probleme mit allen installierten VMs verursachen. In meinem Fall wurde eine meiner VMs regelmäßig in den Reset-Zustand versetzt, da der Festplattenspeicher langsam erschöpft war. Die folgenden Anweisungen sind für die KVM / Distro-Version etwas empfindlich. In meinem Fall habe ich CentOS 7.5
Standardmäßig befinden sich die KVM-Images im Verzeichnis / var / lib / libvirt / images /
Sie müssen den Namen der VM finden, für diese Verwendung Virsh-Liste
Stoppen Sie den VM-Virsh. Stoppen Sie VM-Name
Für mich kopiere ich die Datei zuerst, anstatt sie zu verschieben. Kopieren Sie die qcow-Datei an den neuen Speicherort
Bearbeiten Sie die VM-XML-Datei, um auf den neuen Speicherort der Quelldatei zu verweisen. Bearbeiten Sie den VM-Namen
Sie möchten die "Quelldatei" dieser Datei ändern
Starten Sie den libvirtd-Dienst neu
Starten Sie dann die VM neu und Sie sollten bereit sein zu gehen.
quelle