sábado, 7 de enero de 2017

Debian Jessie + LVM + Xen 4.8 + Openvswitch

Hace aproximadamente 8 años realice esta guía en lo que fue los primeros pasos realizados con xen, esta guía la escribí para usar un firewall llamado brazilfw desde entonces es mucho lo que ha cambiado. Hoy vamos a configurar xen con debian usando lvm y openvswitch para el manejo de la red. 

Antes de instalar Xen deberás instalar Debian en la maquina principal (host). Esta instalación será de forma básica para el Domain 0. La instalación de Debian puede ser hecha de una manera normal usando el DebianInstaller. Asumiré que ya tienes instalado debian con una partición LVM que configuraremos mas adelante.

Instalación y configuración de LVM

Al momento de realizar la instalación de debian, se debe deja una partición tipo LVM, que es la que usaremos para crear las maquinas virtuales. Para usar lvm debemos instalar el paquete

 
 
#  aptitude install  lvm2 
 
# fdisk -l
Disco /dev/sda: 931,5 GiB, 1000204886016 bytes, 1953525168 sectores

Disposit.  Inicio   Comienzo      Final   Sectores Tamaño Id Tipo
/dev/sda1  *            2048     206847     204800   100M  7 HPFS/NTFS/exFAT
/dev/sda2             206848 1024002047 1023795200 488,2G  7 HPFS/NTFS/exFAT
/dev/sda3         1024004094 1953523711  929519618 443,2G  5 Extendida
/dev/sda5         1024004096 1123416063   99411968  47,4G 83 Linux
/dev/sda6         1951543296 1953523711    1980416   967M 82 Linux swap / Solaris
/dev/sda7         1123418112 1318727679  195309568  93,1G 83 Linux
/dev/sda8         1318729728 1951528959  632799232 301,8G 8e Linux LVM

en nuestro caso esta partición es /dev/sda8, ya con este dato ponemos a tono  el equipo.

1) Se crea un volumen físico
# pvcreate /dev/sda8
Physical volume "/dev/sda8" successfully created

si revisamos este punto podemos ver que se ha creado el volumen físico



 

2) creamos un grupo de volumenes

vgcreate nube /dev/sda8
Volume group "nube" successfully created

de igual forma podemos verificar que se creo el grupo de volumen.










Si deseas conocer mas a fondo el uso de LVM esta guia es muy completa en español y esta otra de la wiki debian.


Instalación inicial de XEN


 La instalación de xen es realmente sencilla, procedemos a realizar la misma de la siguiente forma

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

Configuración de xen

editamos el archivo xl.conf, como la idea es usar openvswitch cambiamos o agregamos  las lineas.

vif.default.script="vif-openvswitch"

y la otra 
vif.default.bridge="ovsbr0" 
puedes llamar al bridge como quieras. 
Pero debes tener en cuenta el nombre cuando configures openvswitch


Luego editamos el archivo xend-config.sxp

vi xend-config.sxp 

igual cambiamos vif-script vif-bridge por

vif-script vif-openvswitch

existen otros parámetros que podríamos configurar aquí como:

cantidad de CPUs asignados al Dom0
Dom0-cpus
total de memoria disponible
total_avaible_memory
memoria mínima asignada al Dom0
Dom0_min_mem
activar la conexion vnc (esta opción es muy recomendada si se va a virtualizar 
algún sistema operativo con núcleo no modificado, como windows)
vnc-listen 
Ahora editamos el archivo xen-tools.conf y configuramos lvm para usarlo por defecto 
para crear las MV.

descomentamos la opción lvm y le colocamos el nombre del volumen lvm creado.. en este caso nube
quedaría así..
Aquí podríamos cambiar muchas cosas y definir los parámetros a usar cuando creamos las MV
pero generalmente solo toco este punto y al momento de crear las MV por consola defino las características de la misma.
 

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 explícitamente 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  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)
 

Instalación y configuración de Openvswitch.

instalamos openvswitch con el siguiente comando

# aptitude install openvswitch-switch

vemos que openvswitch se ha instalado con el comando
# ovs-vsctl show
a319db3c-5ad9-4ac9-bdb9-d434b594b6bd
    Bridge "ovsbr0"
ovs_version: "2.6.2"

 ya tenemos lo que necesitamos listo. Procedemos a configurar openvswtich.

1) creamos el bridge ovsbr0 

# ovs-vsctl add-br ovsb0 

2) configuramos la interfaz de red física a usar. editando el archivo /etc/network/interfaces


# vi /etc/network/interfaces


 auto lo ovsbr0 enp5s0
 iface lo inet loopback 

allow-ovs ovsbr0 
iface ovsbr0 inet static (nota: también se puede configurar como dhcp) 
address 192.168.20.103
 netmask 255.255.255.0
 gateway 192.168.20.1
 ovs_type OVSBridge 
ovs_ports enp5s0 

allow-ovsbr0 enp5s0 
 iface enp5s0 inet manual 
ovs_bridge ovsbr0
 ovs_type OVSPort


Configuramos el bridge que habíamos definido en el archivo xl.conf de xen. Guardamos y salimos.
El próximo paso es agregar la interfaz al bridge en openvswitch 
# ovs-vsctl add-port ovsbr0 enp5s0 
hay que tener en cuenta que si se lanza este comando y estamos conectados al servidor con la interfaz asociada se perderá la conexión.
 
luego revisamos como ha quedado configurada la red.


 una vez terminado todo esto configuramos grub y reiniciamos

vi /etc/default/grub
# Disable OS prober
GRUB_DISABLE_OS_PROBER=true
#allocate memory to dom0
Guardamos y salimos, luego hacemos

mv -i /etc/grub.d/20_linux_xen /etc/grub.d/09_linux_xen
update-grub
shutdown -r now

Esto nos permite que se inicie el sistema con la imagen de xen por defecto. Al reiniciar el equipo
verificamos que este corriendo xen

# xl lis
Name                                        ID   Mem VCPUs State Time(s)
Domain-0                                     0  1018     1     r-----      41.5
 
 

 Creamos las Maquinas Virtuales.

 vamos a crea un maquina con el siguiente conmando

# xen-create-image  --hostname=siglas --ip=172.31.91.200  --memory=6GB  --size=50GB

xen-create-image: Comando que me permite crear la maquina virtual, esta maquina esta basada en linux, paravirtualizada y se "instala" con debootstrap.
--hostname: nombre de la maquina virtual, es mandatorio.
--ip: dirección que usara  la maquina virtual, es mandatorio, se puede usar esta opcion o la opcion --dhcp
--memory: Cantidad de memoria que se le asignara a la maquina virtual, si no se define aqui, se tomara por defecto la configurada en el archivo /etc/xen-tools/xen-toosl.conf
--size: Tamaño de la particion lvm que usará la maquina virtual, si no se define aqui, se tomara por defecto la configurada en el archivo /etc/xen-tools/xen-toosl.conf
 Tambien podriamos definir desde aqui la distribucion a usar, el tamaño de la memoria swap, etc. De no hacerlo en la linea de comando igual tomará por defecto lo configurado en el archivo xen-tools.conf 


veremos algo así (según la conexión, esto toma tiempo)


# xen-create-image  --hostname=siglas2 --ip=172.31.91.200 --memory=6GB  --size=50GB
WARNING:  No gateway address specified!
WARNING:  No netmask address specified!

General Information
--------------------
Hostname       :  siglas
Distribution   :  jessie
Mirror         :  http://ftp.de.debian.org/debian/
Partitions     :  swap            512M  (swap)
                  /               50GB  (ext4)
Image type     :  full
Memory size    :  6GB
Kernel path    :  /boot/vmlinuz-3.16.0-4-amd64
Initrd path    :  /boot/initrd.img-3.16.0-4-amd64

Networking Information
----------------------
IP Address 1   : 172.31.91.200 [MAC: 00:16:3E:22:07:40]


Creating swap on /dev/nube/siglas-swap
Done

Creating ext4 filesystem on /dev/nube/siglas-disk
Done
Installation method: debootstrap
Done

Running hooks
Done

No role scripts were specified.  Skipping

Creating Xen configuration file
Done

No role scripts were specified.  Skipping
Setting up root password
Generating a password for the new guest.
All done


Logfile produced at:
     /var/log/xen-tools/siglas.log

Installation Summary
---------------------
Hostname        :  siglas
Distribution    :  jessie
MAC Address     :  00:16:3E:22:07:40
IP Address(es)  :  172.31.91.200
RSA Fingerprint :  27:d1:95:2d:5c:aa:f8:b5:0b:0e:13:d6:08:ef:f0:b3
Root Password   :  9nVvYzLfYBQwGWRgAsqk5dr

Ya tenemos creada la maquina virtual si verificamos el volumen lógico de lvm, debemos tener creados los discos de dicha maquina virtual

# lvdisplay
  --- Logical volume ---
  LV Path                /dev/nube/siglas-swap
  LV Name                siglas-swap
  VG Name                vg0
  LV UUID                wW7HwM-SVs9-0ZBM-WDpo-AQkV-FORR-mKB9eF
  LV Write Access        read/write
  LV Creation host, time kannon, 2017-01-06 21:32:03 -0400
  LV Status              available
  # open                 1
  LV Size                512,00 MiB
  Current LE             16
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:0
  
  --- Logical volume ---
  LV Path                /dev/nube/siglas-disk
  LV Name                siglas-disk
  VG Name                vg0
  LV UUID                eW4mOM-HATa-eMQx-8RiK-6RvH-DGW8-xpTU0k
  LV Write Access        read/write
  LV Creation host, time kannon, 2017-01-06 21:32:04 -0400
  LV Status              available
  # open                 1
  LV Size                50,00 GiB
  Current LE             1600
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:1
Ahora solo nos queda configurar la interfaz  bridge con la que iniciaremos la MV e iniciar la Maquina virtual con el comando xl
 vi /etc/xec/siglas.conf

vamos a la linea y agregamos el bridge

vif         = [ 'ip=172.31.91.200 ,mac=00:16:3E:72:B9:23, bridge=ovsbr0' ]
Guardamos y ahora si iniciamos la maquina virtual 
# xl create /etc/xen/siglas.conf  
si todo ha ido bien, podemos ver como la maquina virtual esta corriendo.
# xl list
Name                                        ID   Mem VCPUs    State    Time(s)
Domain-0                                  0    1018      1       r-----     251.4
siglas                                        2    6144     1       -b----     193.1

hacemos ping a la ip configurada

$ ping 172.31.91.200
PING 172.31.91.200 (172.31.91.200) 56(84) bytes of data.
64 bytes from 172.31.91.200: icmp_seq=1 ttl=63 time=0.768 ms
64 bytes from 172.31.91.200: icmp_seq=2 ttl=63 time=0.681 ms
64 bytes from 172.31.91.200: icmp_seq=3 ttl=63 time=0.497 ms
64 bytes from 172.31.91.200: icmp_seq=4 ttl=63 time=0.547 ms
64 bytes from 172.31.91.200: icmp_seq=5 ttl=63 time=0.642 ms
64 bytes from 172.31.91.200: icmp_seq=6 ttl=63 time=0.502 ms
64 bytes from 172.31.91.200: icmp_seq=7 ttl=63 time=0.481 ms
64 bytes from 172.31.91.200: icmp_seq=8 ttl=63 time=0.512 ms

--- 172.31.91.200 ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 6997ms
rtt min/avg/max/mdev = 0.481/0.578/0.768/0.102 ms
Realizando pruebas con el navegador podemos chequear que la maquina virtual ya es parte de la red existente.

No hay comentarios:

Publicar un comentario