Destacada para XenDespués de haber trabajado con diversos sistemas de virtualización, entre ellos VMWare ESXi, Proxmox (OpenVZ + KVM) y Virtualbox, ahora me ha surgido la oportunidad de instalar un par de servidores de virtualización, así que aprovecharé para sacarme una de las espinitas que llevo clavada desde hace tiempo: Trabajar con Xen.

Vamos a ver cómo se instala un servidor Xen para gestionar máquinas de tipo PV (Paravirtualización) sobre Debian 7 Wheezy, la actual estable. En los sistemas de virtualización es muy habitual valerse de archivos de imagen de disco para que las máquinas virtuales las utilicen como particiones o discos duros. Xen también soporta esta característica, pero nuestros dominios (nombre para referise a las máquinas virtuales de Xen), en lugar de archivos, utilizarán volúmenes lógicos de LVM como particiones. Incrementan el rendimiento y ofrecen una mayor flexibilidad para gestionar backups.

Diagrama de la estructura lógica de LVM para XenDurante la instalación de Debian he configurado LVM sobre un único disco de 160 GB, donde sólo hay una partición de tipo LVM. LVM contiene un grupo de volúmenes (vg) llamado xen. En este vg se encuentra la partición /dev/sda1 como volumen físico. También tiene dos volúmenes lógicos: El primero se llama root, tiene 8 GB y será la raíz del filesystem del servidor. El segundo de llama swap, tiene 2 GB y será la partición swap del servidor. El resto del espacio del vg debe quedarse sin asignar. Este espacio será utilizado por los dominios que creemos para Xen, donde cada partición será un nuevo volumen lógico.

Una vez terminada la instalación base de Debian, instalaremos el software necesario para virtualizar con Xen. Necesitamos los siguientes paquetes:

bridge-utils: Herramientas de gestión de bridges, para administrar la conectividad de los dominios.
xen-linux-system: Hipervisor Xen, módulos del kernel y entradas de GRUB.
xen-tools: Scripts de Perl para gestionar facilmente dominios de Xen en un host Debian.

Procedemos a su instalación:

# apt-get install bridge-utils xen-linux-system xen-tools

Configuramos la conectividad de red en Xen:

# vi /etc/xen/xend-config.sxp

Nos aseguramos de que los scripts network-bridge y vif-bridge están definidos:

[...]

# (network-script network-bridge)
(network-script network-bridge)

[...]

(vif-script vif-bridge)

[...]

La instalación de Xen ha añadido una entrada al menú de arranque de GRUB en su última posición. Como no está en primera posición, no es la entrada predeterminada de GRUB y no se lanzará automaticamente al iniciar el equipo. Debemos ponerla como primera en la lista de GRUB:

# dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen
''/etc/grub.d/20_linux_xen' lokalki hona desbideratuta: /etc/grub.d/08_linux_xen' gehitzen

Actualizamos la configuración de GRUB para que establezca los cambios realizados:

# update-grub
Generating grub.cfg ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-3.2.0-4-amd64
Found initrd image: /boot/initrd.img-3.2.0-4-amd64
Found linux image: /boot/vmlinuz-3.2.0-4-amd64
Found initrd image: /boot/initrd.img-3.2.0-4-amd64
Found memtest86+ image: /boot/memtest86+.bin
Found memtest86+ multiboot image: /boot/memtest86+_multiboot.bin
done

Si reiniciasemos ahora, se cargaría automaticamente la entrada de Xen, pero no lo haremos aún. Aprovechamos que debemos reiniciar para antes definir un bridge que utilizaremos para comunicar los dominios con nuestra LAN:

# vi /etc/network/interfaces

Desconfiguramos por completo la interfaz eth0. Creamos el bridge el nombre xenbr0 y le asignamos la misma dirección IP del servidor.

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet manual

auto xenbr0
iface xenbr0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1
bridge_ports eth0
bridge_maxwait 0

Reiniciamos:

# reboot

Una vez reiniciado, comprobamos si Xen funciona:

# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  6797     2     r-----      8.5

Los dominios aparecen, Xen está funcionando. El siguiente paso será crear un nuevo dominio, Xen ofrece herramientas para ello, pero utilizaremos una de las herramientas de xen-tools, llamada xen-create-image. La misma se encargará de crear y asignar los volúmenes lógicos para las particiones, instalar y configurar el sistema operativo, generar el fichero de configuración del dominio y asignar una contraseña al superusuario root.

La creación de un dominio depende de una gran cantidad de parámetros. Para evitar añadir todos ellos cada vez que creamos un dominio, el script xen-create-image lee la configuración del fichero /etc/xen-tools/xen-tools.conf, donde definiremos los valores por defecto de cada parámetro, construyendo así una plantilla para la creación de dominios. Al iniciarse, xen-create-image lee el fichero de configuración y después recibe los parámetros que nosotros le hayamos definido desde la línea de comandos, que sobreescriben el valor de los parámetros por defecto.

Renombramos el fichero de configuración como si fuese un backup, y creamos uno nuevo sólo con los parámetros que nos interesan:

# mv /etc/xen-tools/xen-tools.conf /etc/xen-tools/xen-tools.conf.bak
# vi /etc/xen-tools/xen-tools.conf

La existencia del parámetro lvm hace que Xen trabaje con volúmenes lógicos de LVM en lugar de usar archivos de imagen. Le asignamos el valor xen refiriéndonos al vg llamado xen, que es el que tiene el espacio libre para nuevos volúmenes. El resto del fichero e configuración es muy intuitivo y no es necesario explicarlo:

lvm = xen # LVM support
install-method = debootstrap
size = 8Gb # Disk image size.
memory = 256Mb # Memory size
swap = 256Mb # Swap size
fs = ext4 # Use the EXT3 filesystem for the disk image.
dist = `xt-guess-suite-and-mirror --suite` # Default distribution to install.
image = sparse # Specify sparse vs. full disk images.
gateway = 192.168.1.1
netmask = 255.255.255.0
broadcast = 192.168.1.255
nameserver = 8.8.8.8
bridge = xenbr0
passwd = 1
kernel = /boot/vmlinuz-`uname -r`
initrd = /boot/initrd.img-`uname -r`
mirror = `xt-guess-suite-and-mirror --mirror` # Mirror autodetection
ext4_options = noatime,nodiratime,errors=remount-ro
ext3_options = noatime,nodiratime,errors=remount-ro
ext2_options = noatime,nodiratime,errors=remount-ro
xfs_options = defaults
reiserfs_options = defaults
btrfs_options = defaults
boot = 1

Ahora crearemos nuestro primer dominio paravirtualizado de Xen. Como no le hemos definido la distribución, instalará el mismo SO que tiene el servidor, Debian 7 Wheezy:

# xen-create-image --hostname host.domain.com --ip 192.168.1.3 --vcpus 1 --pygrub

Ahora nos conectaremos a la consola del nuevo dominio:

# xm console host.domain.com

Nos autenticamos:

Debian GNU/Linux 7 host hvc0

host login: root
Password:

Y probamos la conectividad hacia el propio dominio (192.168.1.3), el servidor (192.168.1.2), el router (192.168.1.1) y hacia uno de los servidores DNS de Google en internet (8.8.8.8):

# ping -c 4 192.168.1.3
# ping -c 4 192.168.1.2
# ping -c 4 192.168.1.1
# ping -c 4 8.8.8.8

Habiendo comprobado que funciona, salimos de la sesión de root:

# exit

A diferencia de lo que ocurre en plataformas como OpenVZ, si mientras usamos Xen desde una consola, cerramos la sesión de usuario en el SO del dominio, la consola sigue manteniendose conectada al sistema, por lo que en estos momentos volvemos a ver la pantalla de login. Para cerrar la sesión con la consola, pulsaremos simultáneamente las teclas Crtl y 5 de nuestro teclado. Volvemos a estar en la consola del servidor.

Y con esto terminamos este primer tutorial sobre Xen. En siguientes entradas seguiremos aprendiendo sobre otras características de Xen como los dominios HVM, configuraciones de red, snapshots, etc. Espero que el manual resulte útil y genere interés sobre este sistema de virtualización tan extendido.

Servidor Xen en Debian con LVM
Etiquetado en:                            

6 pensamientos en “Servidor Xen en Debian con LVM

  • 2017/01/09 a las 11:38
    Enlace permanente

    Joseba, muchas gracias por el articulo y tus comentarios, todo aclarado.
    De echo, tengo el servidor funcionando.

  • 2017/01/05 a las 14:28
    Enlace permanente

    Te animo a seguir investigando Xen, pero he visto que los últimos años KVM ha mejorado muchísimo tanto en rendimiento como en características y creo que podrían resultarte interesante sistemas de virtualización completos basados en esa tecnología, como por ejemplo Red Hat Enterprise Virtualization o su equivalente comunitario, oVirt. KVM se convirtió en mi tecnología favorita, los sistemas citados están orientados a servidor, en mi workstation virtualizo con KVM y lo gestiono con libvirt.

  • 2017/01/05 a las 14:15
    Enlace permanente

    No es que vayamos a crear un LV a parte para guardar imágenes, otro para ISOs, etc. Lo que se va a hacer es que el filesystem de cada dominio quede en un volumen lógico (LV) distinto.

    Me imagino que si montas el volumen lógico de un dominio en el filesystem del DomU, en principio serías capaz de acceder al contenido del mismo. Eso sí, si vas a hacerlo te recomiendo que lo hagas con el dominio detenido, pues ext4 no es el filesystem más indicado para montar un único recurso en más de un host al mismo tiempo. Si montases el LV de un dominio en el filesystem del DomU, estarías montando el LV en dos lugares: El filesystem del DomU y el dominio para el que se creó ese LV.

  • 2017/01/05 a las 14:10
    Enlace permanente

    Hola Alex. Gracias por interesarte por este artículo 🙂

    No entiendo del todo bien cuál es la duda y desde que hice este manual no volví a tocar Xen, pero haré memoria 😛 Si mal no recuerdo, al crear un nuevo dominio, también se crea un nuevo volumen lógico. Recuerda que en esta instalación ya no estamos usando archivos de imagen. Debido a esto, el directorio raíz del DomU no quedaría nada adicional al crear nuevo dominios.

    Espero haber aclarado tu duda. Para lo que sea, me comentas.

  • 2017/01/03 a las 12:03
    Enlace permanente

    Ups!
    Una vez creado el DomU, hay algún problema si montamos los lv en un directorio, /images/domU/swap y /images/domU/mvU ? Es necesario o útil?

  • 2017/01/03 a las 11:16
    Enlace permanente

    Gracias por el tutorial.
    Una duda, tal y como se plantea la creación de los DomU, los ficheros quedaran localizados directamente en el directorio raíz, /, seria posible ubicarlos en un directorio /images/ ?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.