SESION 5 4 Junio 2011 Práctica IV: Despliegue de una aplicación sobre cloud El objetivo de esta práctica es realizar el despliegue de un servidor web con tolerancia a fallos y balanceo de carga sobre la plataforma cloud creada en la práctica anterior. opennebula1 OpenNebula front-end opennebula2 - runs 'oned' daemon - exports (NFS) /srv/cloud + KVM host KVM host VM VM 10.2.21.Z 10.2.21.X 10.2.21.W 10.2.21.Y 1 Configuramos la red para que puedan comunicarse todas las VMs (“Public Bridge”) 1.1 Creamos el bridge “br0”con yast: • Network Device → Network Settings → Add • Device Type: Bridge • Le ponemo la ip que queremos (10.2.21.X). La ip de la interfaz de red física se configurará automáticamente a 0.0.0.0 • En “Bridges Devices“ seleccionamos la interfaz con la cual enlazar el bridge ( la interface real que estamos usando ) • Guardamos los cambios y salimos del yast 1.2 Creamos las siguientes reglas de iptables para tener acceso al/del exterior • iptables -A INPUT -i br0 -p udp -m udp --dport 53 -j ACCEPT • iptables -A INPUT -i br0 -p tcp -m tcp --dport 53 -j ACCEPT • iptables -A INPUT -i br0 -p tcp -m tcp --dport 67 -j ACCEPT • iptables -A INPUT -i br0 -p udp -m udp --dport 67 -j ACCEPT • iptables -A FORWARD -i br0 -o br0 -j ACCEPT Curso “Introducción al clustering y virtualización de sistemas” Asociación de Profesores de Informática de Aragón (APIA) 1.3 Volvemos a crear la imagen Master pero con el bridge cambiado a “br0” con el virtmanager: • Creamos la máquina virtual con la opción “Tengo un disco con un sistema operativo instalado” y configurar como en la práctica anterior: • Seleccionamos el disco del master “diskOS11.4-master-configurado.raw” • En “adaptadores de red” le ponemos que utilice la fuente “br0” • Le ponemos otro nombre para no confundirlo con el antiguo master • Y finalizamos la creación de la nueva imagen máster 2 OpenNebula en Acción 2.1 Creamos los nodos en los que se ejecutarán nuestras máquinas virtuales • onehost create opennebula1 im_kvm vmm_kvm tm_nfs • onehost create opennebula2 im_kvm vmm_kvm tm_nfs 2.2 Listamos los nodos de nuestro cloud • onehost list 2.3 Si ha ocurrido algún error podemos ver el log en: • cat $HOME/var/oned.log 2.4 Si todo va bien, continuamos... 2.5 Configuramos la red de nuestro cloud para que se asignen automáticamente las ips(en este punto destacar respecto de la practica anterior que debemos utilizar el bridge br0 ) • mkdir $HOME/templates • cd templates • wget http://bifi.es/apia2011/sesion5/files/create_network.net • Y modificamos las ips por las que nos correspondan ( podemos utilizar desde la 110 hasta la 199 ) • onevnet create create_network.net 2.6 Comprobamos que se ha creado correctamente • onevnet list 2.7 Nos descargamos el template opensuse.one de la máquina virtual a desplegar con wget y lo guardamos con en $HOME/templates/opensuse.one 2.8 Copiamos una de las imágenes de la práctica anterior al directorio de imagenes • cp <PATH a diskOS11.4-master-configurado.raw> /srv/cloud/one/images/diskOS11.4-master-configurado.raw 2.9 Si fuera necesario modificamos el template con la ruta a la imagen 2.10 Arrancamos una máquina virtual • onevm create opensuse.one im_kvm vmm_kvm tm_nfs 2.11 Para ver el estado de las máquinas virtuales: • onevm list 2.12 Si no alcanza el estado “running”, comprobamos el log de la máquina virtual que acabamos de crear • tail -200 $HOME/var/X/vm.log (cambiamos la X por el número de la máquina virtual) 2.13 Para ver la consola de la máquina virtual tenemos que utilizar virt-manager. Veremos que se queda esperando el disco. Eso es debido a que Virt-manager detecta el disco como vda y opennebula como sda. Así que para que arranque tendremos que modificar Curso “Introducción al clustering y virtualización de sistemas” Asociación de Profesores de Informática de Aragón (APIA) el fichero /boot/grub/menu.lst dentro de la imagen master para que arranque con sda. 2.14 Volvemos a lanzar la máquina virtual y comprobamos que arranca perfectamente 3 Configuración necesaria en el nodo de cómputo (sólo cliente) 3.1 Instalamos ruby (si no se encuentra ya instalado) • zypper install ruby 3.2 Importamos el directorio de instalación de Opennebula. Para ello añadimos la siguiente línea en el fichero /etc/fstab: • opennebula1:/srv/cloud /srv/cloud nfs defaults 00 3.3 Y lo montamos • mount /srv/cloud 4 Instalación Interfaz Gráfica SunStone 4.1 Instalamos los paquetes necesarios: • gem install json • gem install sinatra • gem install thin 4.2 Arrancamos la aplicación (en opennebula1) • $ONE_LOCATION/bin/sunstone-server -H 10.2.21.X start 4.3 Abrimos la interfaz en un navegador • http://10.2.21.X:4567/ 5 Tolerancia a fallos 5.1 En este punto vamos a modificar la configuración de nuestro cloud para que soporte tolerancia a fallos, es decir, si hay algún problema en alguno de nuestros nodos hosts, las máquinas virtuales que estaban corriendo en dicho host se desplegarán en otro de los nodos del cloud. 5.2 Para ello vamos a modificar el fichero de configuración $ONE_LOCATION/etc/oned.conf descomentando las siguientes líneas: HOST_HOOK = [ name = "error", on = "ERROR", command = "host_error.rb", arguments = "$HID -r n", remote = "no" ] HOST_HOOK = [ name = "disable", on = "DISABLE", command = "host_error.rb", arguments = "$HID -r n", remote = "no" ] 5.3 También podemos modificar el fichero de configuracion oned.conf para que la monitorización de los hosts y máquinas virtuales se efectue con más frecuencia. Esto hará que los cambios de estado se visualicen más rápido ( ya está modificado en el fichero que se adjunta ) Curso “Introducción al clustering y virtualización de sistemas” Asociación de Profesores de Informática de Aragón (APIA) • • HOST_MONITORING_INTERVAL = 60 VM_POLLING_INTERVAL = 60 5.4 Reiniciamos el servidor: • one stop • one start 5.5 Lo probamos deshabilitando un nodo (opennebula2): • onehost disable <host_id> 5.6 o desconectando el cable de red 5.7 Veremos que la máquina virtual es desplegada automáticamente al cabo de unos minutos en el otro host que forma nuestro cloud. 6 Balanceo de Carga opennebula2 opennebula1 OpenNebula front-end + - runs 'oned' daemon - exports (NFS) /srv/cloud KVM host NGINX load-balancer KVM host NGINX webserver NGINX webserver VM VM 10.2.21.Z 10.2.21.X 10.2.21.W 10.2.21.Y 6.1 Por último, otra funcionalidad que nos ofrece un sistema en cloud, es la posibilidad de hacer balanceo de carga entre nuestras máquinas virtuales. En este punto vamos a desplegar un servidor web con balanceo de carga entre las máquinas virtuales que tengamos arrancadas. 6.2 Los siguiente puntos los tenemos que realizar tanto en el nodo host del servidor (opennebula1) como en la imagen master con la que luego desplegaremos las máquinas virtuales: 6.2.1 • Añadimos el siguiente repositorio mediante yast: http://download.opensuse.org/repositories/openSUSE:/11.4:/Contrib/standard • Instalamos los paquetes necesarios: zypper install php5 php5-xcache nginx-0.8 6.2.2 6.2.3 Nos descargamos el fichero nginx-server.conf y nginx-client.conf y lo sustituimos por el que hay en /etc/nginx/ correspondiente, pero con el nombre Curso “Introducción al clustering y virtualización de sistemas” Asociación de Profesores de Informática de Aragón (APIA) original “nginx.conf” 6.2.4 Modificamos este fichero con las @ips correspondientes (SOLO en el server - opennebula1): • “proxy_pass http://10.2.21.X” , sustituimos la X por la que ip que corresponda • “upstream 10.2.21.X {“ , por la misma ip que en el proxy_pass • y en los servers ponemos las ips de nuestras VMs 6.2.5 • Arrancamos nginx service nginx start 6.3 Modificamos los runlevels para que arranque en los niveles 3 y 5 6.4 Para problarlo: 6.4.1 • • • Creamos un fichero en la imagen master para descargarnos remotamente: dd if=/dev/zero of=/srv/www/htdocs/test_file.raw count 800000 Apagamos la imagen master Desplegamos 2 VMs 6.4.2 Nos intentamos descargar esta imagen desde un equipo ajeno a nuestro cloud (le pedimos prestado un ordenador a otro grupo ) y mediante wget y varias terminales descargamos la misma imagen 2 veces simultáneamente: • wget http://10.2.21.X/test_file.raw • Mediante el virt-manager podemos ver la carga del sistema y podemos ver que la descarga se está llevando a cabo en ambos servidores. Curso “Introducción al clustering y virtualización de sistemas” Asociación de Profesores de Informática de Aragón (APIA)