A lo largo de los años, la virtualización de los servicios de Internet ha supuesto un importante avance en los mismos; un cambio en los modelos de negocio de las compañías de hosting debido, entre otras cosas, a un incremento sustancial del aprovechamiento de los recursos disponibles utilizados. Xen nos permite disfrutar de la virtualización de servidores en entornos heterogéneos.

Por Roberto Andradas Izquierdo

Una máquina virtual es un sistema que proporciona los mismos servicios a los que estamos acostumbrados cuando utilizamos un ordenador con la diferencia de que el hardware sobre el que ejecuta es completamente virtual. Esta virtualización del hardware es gestionada por un sistema anfitrión que ejecuta un sistema operativo sobre hardware tradicional.

¿Qué es Xen?

Xen es un hipervisor distribuido bajo licencia General Public License de GNU (GPL) que nos permite ejecutar varios sistemas operativos en un mismo sistema anfitrión en el cual el aislamiento entre los recursos asignados a cada sistema operativo es absoluto. Cada uno de estos sistemas operativos residen en una máquina virtual. El sistema anfitrión es un sistema GNU/Linux que contiene las imágenes de estas máquinas virtuales, estas imágenes contienen el sistema de ficheros sobre el que descansan los datos del sistema operativo que será ejecutado, además de los datos de usuario y de sistema, cada máquina virtual es llamada dominio. Xen utiliza el concepto de paravirtualización, el cual consiste en que cada una de las máquinas virtuales sean conscientes de que están siendo virtualizadas de forma que colaboren con el sistema anfitrión para conseguir un mayor rendimiento ofreciendo a cada uno de los dominios una capa hardware sobre la que trabajan exactamente como lo haría un sistema GNU/Linux habitual. Esto nos lleva a la siguiente característica de Xen, y es que el kernel de GNU/Linux necesita ser modificado para poder proporcionar paravirtualiación. Por esta razón encontramos, como veremos más adelante, que existen kernels especiales para poder implementar virtualización en GNU/Linux utilizando Xen.

¿Qué nos permite hacer Xen?

Una de las bondades de utilizar virtualización es que vamos a poder disponer virtualmente de varias máquinas reduciendo el coste en hardware al mínimo y permitiendo a entidades y personas aprovechar sus recursos hardware al máximo. Además, debido a que las máquinas virtuales descansan sobre ficheros imagen en el sistema anfitrión y que dichas máquinas están gestionadas por el hipervisor Xen que nos permite tratar dichas máquinas como si fueran físicas y realizar operaciones con ellas utilizando software, dispondremos de una agilidad nunca vista para tratar con ellas en entornos no virtualizados. En general, con tecnologías de virtualización de máquinas podremos hacer cosas muy interesantes, como asignar nuevos recursos a las máquinas virtuales (CPU, memoria, disco) sin necesidad alguna de pararlas. Podremos migrar dichas máquinas de un anfitrión Xen a otro copiando el fichero imagen a través de la red. La replicación de los sistemas en producción para recrearlos en entorno de pre-producción será una tarea trivial y por supuesto muchas de las tareas tradicionalmente asignadas al equipo de operación de los servidores no serán necesarias; tareas como el reinicio físico de máquinas que hayan quedado fuera de juego podrán realizarse desde el anfitrión de forma completamente remota, por lo que no necesitaremos adquirir hardware que proporcione un interfaz de gestión inteligente de la plataforma (Intelligent Platform Management Interface, IPMI) para ello. Por supuesto, cualquier usuario podrá disfrutar de un sistema GNU/Linux con capacidad para ejecutar máquinas virtuales en su portátil, ordenador de sobremesa o servidor casero sin necesidad de grandes recursos.

¿En qué entornos es adecuado el uso de Xen?

Actualmente, Xen está siendo utilizado por grandes organizaciones como la Comisión Europea en el Observatorio y Repositorio de Open Source (OSOR de sus siglas en inglés) http://www.osor.eu, o Amazon. Especialmente, en entornos donde la flexibilidad, el aprovechamientos de recursos y la aplicación de software libre sea un tema a tener en cuenta, Xen es un candidato firme. Configuración del anfitrión Xen Debido a la gran complejidad que podemos alcanzar en la configuración de sistemas virtualizados vamos a estudiar desde el principio el proceso de creación de un anfitrión que sea capaz de albergar varias máquinas virtuales. Para ello partiremos del supuesto de un servidor con Debian GNU/Linux Etch 4.0r5 en el cual vamos a instalar y configurar el paquete

Debian Xen 3.0.3-0-4.

A lo largo del proceso de configuración aclararemos algunos conceptos básicos que nos serán útiles para comprender Xen. En primer lugar debemos aclarar algunos términos sobre los dominios.

  • – Dom0: Es el nombre que recibe el sistema anfitrión el cual es
  • gestionado por el hipervisor Xen.
  • – DomU: Es el nombre que recibe cada uno de los dominios ejecutados por
  • el demonio xend en Dom0. Cada uno de los DomU utilizan el kernel
  • albergado en el sistema de fichero de Dom0.

En primer lugar debemos conocer qué kernel estamos utilizando para instalar la versión del kernel con soporte Xen correspondiente; esto es debido a que la implementación de Xen está pensada para ser una modificación del kernel de Linux en lugar de por ejemplo un módulo del mismo. Este kernel será el utilizado por Dom0 y los diferentes DomU y será almacenado en el sistema de fichero de Dom0.

$ uname -a

Linux foo 2.6.18-6-486

A continuación buscaremos paquete del kernel correspondiente con soporte para Xen:

$ apt-cache search xen-linux-system |grep 2.6.18

xen-linux-system-2.6.18-6-xen-686 – XEN system with Linux 2.6.18 image on i686

Posteriormente instalaremos dicho kernel y algunos paquetes más que

necesitaremos:

# apt-get install xen-linux-system-2.6.18-6-xen-686 libc6-xen bridge-utils xen-tools

  • – libc6-xen: Biblioteca estándar de C utilizada por numerosos programas
  • del sistemas optimizada para Xen.
  • – bridge-utiles: Utilidades necesarias para que Xen pueda trabajar con
  • la creación de interfaces de red virtuales. Porque con Xen
  • dispondremos de capacidad para crear redes virtuales entre los
  • diferentes dominios, incluido Dom0.
  • – xen-tools: Este paquete no forma parte del hipervisor Xen, simplemente
  • son una serie de herramientas que nos permitirán manejar las máquinas
  • virtuales más cómodamente.

A continuación, y antes de reiniciar para cargar el nuevo kernel, vamos a hacer un reparto inicial de la memoria. Suponemos un equipo con 4GB de memoria en el que el sistema anfitrión Dom0 únicamente servirá las máquinas virtuales y en el cual no ejecutaremos ningún otro servicio, por lo tanto 256MB serán suficientes para Dom0 y el resto por lo tanto será repartido entre las diferentes DomUs. Para ello editaremos el fichero /boot/grub/menu.lst de la siguiente forma:

xenhopt=dom0_mem=262144

kernel /boot/xen-3.0.3-4-i386-pae.gz dom0_mem=262144

xenhopt se utiliza para indicar que cuando actualicemos el kernel el parámetro dom0_mem se siga añadiendo de forma automática y no tengamos que volver a añadirlo a mano. Además, dado que las imágenes de las máquinas virtuales serán montadas por el sistema anfitrión utilizando el módulo loop del kernel, debemos modificar el número de imágenes que el kernel puede montar para no tener problemas a la hora de lanzar nuevas máquinas virtuales. Para ello modificaremos el fichero /etc/modprobe.d/options:

options loop max_loop=64

# rmmod loop

# modprobe loop

Ahora estamos listos pare proceder a cargar el nuevo kernel con las nuevas características y soporte Xen. Durante el arranque de la máquina anfitriona observaremos cómo en el listado de kernels que habitualmente muestra grub hay uno nuevo que arrancará por defecto. Tras unos segundos o minutos, dependiendo de lo rápida que sea vuestra máquina la tendremos lista para continuar con la configuración de nuestra plataforma virtualizada. Para comprobar que los cambios se han realizado basta con comprobar la versión del kernel que ahora estamos ejecutando y la cantidad de memoria disponible. Evidentemente en este momento nos encontramos en Dom0.

$ uname -a

Linux foo 2.6.18-6-xen-686

$ free

total used free shared buffers

Mem: 262144 198112

dónde observamos que ahora tenemos un kernel Linux con soporte para Xen y que la memoria disponible son 256MB.

A continuación debemos decidir la forma en la que las máquinas virtuales (DomUs) accederán a Internet. Xen proporciona mecanismos para configurar una red virtual entre los diferentes dominios de forma que podemos hacer que Dom0 gestione el acceso a los DomU desde internet mediante NAT o incluso permitiendo que los DomU tengan acceso directo a Internet utilizando un bridge entre Dom0 y las DomUs. En este artículo vamos a configurar la plataforma para que las DomUs tengan acceso directo a Internet o, dependiendo del contexto, a la red a la que la máquina anfitriona está conectada físicamente. Para ello utilizaremos el bridge, el cual permite conectar múltiples tramos de red a nivel de enlace de datos; específicamente en Xen conecta las interfaces virtuales con el tramo de red de la máquina anfitriona, como en la figura de abajo.

Figura 1. Tratamiento de interfaces de red virtuales de Xen

Editaremos el fichero /etc/xen/xend-config.sxp para descomentar la línea:

(network-script network-bridge)

En el propio fichero se puede observar una leve explicación con un diagrama que nos facilita la tarea de entender de un vistazo para qué sirve esta opción.

Como paso final para terminar de preparar el anfitrión creamos el directorio /etc/xen/auto. Este directorio albergará enlaces simbólicos a los ficheros de configuración de cada una de las máquinas virtuales indicando así que cuando el anfitrión arranque deberá encender cada una de las máquinas virtuales propietarias de los ficheros de configuración que se encuentran en dicho directorio. Podemos deducir que manipulando este directorio podemos hacer que ciertas máquinas virtuales no arranquen de forma automática y necesiten de intervención manual.

Xen-tools y creación de mi primera máquina virtual

Xen-tools es un paquete que incluye scripts que harán que la creación de máquinas virtuales sea trivial y que por lo tanto el despliegue de nuevas máquinas en un anfitrión sea rápido en comparación al tiempo que tardaríamos en desplegar una nueva máquina física. Xen-tools dispone de un fichero de configuración base que será utilizado por defecto en la creación de máquinas virtuales:

dir = /xen

debootstrap = 1

size = 10Gb # Disk image size.

memory = 512Mb # Memory size

swap = 512Mb # Swap size

# noswap = 1 # Don’t use swap at all for the new system.

fs = ext3 # use the EXT3 filesystem for the disk image.

dist = etch # Default distribution to install.

image = sparse # Specify sparse vs. full disk images.

gateway = 192.168.0.1

netmask = 255.255.255.0

mirror = http://ftp.rediris.es/debian/

kernel = /boot/vmlinuz-2.6.18-6-xen-686

initrd = /boot/initrd.img-2.6.18-6-xen-686

En este fichero observamos numerosos parámetros de configuración aunque los más importantes son los que aquí se muestran. Merece la pena mencionar el parámetro “gateway” ya que nuestro anfitrión está conectado mediante su interfaz de red a una LAN cuya puerta de enlace es la indicada y dado que estamos usando un bridge para comunicar los DomUs con dicha LAN también deberán conocer la puerta de enlace de la misma para poder tener una salida hacia Internet cuando sea necesario. Recomiendo probar diferentes parámetros aunque los incluidos en este artículo son los que nos van a permitir crear una máquina virtual estándar multipropósito. Además, las variables “kernel” e “initrd” indican parámetros que deberán coincidir con los existentes en el sistema anfitrión; es posible que deban ser modificados si efectuamos una actualización en el sistema que cambie la versión de nuestro kernel con soporte para Xen. Debemos asegurarnos de que el conjunto de máquinas virtuales más la memoria asignada previamente a Dom0 no sobrepasa la cantidad total de memoria de la máquina anfitriona o tendremos problemas.

Antes de comenzar con el resto de la instalación de nuestra primera máquina virtual debemos tener claro que Xen permite utilizar discos, particiones e incluso otras imágenes almacenadas en la máquina anfitriona que serán presentadas a la máquina virtual como un dispositivo físico que puede ser montado y donde podremos ejecutar instrucciones de lectura y escritura. Esto nos resultará muy útil para crear un procedimiento de creación de máquinas virtuales donde la máquina siempre va a tener, por ejemplo, la configuración planteada anteriormente por defecto y a la que podremos añadir nuevos dispositivos físicos si lo necesitamos.

Dicho esto vamos a crear una máquina virtual llamada “bar” utilizando el comando xen-create-image.

# xen-create-image –hostname=bar.mimaquinavirtual.org –ip=192.168.0.127

Dicho comando incluye algunos parámetros que no fueron incluidos en el fichero /etc/xen-tools/xen-tools.conf como por ejemplo la ip. Podemos incluir otros muchos, incluso aquellos que ya están en el fichero de xen-tools ya que estos parámetros prevalecen. Tras unos minutos en los que se creará la imagen de la máquina virtual y será almacenada en /xen como hemos indicado en el fichero de configuración de xen-tools, tendremos casi lista nuestra máquina virtual.

Una vez que el proceso ha terminado satisfactoriamente debemos preparar la máquina virtual para su utilización. Para ello la ejecutaremos por primera vez en modo consola. Este modo es el equivalente a sentarte delante de un servidor y manipularlo desde su teclado. Así pues, desde Dom0 debemos lanzar la máquina virtual con el siguiente comando:

# xm create bar.mimaquinavirtual.org.cfg -c

Ante nuestros ojos observaremos cómo la nueva máquina virtual arranca satisfactoriamente y nos pide login en el cual utilizaremos root. De momento, la nueva máquina virtual no dispone de password para el usuario root, y es posible que tampoco incluya el servidor ssh tan necesario para tantas tareas comunes en GNU/Linux; tras loguearnos podemos corregir estos detalles básicos de la administración de sistemas. Posteriormente debemos apagar la máquina virtual como lo haríamos habitualmente desde la línea de comandos:

# shutdown -h now

Aparecemos de nuevo en Dom0 donde terminaremos por indicar que queremos que la máquina bar.libresoft.es sea lanzada automáticamente cuando nuestro anfitrión físico arranque. Para ello crearemos un enlace simbólico al fichero de configuración de nuestra nueva máquina virtual en el directorio /etc/xen/auto:

# cd /etc/xen/auto

# ln -s ../bar.mimaquinavirtual.org.cfg .

Finalmente dejaremos la máquina virtual ejecutándose en segundo plano:

# xm create bar.mimaquinavirtual.org.cfg

Using config file “/etc/xen/bar.mimaquinavirtual.org.cfg”.

Started domain bar.mimaquinavirtual.org

A partir de este momento la máquina virtual es totalmente operativa, podemos conectar a ella utilizando ssh y la ip que indicamos en el momento de su creación; una vez dentro podemos utilizarla como si de una máquina más se tratase, modificando su configuración, instalando servicios, dando de alta nuevos usuarios o ejecutando aplicaciones diversas olvidándonos casi por completo de que estamos en un entorno virtualizado. Casi por completo porque no debemos olvidar que estamos utilizando paravirtualización y por lo tanto un kernel compartido, lo que habrá que tener en cuenta para tareas relacionadas con este.

Gestión básica de máquinas virtuales

Desde Dom0 podemos gestionar las máquinas virtuales y manejarlas a nuestro antojo, existen infinidad de formas y de cambios posibles que son sin duda interesantes pero también muy extensos. A continuación vamos a presentar un listado de algunos comando útiles que nos permitirán gestionar los DomUs.

Listar máquinas virtuales que están en ejecución:

# xm list

máquina anfitriona

# xm list

Name ID Mem(MiB) VCPUs State Time(s)

Domain-0 0 196 4 r—– 5230.1

bar.mimaquinavirtual.org 2 512 1 -b—- 683.5

moo.mimaquinavirtual.org 3 256 1 -b—- 14748.0

buzz.otherdomain.org 4 512 1 -b—- 369.2

bee.beesworld.org 5 512 1 -b—- 364.6

Entrar en modo consola a una máquina ejecutando:

# xm console bar.mimaquinavirtual.org

Muy útil cuando aún no tenemos acceso a la máquina virtual por red y necesitamos realizar la instalación del servidor ssh.

Reiniciar máquinas virtuales:

# xm reboot bar.mimaquinavirtual.org

Detener una máquina que está ejecutando:

# xm shutdown bar.mimaquinavirtual.org

Detener una máquina que no responde:

# xm destroy bar.mimaquinavirtual.org

Detener una máquina y guardar su estado:

# xm save bar.mimaquinavirtual.org ./bar-state.state

De este modo podemos detener una máquina virtual almacenando su estado para posteriormente retomarlo. Es similar a la hibernación en máquinas físicas. En el periodo de tiempo en el que la máquina está detenida los recursos que esta ocupaba se liberan.

Migración de máquinas virtuales entre máquinas anfitrionas:

# xm migrate bar.mimaquinavirtual.org 192.168.0.3

Siendo 192.168.0.3 el anfitrión al que queremos migrar la máquina virtual. Evidentemente dicho anfitrión debe estar correctamente configurado y listo para ejecutar máquinas virtuales Xen.

Asignación de CPUs

Otro detalle a tener en cuenta a la hora de gestionar un anfitrión que alberga máquinas virtuales son las CPUs físicas de nuestro anfitrión. Por defecto estas serán utilizadas por los DomU, pero podemos definir qué CPU o CPUs usa cada máquina virtual. En primer lugar, para poder conocer el estado actual utilizaremos el siguiente comando:

# xm vcpu-list

El cual mostrará por pantalla un listado similar al siguiente:

Name ID VCPUs CPU State Time(s) CPU Affinity

Domain-0 0 0 0 r– 2678.4 any cpu

Domain-0 0 1 3 -b- 369.9 any cpu

Domain-0 0 2 3 -b- 159.0 any cpu

Domain-0 0 3 2 -b- 157.9 any cpu

bar.mimaquinavirtual.org 2 0 3 -b- 370.1 any cpu

moo.mimaquinavirtual.org 3 0 3 -b- 9908.6 any cpu

En el sistema actual, en el que la asignación de CPUs es por defecto, observamos que cualquier dominio (columna Name) puede usar cualquier CPU (última columna CPU). El resto de columnas muestran información del momento en el que fue ejecutado el comando. En este caso Dom0 estaba utilizando las CPUs 0,3 y 2. Además Dom0 tiene asignadas 4 CPUs virtuales. Cada fila equivale a una CPU virtual.

Idealmente, dado que las máquinas virtuales contendrán servicios, es deseable reservar las CPUs para ellas por lo que asignaremos a Dom0 una única CPU física editando el fichero /etc/xen/xend-config.sxp:

(dom0-cpus 1)

Es importante saber que esto asigna Dom0 a la CPU 0, pero que el resto de DomU podrán seguir utilizando la CPU 0; es por esto que es interesante pensar en asignar a cada DomU las CPUs que podrá utilizar editando su fichero de configuración, /etc/xen/bar.mimaquinavirtual.org.cfg:

cpus = ’3′

Este valor indica que la máquina virtual bar.mimaquinavirtual.org utilizará la CPU 3. De nuevo el resto de máquinas virtuales podrán utilizar también la CPU física 3. Incluso podemos indicar que use varias

CPUs físicas si utilizamos, por ejemplo, el valor 2-3 con el que estaríamos asignando la CPU 2 y 3.

Finalmente podemos hacer ver a cada una de las máquinas virtuales que disponen de varias CPUs virtuales con el parámetro vcpus, modificando el mismo fichero:

vcpus = ’2′

Estaríamos indicando que la máquina virtual bar.mimaquinavirtual.org va a disponer de dos CPUs virtuales, donde se observan ambas CPUs asumiendo una determinada carga.

Es importante hacerse la pregunta de si una determinada máquina virtual realmente necesita varias CPUs virtuales o no, además de si preferimos asignar CPUs físicas a máquinas virtuales para hacer un mejor reparto de los recursos de la plataforma anfitriona. Por último, en relación a la optimización de la plataforma, disponemos de mecanismos que nos permiten asignar CPUs virtuales a CPUs físicas; esto obligaría a que todas las instrucciones que vayan a ejecutarse en una determinada CPU virtual lo hagan sobre una CPU física determinada. Esto evita la asignación dinámica de instrucciones a la CPU menos ocupada en cada momento, lo que supone una penalización al rendimiento de la plataforma si se da muy frecuentemente; en cambio, tiene la desventaja de que si no realizamos la asignación correctamente podemos provocar que una o más CPUs físicas estén saturadas en un momento determinado mientras que otras están infrautilizadas.

Conclusiones y trabajos futuros

Sin duda la virtualización de servicios y concretamente la de máquinas se está convirtiendo en uno de los principales filones en los últimos años y presumiblemente será el paradigma predominante tanto en el área de sistemas de las grandes empresas del sector como una opción muy jugosa y accesible para PYMES. Incluso en el entorno de usuario ya estamos empezando a poder disfrutar desde hace meses de hardware y software que nos permiten la virtualización de máquinas a base de la utilización de un interfaz de usuario, ver figura 2, y a un nivel en el cual la curva de aprendizaje es asumible por la mayoría de usuarios de nivel medio en prácticamente cualquiera de los sistemas operativos que predominan en los PCs de sobremesa. Como hemos visto, Xen nos permite realizar fácilmente y de forma mecánica la tarea de creación de máquinas virtuales GNU/Linux; las capacidades de Xen son prácticamente infinitas para aquellos que necesitan algo más, como por ejemplo la creación de interfaces de red para crear redes virtuales que conecten varias máquinas virtuales dentro de una máquina anfitriona o la optimización a nivel hardware de la plataforma, incluso en caliente. Por último y para terminar de mostrar el contexto en el cual esta tecnología está resultando muy útil, debemos recordar servicios como Heartbeat que nos permite implementar sistemas de alta disponibilidad en los cuales las máquinas pueden ser completamente virtuales o entornos de cloud computing, que habitualmente tienen una fuerte conexión con temas de virtualización y que también están de actualidad.

Figura 2. Interfaz de usuario para gestión de máquinas virtuales  con ConVirt

 

Via: RevistaLinux

Por admin

Deja una respuesta