
1. Introducción
La finalidad de este documento es explicar de forma breve cómo montar dos tipos de clusters: aquellos destinados a la alta disponibilidad y los destinados al alto rendimiento. El primer tipo utilizará las tecnologías: Ultra Monkey: (HeartBeat, LVS, Ldirectord, MON) y NTP, entre otras; y el segundo: OpenMosix.
Este documento está basado en la rama de desarrollo de la distribución Debian GNU/Linux, más conocida como Sid. Aunque los pasos que aquí se detallan son fácilmente adaptables a otras distribuciones de GNU/Linux.
También se destaca que para leer este documento se han de poseer unos conocimientos avanzados en administración de sistemas GNU/Linux, ya sean para configurar aspectos como la red, el núcleo Linux o distintas partes del sistema. Aspectos que no entran dentro de este artículo y de los cuales existe una documentación muy extensa, como la que se lista en el apartado: Documentación general sobre GNU/Linux de la Bibliografía.
1.1. Tipos de clusters: conceptos básicos
Normalmente, al diseñar un cluster se piensa en solucionar alguno de los siguientes problemas:
Mejora de rendimiento
Abaratamiento del coste
Distribución de factores de riesgo del sistema
Escalabilidad
Para solucionar este tipo de problemas, se han implementado distintas soluciones. Aquí veremos dos de ellas: cluster de alta disponibilidad y de alto rendimiento.
Nota
Los clusters de alta disponibilidad son bastante ortogonales a los clusters de alto rendimiento, en lo relativo a funcionalidad. Los clusters de alta disponibilidad pretenden dar servicios 24*7, de cualquier tipo, son clusters donde la principal funcionalidad es estar controlando y actuando para que un servicio, o varios, se encuentren activos durante el máximo período de tiempo posible.
Nota
Los clusters de alto rendimiento han sido creados para compartir el recurso más valioso de un ordenador: el tiempo de proceso. Generalmente se utilizan en ambientes científicos o en grandes empresas, donde se utilizan para la compilación o renderización. Cualquier operación que necesite altos tiempos de CPU y millones de operaciones, puede ser utilizada en un cluster de alto rendimiento, siempre que se encuentre un algoritmo que sea paralelizable. Existen clusters que pueden ser denominados de alto rendimiento tanto a nivel de sistema como a nivel de aplicación. A nivel de sistema tenemos openMosix (el que trataremos en esta documentación), mientras que a nivel de aplicación se encuentran otros como MPI, PVM, Beowulf y otros muchos. En cualquier caso, estos clusters hacen uso de la capacidad de procesamiento que pueden tener varias máquinas.
2. Cluster de alta disponibilidad, Ultra Monkey
Actualmente existen muchos proyectos destinados a proveer de alta disponibilidad a un sistema, uno de ellos es Ultra Monkey (es el que se ha utilizado como base para esta documentación). Ultra Monkey es un proyecto que integra distintas herramientas de Software Libre para conseguir balanceo de carga y alta disponibilidad en redes de área local. Estas herramientas son: LVS, HearBeat, Ldirectord y MON, que se definirán en los siguientes apartados.
2.1. Componentes de Ultra Monkey
2.1.1. LVS (Linux Virtual Server)
LVS se implementa como un conjunto de parches al kernel Linux y un programa de espacio de usuario denominado ipvsadm. El sistema que tiene instalado LVS es denominado director o balanceador de carga, cuya función no es otra que balancear las peticiones de red que recibe entre un conjunto de servidores reales que se encuentran detrás de él.
LVS funciona a nivel TCP/IP, lo que se conoce como un conmutador de nivel 4. Lo que ve LVS son direcciones y puertos de origen y destino, y toma decisiones para balancear la carga con esta información. LVS toma las decisiones cuando se abre una conexión (SYN), manteniendo una tabla de conexiones, para saber a que servidor real[1] enviar un paquete perteneciente a una conexión ya establecida. Por lo tanto, el balanceo de carga que realiza LVS tiene, en principio, granularidad[2] a nivel de conexión.
LVS permite balancear muchos protocolos distintos, en principio puede balancear cualquier protocolo que trabaje en un solo puerto, y puede trabajar con protocolos que usen varios puertos, mediante persistencia o marcas de firewall.
Cuando se usan servicios persistentes, cada entrada en la tabla de LVS ya no corresponde a una conexión TCP (direcciones y puertos de origen y destino), sino que sólo usa las direcciones para identificar una conexión (se pierde granularidad).
Se puede usar iptables o ipchains para marcar los paquetes pertenecientes a un servicio virtual (con una marca de firewall) y usar esa marca para que LVS identifique los paquetes pertenecientes al servicio virtual.
LVS se ha usado con HTTP, HTTPS, Telnet, FTP, Squid, servidores de streaming QT, Real y Windows Media, incluso se ha empezado a añadirle soporte para IPSec (FreeSWAN).
LVS realiza balanceo de carga y facilita la alta disponibilidad entre los servidores reales (si alguno deja de funcionar, se elimina del cluster mediante ipvsadm; cuando vuelva a estar operativo, se añade de nuevo con ipvsadm). Sin embargo, el balanceador de carga pasa a ser un SPOF[3], si se quiere alta disponibilidad se tiene que añadir un balanceador de respaldo y usar software de alta disponibilidad que le permita tomar el papel del balanceador de carga principal, esto lo conseguimos con HearBeat.
2.1.2. HearBeat
Esta tecnología implementa heartbeats, cuya traducción directa sería: «latidos de corazón». Funciona enviando periódicamente un paquete, que si no llegara, indicaría que un servidor no está disponible, por lo tanto se sabe que el servidor ha caído y se toman las medidas necesarias.
Dichos latidos se pueden enviar por una linea serie, por UDP o por PPP/UDP. De hecho los desarrolladores de HeartBeat recomiendan el uso de puertos serie por varias razones, entre las que destacan que están aislados de las tarjetas de red.
También incluye toma de una dirección IP y un modelo de recursos, incluyendo grupos de recursos. Soporta múltiples direcciones IP y un modelo servidor primario/secundario. Se ha probado satisfactoriamente en varias aplicaciones, como son: servidores DNS, servidores proxy de caché, servidores web y servidores directores de LVS. El proyecto LVS recomienda HeartBeat para aumentar la disponibilidad de su solución, pero no es parte de LVS.
En Linux-HA Heartbeat es un servicio de bajo nivel. Cuando un ordenador se une al cluster, se considera que el ordenador se ha unido al canal de comunicaciones, por lo tanto «late»; cuando sale, implica que ha dejado el canal de comunicaciones.
Cuando un ordenador deja de «latir» y se considera muerto, se hace una transición en el cluster. La mayoría de los mensajes de manejo del cluster que no son heartbeats se realizan durante estas transiciones.
Los mensajes de Heartbeat se envían por todas las lineas de comunicación a la vez, de esta manera, si una linea de apoyo cae, se avisará de ese problema antes de que la linea principal caiga y no haya una línea secundaria para continuar el servicio.
Heartbeat también se preocupa por la seguridad, permitiendo firmar los paquetes con CRC de 32 bits, MD5 y SHA1. Esto puede evitar el desastre que podría provocarse si un nodo no miembro se enmascarase como nodo miembro del cluster. El problema es que el entorno donde se ejecuta Heartbeat no debe parar nunca y con suerte ese entorno se mantendrá comunicado y funcionando durante años.
Hay varias operaciones de mantenimiento de seguridad que necesitan ser efectuadas en ese tiempo, como pueden ser cambio de claves y de protocolos de autentificación. Heartbeat está preparado para esos cambios disponiendo de ficheros para la configuración.
Heartbeat tiene el problema, si no se dispone de una línea dedicada, aunque ésta sea una línea serie, al tener un tráfico que aunque pequeño es constante, suele dar muchas colisiones con otros tráficos que puedan ir por la misma red. Por ejemplo, openMosix y Heartbeat en una misma red que no tenga gran ancho de banda no funcionan bien, sobre todo si hay bastantes nodos, pues los heartbeats se envían de cualquier nodo a cualquier nodo, por lo que podrían llegar a ser un tráfico voluminoso.
2.1.3. Ldirectord
Pensado especialmente para ser usado junto con LVS, utiliza Heartbeat. Monitoriza que los servidores reales sigan funcionando periódicamente, enviando una petición a una url conocida y comprobando que la respuesta contenga una cadena concreta. Si un servidor real falla, entonces el servidor es quitado del conjunto de servidores reales y será reinsertado cuando vuelva a funcionar correctamente. Si todos los servidores fallan, se insertará un servidor de fallos, que será quitado una vez que los servidores vuelvan a funcionar. Típicamente, este servidor de fallos es el propio host desde el que se realiza el monitoraje.
2.1.4. MON (Service Monitoring Daemon)
Mon es un software para la monitorización del sistema. Mon permite definir una serie de alarmas y acciones a ejecutar cuando un servicio deja de funcionar.
Mon se utiliza ampliamente como componente de monitorización de recursos para Heartbeat.
Mon se compone de dos partes:
Monitores: Son programas (escritos normalmente en Perl) que se ejecutan periódicamente para comprobar el estado de un servicio. Devuelven éxito o fallo. Hay muchos monitores escritos, y para una gran variedad de servicios, y también se pueden escribir monitores nuevos.
El demonio mon: Lee un fichero de configuración, que especifica los nodos/servicios que hay que monitorizar y con que frecuencia. También especifica las acciones (alertas en la terminología de mon) a realizar cuando un nodo/servicio deja de responder o se recupera. Estas alertas también suelen ser scripts en Perl.
2.2. Consideraciones previas, el problema de los datos
En un cluster que ofrezca algún servicio en red se supone que cada servidor debe poseer los mismos datos, por ejemplo, una granja de servidores web debería compartir las mismas páginas web, un cluster de servidores POP debería compartir los mismos mensajes de correo, etc.
Esto crea un problema ¿Cómo se hace que los nodos compartan los mismos datos, sin dar lugar a conflictos?
Como en todo, para este problema van a existir diversas soluciones. La mejor solución dependerá de cuál sea el problema concreto. Por ejemplo, si tenemos un sitio web con un contenido que no cambia a menudo, puede ser suficiente hacer mirroring cada cierto tiempo, si tenemos varios sitios web que cambian continuamente de contenido, esta solución puede no ser tan buena.
De todas formas, para el ejemplo que aquí mostraremos, vamos a suponer que cada servidor
No veo aqui la informacion que recopilaron hoy de los equipos del aula polivalente..Esta en otro blog????
ResponderEliminarJohana Hernandez
si esta en el blog killersandcluster.blogspot.com
ResponderEliminargracias por la pregunta att leo
ResponderEliminar