Migración en tiempo real de instancias en Qemu,KVM

Hacer una copia del cliente VM1 teniendo como resultado un cliente con el nombre de VM1_clone.

Es necesario suspender ó apagar al cliente para poder clonarlo.

$ virsh suspend VM1
Dominio VM1 suspendido

Para clonar una instancia virtual lo hacemos con el comando virt-clone. Explicando un poco las opciones básicas seleccionadas acontinuación:

  • -o, nombramos el cliente que vamos a clonar
  • -n, es el nombre del nuevo cliente clonado
  • -f, es la dirección absoluta de la nueva imagen de almacenamiento
$ virt-clone -o VM1 -n VM1_clone -f /media/kvm_pool/VM1_clone.img
Asignando 'VM1_clone.img' | 40 GB 04:52
Clone 'VM1_clone' created successfully.

Al terminar la ejecucion del comando anterior con virsh resume reanudamos nuestro cliente que esta pausado.

$ virsh resume VM1
Migración de cliente en vivo (Live)

La migración en vivo nos es de utilidad cuando requerimos mover el cliente de su “servidor virtual” hacia otro sin necesidad de apagar el cliente, esto es completamente transparente.

Requisitos previos:

El medio de almacenamiento del cliente debe estar corriendo sobre un sistema de almacenamiento en red como:

  • iSCSI
  • NFS
  • GFS2

Ambos servicios Qemu/KVM deben ser tener la misma versión y las mismas actualizaciones.

Primero debemos tener una configuración para la resolución de host. En este ejemplo nuestros servidores Qemu/KVM tienen la siguiente información asignada:

  • virt1 tiene asignado la IP 10.0.0.1
  • virt2 tiene asignado la IP 10.0.0.2

En ambos servidores tendremos configurado el archivo host para que resuelva sus nombres de dominio locales asignados.

$ vim /etc/hosts
127.0.0.1   localhost localhost.localdomain
::1         localhost localhost.localdomain
10.0.0.1   virt1
10.0.0.2   virt2

En este ejemplo usaremos un servicio NFS como storage pool, este contiene nuestras imagenes de discos de nuestras instancias virtuales.

Ambos servidores Qemu/KVM deben tener montado en el mismo directorio el recurso NFS.

La sintaxis del comando de migración virsh migrate es la siguiente:

$ virsh migrate --live --persistent Guest URLConnection

Donde Guest, es el nombre del cliente a migrar.

URLConnection es la URL de conexión hacia el servidor destino, ejemplo: qemu+ssh://hostname/system.

La opcion --persistent nos hara el movimiento permanente. De lo contrario si esta opcion no es puesta al apagar el cliente en el servidor destino se eliminara las configuraciones.

Listamos las instancias virtuales que se esta ejecutando en virt1

(virt1)$ virsh list
 Id    Nombre                         Estado
----------------------------------------------------
 1     VM1                            ejecutando

Ahora migramos VM1 del servidor virt1 al servidor virt2.

(virt1)$ virsh migrate --live --persistent VM1 qemu+ssh://virt2/system

Notese que el comando anterior usa el servicio SSH y de manera implicita conecta usando el usuario root. Si quisieramos usar otro usuario ante ponemos al nombre del hostname el usuario. Por ejemplo: qemu+ssh://admin@virt2/system

Listamos las instancias virtuales y observamos que VM1 esta apagado en virt1

(virt1)$ virsh list --all
 Id    Nombre                         Estado
----------------------------------------------------
 -     VM1                            apagado

Y ahora listamos las instancias virtuales y vemos a VM1 que ya se encuentra ejecutandose en virt2.

(virt2)$ virsh list --all
 Id    Nombre                         Estado
----------------------------------------------------
 1     VM1                            ejecutando

Ahora nos queda una instancia de VM1 en virt1 que podemos eliminar si deseamos, siempre y cuando NO borremos la imagen del medio de almacenamiento ya que se tiene asociado en la instancia alojada en virt2.

Armando Uch

An Accidental Engineer
• Lazy #Programmer • #TacOps 🌮 • #BOFH
🎸⚾️🍺☕️


2015-12-09