sábado, 19 de noviembre de 2011

Creando máquinas virtuales desde consola en servidor



Estimados;
Hoy presento un tema que me parece muy interesante y que me propongo a compartirlo. Se trata de optimizar recursos de hardware físico implementando máquinas virtuales dentro de nuestro servidor host.

Ha estas alturas todos sabemos que es una máquina virtual, softwares que emulan por hardware, etc, así que no detallaré los conceptos.

Ahora nos proponemos a aprovechar al máximo los recursos de nuestra PC para poder crear dentro de ella varias máquinas virtuales que se encarguen de gestionar diferentes servicios como si tuvieramos tantos servidores físicos como máquinas virtuales dispongamos. Esto es muy apreciable porque la carga que gestiona una máquina virtual no influye en el rendimiento de las otras y sólo depende de la potencia del equipo físico en el que se hospedan las mismas. Así que si deseamos tener varias máquinas virtuales gestionando diferentes servicios les recomiendo que la PC sea de muy buenas características tanto en procesador como en memoria RAM.

Bien, existen muchos softwares que sirven para nuestro fin como VMWare; VirtualPC, Qemu, KVM, OpenVZ, Xen, Virtualbox, todos ellos con sus ventajas y desventajas que tampoco detallaré en este tutorial.

Voy a usar virtualbox para tal fin ya que no pide mucho equipo para poder trabajar a comparación de VMWare.

La particularidad del presente trabajo es que todo lo haremos desde línea de comandos ya que suponemos que el SO host no tiene interfaz gráfica y sólo a se a instalado lo mínimo para que inicie el servidor.

Empecemos:
1. Instalando Virtualbox desde consola:
primero descargamos virtualbox. En mi caso yo uso Debian Squeeze 64 bits
zatoo@pruebas:~# wget http://download.virtualbox.org/virtualbox/4.1.6/virtualbox-4.1_4.1.6-74713~Debian~squeeze_amd64.deb

luego instalamos:
zatoo@pruebas:~# dpkg -i virtualbox-4.1_4.1.6-74713~Debian~squeeze_amd64.deb
Resolvemos las dependencias y listo, ya tenemos instalado virtualbox en nuestro servidor. Reiniciamos y listo.

luego instalamos el paquete extension_pack de virtualbox:
zatoo@pruebas:~# wget http://download.virtualbox.org/virtualbox/4.0.6/Oracle_VM_VirtualBox_Extension_Pack-4.0.6-71344.vbox-extpack && VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.0.6-71344.vbox-extpack

2. Creando máquinas virtuales desde línea de comandos
Consultando con el archivo de ayuda de virtualbox (man virtualbox) explica clara y detalladamente todos los comandos que maneja virtualbox.
Vamos a crear una máquina virtual que sea servidor web y que se llame www.mipc.com
zatoo@pruebas:~# VBoxManage createvm --name "www.mipc.com" --register

luego le asignaremos memoria RAM de 128 y le diremos que booteará desde el dvd virtual, le asignaremos su interfaz de red en modo bridge y utilizará la interfaz eth0 del SO host.
zatoo@pruebas:~# VBoxManage modifyvm "www.mipc.com" --memory 128 --acpi on --boot1 dvd --nic1 bridged --bridgeadapter1 eth0

luego crearemos un disco duro virtual donde instalaremos el SO hueped cuyo nombre será www_mipc_com.vdi y tendrá un tamaño máximo de 8gb incrementándose dinámicamente:
zatoo@pruebas:~# VBoxManage createhd --filename www_mipc_com.vdi --size 8000

luego creamos los controladores que manejarán al dvd y al disco duro virtual de la máquina virtual www.mipc.com:
zatoo@pruebas:~# VBoxManage storagect1 "ww.mipc.com" --name "IDE Controller" --add ide

luego asociamos el disco duro creado www_mipc_com.vdi a la máquina virtual creada www.mipc.com:
zatoo@pruebas:~# VBoxManage storageattach "ww.mipc.com" --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium www_mipc_com.vdi

y también asociamos una imagen del SO que se quiere instalar(la imagen es de debian6.0.3.iso que se encuentra el /root) al dvd virtual para poder instalarlo en la máquina virtual www.mipc.com:
zatoo@pruebas:~# VBoxManage storageattach "www.mipc.com" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium /root/debian-6.0.3.1-amd64-CD-1.iso

Y con esto ya podemos iniciar la instalación del SO debian huésped en el SO host.
zatoo@pruebas:~# VBoxHeadless --startvm www.mipc.com
Ésto por default iniciará la máquina virtual en segundo plano en el puerto TCP 3389; así que desde cualquier cliente de sesiones remotas como el mstsc.exe (escritorio remoto de windows) o el grdesktop de debian podemos ingresar a la máquina virtual colocando la IP del servidor físico real y el puerto 3389 en donde está escuchando la máquina virtual: Así como en la figura:
















Una vez instalado el SO huésped en la máquina virtual huésped dentro del servidor vamos a modificar el orden de booteo de la mencionada máquina para que cuando inicie ya no lo haga desde el cd sino directamente desde hard disk:
zatoo@pruebas:~# VBoxManage modifyvm "www.mipc.com" --acpi on --boot1 disk

Ahora, si queremos instalar más de una máquina virtual tendremos que seguir los mismos pasos anteriormente descritos. La diferencia radica a la hora de iniciar la máquina virtual. Como la primera máquina se encuentra levantada y conectada a través del puerto 3389 TCP, la nueva máquina virtual tendría que escuchar en un puerto diferente, por lo que el comando para que inicie en un puerto diferente por ejemplo el puerto 20000 TCP sería:
zatoo@pruebas:~# VBoxHeadless --startvm www.mipc.com -e "TCP/Ports=20000"
entonces cuando iniciemos sesión desde un cliente de escritorio remoto tendríamos que colocar IP:20000

Ahora, cuando ejecutamos el comando anterior iniciamos la máquina virtual pero vemos que la consola se queda ahí y no lo pasa a segundo plano, y si hacemos Ctrl C para escapar, la máquina virtual iniciada se apaga. Entonces para evitar esto y poder iniciar varias sesiones si estar abriendo varias terminales igresamos lo sgte:
zatoo@pruebas:~# nohup VBoxHeadless --startvm www.mipc.com -e "TCP/Ports=20000" --vrdp on &













Con esto hemos podido iniciar una máquina virtual en un entorno donde no hay interfaz gráfica debido a su condición de servidor donde lo que se requiere es iniciar con lo más mínimo y así tener los recursos disponibles para lo que verdaderamente importa.

Espero que esto les sirva porque ya en adelante empezaremos a implementar servicios como DNS, Web, Correo, LDAP, SAMBA, Mensajeria Instantánea con Openfire, etc y lo haremos en estas máquinas virtuales que hemos creado.

Características del Servidor Físico Real:
- Placa Intel DG41PR
- Procesador Intel Core 2 Quad 2.66 GHZ
- Memoria RAM 4GB 800MHZ
- Disco Duro 250 GB Sata
- Quemador DVD
- Fuente de 450 Watts uATX