Migrar un domU Xen en frío

Xen proporciona una mecanismo de migración de máquinas virtuales en caliente, pero para ello necesitamos algún medio de almacenamiento compartido (SAN, iSCSI, etc) para que funcione. Veremos que es posible migrar máquinas virtuales entre servidores Xen sin almacenamiento compartido, eso sí, en frío y tardando un poco más que la migración en caliente.

Como requisito claro está, es tener un par de servidores ya funcionando como dom0 en Xen, y memoria y espacio de almacenamiento suficiente en el servidor de destino para ejecutar la máquina virtual que vamos a migrar. En mi caso se trata de dos servidores corriendo bajo Debian Etch en arquitectura x86-64, con máquinas virtuales usando volúmenes LVM, y que llamaremos xen1 y xen2 para simplificar.

El primer paso es crear en el servidor de destino los volúmenes lógicos necesarios con el mismo tamaño que en el servidor origen. Para ello miramos el número de logical extends que emplea cada partición en el servidor original. Así, suponiendo que queremos migrar una máquina virtual llamada vm1, que usa dos volúmenes lógicos vm1-disk y vm1-swwap, usaremos el siguiente comando:

xen1:~# lvdisplay -c vg00/vm1-disk vg00/vm1-swap
/dev/vg00/vm1-disk:vg00:3:1:-1:0:8388608:1024:-1:0:0:254:10
/dev/vg00/vm1-swap:vg00:3:1:-1:0:2097152:256:-1:0:0:254:11

El valor que estamos buscando es el sexto empezando por el final, es decir, 1024 para la partición vm1-disk y 256 para la partición vm1-swap. Con estos valores, ejecutamos los siguientes comandos en el servidor de destino:

xen2:~# lvcreate -l 1024 -n vm1-disk vg00
Logical volume "vm1-disk" created
xen2:~# lvcreate -l 256 -n vm1-swap vg00
Logical volume "vm1-swap" created

El siguiente paso es preparar el área de swap que acabamos de crear en el servidor de destino:

xen2:~# mkswap /dev/vg00/vm1-swap

El paso que nos llevará más tiempo es la transferencia de la máquina virtual del servidor origen al de destino. Este tiempo dependerá del tamaño de la partición (o particiones) que tengamos que transferir. Para realizar la transferencia, usaremos la herramienta netcat. En primer lugar preparamos el servidor de destino:

xen2:~# netcat -l -p 12345 > /dev/vg00/vm1-disk

Con esto, estamos abriendo un puerto de escucha, el 12345, en el servidor de destino, y le decimos que todo lo que reciba por ese puerto lo escriba en el volumen lógico /dev/vg00/vm1-disk. Hemos de tener cuidado ya que cualquiera podría conectarse con ese puerto y mandarnos basura a la partición. Ahora toca la parte en el servidor origen:

xen1:~# dd if=/dev/vg00/vm1-disk | netcat xen2 12345

Ahora estamos diciendo que el servidor origen lea la partición /dev/vg00/vm1-disk y la envíe mediante el comando netcat al servidor xen2 (el servidor de destino) que está escuchando en el puerto 12345. Este comando debemos ejecutarlo con la máquina virtual completamente parada (no suspendida, si no tendríamos que transferir también el archivo que se crea con el estado de la máquina virtual cuando se suspende, aunque esto no lo he probado). Cuando termine la transferencia (dd muestra las estadísticas de lectura y escritura), pulsamos Ctrl+C para terminar netcat. Automáticamente se cierra la conexión en destino.

El último paso es transferir el archivo de configuración de la máquina virtual, normalmente /etc/xen/vm1.cfg, y arrancar la máquina virtual en el servidor remoto comprobando que todo ha funcionado perfectamente.

Anuncios

2 pensamientos en “Migrar un domU Xen en frío

  1. se nota que sabes muhco de xen, yo apenas estoy empezando el ambien linux y espero que me puedas ayudar con unas dudas que tengo sobre xen.

    tengo instalado debianetch 4.0 y sobre el instale xen, despues de haber creado mi maquina virtual vm1, no se como instalar debian sobre mi maquina virtual desde la consola… espero y me des unos tips para poder instalar algo en mi maquina virtual,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s