- Estréllate y Arde - https://www.estrellateyarde.org -
Máquina virtual Xen en Linux
Xen (xen.xensource.com) es un programa que ejecuta máquinas virtuales, de manera que permite tener funcionando varias instancias de diferentes Sistemas Operativos simultáneamente en un mismo ordenador. Se utiliza habitualmente en grandes servidores para abstraer y proteger las aplicaciones poniéndolas en máquinas virtuales diferentes (semejante a una jaula chroot). Además, la técnica utilizando por Xen, denominada paravirtualización, posibilita que las máquinas virtuales Xen pueden ser migradas en vivo entre equipos físicos sin pararlas, muy útil en clusters.
Equivalencias en Windows: VMware.
Xen está formado por los siguientes componentes:
El hypervisor es la pieza fundamental de Xen: es lo primero que ejecuta GRUB y se encarga de controlar el hardware (CPU, memoria, etc.) y distribuir su uso entre las diversas máquinas virtuales. Xen denomina a las máquinas virtuales dominios y pueden ser de dos tipos:
Pueden establecerse varias configuraciones de red para las máquinas virtuales Xen. Nosotros instalaremos la configuración en puente (bridge) que hace que todos los dominios aparezcan en la red como hosts independientes.
title Xen 3.0.3-1-i386 / Debian GNU/Linux, kernel 2.6.18-5-xen-686 root (hd0,0) kernel /boot/xen-3.0.3-1-i386.gz module /boot/vmlinuz-2.6.18-5-xen-686 root=/dev/hda1 ro console=tty0 module /boot/initrd.img-2.6.18-5-xen-686 savedefault
# mv /lib/tls /lib/tls.disabled
kernel /boot/xen-3.0.3-1-i386.gz dom0_mem=256M
module /boot/vmlinuz-2.6.18-xen-686 root=/dev/hda1 ro console=tty0 max_loop=64
Para crear los dispositivos loop, por ejemplo /dev/loop8, usaremos el comando:
# mknod /dev/loop8 b 7 8
# (network-script network-dummy)
y descomentaremos las siguientes líneas:
(network-script network-bridge) (vif-script vif-bridge) (dom0-min-mem 196) (dom0-cpus 0)
# xm list Name ID Mem(MiB) VCPUs State Time(s) Domain-0 0 941 2 r----- 3441.8
Para ver los mensajes de inicio del hypervisor:
# xm dmesg
Para obtener información sobre Xen:
# xm info
Para comprobar que se ha activado el puente:
# ifconfig eth0 Link encap:Ethernet HWaddr 00:10:60:BA:05:BF inet addr:192.168.0.5 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::210:60ff:feba:5bf/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2529 errors:0 dropped:0 overruns:0 frame:0 TX packets:59 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2312102 (2.2 MiB) TX bytes:7933 (7.7 KiB) peth0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link UP BROADCAST RUNNING NOARP MTU:1500 Metric:1 RX packets:16467 errors:0 dropped:43520 overruns:0 frame:0 TX packets:71 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:14040624 (13.3 MiB) TX bytes:8821 (8.6 KiB) vif0.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link UP BROADCAST RUNNING NOARP MTU:1500 Metric:1 RX packets:59 errors:0 dropped:0 overruns:0 frame:0 TX packets:2532 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:7933 (7.7 KiB) TX bytes:2315196 (2.2 MiB) xenbr0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link UP BROADCAST RUNNING NOARP MTU:1500 Metric:1 RX packets:27 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:1350 (1.3 KiB) TX bytes:0 (0.0 b)
# /etc/init.d/xend restart
# xen-create-image --hostname xen01 --ip 192.168.0.130
Este comando hace bastantes cosas:
El archivo imagen del nuevo dominio /home/xen/domains/xen01/disk.img es la imagen de un sistema de ficheros, por lo que puede montarse y comprobarse su contenido:
# mount -o loop /home/xen/domains/xen01/disk.img /mnt
Vemos que tiene la estructura completa de un sistema Linux de tamaño reducido:
# ls /mnt bin dev home lib media opt root srv tmp var boot etc initrd lost+found mnt proc sbin sys usr # df /mnt S.ficheros Bloques Usado Dispon Uso% Montado /home/xen/domains/xen01/disk.img 4128448 388268 3530468 10% /mnt
Para comprobar que el nuevo dominio ha sido creado y su configuración:
# xen-list-images Name: xen01 Memory: 128 IP: 192.168.0.130
El comando que crea las imágenes de los nuevos dominios (xen-create-image) utiliza el archivo de configuración /etc/xen-tools/xen-tools.conf, que contiene los parámetros comunes a todos los domU que creemos (en la línea de comandos sólo pondremos los parámetros específicos de cada dominio, --hostname y --ip). Su contenido será similar a:
# Directorio por defecto para las imágenes dir = /home/xen # Método para obtención de los paquetes debootstrap = 1 # Opciones de disco y tamaño size = 4Gb # Disk image size. memory = 128Mb # Memory size swap = 256Mb # Swap size fs = ext3 # Use the ext3 filesystem for the disk image. dist = etch # Default distribution to install. image = sparse # Specify sparse vs. full disk images. # Configuración de red gateway = 192.168.0.1 netmask = 255.255.255.0 # Establecer password para root al crear la imagen passwd = 1 # Mismos usuarios que dom0 accounts = 1 # Kernel para el nuevo dominio kernel = /boot/vmlinuz-`uname -r` initrd = /boot/initrd.img-`uname -r` # Mirror a utilizar por debootstrap mirror = ftp://ftp.rediris.es/debian/
# xm create xen01.cfg
Using config file "/etc/xen/xen01.cfg"
Started domain xen01
El comando xm utiliza el archivo de configuración /etc/xen/xen01.cfg que se generó al crear la imagen del dominio y cuyo contenido será similar a:
# Configuration file for the Xen instance xen01, created # by xen-tools 3.7 on Fri May 18 00:19:16 2007. # Kernel + memory size kernel = '/boot/vmlinuz-2.6.18-5-xen-686' ramdisk = '/boot/initrd.img-2.6.18-5-xen-686' memory = '128' # Boot device root = '/dev/sda2 ro' # Storage devices disk = ['file:/home/xen/domains/xen01/swap.img,sda1,w', 'file:/home/xen/domains/xen01/disk.img,sda2,w'] # Hostname name = 'xen01' # Networking vif = [ 'ip=192.168.0.130,mac=00:16:3E:9C:64:6E' ] # Behaviour on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
Para comprobar que el nuevo dominio funciona:
# xm list Name ID Mem(MiB) VCPUs State Time(s) Domain-0 0 875 2 r----- 4135.2 xen01 2 128 1 -b---- 4.5 # ping 192.168.0.130 PING 192.168.0.130 (192.168.0.130) 56(84) bytes of data. 64 bytes from 192.168.0.130: icmp_seq=1 ttl=64 time=0.206 ms ... # ssh [email protected] [email protected]'s password: ***** francis@xen01:/$
Para abrir un shell e iniciar sesión en el nuevo dominio:
# xm console xen01 Debian GNU/Linux 4.0 xen01 tty1 xen01 login: francis Password: ***** francis@xen01:/$
Para comprobar que la red está correctamente configurada haremos algunos ping (xen01 tendrá los mismos servidores DNS que dom0, de lo contrario los añadiremos a /etc/resolv.conf):
$ ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=1.206 ms ... $ ping 80.58.61.250 PING 80.58.61.250 (80.58.61.250) 56(84) bytes of data. 64 bytes from 80.58.61.250: icmp_seq=1 ttl=119 time=38.2 ms ... $ ping www.orange.es PING a443.x.akamai.net (194.224.66.105) 56(84) bytes of data. 64 bytes from 194.224.66.105: icmp_seq=1 ttl=55 time=41.6 ms ...
Para salir de la consola del domU:
francis@xen01:/$ <Ctrl + AltGr + ]>
root@asterix:/#
Para apagar el dominio xen01:
# xm shutdown xen01
Atención
Si hacemos shutdown sobre dom0 se apagarán todos los dominios.
(xend-relocation-port 8002) (xend-relocation-address '') (xend-relocation-server yes) (xend-relocation-hosts-allow '') (xend-address '') #(xend-address localhost)
Y ejecutaremos (por ejemplo para migrar el dominio xen01 a pc300):
# xm migrate --live xen01 pc300
En unos segundos podremos ver con xm list que xen01 ha migrado al host pc300.
Atención
- La imagen del dominio tiene que estar en un filesystem compartido.
- Ambos ordenadores tienen que tener un procesador de la misma familia.
# startx Fatal server error: xf86OpenConsole: Cannot open /dev/tty0 (No such file or directory)
Pero lo que sí podemos hacer es iniciar una sesión X Window remota vía SSH en un domU desde dom0: eso nos permitirá ejecutar en el domU un entorno gráfico y ver su salida en dom0.
También podemos iniciar una sesión X Window remota vía VNC.
Xen nos permite crear un cluster virtual en un único ordenador sobre un grupo de máquinas virtuales Xen. Veamos cómo crear un entorno de 4 máquinas virtuales Xen (4 domU, 1 master + 3 esclavos) para poder configurar posteriormente un cluster PVM, MPI, etc.
192.168.0.200 master 192.168.0.201 slave1 192.168.0.202 slave2 192.168.0.203 slave3
/home 192.168.0.0/255.255.255.0(rw,sync)
En los esclavos usaremos mount para montar el directorio exportado:
# mount -t nfs 192.168.0.200:/home /home
Para que los esclavos lo monten al arrancar editaremos /etc/fstab y añadiremos la línea:
# File_system Mount_point Type Options Dump Pass 192.168.0.200:/home /home nfs rw,hard,intr 0 0
Comprobaremos en cada esclavo que podemos escribir en /home:
# touch delete.me
- crearemos una clave RSA en el master:
francis@master:~$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
- activaremos ssh-agent en el master para que no nos pida la pass-phrase:
francis@master:~$ eval `ssh-agent -s` Agent pid 12297 francis@master:~$ ssh-add Enter passphrase for /home/francis/.ssh/id_rsa: Identity added: /home/francis/.ssh/id_rsa (/home/francis/.ssh/id_rsa)
- copiaremos la clave pública (~/.ssh/id_rsa.pub) en todos los esclavos:
francis@master:~$ scp ~/.ssh/id_rsa.pub francis@slave1:~/.ssh/id_rsa.pub
- la añadiremos al final del fichero ~/.ssh/authorized_keys en cada esclavo:
francis@slave1:~$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- y comprobaremos que podemos iniciar sesión SSH en los esclavos sin que nos pida password:
francis@master:~$ ssh slave1
francis@slave1:~$
Article printed from Estréllate y Arde: https://www.estrellateyarde.org
URL to article: https://www.estrellateyarde.org/discover/xen
Click here to print.
Copyright © 2010 Estrellate y Arde