Jan.
8
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.