Inicio / Blog's y documentación / Blogs / jmedina

Les traigo una noticia muy importante para aquellos que estan cerca de los entornos de virtualización con Linux, en este caso les hablare de el soporte del kernel Linux para correr en maquinas virtuales Xen DomU y Dom0 sobre el hypervisor Xen.

Desde hace ya algunos años es posible correr un kernel Linux vanila en maquinas virtuales Xen DomU sobre el hypervisor Xen, en un principio con unos parches al kernel Linux (XenLinux), después se integraron los parches en el kernel oficial Linux desde la versión 2.6.27 con PVOPS, el soporte que se incluyo fueron los drivers Xen Bus, network driver además de I/O driver entre otros componentes, esto permite correr el kernel Linux vanilla en hardware fisico como en maquinas virtuales Xen DomU.

El soporte para correr Linux en modo dominio de adminitración o Domain-0 se mantenia por separado, en parches para el ahora algo viejo kernel 2.6.18 o en kernels algo modernos que solo algunas distribuciones lo soportaban no oficialmente, sin embargo, seguian siendo esfuerzos separados.

Ahora todo ha cambiado ya que Linus Torvalds ha aceptado integrar en la rama oficial 2.6.39+ el soporte PVOPS de forma oficial para que Linux corra de forma nativa en entornos fisicos, virtualizados como Xen Domain-0 o DomU y otras alternativas como KVM, estos esfuerzos benefician tanto a la comunidad, equipos de desarrollo y a todos aquellos que estan ya usando Xen para virtualizar sistemas Linux.

Para más información les recomiendo el articulo publicado en los blogs de Oracle: Linux mainline contains all the Xen code bits for Dom0 and DomU, además les recomiendo leer la pagina del wikiXen paravirt_ops for upstream Linux kernel, donde podrán encontrar más información de el progreso de los componentes integrados.

Así es, ya esta aquí la versión estable de Xen 4.1, despuśe de 11 meses de desarrollo y gracias a las contribuciones de voluntarios y empresas que contribuyen al desarrollo de Xen.org, Aquí les dejo el anuncio oficial (en inglés), ya es hora de probar esta versión y esperemos que se corrijan muchos de los problemas que había en Xen 4.0.

After 11 months of development and 1906 commits later (6 a day !!!), Xen.org is proud to present its new stable Xen 4.1 release. We also wanted to take this opportunity to thank the 102 individuals and 25 organisations who have contributed to the Xen codebase and the 60 individuals who made just over 400 commits to the Xen subsystem and drivers in the Linux kernel.

New Xen Features

Xen 4.1 sports the following new features:

  • A re-architected XL toolstack that is functionally nearly equivalent to XM/XEND
  • Prototype credit2 scheduler designed for latency-sensitive workloads and very large systems
  • CPU Pools for advanced partitioning
  • Support for large systems (>255 processors and 1GB/2MB super page support)
  • Support for x86 Advanced Vector eXtension (AVX)
  • New Memory Access API enabling integration of 3rd party security solutions into Xen virtualized environments
  • Even better stability through our new automated regression tests

Further information can be found in the release notes.

XL Toolstack: Xen 4.1 includes a re-architected toolstack, that is based on the new libxenlightlibrary, providing a simple and robust API for toolstacks. XL is functionally equivalent and almost entirely backwards compatible with existing XM domain configuration files. The XEND toolstack remains supported in Xen 4.1 however we strongly recommend that users upgrade to XL. For more information see the Migration Guide. Projects are underway to port XCP’s xapi and libvirt to the new libxenlight library.

Credit2 Scheduler: The credit1 scheduler has served Xen well for many years. But it has several weaknesses, including working poorly for latency-sensitive workloads, such as network traffic and audio. The credit2 scheduler is a complete rewrite, designed with latency-sensitive workloads and very large numbers of CPUs in mind. We are still calling it a prototype scheduler as the algorithm needs more work before it will be ready to become the main scheduler. However it is stable and will perform better for some workloads than credit1.

CPU pools: The default credit scheduler provides limited mechanisms (pinning VMs to CPUs and using weights) to partition a machine and allocate CPUs to VMs. CPU pools provide a more powerful and easy to use way to partition a machine: the physical CPUs of a machine are divided into pools. Each CPU pool runs its own scheduler and each running VM is assigned to one pool. This not only allows a more robust and user friendly way to partition a machine, but it allows using different schedulers for different pools, depending on which scheduler works best for that workload.

Large Systems: Xen 4.1 has been extended and optimized to take advantage of new hardware features, increasing performance and scalability in particular for large systems. Xen now supports the Intel x2APIC architecture and is able to support systems with more than 255 CPUs. Further, support for EPT/VTd 1GB/2MB super pages has been added to Xen, reducing the TLB overhead. EPT/VTd page table sharing simplifies the support for Intel’s IOMMU by allowing the CPU’s Enhanced Page Table to be directly utilized by the VTd IOMMU. Timer drift has been eliminated through TSC-deadline timer support that provides a per-processor timer tick.

Advanced Vector eXtension (AVX): Support for xsave and xrestor floating point instructions has been added, enabling Xen guests to utilize AVX instructions available on newer Intel processors.

Memory Access API: The mem_access API has been added to enable suitably privileged domains to intercept and handle memory faults. This extents Xen’s security features in a new direction and enables third parties to invoke malware detection software or other security solutions on demand from outside the virtual machine.

Upstreaming

During the development cycle of Xen 4.1, the Xen community worked closely with upstream Linux distributions to ensure that Xen dom0 support and Xen guest support is available from unmodified Linux distributions. This means that using and installing Xen has become much easier than it was in the past.

  • Basic dom0 support was added to the Linux kernel and a vanilla 2.6.38 kernel is now able to boot on Xen as initial domain. There is still some work to do as the initial domain is not yet able to start any VMs, but this and other improvements have already been submitted to the kernel community or will be soon.
  • Xen developers rewrote the Xen PV-on-HVM Linux drivers in 2010 and submitted them for inclusion in upstream Linux kernel. Xen PV-on-HVM drivers were merged to upstream kernel.org Linux 2.6.36, and various optimizations were added in Linux 2.6.37. This means that any Linux 2.6.36 or 2.6.37 kernel binary can now boot natively, on Xen as dom0, on Xen asPV guest and on Xen as PV on HVM guest. For a full list of supported Linux distributions seehere.
  • Xen support for upstream Qemu was developed, such that upstream Qemu can be used as Xen device model. Our work has received a good feedback from the Qemu Community, but is not yet in the mainline.

The Xen development community recognizes that there is still some way to go, thus we will continue to work with upstream open source projects to ensure that Xen works out-of-the-box with all major operating systems, allowing users to get the benefits of Xen such as multi-OS support, performance, reliability, security and feature richness without incurring the burden of having to use custom builds of operating systems.

More Info

Downloads, release notes, data sheet and other information are available from the download page. Links to useful wiki pages and other resources can be found on the Xen support page.

En este documento se explicará paso a paso como instalar y preparar un entorno de para-virtualización con Xen 3.2 sobre Ubuntu Server 8.,04.1 en un sistema de 64-bits.

Caracteristicas de la implementación

  • Entorno solo Para-Virtualizacaión sobre arquitectura Intel 64bits
  • Automatización de maquinas virtuales mediante xen-tools
  • Uso de Linux Volume Manager (LVM) como sistema de almacenamiento
  • Soporte para hacer snapshots de maquinas virtuales usando LVM
  • Las maquinas virtuales tendrán Ubuntu Hardy 8.04.1

Terminología

Host = Equipo en donde se alojan las maquinas virtuales

Dom0 = En terminología de Xen este es el Host

Guest = Maquina virtual que se ejecuta en el Host

DomU = Maquina virtual en terminología de Xen

Configuración de Hardware

Se instalará Ubuntu Server Hardy 8.04.1 64bits.

Al terminar de instalar el sistema con el siguiente esquema de particiones

Disco Duro Sata 80GB (/dev/sda)

Partición /dev/sda1 /boot 200MB

Partición /dev/sda2 swap 2000MB

Partición /dev/sda3 LVM Resto

/dev/sda3 es el Physical Volume (PV) el cual será parte de un Volume Group (VG) VGsystem01 en el cual se crearán Volumens Lógicos (LV) para la partición raíz de la maquina Host (Domain0) y también las particiones para todas las demás maquinas virtuales (DomainU).

Volumens Lógicos

/dev/mapper/VGsystem01-root / 10G

NOTA: En este momento no crearemos más LV ya que las herramientas xen-tools se encargarán de automatizar la creación al momento de crear las maquinas virtuales.

Al terminar la instalación reiniciamos y confirmamos que tenemos instalado un kernel con soporte SMP y de 64bits:

# uname -a

Ahora actualizaremos el sistema con apt

# apt-get update
# apt-get upgrade

Instalar el servidor OpenSSH

apt-get install openssh-server

Ahora podemos continuar con la instalación de los elementos de xen.

Instalación de Ubuntu Xen Server

Instalación del kernel de xen y las herramientas para nuestro entorno, este paso lo podemos automatizar instalando el metapaquete ubuntu-xen-server

root@actiaxh:~# aptitude install ubuntu-xen-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Building tag database... Done
The following NEW packages will be automatically installed:
  binutils binutils-static bridge-utils debootstrap gcc gcc-4.2 libasound2 libbeecrypt6
  libc6-dev libconfig-inifiles-perl libcurl3 libdirectfb-1.0-0 libexpect-perl libgomp1
  libio-pty-perl libio-stty-perl libneon27 librpm4.4 libsdl1.2debian libsdl1.2debian-alsa
  libterm-readline-gnu-perl libterm-size-perl libtext-template-perl libxen3 libxml2
  linux-libc-dev linux-restricted-modules-common linux-xen nvidia-kernel-common perl-doc
  python-dev python-xen-3.2 python2.5-dev rinse rpm screen sgml-base vnstat xen-docs-3.2
  xen-hypervisor-3.2 xen-shell xen-tools xen-utils-3.2 xfsprogs xml-core
The following NEW packages will be installed:
  binutils binutils-static bridge-utils debootstrap gcc gcc-4.2 libasound2 libbeecrypt6
  libc6-dev libconfig-inifiles-perl libcurl3 libdirectfb-1.0-0 libexpect-perl libgomp1
  libio-pty-perl libio-stty-perl libneon27 librpm4.4 libsdl1.2debian libsdl1.2debian-alsa
  libterm-readline-gnu-perl libterm-size-perl libtext-template-perl libxen3 libxml2
  linux-image-2.6.24-23-xen linux-image-xen linux-libc-dev
  linux-restricted-modules-2.6.24-23-xen linux-restricted-modules-common
  linux-restricted-modules-xen linux-ubuntu-modules-2.6.24-23-xen linux-xen
  nvidia-kernel-common perl-doc python-dev python-xen-3.2 python2.5-dev rinse rpm screen
  sgml-base ubuntu-xen-server vnstat xen-docs-3.2 xen-hypervisor-3.2 xen-shell xen-tools
  xen-utils-3.2 xfsprogs xml-core
0 packages upgraded, 51 newly installed, 0 to remove and 0 not upgraded.
Need to get 56.4MB of archives. After unpacking 196MB will be used.
Do you want to continue? [Y/n/?] Y

Cuando terminen de instalar los paquetes, automaticamente se agregará una entrada a la configuración del gestor de arranque GRUB, la podemos ver así:

# grep -A 5 "Xen 3.2" /boot/grub/menu.lst
title           Xen 3.2 / Ubuntu 8.04.2, kernel 2.6.24-23-xen
root            (hd0,0)
kernel          /xen-3.2.gz
module          /vmlinuz-2.6.24-23-xen root=/dev/mapper/VGsystem01-root ro console=tty0
module          /initrd.img-2.6.24-23-xen
quiet

Ahora reiniciamos el sistema para que inicie con el kernel de Xen

# reboot

Despues de reiniciar podemos confirmar que estamos sobre un kernel de xen con el siguiente comando:

# uname -a
Linux actiaxh 2.6.24-23-xen #1 SMP Mon Jan 26 03:09:12 UTC 2009 x86_64 GNU/Linux

Y podemos usar el coman xm para ver que este corriendo el Dominio0 de Xen

root@actiaxh:~# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                  0    1879  2                r-----   44.4

Preparando la configuración de xen-tools

Los archivos de configuración de xen-tools residen en el directoro /etc/xen-tools/, haremos algunos cambios en los archivos de configuración para personalizar nuestro entorno y predefinir los parametros de creación de maquinas virtuales.

root@actiaxh:~# cd /etc/xen-tools/

Respaldamos el archivo de configuración principal

root@actiaxh:/etc/xen-tools# cp xen-tools.conf xen-tools.conf.orig

Ahora cambiaremos los parametros:

Predefiniendo el Volume Group (VG) a utilizar

Aproximadamente en la linea 55 descomentamos la linea

# lvm = skx-vg

Por

lvm = VGsystem01
Definiendo parametros para discos de maquinas virtuales

Por default al crear una maquina virtual solo se crean dos volumens uno para la partición raíz de 4Gb y otro para la partición swap de 128Mb, cambiaremos esos valores.

Para cambiar el tamaño predeterminado para la partición raíz cambiamos el parametro:

size   = 4Gb

Por

size   = 6Gb

Para cambiar el tamaño predeterminado de la partición swap cambiamos el parametro:

swap   = 128Mb

Por

swap   = 512Mb

NOTA: Si no se desea utilizar los valores predeterminados, puede cambiarlos al momento de crear las maquinas virtuales con los parametros --size y --swap del comando xen-create-image.

Definiendo parametros para la memoría RAM asignada a las maquinas virtuales

Por default se asignan 128Mb de RAM a las maquinas virtuales, si queremos predefinir un tamaño de 512Mb, cambiamos el parametro

memory = 128Mb

Por

memory = 512Mb
Definiiendo la distribución por default para las maquinas virtuales

La configuración de xen-tools por default tiene definido a etch como la distribución predefinida, en nuestro caso utilizaremos la distribución Ubuntu Hardy, por lo que cambiaremos la opción

dist   = etch

Por

dist   = hardy
Definiendo el URL o ruta al repositorio de paquetes para hardy

xen-tools utiiliza la herramienta debootstrap para la automatización de maquinas virtuales, el metodo debootstrap por default baja todos los paquetes de Internet.

TODO: Meter nota sobre el cache.

Por default se tiene definido la ruta a los repositorios de Debian, para utilizar los repositorios de Ubuntu cambiamos

mirror = http://ftp.us.debian.org/debian/

Por

mirror = http://archive.ubuntu.com/ubuntu/

Este cambio será el último, guarde el archivo /etc/xen-tools/xen-tools.conf

Corrección de bug en el script de inicio xendomain

El script /etc/init.d/xendomains es el encargdo de iniciar y detener automaticamente las maquinas virtuales configuradas para arranque automático al inicio y el apagado del sistema.

Existe un bug en el script xendomains (bug 216761) que forma parte de paquete xen-utils-3.2, el problema es que cuando trata de iniciar las maquinas virtuales automaticamente o al tratar de detenerlas al apagar o reiniciar el sistema manda algunos errores en la pantalla referentes a un mal encomillado en las sentencias test del script.

# cd /etc/init.d/

Respaldamos el script original

root@actiaxh:/etc/init.d# cp xendomains xendomains.orig

Descargando y aplicando el parche

root@actiaxh:/etc/init.d# wget http://verde.e-compugraf.com/jm-confs/xen/hardy.xendomains.diff

root@actiaxh:/etc/init.d# patch -p0 --verbose < hardy.xendomains.diff
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- xendomains.orig    2009-01-29 12:57:45.000000000 -0600
|+++ xendomains 2009-01-29 15:09:53.000000000 -0600
--------------------------
Patching file xendomains using Plan A...
Hunk #1 succeeded at 63.
Hunk #2 succeeded at 80.
Hunk #3 succeeded at 183.
Hunk #4 succeeded at 193.
Hunk #5 succeeded at 268.
Hunk #6 succeeded at 310.
done


Para ver más información sobre este problema vea

.

NOTA: Este bug ya fue corregido en las ultimas versiones de Xen 3.2 den Ubuntu Hardy, ver historial de paquete xen 3.2

Corrigiendo bug en el script /usr/bin/xen-create-image

TODO: Creo que esto solo es para cuando usa archivos loopback para las particiones de los DomU.

El script /usr/bin/xen-create-image tiene un error

Los archivos de confguración que genera xen-tools utilizan el parametro file:// dentro del
bloque de configuración disk para indicar la ruta a los dispositivos que usará la maquina virtual,
en Xen 3.2, el parametro file se ha dejado de usar en favor del parametro tap:aio, por ejemplo
para vmbase:

Respaldando el archivo originial

root@actiaxh:~# cd /usr/bin/

root@actiaxh:/usr/bin# cp xen-create-image xen-create-image.orig

Descargando e instalando el parche

root@actiaxh:/usr/bin# wget http://verde.e-compugraf.com/jm-confs/xen/hardy.xen-create-image.diff

root@actiaxh:/usr/bin# patch -p0 --verbose < hardy.xen-create-image.diff
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- xen-create-image.orig      2009-02-07 05:23:16.000000000 -0600
|+++ xen-create-image   2009-02-07 05:24:22.000000000 -0600
--------------------------
Patching file xen-create-image using Plan A...
Hunk #1 succeeded at 2408.
done

Con este parche se corrige el problema.

Configuración del reloj de sistema y hardware

Es importante que el reloj del sistema Host este correctamente configurado y que se este sincronizando constantemente ya que el reloj de las maquinas virtuales es sincronizado con el reloj del Host.

Verificando que nuestro sistema este usando UTC

# date -u
Sat Feb  7 14:28:04 UTC 2009

Ahora reconfiguraremos el sistema para definir la zona horaría

# dpkg-reconfigure tzdata

Seleccionar America y Mexico City.

Sincronización manual con ntpdate

# ntpdate mx.pool.ntp.org
 7 Feb 08:30:30 ntpdate[9272]: adjust time server 201.155.229.129 offset -0.014936 sec

Ahora instalamos el servidor NTP para mantener sincronizado el reloj del sistema utilizando una fuente externa

# apt-get install ntp

Al terminar de instalar el paquete, el servidor NTP es automaticamente iniciado, además, el servicio ntp se configuro para arrancar automaticamente al inicio del sistema.

Agregando varios servidores del Pool de servidores NTP de México a la configuración del servidor NTP.

Editar el archvo /etc/ntp.conf y cambiar la linea

server ntp.ubuntu.com

Por

server mx.pool.ntp.org
server mx.pool.ntp.org
server mx.pool.ntp.org

Guardar el archivo y de configuración y reinciar el servicio ntp

root@actiaxh:~# /etc/init.d/ntp restart
 * Stopping NTP server ntpd          [ OK ]
 * Starting NTP server ntpd            [ OK ]

Creando una maquina virtual con dos particiones, una raiz y una swap

# xen-create-image --lvm=VGsystem01 --hostname=firewall --dhcp \
--install-method=debootstrap --mirror=file://media/cdrom/ --passwd

Por ahora no iniciaremos la maquina, aun falta la configuración de red?????????

Si deseamos que este DomU sea iniciado automaticamente al arranque del sistema debe de crear un enlace simbolico del archivo /etc/xen/firewall.cfg en el directorio /etc/xen/auto/, por ejemplo:

root@actiaxh:~# cd /etc/xen/auto

root@actiaxh:/etc/xen/auto# ln -s ../firewall.cfg firewall

root@actiaxh:/etc/xen/auto# ls -l firewall
lrwxrwxrwx 1 root root 15 2009-02-09 10:12 firewall -> ../firewall.cfg

De ahora en adelante, cuando usted apague el servidor este DomU será apagado limpiamente y tambíen será iniciado automaticamente cuando el sistema arranque.

Creando una maquina virtual con más de un volumen

Si queremos crear DomU con más de un volumen, por ejemplo, queremos instalar un servidor que va a tener una partición independiente para /home y otra para /var, para lograr esta configuración debemos de crear más volumens logicos y asignarlos al sistema, afortunadamente xen-tools nos provee de las funcionalidades para lograr esta tarea de forma sencilla creando plantillas de particiones.

Crearemos una plantilla para el siguiente esquema de particiones:

Volumen Punto de Montaje Tamaño
/dev/VGsystem01/fileserver-disk / 4GB
/dev/VGsystem01/fileserver-swap swap 1GB
/dev/VGsystem01/fileserver-home /home 10GB
/dev/VGsystem01/fileserver-var /var 10GB

Ahora crearemos un archivo de configuración para nuestra plantilla, por ejemplo creamos el archivo /etc/xen-tools/partitions.d/root-swap-home-var con el siguiente contenido:

[root]
size=4G
type=ext3
mountpoint=/
options=sync,errors=remount-ro

[swap]
size=1G
type=swap

[home]
size=10G
type=ext3
mountpoint=/home

[var]
size=10G
type=ext3
mountpoint=/var

Y para crear un nuevo DomU con que use este esquema utilizamos el siguiente comando:

xen-create-image --hostname=fileserver --partitions=root-swap-home-var --dhcp \
--install-method=debootstrap --mirror=file://media/cdrom/ --passwd

Nos mostrará una salida como la siguiente, donde nos muestra los volumenes logicos que se crearon

General Information
--------------------
Hostname       :  fileserver
Distribution   :  hardy
Partitions     :  swap            1G    (swap)
                  /               4G    (ext3)
                  /home           10G    (ext3)
                  /var            10G    (ext3)
Image type     :  full
Memory size    :  128Mb
Kernel path    :  /boot/vmlinuz-2.6.24-23-xen
Initrd path    :  /boot/initrd.img-2.6.24-23-xen

Networking Information
----------------------
IP Address     : DHCP [MAC: 00:16:3E:44:7F:74]


Creating swap on /dev/VGData01/fileserver-swap
Done

Creating ext3 filesystem on /dev/VGsystem01/fileserver-disk
Done

Creating ext3 filesystem on /dev/VGsystem01/fileserver-home
Done

Creating ext3 filesystem on /dev/VGsystem01/fileserver-var
Done
Installation method: debootstrap

Esto creo los 4 volumens, en la configuración nos muestra así:

disk        = [
                  'phy:/dev/VGsystem01/firewall-swap,xvda1,w',
                  'phy:/dev/VGsystem01/firewall-disk,xvda2,w',
                  'phy:/dev/VGsystem01/firewall-home,xvda3,w',
                  'phy:/dev/VGsystem01/firewall-var,xvda4,w',
              ]

Como agregar otro disco o volumen a un DomU

Sobre crear volumen LVM manual

Sobre agregar un RAID

Configuración de disk en .cfg

Prreparando la configuración de red en modo bridge para Xen

Xen puede ser configurado para permitir que las maquinas virtuales puedan usar la infraestrucutra de red existente y los segmentos de red. Xen permite configurar la red tanto del Dom0 como de los DomU, desde configuraciones básicas hasta otras más avanzadas usando bridges, STP, NAT, VLANs. En general, se puede configurar casi cualquier escenario que se pueda configurar en una red con Hosts no virtualizados.

La primer vez que se arranca el sistema con el kernel de Xen y sin tener definido un modo de configuración de red en Xen, se tiene un esquema similar al que se muestra en la siguiente figura

Xen_Red_Bridge_una_interfaz

Basicamente existen dos tipos de configuración de red en xen, configuración basada en bridge y configuración enrutada.

En este documento se describirá la configuración de red en Xen en modo bridge.

La configuración de red en modo bridge es la más simple y fácil de configurar dentro de Xen. Este tipo de red permite de forma simple y transparente a los DomU usar una interfaz de red virtual conectada a un switch virtual (bridge) creado y configurado en Dom0, la interfaz de red fisica eth0 en Dom0 esta conectada fisicamente al switch de la empresa y esta misma a su vez esta conectada al switch virtual, por lo que toda la comunicación es transparente para todos los hosts ya que todos estan conectados virtualmente a un mismo switch.
Con una configuración en modo bridge nos permitirá:

  • Las maquinas virtuales podrán utilizar direcciones IP estaticas tal y como lo hacen las demás maquinas conectadas a tu red fisica, o inclluso utilizar un servicio DHCP.
  • Quieres que las maquinas virtuales sean vistas de forma transparente desde las maquinas en la red fisica, es decir, que haya flujo entre las dos redes de forma transparente.
  • Incluso puede utilizar tecnologias como VLAN para crear redes locales virtuales y completamente aisladas unas de otras
  • Su equipo Host puede tener varias interfaces de red fisicas y quiere asignar o delegar una interfaz o más interfaces exclusivamente para un host, de esta forma puede tener DomU conectados a diferentes redes fisicas, o incluso puede beneficiarse de las funcionalidades de VLAN y Bonding o Link Aggregation (Ether Channel)

Configurando Xen en modo bridge

Los parametros de configuración para la red en se estan en el archivo /etc/xen/xend-config.sxp, en este archivo deben de haber dos lineas donde se especifica el script para la creación de bridges (network-script) y otra para la creación de las interfaces virtuales para los DomU (vif-script).

Para configurar Xen en modo de red bridge ha y que asegurarnos que solo haya una linea descomentada de network-bridge y una de vif-script, tal y como se muestera abajo.

(network-script network-bridge)

(vif-script vif-bridge)

Las configuraciones en modo bridge dependerá del numero de redes fisicas a conectar y de el número de interfaces fisicas en el Dom0, La configuración de Xen 3.2 en Ubuntu Hardy esta preconfigurada para sistemas con una sola interfaz fisica, y todas las los DomU utilizarán esta interfaz para el flujo de datos entre las diferentes redes, tanto de entrada como de salida,

Ahora reiniciamos el servidor para que inicie con la configuración de modo bridge.

Configuración predeterminada para una sola interfaz de red

Cuando Ubuntu inicia con xen en modo bridge se ejecuta el script /etc/xen/scripts/network-bridge realiza las siguientes tareas:

  1. Crea un nuevo bridge llamado xenbr0
  2. La interfaz Ethernet real eth0 es desactivada
  3. La dirección IP y MAC de eth es copiada a la interfaz de red virtual veth0
  4. La interfaz real eth0 es renombrada a peth0
  5. La interfaz virtual veth0 es renombrada a eth0
  6. peth y vif0.0 son agregadas al bridge xenbr0
  7. El bridge, peth0, eth0 y vif0.0 son activados

Al final el sistema quedará algo así:

Xen_Red_Bridge_una_interfaz_y_puertos

Como vemos la interfaz fisica peth0 esta conectada al switch de la red LAN y a su vez al bridge eth0, el cual se usa como la interfaz local para el Dom0, y usará la configuración definida en /etc/network/interfaces, por ejemplo, el archivo /etc/network/interfaces en Dom0 esta así:

# Interfaz Local para red LAN
auto eth0
iface eth0 inet static
  address 192.168.1.163
  netmask 255.255.255.0
  gateway 192.168.1.1

Podemos ver información de la red así

root@actiaxh:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:18:8b:fd:7b:7c
          inet addr:192.168.1.163  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::218:8bff:fefd:7b7c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:251 errors:0 dropped:0 overruns:0 frame:0
          TX packets:223 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:23932 (23.3 KB)  TX bytes:23395 (22.8 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

peth0     Link encap:Ethernet  HWaddr 00:18:8b:fd:7b:7c
          inet6 addr: fe80::218:8bff:fefd:7b7c/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:247 errors:0 dropped:0 overruns:0 frame:0
          TX packets:227 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:28074 (27.4 KB)  TX bytes:24633 (24.0 KB)
          Interrupt:16

Podemos ver el bridge y sus puertos con el siguiente comando

root@actiaxh:~# brctl show
bridge name     bridge id               STP enabled     interfaces
eth0            8000.00188bfd7b7c       no              peth0

Cuando creamos maquinas virtuales con xen-create-image solo le asignamos la configuración para la interfaz de red eth0 (predeterminada) en DomU, esto creará un nuevo puerto en el bridge, una interfaz vif1.0 la cual estará conectada a la interfaz virtual eth0 en el DomU, como se muestra en la siguiente imagen.

Xen_Red_Bridge_una_interfaz_y_un_DomU

Si crea más DomU se crearán más interfaces vifX, por ejemplo el DomU 2 tendrá asignada una interfaz virtual eth0 la cual estará conectada al bridge mediante el puerto vif2.0, todas las maquinas DomU por default peth0 para comunicarse con la demás red, habrá ocaciones en donde usted no quiere que todas sus maquinas salgan por una misma interfaz de red, ya se por cuestiones de rendimiento o de seguridad, en todo caso, usted puede agregar una interfaz de red fisica a su sistema y puede crear otro bridge a la que se conectará la maquina virtual, por ejemplo quiere tener una m aquina virtual como firewall/router y quiere tener una interfaz conectada directamente el modem de internet o router y que además este conectado al primer bridge para que todas las demás maquinas en la red puedan usar este equipo como gateway para salir a Innterne, en la sección se verá.

Configuración de Xen con red basada en bridge con multiples interfaces de red fisicas

La configuración actual no nos sirve del todo ya que solo se crea un bridge al que se le conecta una sola interfaz fisica, en nuestro caso vamos a agregar una interfaz fisica al sistema, la cual queremos que sea usada exclusivamente por el firewall/gateway, para esta nueva configuración tendremos que crear un script wrapper para /etc/xen/scripts/network-bridge el cual lo ejecutará dos veces para crear dos bridges.

Crearemos el script /etc/xen/scripts/multi-network-bridge con el siguiente contenido

#!/bin/sh
/etc/xen/scripts/network-bridge $1 netdev=eth0
/etc/xen/scripts/network-bridge $1 netdev=eth1

Guarde el archivo y asignele permisos de ejecucón

root@actiaxh:~# chmod +x /etc/xen/scripts/multi-network-bridge

Ahora tiene que cambiar la ruta del script para crear bridges en el archivo de configuración /etc/xen/xend-config.sxp, cambiar de

(network-script network-bridge)

por

(network-script multi-network-bridge)

Ahora reinicie el equipo, este será el último por ahora.

Al iniciar Xen se ejecutará el script multi-network-script y creará el segundo bridge eth1 conectado a la interfaz peth0, como se ve aqui

root@actiaxh:~# ifconfig peth1
peth1     Link encap:Ethernet  HWaddr 00:15:17:38:3e:28
          UP BROADCAST PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Base address:0xece0 Memory:fe9e0000-fea00000

También podemos ver la información de los bfidges

root@actiaxh:~# brctl show
bridge name     bridge id               STP enabled     interfaces
eth0            8000.00188bfd7b7c       no              peth0
eth1            8000.001517383e28       no              peth1

eth0 de DomU2 estará conectada al bridge eth0 y

eth1 de Domu2 estará conectada al bridge eth1 que estará conectada directamente al modem de internet

Modificaremos el archivo de configuración /etc/xen/firewall.cfg y cambiaremos la linea vif para indicarle los bridges

Por default easta así:

vif         = [ 'mac=00:16:3E:EF:91:2F' ]

Ese MAC address se genero automáticamente y por default quedamos que utiliza el primer bridge eth0, para agregarle otra interfaz a este DomU debemos de cambiar la linea así:

vif         = [ 'mac=00:16:3E:EF:91:2F, bridge=eth0',
                'mac=00:16:3e:07:31:85, bridge=eth1']

Se recomienda utilizar el rango de direcciones MAC reservadas para Xen, el rango es 00:16:3e:xx:xx:xx, puede utilizar un script para generar MAC de forma aleatoria, cree el script /usr/local/bin/macgen.py con el siguiente contenido:

#! /usr/bin/python
# macgen.py script generates a MAC address for Xen guests
#
import random
mac = [ 0x00, 0x16, 0x3e,
random.randint(0x00, 0x7f),
random.randint(0x00, 0xff),
random.randint(0x00, 0xff) ]
print ':'.join(map(lambda x: "%02x" % x, mac))

Guarde el archivo y dele permisos de ejecución.

root@actiaxh:~# chmod +x /usr/local/bin/macgen.py

Ahora genere una dirección MAC aleatoria.

root@actiaxh:~# macgen.py
00:16:3e:29:c6:fb

NOTA: No olvide verificar que no este utilizando una dirección que ya este asignada.

Cuando ininicia la maquina firewall con esta configuración la red se verá así:

Xen_Red_Bridge_Dos_interfaces_y_Dos_DomU

Comandos para administrar las maquinas virtuales

xm

Referencias

http://wiki.xensource.com/xenwiki/XenNetworking

El script /etc/init.d/xendomains es el encargdo de iniciar y detener automaticamente las maquinas virtuales al iniciar o apager el sistema.

Existe un bug en el script xendomains que forma parte de paquete xen-utils-3.2, el problema es que cuando trata de iniciar las maquinas virtuales automaticamente o al tratar de detenerlas al apagar o reiniciar el sistema manda algunos errores en la pantalla referentes a un mal encomillado en las sentencias test del script.

Cuando inicia el sistema se ven errores similares a este:

Starting auto Xen domains: ushldap.cfgcut: cut: No such file or directory
/etc/init.d/xendomains: line 196: test: =: unary operator expected
 *   [done]

NOTA: A pesar de los mensajes de error la maquina si es iniciada correctamente.

Y cuando se apaga o reinicia la maquina se ven errores como este:

Shutting down Xen domains:cut: cut: No such file or directory
/etc/init.d/xendomains: line 313: test: =: unary operator expected
Domain-0(save).Error: 'xm save' requires between 2 and 3 arguments.

Usage: xm save [-c] <Domain> <CheckpointFile>
................
/etc/init.d/xendomains: line 271: test: =: unary operator expected
.Domain ushldap terminated
cut: cut: No such file or directory
/etc/init.d/xendomains: line 271: test: =: unary operator expected
.All domains terminated
/etc/init.d/xendomains: line 305: 11063 Terminated watchdog_xm shutdown
/etc/init.d/xendomains: line 305: 11083 Terminated watchdog_xm shutdown 1
*   [done]

NOTA: A pesar de los mensajes de error las maquinas si se apagan correctamente, pero no se guarda el estado de la maquina.

A continuación les muestro un procedimiento que use para corregir el problema:

Crear un respaldo del archivo /etc/init.d/xendomains

# cd /etc/init.d/

# cp xendomains xendomains.org

Ahora descargamos el parche para corregir el script

# wget http://verde.e-compugraf.com/jm-confs/xen/hardy.xendomains.diff \
> -O xendomains.diff

Antes de aplicar el parche podemos verificar que se vaya a aplicar correctamente utilizando el modo --verbose y --dry-run del comando patch:

# patch -p0 --verbose --dry-run < xendomains.diff
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- xendomains.orig    2009-01-29 12:57:45.000000000 -0600
|+++ xendomains 2009-01-29 15:09:53.000000000 -0600
--------------------------
Patching file xendomains using Plan A...
Hunk #1 succeeded at 63.
Hunk #2 succeeded at 80.
Hunk #3 succeeded at 183.
Hunk #4 succeeded at 193.
Hunk #5 succeeded at 268.
Hunk #6 succeeded at 310.
done

Si el resultado es similar entonces podemos aplicar el parche

# patch -p0 --verbose < xendomains.diff
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|--- xendomains.orig    2009-01-29 12:57:45.000000000 -0600
|+++ xendomains 2009-01-29 15:09:53.000000000 -0600
--------------------------
Patching file xendomains using Plan A...
Hunk #1 succeeded at 63.
Hunk #2 succeeded at 80.
Hunk #3 succeeded at 183.
Hunk #4 succeeded at 193.
Hunk #5 succeeded at 268.
Hunk #6 succeeded at 310.
done

Ahora podemos probar que el script funcione correctamente

# invoke-rc.d xendomains start
Starting auto Xen domains: ushldap.cfg *   [done]

También podemos ver el status de las maquinas:

# invoke-rc.d xendomains status
Checking for xendomains: ushldap *   [running]

Y por último verificar que las maquinas se apagan correctamente y se guarda el estado de la misma

# invoke-rc.d xendomains stop
Shutting down Xen domains: ushldap(save)...
/etc/init.d/xendomains: line 187: 11988 Terminated watchdog_xm save
/etc/init.d/xendomains: line 305: 11988 Terminated watchdog_xm save
*   [done]

Les dejo aquí como archivo adjunto el parche

hardy xendomains diff - No tienes permiso para ver este objeto.

Cuando instalamos maqunas virtuales (DomU) en Ubuntu Hardy mediante xen-tools nos encontraremos que en los logs de los DomU podremos encontrar mensajes como estos:

==> auth.log <==
Jan 22 13:38:08 malazha sshd[22596]: pam_env(sshd:setcred):

 Unable to open env file: /etc/default/locale: No such file or directory


Este es un problema relacionado con los modulos de autenticación PAM, que por default cuando un usuario hace login automaticamente se le asigna un locale predeterminado.

Esto es debido a que cuando se instalan maquinas virtuales con xen-tools en el proceso de insalación no se generaron correctamente las locales,

Para solucionar este problema simplemente creamos el archivo /etc/default/locale con el siguiente contenido:

LANG="en_US.UTF-8"

Despues de crear el archivo ya no veremos más esos molestos mensajes en los logs o en los reportes enviados por LogWatch.

NOTA: En este caso se pone en inglés gringo con codificación UTF-8 (Unicode).

Adicionalmente puede generar otras locales, por ejemplo quiere generar las locales para Español de México con UTF-8:

# locale-gen es_MX.UTF-8

Si usamos las herramientas xen-tools para la creación de maquinas virtuales, es posible que utilices el metodo bootstrap para hacer la instalación de maquinas Debian/Ubuntu, el metodo bootstrap por default utiliza como fuente de instalación un mirror de debian en Internet, por ejemplo: http://ftp.us.debian.org/debian/, posiblemente nosotros ya tenemos CD de instalación o la imagen ISO del CD por lo que queremos utilizar este medio y así ahorrarnos el ancho de banda que por default usa el metodo bootstrap.

Para poder utilizar un CD como fuente de instalación para xen-tools haremos lo siguiente:

- Montar el CD de Ubuntu:

# mount /dev/hdd /media/cdrom/
mount: block device /dev/hdd is write-protected, mounting read-only

- Comprobamos que el CD este montado:

# mount | grep cd
/dev/scd0 on /media/cdrom type iso9660 (ro)

El CD esta montado en /media/cdrom/

En el caso que desee utilizar una imagen ISO, entonces puede usar algo así:

# mount -o loop /tmp/ubuntu-8.04.1-server-i386.iso /media/cdrom

- Ejecutar el comando xen-create-image para crear el DomU

# xen-create-image --dir=/xen-images --hostname=vmbase --dhcp \
--install-method=debootstrap --dist=hardy --mirror=file://media/cdrom/ \
--passwd
General Information
--------------------
Hostname : vmbase
Distribution : hardy
Partitions : swap 128Mb (swap)
 / 4Gb (ext3)
Image type : sparse
Memory size : 128Mb
Kernel path : /boot/vmlinuz-2.6.24-22-xen
Initrd path : /boot/initrd.img-2.6.24-22-xen
Networking Information
----------------------
IP Address : DHCP [MAC: 00:16:3E:A9:AA:B4]
Creating partition image: /xen-images/domains/vmbase/swap.img
Done
Creating swap on /xen-images/domains/vmbase/swap.img
Done
Creating partition image: /xen-images/domains/vmbase/disk.img
Done
Creating ext3 filesystem on /xen-images/domains/vmbase/disk.img
Done
Installation method: debootstrap
Done
Running hooks
Done
No role scripts were specified. Skipping
Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
All done
Logfile produced at:
 /var/log/xen-tools/vmbase.log

- Viendo el archivo de configuración del DomU vmbase:

# grep -vE '^#|^$' /etc/xen/vmbase.cfg
kernel = '/boot/vmlinuz-2.6.24-22-xen'
ramdisk = '/boot/initrd.img-2.6.24-22-xen'
memory = '128'
root = '/dev/xvda2 ro'
disk = [
 'file:/xen-images/domains/vmbase/swap.img,xvda1,w',
 'file:/xen-images/domains/vmbase/disk.img,xvda2,w',
 ]
name = 'vmbase'
dhcp = 'dhcp'
vif = [ 'mac=00:16:3E:A9:AA:B4' ]
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
extra = '2 console=xvc0'

NOTA: Los archivos de confguración que genera xen-tools utilizan el parametro file:// dentro del
bloque de configuración disk para indicar la ruta a los dispositivos que usará la maquina virtual,
en Xen 3.2, el parametro file se ha dejado de usar en favor del parametro tap:aio, por ejemplo
para vmbase:

disk = [
 'file:/xen-images/domains/vmbase/swap.img,xvda1,w',
 'file:/xen-images/domains/vmbase/disk.img,xvda2,w',
 ]

Debemos de cambiar file por tap:aio, podemos hacer una busqueda/reemplazo con sed:

# sed -e 's/file/tap:aio/' -i /etc/xen/vmbase.cfg
y podemos comprobar la configuración:
# grep -A3 ^disk /etc/xen/vmbase.cfg
disk = [
 'tap:aio:/xen-images/domains/vmbase/swap.img,xvda1,w',
 'tap:aio:/xen-images/domains/vmbase/disk.img,xvda2,w',
 ]

Si no se cambia el parametro file, entonces, al tratar de arrrancar un domU veremos un mensaje algo así:

# Error: Device 51713 (vbd) could not be connected.

 losetup /dev/loop2 /xen-images/domains/vmbase/swap.img failed

- Arrancando el DomU vmbase

# xm create -c vmbase.cfg
Using config file ./vmbase.cfg;.
Started domain vmbase
 [ 0.000000] Linux version 2.6.24-22-xen (buildd@vernadsky) (gcc version 4.2.3

 (Ubuntu 4.2.3-2ubuntu7))

 #1 SMP Mon Nov 24 21:30:37 UTC 2008 (Ubuntu 2.6.24-4.6-generic)

...
...
 * Mounting local filesystems...                   [ OK ]
 * Activating swapfile swap...                      [ OK ]
 * Checking minimum space in /tmp...        [ OK ]
 * Configuring network interfaces...            [ OK ]
 * Starting system log daemon...                [ OK ]
 * Starting kernel log daemon...                  [ OK ]
 * Running local boot scripts (/etc/rc.local) [ OK ]
Ubuntu 8.04.1 vmbase xvc0
vmbase login: root
Password:
Linux vmbase 2.6.24-22-xen #1 SMP Mon Nov 24 21:30:37 UTC 2008 i686
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
root@vmbase:~#

- Verificando en el Dom0 que el domU este iniciado:

# xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1893 2 r----- 1701.6
vmbase 8 128 1 -b---- 10.3

Si desea instalar la DomU utilizando volumens LVM debe de utilizar este comando:

# xen-create-image --fs=ext3 --size=4GB --swap=256Mb --lvm=VGData01 \
--hostname=ushldap --dhcp --install-method=debootstrap --dist=hardy \
--mirror=file://media/cdrom/ --passwd

General Information
--------------------
Hostname       :  ushldap
Distribution   :  hardy
Partitions     :  swap            256Mb (swap)
                 /               4GB   (ext3)
Image type     :  full
Memory size    :  128Mb
Kernel path    :  /boot/vmlinuz-2.6.24-22-xen
Initrd path    :  /boot/initrd.img-2.6.24-22-xen

Networking Information
----------------------
IP Address     : DHCP [MAC: 00:16:3E:D4:D7:DF]


Creating swap on /dev/VGData01/ushldap-swap
Done

Creating ext3 filesystem on /dev/VGData01/ushldap-disk
Done
Installation method: debootstrap
Done
Running hooks
Done
No role scripts were specified.  Skipping

Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
All done
Logfile produced at:
        /var/log/xen-tools/ushldap.log

Con el comando anterior se creo una maquina virtual y automaticamente creará los volumens logicos ushldap-swap y ushldap-disk en el Volume Group VGData01.

Este es mi blog personal en Compugraf, el objetivo es que sirva como una bitácora con experiencias, tips, noticias relacionadas al software libre y GNU/Linux. Me pueden contactar en:

E-mail: jmedina[aRR0Ba]e-compugraf.com

IM (MSN/Gtalk): jmedina[aRR0Ba]e-compugraf.com

Mis Galerias

Lun Mar Mié Jue Vie Sáb Dom
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30