KVM / Libvirt: Virtuelle Maschine zu neuem Server migrieren

Ein frischer neuer Server mit einem KVM-Hypervisor steht bereit und es sollen bestehende virtuelle Maschinen (VM) vom alten KVM-Hypervisor zu einem neuen KVM-Hypervisor übertragen oder umgezogen werden. Über die Kommandozeile und dem Tool "virsh" lässt sich der VM-Guest (Gast - Virtuelle Maschine) mit seiner Konfiguration exportieren. Je nach VM-Typ muss unterschiedlich vorgegangen werden. Liegt die Gast-VM als Datei-Container vor, so kann die Datei (z.B. qcow2) direkt zum neuen Server kopiert werden. Handelt es sich um eine Gast-VM auf Basis eines Logical Volume (LVM), muss diese vorher mittels "DD (DiskDump) oder "qemu-img convert" exportiert werden.

Eingerichtet unter Ubuntu 14.04 LTS mit "qemu-system-x86" (QEMU / Libvirt / KVM) in der Version 2.6.x. Die Konfiguration kann je nach Ubuntu-/Debian- und QEMU / Libvirt / KVM-Version abweichen.

Hinweis: Dies ist keine KVM / Libvirt Live-Migration!

Vorgehensweise zur Migration der KVM-Guests zu einem neuen Server

  • Virtuelle Maschine (Guest) herunterfahren
  • Exportieren der Konfigurationen der virtuellen Maschine
  • Kopieren / Transferieren der virtuellen Maschine auf den neuen Server. (z.B. via Rsync oder SCP)
  • Definieren der virtuellen Maschine auf dem neuen KVM-Hypervisor
  • Virtuelle Maschine auf dem neuen KVM-Hypervisor starten
  • Alte virtuelle Maschine löschen

Export des KVM-Guests auf Datei-Container-Basis

virsh list --all
virsh shutdown VMNAME
virsh dumpxml VMNAME > /tmp/VMNAME.xml
rsync -tv --progress --stats -e 'ssh -p222' /tmp/VMNAME.xml root@85.10.CC.DD:/tmp/VMNAME.xml
rsync -tv --progress --stats -e 'ssh -p222' /var/lib/libvirt/images/VMNAME.qcow2 root@85.10.CC.DD:/var/lib/libvirt/images/VMNAME.qcow2

virsh undefine VMNAME
rm /var/lib/libvirt/images/VMNAME.qcow2

Export des KVM-Guests auf Logical Volume (LVM)-Basis

virsh list --all
virsh shutdown VMNAME
virsh dumpxml VMNAME > /tmp/VMNAME.xml

# vg0 : Volume Group name; vm-vmname: Name der virtuellen Maschine (KVM-Guest); -p : Fortschrittsbalken anzeigen
qemu-img convert -f raw /dev/vg0/vm-VMNAME -O raw /tmp/vm-VMNAME.img -p

rsync -tv --progress --stats -e 'ssh -p222' /tmp/VMNAME.xml root@85.10.CC.DD:/tmp/VMNAME.xml
rsync -tv --progress --stats -e 'ssh -p222' /tmp/vm-VMNAME.img root@85.10.CC.DD:/tmp/vm-VMNAME.img

# Auf dem neuen KVM-Hypervisor (Host neu)
lvcreate -n vm-VMNAME vg0
dd if=/tmp/vm-VMNAME.img bs=1M of=/dev/vg0/vm-VMNAME

# Auf dem alten KVM-Hypervisor (Host alt)
virsh undefine VMNAME
rm /var/lib/libvirt/images/VMNAME.qcow2

Je nach Konfiguration des neuen KVM-Hypervisors (Server), müssen nachträglich die Einstellungen (SATA-Controller, Network-Device, ...) der virtuellen Maschine geändert werden.

Tags: , , , , , , , , , ,

Hinterlasse eine Nachricht