Net als Xen biedt KVM de mogelijkheid om een virtuele machine in zijn totaliteit te migreren naar een andere machine, waarna die daar gewoon door kan draaien. Dat kan omdat de volledige toestand van de virtuele machine wordt overgezet, onder andere de kerneltoestand, alle processen, kortom het hele virtuele RAM. Die migratie kan 'cold' of 'live' gebeuren. Bij een koude migratie wordt de virtuele machine gepauzeerd en naar de andere fysieke machine overgezet, waarbij de downtime significant kan zijn. Bij een live migratie blijft de virtuele machine tijdens het migreren draaien, waardoor de downtime bijna nihil is.

Vanuit de Qemu-console

Een eerste manier voor live migratie van een virtuele machine in KVM is vanuit de Qemu-console. Zorg ervoor dat de virtuele schijf van de virtuele machine die je wilt migreren op beide fysieke machines via het netwerk bereikbaar is. Hiervoor kun je NFS gebruiken, maar ook iSCSI of ATA-over-Ethernet (AoE). Start nu het image op de originele fysieke machine. Daarna start je hetzelfde image ook op de doelmachine met exact dezelfde configuratie, maar dan met de volgende optie aan het KVM-commando toegevoegd:

-incoming tcp://0:4444

De virtuele machine zal nu blijven hangen en luisteren naar een inkomende aanvraag voor migratie. Open nu het VNC-venster van de virtuele machine op de originele computer en typ Ctrl+Alt+2 om de Qemu-console te openen. Typ daar de volgende opdracht in:

migrate -d tcp://192.168.1.100:4444

Waarbij je 192.168.1.100 vervangt door het IP-adres van de doelmachine. In de Qemu-console van de originele virtuele machine kun je op elk moment de status van de migratie opvragen met:

info migrate

Met libvirt

Gebruik je libvirt, dan kun je de live migratie uitvoeren met het commandline-programma virsh. Bekijk op de bronmachine met "virsh list" of de te migreren virtuele machine (hier met de naam 'testvm') draait. Is dat het geval, dan begin je de migratie op de bronmachine met het volgende commando:

# virsh migrate --live testvm qemu+ssh://192.168.1.100/system

Hierbij vervang je 192.168.1.100 door het IP-adres van de doelmachine. We gebruiken hier overigens ssh om de toestand van de machine versleuteld over het netwerk te sturen, en met /system vertellen we libvirt dat we root-toegang vragen. Hierna moet je dan ook je root-wachtwoord van de doelmachine ingeven. Of liever nog: maak een RSA-sleutel aan en plaats de publieke sleutel in /root/.ssh/authorized_keys van de doelmachine. Wacht een tijdje na het invoeren van het migratiecommando en controleer daarna op de doelmachine met "virsh list" of de virtuele machine daar draait.

Helemaal grafisch

Beheer je je virtuele machines liever op een grafische manier, dan kun je ook virt-manager gebruiken voor de live migratie. Verbind in dit programma met de bron- en doelcomputers. In het File-menu klik je op "Add Connection", en in het venster dat dan verschijnt kies je als hypervisor voor Qemu en als connectie bijvoorbeeld voor "Remote tunnel over SSH". Geef dan de hostname van de doelcomputer in en klik op Connect.

Zorg er nu ook voor dat je een storage pool hebt die op beide machines via NFS of iSCSI te bereiken is, en laat je virtuele machine van een image op deze storage pool opstarten. Als de virtuele machine draait, kun je er in het hoofdvenster van virt-manager gewoon op rechtsklikken, "Migrate" kiezen en dan de locatie van de doelcomputer. Klik op "Yes" om te bevestigen en daarna wordt de virtuele machine naar de nieuwe computer gemigreerd. Gemakkelijker kan het niet.

En verder

De manier met libvirt is op lange termijn de interessantste, omdat je met exact dezelfde syntax een live migratie kunt uitvoeren onafhankelijk van de onderliggende hypervisor, Xen of KVM. In plaats van qemu+ssh gebruik je dan bijvoorbeeld xen+ssh als protocol. Dat is ook de manier die Red Hat aanbeveelt, waardoor je je bestaande scripts of gewoontes nauwelijks hoeft aan te passen als je van Xen naar KVM overstapt als hypervisor. Bron: Techworld