Instalar Xen en Debian con LVM y bridges a varias interfaces de red

De WikiSalud
Revisión a fecha de 15:48 29 abr 2015; Alortiz (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Aprobado Oficialmente Este artículo ha sido aprobado oficialmente.

Este artículo describe cómo instalar Xen en Debian GNU/Linux y cómo configurar las interfaces de red para ser utilizadas como bridges, ha sido probado tanto en Debian 6.0 "Squeeze" como en Debian 7.0 "Wheezy".

Contenido

Instalación de Debian

Véase el Manual de Instalación para una referencia detallada del proceso de instalación general de Debian.

Se debe instalar Debian configurando la partición principal como LVM. Para que Grub2 pueda instalarse sin problemas se debe crear una partición especial en primer lugar de tipo biosgrub (1 Mb es suficiente) (según el tipo de servidor es posible que sea necesaria o no) y otra para /boot de 256Mb (puede ser de tipo ext4). El resto del disco duro puede ser asignado a LVM en el que se creará un grupo único (VG) en el que dentro se creará una partición (LV) para / (se puede llamar root) de un tamaño moderado y otro LV para swap, del tamaño apropiado según el tamaño de la RAM. El resto del espacio se deja sin asignar, pues posteriormente se crearán los LVs de las máquinas virtuales.

Al finalizar la instalación se puede comprobar el estado del LVM con los comandos vgdisplay y lvdisplay.

Instalación y configuración de Xen

A menos que se indique lo contrario, en este artículo todas las órdenes han de ser ejecutadas como usuario root.
Asegúrese que se han configurado los repositorios de manera apropiada.

Instalar XEN por medio de la siguiente instrucción.

aptitude install xen-linux-system-amd64 xen-tools

Paquetes para Wheezy

Se recomienda instalar Debian 8 "Jessie", sin embargo, a continuación se detalla el listado de paquetes
necesarios para instalar Xen en Debian 7 "Wheezy".
aptitude install xen-hypervisor-4.1-amd64 xen-linux-system-amd64 xen-utils-4.1 xenstore-utils xenwatch xen-tools

Paquetes para Squeeze

Se recomienda instalar Debian 8 "Jessie", sin embargo, a continuación se detalla el listado de paquetes
necesarios para instalar Xen en Debian 6 "Squeeze".
aptitude install xen-hypervisor-4.0-amd64 \
xen-linux-system-2.6-xen-amd64 xen-utils-4.0 xenstore-utils \
xenwatch xen-tools

Primeras configuraciones

Cambiar la prioridad de arranque del kernel para que arranque el hypervisor

mv /etc/grub.d/10_linux /etc/grub.d/50_linux
update-grub2

Buenas prácticas

Limitar y proteger el uso de memoria y CPUs de la dom0

Como usuario root editar el archivo /etc/default/grub, tal como se muestra a continuación. En el ejemplo, se limita el uso de memoria a 512 MB y a un solo núcleo

vi /etc/default/grub

Agregar la siguiente línea

GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=512M,max:512M dom0_max_vcpus=1"

Según la wiki de Xen, se recomienda que se dedique explicitamente el núcleo del CPU a usar, sobre todo cuando los guest vayan a tener operaciones IO intensivas. En general, especificar el núcleo del CPU reduce los cambios de contextos, lo que supone alguna mejora en el rendimiento. En ese caso, la línea queda de la siguiente manera:

GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=512M,max:512M dom0_max_vcpus=1 dom0_vcpus_pin"

Actualizar la configuración de GRUB ejecutando como root la siguiente orden.

update-grub2

En Debian Wheezy y Jessie Como usuario root editar el archivo /etc/xen/xend-config.sxp, tal como se muestra a continuación.

vi /etc/xen/xend-config.sxp

Agregar o modificar las siguientes líneas

(dom0-min-mem 512)
(dom0-cpus 1)

Ajustes de red

Debian tiene una configuración diferente a la de Upstream, en la que todo se maneja mediante el script network-bridge. (Puede informarse al respecto en Configure_Networking y Example Debian-style bridge configuration )

Editar como root el archivo /etc/network/interfaces

Cambiamos la configuración normal de eth0, eth1, etc. (quitamos cualquier configuración de IP) por

iface eth0 inet manual

De manera similar con todas las demás interfaces disponibles. Y agregar los bridges.

auto xenbr0 xenbr1 xenbr2 xenbr3
iface xenbr0 inet static
        bridge_ports eth0
        bridge_stp no
        address 10.10.20.40
        netmask 255.255.255.0
        network 10.10.20.0
        broadcast 10.10.20.255
        gateway 10.10.20.1
        dns-nameserver 10.10.20.20 10.10.20.21
        dns-search salud.gob.sv

Una entrada de iface por cada bridge (xenbr1, xenbr2, etc.), obviamente.

Verificar que en /etc/xen/xend-config.sxp está comentado

# (network-script network-bridge)

y descomentado

(vif-script vif-bridge)

Luego en los ficheros de configuración de cada máquina virtual se indicará qué bridge se usará aparte de otros parámetros.

vif=[ 'bridge=xenbr1',.... ]

o indicarlo en el xm-create-image (parámetro --bridge=xenbr#)

Reiniciar (reboot) y probar que todo funciona tras el reinicio con

xm dmesg

Si no salen un montón de instrucciones definitivamente hay algún problema u omisión

Creación de las máquinas virtuales

Crear las máquinas virtuales con xen-tools, así que retocamos/revisamos algunos parámetros:

vi /etc/xen-tools/xen-tools.conf
[...]
# dir = /var/xen
[...]
lvm = VG01
[...]
fs     = ext4
[...]
gateway    = 10.10.20.1
netmask    = 255.255.255.0
broadcast  = 10.10.20.255
[...]
passwd = 1
[...]
arch = amd64
[...]
ext4_options     = noatime,nodiratime,errors=remount-ro
[...]
serial_device = hvc0 #default
[...]
disk_device = xvda #default
[...]

Imagen de Debian

Una imagen de Debian con los valores por defecto configurados en /etc/xen-tools/xen-tools.conf puede ser creada con el siguiente comando: xen-create-image --hostname=minimo.salud.gob.sv --ip=192.168.2.13 --role=udev

Para crear una imagen de Debian sobreescribiendo algunos de los valores por defecto, ejecute lo siguiente.

xen-create-image  \
--hostname=xen-server.salud.gob.sv --vcpus=2 --size=20Gb --memory=512Mb --swap=512Mb \
--ip=10.10.20.45 --bridge=xenbr1 \
--arch=amd64 --role=udev

Imagen de Ubuntu

Para rear una imagen de Ubuntu en lugar de Debian (cambiar lucid por la versión deseada, p.e. natty)

xen-create-image  --dist lucid \
--hostname=xen-server-ubuntu.salud.gob.sv  --vcpus=4 --size=100Gb --memory=4096Mb --swap=1Gb \
--ip=10.10.20.46 --bridge=xenbr2  \
--arch=amd64 --role=udev

Es posible que falten algunos paquetes útiles para que todo quede bien, que por supuesto pueden instalarse normalmente una vez arrancada la máquina:

apt-get install wget language-pack-es aptitude vim

Imagen de distribuciones basadas en RPM

Se instalo rinse a la hora de instalar los paquetes de xen. Rinse es el método actualmente recomendado para tratar con distribuciones rpm. La lista de distros soportadas puede obtenerse con

rinse --list-distributions

Centos 6

Use el siguiente comando

xen-create-image  --install-method=rinse --dist="centos-6" \
--hostname=centoso.salud.gob.sv --vcpus=1 --size=20Gb --memory=512Mb --swap=512Mb \
--ip=10.10.20.47 --bridge=xenbr3 \
--arch=amd64

Centos 7

Oficialmente, parece ser que CentOS 7 no esta soportado al momento de escribir estas líneas (Abril de 2015), pero encontré una forma un tanto chapucera de hacerlo funcionar, ya que rinse si lo soporte, lo único que falta es hacerle creer a xen-image-create que también lo hace. Para ello, agradecemos que la diferencia de Fedora 19 (El correspondiente de CentOS 7) respecto a Fedora 17 (Ultima versión soportada por xen-tools) no es tan grande como se podría pensar:

cd /usr/share/xen-tools/
cp -rv fedora-core-17.d centos-7.d
 
sed -i '$a compat-db47' /etc/rinse/centos-7.packages
sed  '/update-rc.d/ s/^/#/g' /usr/share/xen-tools/centos-7.d/15-setup-arch

Ahora si es posible especificar la distro como centos-7

xen-create-image  --install-method=rinse --dist="centos-7" \
--hostname=centos7.salud.gob.sv --vcpus=1 --size=20Gb --memory=512Mb --swap=512Mb \
--ip=10.10.20.48 --bridge=xenbr0 --arch=amd64

Ambas instalacions terminan con un

No role scripts were specified.  Skipping
Setting up root password
Changing password for user root.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
All done
/tmp/aZLJREpzHi/etc/ssh/ssh_host_rsa_key.pub: No such file or directory

Pese a ello, es posible iniciar el guest normalmente

Mejoras adicionales

Los paquetes adicionales más apremiantes que necesita son los siguientes:

yum install vim lsof xterm ncurses-term

El prompt es bastante feo. Para arreglarlo, basta con copiar los ficheros de **/etc/skel** y, al menos, iniciar la consola de nuevo:

cp /etc/skel/.* ~/
bash

Si necesita ahorrarse un poco el uso de ancho de banda, y disponiendo de un disco de instalación de CentOS, puede usarlo ese disco como un pequeño repositorio:
En un servidor con apache corriendo, monte el DVD en el directorio /var/www, o en el directorio raíz de cualquier host virtual disponible:

mount -o loop /root/Repo/CentOS-6.5-x86_64-bin-DVD1.iso /var/www

Modifique el fichero /etc/rinse/rinse.conf en la sección [centos-6], en el mirror que se corresponda con la arquitectura contenida en el DVD

mirror.amd64 = http://10.30.40.50/Packages/

Imagen de Windows Server

La instalación desde la línea de comandos podría ser demasiado complicada e innecesaria de cierto modo. La mejor forma hasta ahora ha sido crear la máquina directamente desde un archivo dado. El ejemplo esta tomado de HowTo: Xen 4.1.3 Windows 8 HVM domU with Intel HD4000 VGA Passthrough on Debian Wheezy , que de hecho puede ampliar más al respecto. Esta configuración parece ser la mínima necesaria para que windows server (2012 en este caso) funcione. No hay igual suerte en la mayoría de casos con windows 7,8

Como única diferencia a la mencionada guía, nosotros usamos LVM. Para crear el volumen lógico basta con el siguiente comando

lvcreate -n /dev/VG/win.salud.gob.sv-disk -L45G

Junto con la máquina virtual, se inicia un servidor VNC en {ip-host}:5900. Allí podrá completar la instalación de Windows Server. Siempre podrá acceder por este método a su Servidor Windows, que le pedirá iniciar sesión en él
Con vncviewer desde un equipo remoto:

vncviewer {ip-host}:5900
  1. #
  2. #  Kernel + memory size
  3. #
  4. kernel      = 'hvmloader'
  5. builder     = 'hvm'
  6.  
  7. vcpus       = '1'
  8. memory      = '1024'
  9.  
  10. #
  11. #  Disk device(s).
  12. #
  13. disk        = [
  14.                   'phy:/dev/host/win.salud.gob.sv-disk,hda,w',
  15.                   'file:/ruta/a/Windows.iso,hdc:cdrom,r'
  16.               ]
  17.  
  18.  
  19. #
  20. #  Physical volumes
  21. #
  22.  
  23.  
  24. #
  25. #  Hostname
  26. #
  27. name        = 'win.salud.gob.sv'
  28.  
  29. #
  30. #  Networking
  31. #
  32. vif         = [ 'ip=10.10.20.248 ,mac=00:16:3E:33:2C:AF,bridge=xenbr0' ]
  33.  
  34. #
  35. #  Behaviour
  36. #
  37. on_poweroff = 'destroy'
  38. on_reboot   = 'restart'
  39. on_crash    = 'restart'
  40.  
  41. #
  42. # Windows
  43. #
  44. boot = 'dc'
  45. acpi = '1'
  46. apic = '1'
  47. viridian = '1'
  48. xen_platform_pci='1'
  49. sdl = '0'
  50. vnc = '1'
  51. vnclisten = '0.0.0.0'
  52. vncpasswd = ''
  53. stdvga = '0'
  54. usb = '1'
  55. usbdevice = 'tablet'

Administración de las máquinas virtuales

Uso de la máquina virtual

  • Arrancarla
xm create /etc/xen/xen-server.salud.gob.sv.cfg
  • Entrar a la máquina (para salir de la consola usar ctrl+])
xm console xen-server.salud.gob.sv
  • Arranque automático:
mkdir /etc/xen/auto
ln -s /etc/xen/xen-server.salud.gob.sv.cfg /etc/xen/auto

Agregar partición

http://wiki.stocksy.co.uk/wiki/Creating_Xen_Machines_on_Debian_Lenny#Creating_a_.2Fvar_partition_for_the_domU

Ejecutar en bash de la dom0

LVM_VG=$(/bin/grep lvm /etc/xen-tools/xen-tools.conf | /bin/sed -e 's/lvm = //')
XEN_HOSTNAME=xen-server.salud.gob.sv
SIZE=1024G
/sbin/lvcreate -n $XEN_HOSTNAME-var -L $SIZE $LVM_VG
/sbin/mkfs.ext4 -m 1 /dev/$LVM_VG/$XEN_HOSTNAME-var
if [ $(/bin/grep "disk[\t ]*=.*\]" /etc/xen/$XEN_HOSTNAME.cfg | /usr/bin/wc --lines) -eq 0 ]; then
  /bin/sed -i -e "/^disk[\t ]*=.*/a\\
    'phy:/dev/$LVM_VG\/$XEN_HOSTNAME-var,xvda3,w'," \
         /etc/xen/$XEN_HOSTNAME.cfg
else
  /bin/sed -i -e "s/^\(disk[\t ]*=.*\)\]/\1, 'phy:/dev/$LVM_VG\/$XEN_HOSTNAME-var,xvda3,w' ]/" /etc/xen/$XEN_HOSTNAME.cfg
fi

Parar la máquina virtual, pues vamos a hurgar en sus particiones:

xm shutdown $XEN_HOSTNAME

Ahora editamos el fstab de la domU donde queremos agregar la partición

/bin/umount /dev/$LVM_VG/$XEN_HOSTNAME-disk
MOUNT_POINT=$(/bin/mktemp -d)
/bin/mount /dev/${LVM_VG}/${XEN_HOSTNAME}-disk ${MOUNT_POINT}
/bin/echo "/dev/xvda3   /var    ext4    defaults                0       1" | /usr/bin/tee -a ${MOUNT_POINT}/etc/fstab
VAR_MOUNT_POINT=$(/bin/mktemp -d)
/bin/mount /dev/${LVM_VG}/${XEN_HOSTNAME}-var ${VAR_MOUNT_POINT}
/bin/cp -a ${MOUNT_POINT}/var/* ${VAR_MOUNT_POINT}
/bin/umount ${VAR_MOUNT_POINT}
/bin/umount ${MOUNT_POINT}

Reiniciar la máquina virtual del todo

xm shutdown xen-server.salud.gob.sv 
xm create /etc/xen/xen-server.salud.gob.sv.cfg

Aumentar tamaño de una partición

Para aumentar el tamaño de una partición (NO reducir, se corrompe el sistema de archivos irremediablemente)

Por ejemplo agregar 100 Gb al /var de una máquina virtual.

xm shutdown xen-server.salud.gob.sv
lvresize -L +100G /dev/VG01/xen-server.salud.gob.sv-var
e2fsck -f /dev/VG01/xen-server.salud.gob.sv-var
resize2fs /dev/VG01/xen-server.salud.gob.sv-var
xm create xen-server.salud.gob.sv.cfg

Núcleos dedicados para cada máquina virtual

Puede usar el núcleo del CPU a usar por cada máquina virtual. Un primer vistazo a la forma en que se reparten por defecto los núcleos puede verse a continuación

xm vcpu-list prueba01.salud.gob.sv

Muestra la configuración de VCPU para el host prueba01.salud.gob.sv

Name                                ID  VCPU   CPU State   Time(s) CPU Affinity
prueba01.salud.gob.sv                  3     0     1   -b-       5.1 any cpu

Configurando con vcpu-pin

xm vcpu-pin prueba02.salud.gob.sv all 1

Al verificar el estado se puede apreciar que se asignó el núcleo especificado

Name                                ID  VCPU   CPU State   Time(s) CPU Affinity
prueba02.salud.gob.sv          1     0     1   -b-       8.2 1

Aunque la configuración parece ser permanente y sobrevivir al reinicio, puede asegurarse modificando el archivo de configuración de cada equipo en /etc/xen

Otras órdenes importantes

  • Apagado forzado
    xm destroy <name>
  • Apagado normal
    xm shutdown <name>
  • Listar todas las máquinas virtuales
    xm list
  • Listado de todas las órdenes
    xm help

Restaurar contraseña de máquina virtual

Iniciar la máquina virtual de la siguiente manera:

xm create -c /etc/xen/xen-server.salud.gob.sv.cfg extra=1

Editar la contraseña del usuario root con:

passwd

Migración en caliente de Squeeze a Wheezy

En primer lugar, se deben seguir los pasos descritos a continuación:

  1. Hacer respaldo de la información
  2. No olvidar hacer un respaldo de la información.
  3. Es importante hacer respaldo.

Si ya se completaron los pasos anteriores, a continuación hay que realizar las pruebas necesarias en otro equipo antes de hacerlo en el sistema real.

La migración en caliente de Xen desde la versión que se encuentra en Squeeze hacia la versión que se encuentra en Wheezy implica los siguientes pasos:

  1. Actualización de las máquinas virtuales de Squeeze a Wheezy.
  2. Actualización del servidor físico de Squeeze a Wheezy.
  3. Configuración de las máquinas virtuales para que utilicen el nuevo Kernel.
En este artículo no se describe el proceso de actualización de las máquinas virtuales y
se asume que son, originalmente, máquinas con Debian Squeeze.

Actualización del sistema físico

  • Configurar los repositorios de Squeeze a Wheezy.
  • Actualizar la lista de paquetes con
    aptitude update
  • Instalar los keyring, tal como se describe en Actualizaciones y sources.list
  • Hacer una actualización de manera segura con
    aptitude safe-upgrade
    Prestar especial cuidado al listado de paquetes que se eliminarán
  • Durante el proceso de actualización hay archivos que modifican sus opciones, por lo que es necesario configurarlos nuevamente para que se ajusten a las necesidades particulares.
  • Hacer una actualización completa con
    aptitude full-upgrade
    Prestar especial cuidado al listado de paquetes que se eliminarán.
  • Instalar los paquetes de Xen que se encuentran en Wheezy. Ver en la parte superior del artículo.
  • Realizar los ajustes necesarios descritos para configurar Xen. Principalmente, lo que se encuentra en /etc/xen/xend-config.sxp
  • Cambiar la prioridad de arranque del Kernel para que cargue el de Xen
    mv /etc/grub.d/10_linux /etc/grub.d/50_linux
    update-grub2

Configuración de las máquinas virtuales

En /etc/xen/ se encuentran los archivos de configuración de cada máquina virtual.

Para el caso de ejemplo descrito anteriormente en este artículo, es el archivo /etc/xen/xen-server.salud.gob.sv.cfg. La parte relevante a modificar se muestra a continuación:

kernel      = '/boot/vmlinuz-2.6.32-5-xen-amd64'
ramdisk     = '/boot/initrd.img-2.6.32-5-xen-amd64'

Hay que editarlo como se muestra a continuación:

#kernel      = '/boot/vmlinuz-2.6.32-5-xen-amd64'
#ramdisk     = '/boot/initrd.img-2.6.32-5-xen-amd
kernel      = '/boot/vmlinuz-3.2.0-4-amd64'
ramdisk     = '/boot/initrd.img-3.2.0-4-amd64'
Esto tiene que coincidir exactamente con los datos del servidor físico. Usar la siguiente órden para verificarlo:
ls /boot/

Es recomendable dejar comentada la configuración anterior para poder revertir los cambios en caso de ser necesario.

Finalizada la configuración de todas las máquinas virtuales, se reinicia el servidor físico
y se verifica que todas las máquinas virtuales cargan correctamente.

Fuentes

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas