jueves, 26 de marzo de 2015

Servidores Virtuales


 


Por razones estrictamente laborales me he visto obligado a estudiar un poco sobre virtualización, diversos software para virtualizar y la instalación de un sistema que permita virtualizar equipos para servidores; como resultado de la investigación, me he planteado la redacción del presente artículo, con el objetivo de ayudar a los que como yo, necesiten virtualizar equipos para distribuir servicios.

Para comenzar, vamos a definir Virtualización:

Hablamos de algo virtual cuando nos referimos a una cosa que es simulada, por ejemplo, la realidad virtual, es la simulación de una situación; podríamos decir que es la creación de una versión virtual (en lugar de real) de algo; para el caso específico en que trabajamos actualmente, ese algo es un sistema operativo.

Por lo tanto, cuando creamos un equipo y dentro del mismo virtualizamos (por ejemplo), dos sistemas operativos, tendríamos 3 sistemas diferentes compartiendo exactamente los mismos recursos; por ejemplo podrías tener GNU/Linux Debian, MS Windows y GNU/Linux Ubuntu corriendo simultáneamente en el mismo computador físico.

Microsoft, en su página oficial de españa, nos indica que "La virtualización del hardware implica utilizar software para crear maquinas virtuales (VM) que emulan un host físico. Esto crea un entorno de sistema operativo independiente que es, lógicamente, aislado del servidor host. Al ofrecer varias máquinas virtuales a la vez, este enfoque permite que varios sistemas operativos corran simultáneamente en una única máquina física." http://www.microsoft.com/spain/virtualizacion/products/server/default.mspx Marzo, 2015.

Ventajas y desventajas de la virtualización
Tener varios sistemas operativos en un mismo hardware nos permite, sin ocupar tanto espacio físico, poseer diversos servicios que se suministren desde un sistema operativo propio, así, si el sistema operativo se daña, no necesitas preparar todo el hardware para reinstalar el sistema, simplemente borrar la máquina virtual y crearla de nuevo.

El respaldo de máquinas virtuales (VM) en un estado específico es una gran ventaja, ya que al momento de restaurar, simplemente se restaura el archivo o conjunto de archivos de la VM y ya el equipo operaría como lo hacía en la fecha de ese respaldo.

Supongamos que poseemos un equipo i7 con 8 Gb de memoria RAM, y necesitamos tener un servidor Web y un servidor de datos, sin embargo, nuestro requerimiento nos obliga a que el servidor de datos sea GNU/Linux y el Web en MS porque lo desarrollaron para trabajar únicamente con ISS (o alguna escusa por el estilo; no se amarguen amantes y defensores del software libre, es sólo un ejemplo; yo también soy fan del free software y de GPL).

Si apagas el equipo donde tienes las máquinas virtuales, o se daña el mismo, obviamente todas las VM dejarán de funcionar, una gran desventaja a tomar en cuenta.

Hypervisor
Un hipervisor o monitor de máquina virtual (VMM por Virtual Machine Monitor) es una plataforma que permite aplicar diversas técnicas de control de virtualización para utilizar, al mismo tiempo, diferentes VM.

Tipos de Virtualización
Existen tres tipos específicos de virtualización, los cuales mencionaré a continuación:

  • Virtualización Completa
En la virtualización completa, "...los sistemas operativos (OS) usan drivers genéricos y estos OS permanecen inalterados. Se traduciría en que el hipervisor hace todo el trabajo sin alterar nada. Hoy en dia el rendimiento es bastante alto alto (aún haciendo el trabajo el hypervisor) porque al usar los mismos drivers genéricos que el host el kernel que usan es muy pequeño “Microkernel” y ademas aprovechan cualidades del hardware que cada vez mas esta preparado para la virtualización." 
http://blogs.itpro.es/problemas/paravirtualizacion/ Marzo, 2015

  • Virtualización Asistida por Hardware
No es muy fàcil de explicar sin complicar los conceptos y entrar a hablar sobre el funcionamiento de los sistemas operativos; por ahora sólo diré que el hardware permite pasar de un modo a otro para que el sistema operativo sea virtualizado.

  • Paravirtualización
Los sistemas virtualizados corren directamente sobre el procesador, sin emulación. Mientras que sistemas de virtualización completa como VMware y Virtual PC o Virtual Server de Microsoft utilizan una técnica conocida como binary translation, donde las instrucciones privilegiadas son reemplazadas con fragmentos de código que simulan las mismas; los sistemas que soportan paravirtualización (PV), parten de la base de que el sistema operativo huesped conozca que está siendo ejecutado en un entorno virtual, y por lo tanto modifique su comportamiento. Es importante acotar que un sistema operativo virtualizado no ejecuta el mismo código ni opera igual que si corriera en hardware real.

A diferencia de la PV, La técnica de virtualización completa es muy compleja y provoca grandes perdidas de rendimiento, sobre todo en aplicaciones con un uso intensivo de dispositivos. 

Ahora bien, sabiendo esto, podemos ver porqué decidí buscar un sistema de virtualización que aplicara la técnica de PV.

Software Analizados
Los software analizados para la virtualización fueron los siguientes
  1. Virtualbox
  2. VMware
  3. KVM
  4. XEN
  • Virtualbox
 Software de virtualización producido por Oracle, realmente es de fácil uso, y posee una versión distribuida bajo licencia GPL, gratuita. utiliza la técnica de virtualización completa.
  • VMWare
VMware es un sistema de virtualización por software que hace uso de la técnica virtualización completa, es muy bueno para entornos de estudio y pruebas, al punto que para los sistemas de estudio, tiendo a usar este sistema, sin embargo no usaría su versión gratuita para una virtualización de servidores puesto que no se explota al hardware en su máxima capacidad.
  • KVM
KVM (Kernel-based Virtual Machine) es una solución de software libre para virtualización completa y asistida por hardware, consiste en un módulo de kernel que provee la infraestructura de virtualización y un módulo específico de procesamiento (kvm-intel.ko o kvm-amd.ko. dependiendo del tipo de procesador sobre el cual corra). El componente de Kernel de KVM se encuentra incluido por definición en 2.6.20 y superiores.
  • XEN
Xen soporta ejecución de sistemas operativos invitados haciendo uso de las técnicas de Paravirtualización (PV) y virtualización Asistida por Hardware (HVM).

Tabla Comparativa

Aspecto a Comparar
XEN
KVM
Virtualbox
VMware
Full Virtualización
SI
SI
SI
SI
Paravirtualización
SI
SI
NO
NO
Licencia
GPL
GPL
GPL/Propietaria
Propietaria
Arquitecturas soportadas
i686, x86-64, IA64, PPC
i686, x86-64, IA64, PPC, S390
i686, x86-64
i686, x86-64
Rendimiento
Paravirtualización: Rápido
Virtualización Completa: Rápido
Paravirtualización: Rápido
Virtualización Completa: Rápido
Virtualización Completa: Rápida
Virtualización Completa: Rápida
Hotplug de Memoria y CPU
SI
SI
NO
SI
Necesita VT y AMD-V
Para Virtualización Completa
Requisito para cualquier usar cualquier técnica



Sabiendo esto se ha decidido hacer uso de XEN puesto que se ha encontrado mayor soporte y documentación para el mismo, además debo indicar que en un par de sitios leí que el rendimiento era 1 o 2 % mejor en XEN que en KVM, sin embargo, como no he podido comprobar esa información, no me basé en ella para mi decisión.

Instalación de XEN

    1.-Verificación de equipo

Como bien saben, yo soy fanático de Debian, por lo tanto, montaré mi equipo para máquinas virtuales (VM) en GNU/Linux Debian Stable (que para este momento es Debian Wheezy); ya teniendo una instalación limpia (totalmente nueva) de nuestro sistema operativo, procedo con la verificación y preparación del equipo para luego instalar y configurar XEN.

Lo primero que debemos hacer es comprobar que nuestro equipo soporte paravirtualización, para ello haremos uso del comando egrep.
"egrep es el componente más potente de la familia de órdenes grep. Al igual que fgrep, se puede utilizar para buscar múltiples objetivos. Lo mismo que grep, permite usar expresiones regulares para especificar los objetivos, pero proporciona un conjunto más completo y potente de expresiones regulares que grep. egrep acepta todas las expresiones regulares básicas reconocidas por grep, así como varias extensiones" http://nereida.deioc.ull.es/~pcgull/ihiu01/cdrom/unix/unix1/contenido/node77.html Marzo, 2014
    #egrep '(vmx|svm)' --color=always /proc/cpuinfo

La opción –color obliga al sistema a remarcar en color las opciones indicadas entre comillas.
Debe aparecer remarcado "VMX" si el equipo es INTEL o "SVM" si el equipo es AMD.

    2.- Instalando XEN

Procederemos a instalar XEN
    #aptitude install xen-linux-system-XXX xen-utils-4.0 bridge-utils

Xen trae su propio Kernel, y de ahora en adelante, necesitamos que el equipo al arrancar, bootee por él; para ello debemos cambiarle la prioridad al archivo de inicio del grub, esto se logra haciendo
    #mv -i /etc/grub.d/10_linux /etc/grub.d/50_linux

Ahora actualizamos el la configuración del grub con el comando
    #update-grub2

     3.- Configurando parámetros de red a las virtuales

Debemos editar el archivo principal de configuración del xen, para esto editaremos el archivo /etc/xen/xen-config.sxp
    #nano /etc/xen/xen-config.sxp

Y debemos descomentar las líneas que posean lo siguiente
    (network-script network-bridge)
    (vif-script vif-bridge)
    (dom0-min-mem 1024) 

Explico un poco todas:
(network-script network-bridge): Es un script de Xen para habilitar el modo bridge (puente) en las Maquinas Virtuales , de esta manera, el equipo HOST de MV recibe una IP y sus GUEST reciben otras, sin embargo todas las máquinas se conectarán sin inconvenientes a la red.

(vif-script vif-bridge): Este script se utiliza para controlar el modo bridge.

(dom0-min-mem 1024): Ponemos un mínimo de memoria al dom0 que es el XEN en realidad, esto con la finalidad de asegurarnos de que la RAM no baje nunca de ese limite y poder certificar que en ningún momento tenga asignada menos memoria de la necesaria para poder funcionar correctamente.

    4.-Configurando los parámetros que se le darán a las VM al crearlas

Primero debemos instalar el paquete xen-tools, para ello hacemos uso del comando
    #aptitude install xen-tools

El archivo /etc/xen-tools/xen-tools.conf contiene los parámetros iniciales de configuración de las MV, debemos editarlo
    #nano /etc/xen-tools/xen-tools.conf

dir = /xen/vm
install-method = debootstrap
 # Tamaño del /
size   = 10Gb
# Memoria RAM
memory = 256Mb
# Tamaño del Swap
swap   = 1024Mb
# Tipo de sistema de archivos para /
fs     = ext4
#La distribución a utilizar
dist   = wheezy
# Configuración de red de las virtuales
gateway    = 192.168.1.1
netmask    = 255.255.255.0

# Contraseña al sistema.
Passwd = 123456

# Previene que las VM utilicen algún repositorio genérico obligándolos a utilizar el repositorio del Dom0.
mirror = `xt-guess-suite-and-mirror --mirror`

# Ext3 posee algunos valores definidos tales como, noatime. Si deseas cambiarlos, devuelvelos a “defaults”.
ext3_options     = defaults

# Permitir al comando xen-create-image el uso de pygrub, de esta manera el Grub de las VM es utilizado por ellas, así no se hace necesario almacenar los Kernels fuera de las VM. En resumen, esto es para permitir que nuestras VM arranquen solas.
pygrub=1

Explicación de lo que se acaba de hacer

dir: hace referencia al directorio donde se guardarán las imágenes de las maquinas virtuales .
install-method: método de instalación del sistema operativo al crear la maquina virtual. Existen 4 tipos diferentes
  1. copy: Instala copiando recursivamente un directorio .
  2. debootstrap: instala un sistema basado en Debian dentro de un subdirectorio de otro sistema ya instalado
  3. rpmstrap: Exactamente lo mismo que debootstrap pero con sistemas RPM .
  4. tar: Instala descomprimiendo un fichero .
size: Tamaño asignada la imagen que se generará para la maquina virtual. Esto generara un “disk.img” de ese tamaño.
memory: Memoria asignada a la maquina virtual.
swap: Swap que se asigna a la maquina virtual. Esto generara un “swap.img” de ese tamaño.
fs: Sistema de ficheros de la maquina virtual.
dist: Distribución que se instalará en la maquina virtual.
gateway: Puerta de enlace de la tarjeta de red de la maquina virtual .
netmask: Mascara de red de la tarjeta de red de la maquina virtual .
passwd: Contraseña por defecto del usuario root de la maquina virtual .
mirror: Repositorios por defecto del sistema operativo de la maquina virtual.
ext3_options: Opciones de la extensión de archivos ext3 que se pueden dar al montar el sistema de archivos .

Con esto ya tenemos todo configurado, es hora de crear las maquinas virtuales.

    5.-Creamos una MV

Pedimos a nuestro xen que cree la imagen de nuestra primera virtual .
    #xen-create-image --hostname servidorWeb --ip 192.168.1.111 --vcpus 1

Este comando es demora bastante puesto que descarga los paquetes, los descomprime y luego los instala, por esta razón yo prefiero ejecutar el comando conectándome por ssh al equipo; así podría desde mi PC remota mandar a ejecutarse el comando, y a la vez, desde el propio xen podría abrir el archivo .log que me muestra exactamente lo que está haciendo el comando.

Entonces, desde otro equipo hago 
         $ssh root@MI-IP

Así me conecto por SSH al equipo

Ahora ejecuto
   #xen-create-image --hostname servidorWeb --ip 192.168.1.111 --vcpus 1 
Y desde el xen abro el archivo /var/log/xen-tools/NombreVM.log
        #tail -f /var/log/xen-tools/NombreVM.log
Una vez el comando haya creado la imagen y regresado entonces a nuestro prompt normal continuaremos con el paso 6.

    6.-Levantamos la MV
Ejecutamos el comando para que suba las .img que se acaban de crear.
    #xm create servidorWeb.cfg

Con esto ya se ejecuta nuestra máquina virtual en Debian Wheezy.

    7.- Comando útiles
Ahora bien, indico los comandos que se utilizan para gestionar las VM

Comando Función
xm shutdow servidorWeb Solicita a la VM que se apague
xm pause servidorWeb Pausar la VM para hacer respaldos y acciones especiales.
xm destroy servidorWeb Destruir una VM esto la forza a que el equipo se reinicie.
xm reboot servidorWeb Reiniciar una VM.
xm list Saber qué VM se están ejecutando en el equipo.
xm consoleNombreVM Conectarse a la VM desde el propio XEN. Nótese que a mi parecer es preferible instalar SSH en la VM y conectarse remotamente a ella; así no se congelan en la sala de servidores.
xm rename NombreActualVM NuevoNombreVM Cambiar el nombre de una VM
xm top Monitorear todas las VM en tiempo real
xm uptime Saber el tiempo que las VM llevan operativas
xm vcpu-list Visualizar cada una de las VM y la información sobre sus CPU
xm vcpu-set NombreVM 2 Cambiar el número de procesadores de una VM, en este ejemplo específico se está cambiando a 2
xm mem-max NombreVM 1024 Cambiar el valor de la memoria RAM máxima de una VM, en este ejemplo se está cambiando a 1024MB.

    8.-Pasos para remover una VM

Si en realidad quieres eliminar tu VM y que no se pueda utilizar nuevamente, el proceso a ejecutar es el siguiente:

Si la VM está corriendo, mándala a detener utilizando
    #xm destroy NombreVM
Borra las imagenes creadas
    #rm /xen/vm
Elimina el archivo de configuración de la VM ubicado en /etc/xen
    #rm /etc/xen/NombreVM.cfg

     9.-Cambiar el número de loops de XEN
Como root debemos ejecutar el siguiente comando
    #modprobe loop max_loop=64

Para más información al respecto, recomiendo la lectura de las siguientes URLs:

Virtualización VS Paravirtualización http://blogs.itpro.es/problemas/paravirtualizacion/ 

PD: Todas estas páginas fueron revisadas durante el mes de Marzo de 2015.
Copyleft 2015 - RAITE