Balanceo de Carga en Centos
Short Description
Descripción: Balanceo de Carga con open source en Centos - Ing. Mauricio Gallardo...
Description
UNIVERSIDAD ALFREDO PÉREZ GUERRERO UNAP
CARRERA: SISTEMAS DE INFORMACION Y NETWORKING
PROYECTO DE GRADO
PARA LA OBTENCIÓN DEL TÍTULO DE INGENIERO EN SISTEMAS INFORMATICOS Y NETWORKING
TEMA: “DISEÑO DE UNA SOLUCIÓN PARA SERVIDORES DE ALTA DISPONIBILIDAD Y BALANCEO DE CARGA CON OPEN SOURCE”
Autor: Flavio Mauricio Gallardo Padilla Director: Ing. Nelio Brito
Mayo del 2011
Quito, 13 de mayo del 2011
Señor: Coordinador de Tesis y Proyectos de Grado UNAP Presente.-
De nuestras consideraciones: Por medio de la presente CERTIFICAMOS, que el señor estudiante – egresado Flavio Mauricio Gallardo Padilla, identificado con el número de cédula 1710049139 estudiante de la carrera de Ingeniería en Sistemas y Networking de la UNAP, una vez realizada la dirección y las evaluaciones correspondientes según la normativa de la universidad, ha concluido satisfactoriamente con el trabajo de grado Titulado “DISEÑO DE UNA SOLUCIÓN PARA SERVIDORES DE ALTA DISPONIBILIDAD Y BALANCEO DE CARGA CON OPEN SOURCE”. Por consiguiente, otorgamos la aptitud para la presentación del grado oral del mencionado estudiante.
Agradeciendo su atención
Ing. Nelio Brito Director
Ing. Fredy Molina Evaluador
Ing. Rommel Caicedo Evaluador
Quito, 13 de mayo del 2011
Señores: Universidad Alfredo Pérez Guerrero UNAP Presente.-
De mis consideraciones:
Yo, Flavio Mauricio Gallardo Padilla, identificado con el número de cédula 1710049139, estudiante egresado de la UNAP de la Carrera de Ingeniería en Sistemas y Networking, por medio de la presente CERTIFICO que el presente Trabajo
de
Grado
titulado:
“DISEÑO
DE
UNA
SOLUCIÓN
PARA
SERVIDORES DE ALTA DISPONIBILIDAD Y BALANCEO DE CARGA CON OPEN SOURCE”; es de mi plena autoría y no constituye plagio ni copia alguna constituyéndose un documento único.
Es todo en cuanto puedo decir en honor a la verdad
Agradeciendo su atención
Mauricio Gallardo C.I. 1710049139 Estudiante Egresado de la UNAP
AGRADECIMIENTO
A mi esposa, por ser el pilar y soporte en todo lo que hago en mi vida, por ser la persona que me ha brindado su apoyo y comprensión incondicional en la culminación de mi carrera, sin lugar a duda es parte esencial para haber terminado mis estudios universitarios, gracias por todo lo que has hecho para alcanzar esta meta, este logro también es tuyo.
DEDICATORIA
A mis hijas, quienes comprendieron que el tiempo que debía entregarles a ellas lo ocupaba en culminar mi carrera, quiero que este logro sea para ellas un ejemplo de perseverancia y sacrificio y que sea también un ejemplo para la culminación de sus carreras profesionales en su momento, entiendan que todo lo que uno se propone en la vida es posible con dedicación y esfuerzo.
INDICE
INTRODUCCION ................................................................................................. i CAPITULO 1 ....................................................................................................... 1 GENERALIDADES ............................................................................................. 1 1.1. PLANEAMIENTO DEL PROBLEMA ............................................................ 1 1.2. FORMULACION DEL PROBLEMA .............................................................. 2 1.3. SISTEMATIZACION .................................................................................... 2 1.4. OBJETIVO GENERAL ................................................................................. 2 1.5. OBJETIVOS ESPECIFICOS ........................................................................ 3 1.6. JUSTIFICACIÓN .......................................................................................... 3 1.7. ALCANCE .................................................................................................... 4 CAPITULO 2 ....................................................................................................... 6 INTRODUCCION ................................................................................................ 6 FUNDAMENTACION TEORICA ......................................................................... 6 MARCOS DE REFERENCIA (Teórico, Conceptual) ........................................... 6 2.1. MARCO TEORICO ...................................................................................... 6 2.1.1. Clustering .................................................................................................. 6 2.1.1.1. Antecedentes ......................................................................................... 6 2.1.1.2 Que es el clustering? .............................................................................. 7 2.1.1.3. Tipos de clúster ...................................................................................... 8 2.1.1.4. High Performance .................................................................................. 8 2.1.1.5. Clúster Activo/Pasivo ........................................................................... 14 2.1.1.6. Clúster Activo/Activo ............................................................................ 14 2.1.2. Arquitectura de Clustering....................................................................... 15 2.1.2.1. Alta disponibilidad ................................................................................ 16 2.1.2.2. Escalabilidad ........................................................................................ 20 2.1.3. Funcionamiento de un clúster ................................................................. 22 2.1.3.1. Balanceador de carga .......................................................................... 22 2.1.3.2. Sistema para la detección de fallos en los nodos del clúster ............... 24 2.1.3.3. Recursos del clúster ............................................................................ 25 2.1.3.4. Servicio a clusterizar ............................................................................ 25
2.1.4. Balanceo de Carga ................................................................................. 26 2.1.4.1. Balanceadores hardware ..................................................................... 29 2.1.4.2. Balanceadores software....................................................................... 30 2.1.4.3. Linux Virtual Server - LVS .................................................................... 30 2.1.5. Detección de fallos en los nodos del clúster ........................................... 32 2.1.5.1. Heartbeat ............................................................................................. 32 2.1.5.2. Disco de quorum .................................................................................. 34 CAPITULO 3 ..................................................................................................... 36 INTRODUCCION .............................................................................................. 36 DIAGNOSTICO ................................................................................................. 36 3.1. Herramientas de open source para la construcción del Clúster ................. 36 3.2. Comparación de las herramientas de balanceo de carga y alta disponibilidad .................................................................................................... 40 3.2.1. Herramientas de balanceo de carga y alta disponibilidad ....................... 44 3.2.1.1. Piranha................................................................................................. 44 3.2.1.2. Linux Virtual Server .............................................................................. 45 3.2.1.3. Ultramonkey ......................................................................................... 47 3.2.1.3.1. Componentes Ultramonkey ............................................................... 47 3.2.1.3.1.1. Heartbeat ....................................................................................... 48 3.2.1.3.1.2. Ldirectord ....................................................................................... 48 3.2.1.3.1.3. Mon (Service Monitoring Daemon)................................................. 49 CAPITULO 4 ..................................................................................................... 50 INTRODUCCION .............................................................................................. 50 DISEÑO ............................................................................................................ 50 4.1. Tipos de balanceo de carga ....................................................................... 50 4.1.1. Modos de balanceo de carga en LVS ..................................................... 51 4.1.2. Resumen de los métodos de balanceo ................................................... 56 4.1.3. Planificación del balanceo de carga ........................................................ 57 4.2. Elección de una herramienta para balanceo de carga y alta disponibilidad .......................................................................................................................... 62 CAPITULO 5 ..................................................................................................... 69 INTRODUCCION .............................................................................................. 69 IMPLEMENTACION EN MAQUINAS VIRTUALES ........................................... 69
5.1 INSTALACION Y CONFIGURACION DEL CLUSTER ................................ 69 5.1.1 SELECCIÓN DE NODOS PARA EL CLÚSTER ...................................... 71 5.1.2 Instalación de los nodos........................................................................... 74 5.1.3. Configuración de los servidores web ...................................................... 76 5.2. Instalación de CentOs ................................................................................ 78 5.3. Instalación de Ultramonkey ........................................................................ 78 5.3.1. Selección de topología de instalación de ultamonkey ............................. 79 5.3.1.1. Directores Linux o Nodos de balanceo ................................................ 80 5.3.1.2. Nodos servidores o servidores reales .................................................. 81 5.4. Configuración de Heartbeat en los nodos de balanceo ............................. 81 5.5. Configuración de la red de trabajo ............................................................. 81 5.6. Configuración del clúster ........................................................................... 82 5.6.1. Directores Linux, nodos de balanceo ...................................................... 82 5.6.2. Heartbeat ................................................................................................ 82 5.7. Instalar y configurar IPROUTE en los nodos servidores ............................ 83 5.8. Pruebas de desempeño ............................................................................. 84 5.8.1. Herramientas para medición de rendimiento .......................................... 86 5.8.1.1. Selección de una herramienta para medición de rendimiento ............. 86 CONCLUSIONES ............................................................................................. 91 Anexo 1 Instalación de Centos ......................................................................... 95 Anexo 2 Instalación de la Solución ................................................................. 118
INDICE DE FIGURAS
Figura 2.1 Clúster de computadores ............................................................... 7 Figura 2.2 Componentes de un clúster ............................................................ 9 Figura 2.3 Arquitectura de un Clúster ............................................................ 15 Figura 2.4 Alta disponibilidad ......................................................................... 20 Figura 2.5 Balanceador de Carga .................................................................. 23 Figura 2.6 Recursos del Clúster .................................................................... 25 Figura 2.7 Balanceo de Carga ....................................................................... 27 Figura 2.8 Balanceadores de Carga .............................................................. 31 Figura 2.9 Heartbeat ...................................................................................... 32 Figura 2.10 Disco de Quorum ........................................................................ 35 Figura 3.1 Esquema de funcionamiento de Piranha. ..................................... 45 Figura 3.2 Esquema de funcionamiento de LVS. .......................................... 46 Figura 3.3 Componentes de Ultramonkey. .................................................... 48 Figura 3.4 Esquema de funcionamiento de Ultramonkey. ............................. 49 Figura 4.1 Balanceo mediante NAT. .............................................................. 53 Figura 4.2 Balanceo mediante encapsulado IP. ............................................ 54 Figura 4.3 Balanceo mediante enrutamiento directo. .................................... 55 Figura 4.4 Round Robin................................................................................. 59 Figura 4.5 Round Robin Ponderado. ............................................................. 59 Figura 4.6 Servidor con menos conexiones activas. ..................................... 60 Figura 4.7 Servidor con menos conexiones activas ponderado. ................... 60 Figura 4.8 Menos conectado basado en servicio. ......................................... 61 Figura 4.9 Tablas Hash por origen y destino. ................................................ 61 Figura 5.1 Funcionamiento del Clúster. ......................................................... 70 Figura 5.2. Configuración final de nodos. ...................................................... 78 Figura 5.3. Página del servidor 1 ................................................................... 85 Figura 5.4. Página del servidor 2 ................................................................... 85 Figura 5.5. Detención del servicio httpd......................................................... 86 Figura 5.6. Verificación de servidores y conexiones con ipvsadm –l. ............ 88 Figura 5.7. Verificación de servidores y conexiones con ipvsadm –lnc. ........ 89
Figura 5.8. Tráfico en la red con tcpdump. .................................................... 89 Figura 5.9. Salida de tráfico en la red con tcpdump. ..................................... 90
INDICE DE TABLAS
Tabla 2.1 Tipos de Clúster ........................................................................... 8 Tabla 2.2 Subtipos de Clúster ...................................................................... 9 Tabla 2.3 Componentes de un Clúster ....................................................... 10 Tabla 2.4 Configuración de un Clúster ....................................................... 14 Tabla 2.5 Estructura de Alta Disponibilidad ................................................ 15 Tabla 3.1 Características de Herramientas para Clústers. ......................... 38 Tabla 3.2 Ventajas y Desventajas de las Herramientas para Clúster. ........ 40 Tabla 3.3 Comparación de herramientas para clúster. ............................... 42 Tabla 4.1 Métodos de balanceo de carga. ................................................. 51 Tabla 4.2 Modos de balanceo de carga en LVS......................................... 52 Tabla 4.3 Métodos de direccionamiento. .................................................... 57 Tabla 4.4 Algoritmos de planificación de balanceo de carga. .................... 58 Tabla 4.5 Requisitos mínimos de hardware para Piranha. ......................... 63 Tabla 4.6 Requisitos mínimos de hardware para LVS. .............................. 64 Tabla 4.7 Requisitos mínimos de hardware para Ultramonkey. ................. 64 Tabla 4.8 Comparación de requisitos. ........................................................ 65 Tabla 5.1 Funcionamiento del Clúster. ....................................................... 70 Tabla 5.2 Especificaciones del nodo de balanceo. ..................................... 71 Tabla 5.3 Especificaciones de nodo servidor. ............................................ 71 Tabla 5.4 Herramientas utilizadas en cada nodo. ...................................... 72 Tabla 5.5 Características de herramientas utilizadas. ................................ 74 Tabla 5.6 Proceso de instalación del Sistema Operativo. .......................... 74 Tabla 5.7 Medios de instalación. ................................................................ 75 Tabla 5.8 Proceso de instalación del sistema base. ................................... 76 Tabla 5.9 Servicios activados en los nodos servidores. ............................. 76
i
INTRODUCCION Para que un servicio sea eficiente es necesario que se mantenga en funcionamiento constante y que no ocurran retardos en la entrega de la información. Así pues se da paso a la investigación y desarrollo de nuevas tecnologías que garanticen tales sucesos; en este trabajo se presentarán las soluciones para tales problemas y se expondrán sus características así como las herramientas que hacen posible la construcción de dichas soluciones de software con open source.
Un servidor juega un papel muy importante dentro de una organización, y al mismo tiempo se transforma en un servicio crítico al ser utilizado por la gran mayoría de los usuarios para acceder a todos los servicios que este brinda, siendo necesario la implementación de un sistema de clúster que permita mantener el servicio disponible en caso de que falle un servidor así como mantener un sistema de balanceo de carga evitando la saturación del propio servidor.
Un clúster es un conjunto de maquinas, conectadas entre sí en red y funcionando en paralelo y compartiendo recursos para cooperar en cargas de trabajo complejas y conseguir mayor eficacia que un solo equipo.
Al hablar de clúster, tenemos un numeroso listado de diversas aplicaciones que implementan distintos tipos de clúster, dependiendo de las necesidades que posee la organización y la aplicación a clusterizar.
Dentro de los clúster más comunes, se encuentra el clúster de alta disponibilidad, en el cual uno de los nodos actúa pasivamente mientras el nodo activo recibe todas las peticiones a los servicios que ofrece. En caso de que el nodo activo tenga alguna falla en los servicios, el nodo pasivo toma el control
ii
de los servicios y pasa a ser el activo para que los servicios ofrecidos estén siempre disponibles.
Actualmente, debido a la gran cantidad de usuarios que necesitan acceder a los servicios, es necesario también aprovechar los nodos pertenecientes al clúster, para que estos pasen a ser activos y la carga se pueda dividir entre todos los nodos del clúster, constituyendo así un clúster de balanceo de carga.
1
CAPITULO 1 GENERALIDADES
1.1. PLANEAMIENTO DEL PROBLEMA Las empresas actualmente se han visto en el problema de suspender temporalmente sus operaciones debido a incidentes ocurridos en los servidores de servicios tales como proxy, correo electrónico, ftp, web, etc., dando origen a prestar servicios de baja calidad a sus clientes poniendo en riesgo la continuidad del negocio, lo que ocasiona pérdidas económicas.
Actualmente en el país existen pocas empresas que han optado por instalar open source en sus servidores debido al poco personal técnico capacitado, pese a que el gobierno nacional promueve el uso de open source en las entidades públicas. Este trabajo se enfoca en el uso de software libre para la implementación de la solución planteada.
Existen equipos que permiten balanceo de carga y alta disponibilidad mediante hardware, pero la adquisición de estos significa una inversión para las empresas contrariamente a las soluciones de software open source que no necesitan pagar ningún valor de licenciamiento.
De no contar con una solución al problema de alta disponibilidad y balanceo de carga por software se perderá la opción de contribuir a una investigación e implementación de este tipo.
Mediante la implementación de la solución, las empresas aseguran el normal desenvolvimiento de sus operaciones, minimizando sustancialmente el riesgo tecnológico dando continuidad al negocio y por consiguiente a sus operaciones, se centrará en la técnica de obtener una alta disponibilidad y balanceo de carga
2
por medio de la redundancia, instalando servidores completos en lugar de uno sólo (se realizará la implementación en máquinas virtuales), que sean capaces de trabajar en paralelo y de asumir las caídas de algunos de sus compañeros, y podremos añadir y quitar servidores al grupo (clúster) según las necesidades.
1.2. FORMULACION DEL PROBLEMA ¿Encontrar la solución que permita mantener un alto nivel de disponibilidad y balanceo de carga, con herramientas open source, dando continuidad a los servicios?. Considerando la experiencia adquirida en la implementación, administración y mantenimiento de servidores Linux en los últimos años de servicio profesional.
1.3. SISTEMATIZACION ¿Qué herramientas open source nos permiten aplicar alta disponibilidad y balanceo de carga? ¿Qué herramientas open souce se utilizarán para la implementación de la solución? ¿Qué necesitan las empresas para solucionar su problema de alta disponibilidad y balanceo de carga?
1.4. OBJETIVO GENERAL Diseñar una solución de alta disponibilidad y balanceo de carga, para dotar de servicios que permitan dar continuidad al negocio en las operaciones realizadas por las empresas, con software open source.
3
1.5. OBJETIVOS ESPECIFICOS Investigar las distintas posibilidades que nos ofrece hoy en día el mundo del Software Libre para disponer de servidores de alta disponibilidad y balanceo de carga en el terreno empresarial y orientado principalmente a servicios IP (servidores HTTP, SMTP, POP, FTP, etc), basados en la replicación de servidores (clustering) con máquinas virtuales y bajo el Sistema Operativo GNU/Linux. Diagnosticar el estado actual de la tecnología utilizada en las empresas, que necesitan balanceo de carga y alta disponibilidad.
Diseñar una solución que permita ofrecer servidores de alta disponibilidad y balanceo de carga mediante software libre.
Implementar en un ambiente de laboratorio la solución diseñada, para asegurar el normal desenvolvimiento de las operaciones en cualquier empresa. Dicho laboratorio se lo implementará en máquinas virtuales.
1.6. JUSTIFICACIÓN Con el actual ritmo de crecimiento del comercio y el movimiento de datos de todo tipo en Internet, web 2.0, con el establecimiento no formal de un protocolo mundial IP generalizo y la incuestionable importancia de las tecnologías de la información en las empresas actuales de cualquier tamaño, es cada día más importante que los servicios puedan funcionar con un alto nivel de SLA (calidad de servicio) , ya sea para dar soporte interno, como para ofrecer servicios a través de Internet e Intranet (http, correo, ftp, etc). A esta necesidad de un servicio ininterrumpido y fiable se le conoce como alta disponibilidad, de igual forma evitar la sobre carga existente en los servidores debido al gran número de usuarios y que estos no sean saturados, compartiendo con otros la responsabilidad de dar los servicios conocemos como balanceo de carga.
4
Para poder incrementar la base científica relacionada con proyectos de software open source y minimizar el riesgo tecnológico. Se utiliza open source por que es software libre, es decir no se debe incurrir en gastos de licenciamiento para su uso. Desde
el
punto
de
vista
metodológico,
esta
investigación
generará
conocimiento válido y confiable dentro del área de las TICS , para futuras implementaciones. Esta investigación abrirá nuevos caminos en empresas que presenten situaciones similares sirviendo a estas como marco referencial.
1.7. ALCANCE El proyecto abarcará la investigación sobre las herramientas de clúster que nos ofrece el software libre, para de esta manera analizar la mejor opción para ser implementada, esta investigación permitirá además adquirir conocimiento para futuras implementaciones. Después de conocer las opciones de cluster con open source, se realizará un diagnostico sobre las herramientas disponibles para proponer una solución que permita de forma adecuada implementar la tecnología elegida, tomando en cuenta siempre la mejor alternativa.
Se creará un laboratorio con máquinas virtuales para la implementación en un ambiente de pruebas, que contendrá servicios como http, mail, ftp, proxy, además se obtendrá pruebas de los resultados de funcionamiento de la solución.
Se contará con un cliente con un sistema operativo distinto al utilizado para la construcción del clúster (el cliente solamente necesita un navegador web) el cual realiza las peticiones de la página web principal alojada en el clúster, de esta manera se puede observar cual servidor real es el que atiende la petición (en un sistema en producción esto no deberá ser así ya que la intención es que los usuarios vean al sitio web como un solo equipo). En lo concerniente a las
5
pruebas de alta disponibilidad, serán realizadas de 3 maneras, la primera es desconectando un nodo de balanceo, la segunda es detener la ejecución de las aplicaciones encargadas de monitorear el estado de los nodos de balanceo en uno de los nodos para simular un fallo físico del nodo y tercera es apagando uno de los nodos y revisar si el servicio sigue en funcionamiento. Esto nos dará una visión certera del real funcionamiento de servidores de este tipo en ambientes de producción.
6
CAPITULO 2
INTRODUCCION Este capítulo contiene conceptos fundamentales que son necesarios conocer para la elaboración del proyecto como: clustering, tipos de clúster, arquitectura de clustering, alta disponibilidad, balanceo de carga. Adicionalmente se relata una breve historia del inicio, desarrollo y evolución de la tecnología relacionada con los clúster.
FUNDAMENTACION TEORICA
MARCOS DE REFERENCIA (Teórico, Conceptual)
2.1. MARCO TEORICO 2.1.1. Clustering 2.1.1.1. Antecedentes En el verano de 1994 Thomas Sterling y Don Becker, trabajando para el CESDIS (Center of Excellence in Space Data and Informarion Sciencies) bajo el patrocinio del Proyecto de las Ciencias de la Tierra y el Espacio (ESS) de la NASA, construyeron un Clúster de Computadoras que consistía en 16 procesadores DX4 conectados por una red Ethernet a 10Mbps, ellos llamaron a su máquina Beowulf. La máquina fue un éxito inmediato y su idea de proporcionar sistemas basados en COTS (equipos de sobremesa) para satisfacer requisitos de cómputo específicos se propagó rápidamente a través de la NASA y en las comunidades académicas y de investigación. El esfuerzo del desarrollo para esta primera máquina creció rápidamente en lo que ahora llamamos el Proyecto Beowulf. Este Beowulf construido en la NASA en 1994 fue el primer clúster de la historia, y su finalidad era el cálculo masivo de datos. Desde entonces, la tecnología de clusters se ha desarrollado enormemente.
7
2.1.1.2 Que es el clustering? Clustering es un conjunto de maquinas, conectadas entre sí en red y funcionando en paralelo y compartiendo recursos para cooperar en cargas de trabajo complejas y conseguir mayor eficacia que un solo equipo. Dado que se comporta como un único gran recurso. Cada una de las máquinas que forman el clúster recibe el nombre de nodo.
Figura 2.1 Clúster de computadores
Esta tecnología ha evolucionado para beneficio de diversas actividades que requieren el poder de cómputo y aplicaciones de misión crítica.
El uso de los clústers es el resultado de una convergencia de múltiples tecnologías que abarcan la disponibilidad de procesadores económicos de alto rendimiento y las redes de alta velocidad, como lo son las redes de fibra óptica así como también el desarrollo de herramientas de software diseñadas para cómputo distribuido de alto desempeño.
8
En este sentido para que una empresa pueda contar con un clúster es necesario considerar los diferentes tipos existentes dependiendo de la tarea que se quiera realizar con este, como lo muestra la tabla 2.1.
2.1.1.3. Tipos de clúster Dependiendo del tipo de solución que busquemos podemos clasificar los clusters en varios tipos:
High Performance High Availability Load Balancing
2.1.1.4. High Performance
Tipo de Clúster
Descripción
Alto rendimiento
Conjunto de computadoras diseñado para brindar
(High Performance)
altas prestaciones en cuanto a capacidad de cálculo. Conjunto de dos o más computadoras que se
Alta disponibilidad
caracterizan por mantener una serie de servicios
(High Availability)
disponibles y compartidos, se caracterizan por estar constantemente monitorizándose entre sí. Compuesto por una o más computadoras que actúan
Balanceo de carga
como interfaces primarias del clúster y se ocupan de
(Load Balancing)
repartir las peticiones de servicio que recibe el clúster a los nodos que lo conforman.
Tabla 2.1 Tipos de Clúster
9
Además de la clasificación general de los tipos de clúster que se pueden encontrar, es preciso destacar que se pueden tener los siguientes subtipos en cada una de las categorías según se muestra en la tabla 2.2.
Subtipo Homogéneo
Descripción Es donde todos los nodos poseen una configuración de hardware y software iguales.
Semi-
Es donde se poseen arquitecturas y sistemas
homogéneo
operativos similares pero de diferente rendimiento.
Heterogéneo
Es donde se poseen hardware y software distintos para cada nodo.
Tabla 2.2 Subtipos de Clúster
Un clúster posee varios componentes de software y hardware para poder funcionar, la figura 2.2 muestra dichos componentes:
Figura 2.2 Componentes de un clúster
10
Para entender mejor estos componentes, es recomendable el análisis mediante la tabla 2.3, en ella se puede observar cada componente y una descripción del mismo comenzando por la interconexión de los equipos.
Componente
Descripción Estas son las conexiones de los nodos a la red de trabajo
Conexiones de red.
del clúster siendo tan complejas como lo sean las tecnologías y medios utilizados en su instalación.
Protocolos de comunicación y
Aquí
normalmente
se
cuenta
con
el
protocolo
de
comunicaciones TCP/IP y servicios de transporte de datos.
servicios. Son simples computadoras o sistemas multiprocesador; en Nodos.
estos se hospedan el Sistema Operativo, el middleware y lo necesario para la comunicación a través de una red. Se define a grandes rasgos como un programa o conjunto
Sistema Operativo.
de ellos que están destinados a gestionar de manera eficaz los recursos de una computadora. Como ejemplo se tiene Unix, Mac OSX. Es un software que actúa entre el Sistema Operativo y las aplicaciones con la finalidad de proveer a un clúster las
Middleware.
características de interfaz, herramientas de optimización y mantenimiento del sistema, como también un crecimiento o escalabilidad. Entre los más populares se encuentra openMosix. Son todos aquellos programas que se ejecutan sobre el
Aplicaciones.
middleware; estos son diseñados para su ejecución en entornos de cómputo paralelo o aprovechamiento del tipo de clúster. Tabla 2.3 Componentes de un Clúster
11
Los clústers permiten una flexibilidad de configuración que no se encuentra
normalmente
en
los
sistemas
multiprocesadores
convencionales. El número de nodos, la capacidad de memoria por nodo, el número de procesadores por nodo y la topología de interconexión, son todos parámetros de la estructura del sistema que puede ser especificada en detalle en una base por nodo sin incurrir en costos adicionales debidos a la configuración personalizada.
Además, permiten una rápida respuesta a las mejoras en la tecnología.
Cuando
los
nuevos
dispositivos,
incluyendo
procesadores, memoria, disco y redes están disponibles se pueden integrar a los nodos del clúster de manera fácil y rápida permitiendo que sean los sistemas paralelos que primero se benefician de tales avances. Lo mismo se cumple para los beneficios de un mejoramiento constante en el rubro de precio-rendimiento en la tecnología. Los clústers son actualmente la mejor opción para seguir la pista de los adelantos tecnológicos y responder rápidamente a las ofertas de nuevos componentes.
Los clústers permiten una flexibilidad de configuración que no se encuentra
normalmente
en
los
sistemas
multiprocesadores
convencionales. El número de nodos, la capacidad de memoria por nodo, el número de procesadores por nodo y la topología de interconexión, son todos parámetros de la estructura del sistema que puede ser especificada en detalle en una base por nodo sin incurrir en costos adicionales debidos a la configuración personalizada.
Un clúster puede ser usado para solucionar una variedad de problemas dependiendo del tipo que se tenga, como ya se dijo existen los de alto rendimiento, balanceo de carga y alta disponibilidad. Los dos primeros resuelven problemas como:
12
Cálculos matemáticos.
Rendering (construcción/generación) de gráficos.
Compilación de programas.
Compresión de datos.
Descifrado de códigos.
Rendimiento del sistema operativo, (incluyendo en él, el rendimiento de los recursos de cada nodo).
En general cualquier problema de propósito general que requiera de gran capacidad de procesamiento.
En el caso de los clúster de alta disponibilidad resuelven:
Sistemas de información redundante.
Sistemas tolerantes a fallos.
Balance de procesos entre varios servidores.
Balance de conexiones entre varios servidores.
En general cualquier problema que requiera almacenamiento de datos siempre disponible con tolerancia a fallos.
De esta manera, se afirma que el problema que se resuelve con el balanceo de carga está estrechamente relacionado con los que se pueden solucionar la alta disponibilidad, ya que generalmente se desea que un servicio esté disponible el mayor tiempo posible y con la mejor respuesta que se pueda obtener.
Es así que el servicio puede ser diverso; desde un sistema de archivos distribuidos de carácter muy barato, hasta grandes clústers de balanceo de carga y conexiones para los grandes portales de Internet lo que lleva a que la funcionalidad requerida en un entorno de red puede ser colocada en un clúster e implementar mecanismos para hacer que éste obtenga la mayor disponibilidad posible.
13
Realmente no hay sistemas que puedan asumir la alta disponibilidad en realidad, se requiere que el clúster sea tolerante a los fallos. En dicho caso se pretende ocultar al usuario final la presencia de los fallos del sistema empleando redundancia en el hardware y en el software e incluso redundancia temporal.
La redundancia en el hardware consiste en añadir componentes replicados para encubrir los posibles fallos mientras que la redundancia de software incluye la administración del hardware redundante para asegurar su correcto funcionamiento al hacer frente a la caída de algún elemento. Y por último la redundancia en el tiempo hace referencia a la repetición de la ejecución de un conjunto de instrucciones para asegurar el comportamiento correcto en caso de que ocurra un fallo.
Por su parte, el balanceo de carga en el contexto del servicio web es la toma de decisión de cuál nodo deberá hacerse cargo de las peticiones de servicio de otro que está con un mayor número de peticiones de servicio que él, con el objetivo de que éstas se encuentren equilibradas entre el total de nodos que conforman el clúster. Cuando se genera una creciente demanda de trabajo en este servicio se hace uso del balanceo de carga, creciendo el número de nodos que mantienen el servicio a medida que la carga de trabajo aumenta no siendo requisito el incorporar nodos con los últimos avances tecnológicos.
En el balanceo de carga en un nodo (o varios según sea el caso) es una tarea que controlará la distribución entre los servidores que componen el clúster. Cabe aclarar que dicha labor se puede efectuar a nivel de aplicación; lo que puede llevar a cuellos de botella si el número de nodos servidores es grande y en un nivel de dirección IP, en el cual la cantidad de información que es manejada es mucho
14
menor, puesto que sólo son manejadas las direcciones IP y no datos adicionales como el manejo de sesiones e información de control de la aplicación; por ello en el manejo a nivel de dirección IP, un cuello de botella es menos factible.
Así pues, para lograr que un sistema tenga características de alta disponibilidad se hace uso de componentes de hardware redundante y un software capaz de unir tales componentes. Estos sistemas poseen dos posibles configuraciones que se listan en la tabla 2.4. Un clúster de alta disponibilidad puede componerse de uno o varios nodos para sustentar el acceso al servicio ofrecido, sin embargo se debe prestar atención cuando sólo se cuenta con un nodo pues este representa un punto único de fallo lo que se traduce en un nodo que al fallar, el acceso se ve interrumpido.
Una estructura de alta disponibilidad de este tipo está conformada como se muestra en la tabla 2.5.
2.1.1.5. Clúster Activo/Pasivo
2.1.1.6. Clúster Activo/Activo
Configuración
Descripción Las aplicaciones se ejecutan sobre un conjunto de nodos
Activo
–
Pasivo
activos mientras que los nodos restantes actúan como respaldos redundantes. Todos los nodos actúan como servidores activos de una o más
Activo Activo
–
aplicaciones y potencialmente como respaldos para las aplicaciones que se ejecutan en otros nodos. Tabla 2.4 Configuración de un Clúster
15
Elemento
Descripción Consiste en componentes de software que cooperan entre sí para permitir que el clúster parezca como un sistema único. Entre sus funciones se encuentran:
Infraestructura de
Monitorización de nodos y procesos.
Control de acceso a recursos compartidos.
Satisfacción de requerimientos del usuario.
alta disponibilidad. Esta puede ser parte del núcleo del sistema operativo o una capa situada sobre éste, las ventajas de dichas integraciones son: En forma de capa, una solución independiente del sistema operativo. En el sistema operativo, una eficiencia y facilidad de uso. Son clientes de la infraestructura y usan las facilidades Servicios de alta
que exporta ese nivel para mantener en todo momento el
disponibilidad.
servicio. Usualmente existe una degradación del sistema cuando un nodo falla pero no una interrupción del servicio.
Tabla 2.5 Estructura de Alta Disponibilidad
2.1.2. Arquitectura de Clustering
16
Figura 2.3 Arquitectura de un Clúster
El propósito de un cluster es: Redundancia frente a fallos (alta disponibilidad). Aumento de potencia (escalabilidad). Estos propósitos no son excluyentes. Importante.- A la hora de escoger que tipo de clúster se va a utilizar hay que tener en cuenta las características que nos ofrece cada tipo y cuál es el que más encaja en nuestro entorno.
2.1.2.1. Alta disponibilidad “La alta disponibilidad ha sido tradicionalmente un requerimiento exigido a aquellos sistemas que realizaban misiones críticas. Sin embargo, actualmente, está siendo cada vez más importante exigir esta disponibilidad en sistemas comerciales y en áreas académicas donde el objetivo de prestar los servicios en el menor tiempo posible es cada vez más perseguido.
El concepto de clúster de disponibilidad continua, se basa en la idea de mantener la prestación del servicio en todo momento. Esto representa una situación ideal, sería necesario que el sistema estuviera compuesto de componentes perfectos que no fallaran nunca, tanto en hardware como en software. Realmente no hay sistemas que puedan asumir este tipo de disponibilidad.”1
Se necesita que el clúster sea tolerante a los fallos, en este caso se encubre la presencia de los fallos del sistema empleando redundancia en el hardware, el software e incluso redundancia temporal. La redundancia en el hardware consiste en añadir componentes replicados para encubrir los posibles fallos. La 1
http://www.eurogaran.com/index.php/es/servidores-linux/clusteres/de-alta-disponibilidad
17
redundancia software incluye la administración del hardware redundante para asegurar su correcto funcionamiento al hacer frente a la caída de algún elemento. La redundancia en el tiempo hace referencia a la repetición de la ejecución de un conjunto de instrucciones para asegurar el comportamiento correcto en caso de que ocurra un fallo.
Definiremos un clúster de alta disponibilidad como un sistema capaz de encubrir los fallos que se producen en él para mantener una prestación de servicio continua.
El clúster de alta disponibilidad va a poder diseñarse con distintas configuraciones. Una posible configuración es activo – pasivo en el cuál las aplicaciones se ejecutan sobre el conjunto de nodos activos, mientras que los nodos restantes actúan como backups redundantes para los servicios ofrecidos.
En el otro extremo, tenemos otra posible configuración, activo activo: en este caso, todos los nodos actúan como servidores activos de una o más aplicaciones y potencialmente como backups para las aplicaciones que se ejecutan en otros nodos. Cuando un nodo falla, las aplicaciones que se ejecutaba en él se migran a uno de sus nodos backup. Esta situación podría producir una sobrecarga de los nodos de respaldo, con lo que se ejecutarían las aplicaciones con más retardo. Sin embargo es aceptable una degradación del servicio y también suele ser preferible a una caída total del sistema. Otro caso particular de clúster de alta disponibilidad sería el de un clúster de un solo nodo, tratándose en este caso, simplemente, de evitar los puntos únicos de fallo.
18
“Los conceptos de alta disponibilidad y de clustering están profundamente
relacionados
ya
que
el
concepto
de
alta
disponibilidad de servicios implica directamente una solución mediante clustering.
La principal prestación de un sistema de alta disponibilidad es que el fallo de un nodo derive en que las aplicaciones que se ejecutaban en él sean migradas a otro nodo del sistema. Este migrado puede ser automático (failover) o manual (switchover).”2
Generalmente este tipo de cluster integra un número relativamente pequeño de nodos (entre 2 y 8), aunque existen soluciones comerciales que trabajan en clusters de mayor tamaño. En este caso, la escalabilidad no sería un objetivo prioritario, en contraste con el caso de los clusters computacionales.
Las aplicaciones usadas para el diseño y la implementación de este tipo de clusters no tienen porqué escalar. Sin embargo, actualmente, existe una cierta tendencia a perseguir la escalabilidad también en los clusters de alta disponibilidad lo que lleva a que cada vez se busca más tener un cluster de mayor número de nodos pero más pequeños en tamaño y prestaciones.
Desde un punto de vista general, una solución de alta disponibilidad consiste en dos partes: la infraestructura de alta disponibilidad y los servicios.
La infraestructura consiste en componentes software que cooperan entre sí para permitir que el cluster aparezca como un único sistema. Sus funciones incluyen monitorizar los nodos, los procesos de interrelación entre nodos, controlar el acceso a los recursos 2
http://www.seccperu.org/files/Clustering%20and%20Grid%20Computing.pdf
19
compartidos y asegurar la integridad de los datos y la satisfacción de los requerimientos del usuario. La infraestructura debe proveer de estas funcionalidades cuando el cluster está en estado estable y, lo que es más importante, cuando algunos nodos dejan de estar operativos.
Los servicios de alta disponibilidad son clientes de la infraestructura, y usan las facilidades que exporta ese nivel para mantener en todo momento el servicio a los usuarios. Normalmente hay una degradación del sistema cuando algún nodo cae, pero no una interrupción del servicio.
Los servicios que se mantienen típicamente sobre este tipo de clusters son las bases de datos, los sistemas de ficheros, los servidores de correo y los servidores web. Y en general, serán utilizados para tareas críticas o servicios ofrecidos por una empresa, grupo de investigación o institución académica, que no puedan, por sus características concretas, interrumpir el servicio.
La adaptación más común que debe sufrir una aplicación para poder ser ejecutada en un clúster de alta disponibilidad implementado sobre GNU/Linux, es añadir scripts. Existen APIs para trabajar cómodamente con alta disponibilidad; todas ellas incluyen métodos que permiten el switchover y el failover y que permiten arrancar, parar o monitorizar una aplicación por mencionar algunas de sus funcionalidades.
La infraestructura puede ser parte del núcleo del sistema operativo o puede ser una capa situada encima. “Integrar la infraestructura en el sistema operativo tiene como ventaja la eficiencia y la facilidad de uso. La principal ventaja de una capa separada es que se independiza la solución de alta disponibilidad del sistema operativo,
20
con lo que resulta más portable. En cualquier caso el sistema debe tener la capacidad de aparecer como un único sistema (SSI Single System Image). En caso de un clúster de alta disponibilidad para asegurar esta apariencia única los elementos más importantes son el sistema de ficheros global, dispositivos globales y la red global.”3
Figura 2.4 Alta disponibilidad
2.1.2.2. Escalabilidad
La escalabilidad es la capacidad de un equipo para hacer frente a volúmenes de trabajo cada vez mayores brindando siempre nivel de rendimiento aceptable. Existen dos tipos de escalabilidad:
Escalabilidad del hardware (denominada también «escalamiento vertical»). Se basa en la utilización de un gran equipo cuya capacidad se aumenta a medida que lo exige la carga de trabajo existente. 3
http://www.redes-linux.com/manuales/cluster/clustering.pdf
21
Escalabilidad del software (denominada también «escalamiento horizontal»). Se basa, en cambio, en la utilización de un clúster compuesto de varios equipos de mediana potencia que funcionan en tándem de forma muy parecida a como lo hacen las unidades de un RAID (Redundant Array of Inexpensive Disks o Array redundante de discos de bajo coste).
Se utilizan el término RAC (Redundant Array of Computers o Array redundante de equipos) para referirse a los clúster de escalamiento horizontal. Del mismo modo que se añaden discos a un array RAID para aumentar su rendimiento, se pueden añadir nodos a un clúster para aumentar también su rendimiento.
La disponibilidad y la fiabilidad son dos conceptos que, si bien se encuentran íntimamente relacionados, difieren ligeramente. La disponibilidad es la calidad de estar presente, listo para su uso, a mano, accesible; mientras que la fiabilidad es la probabilidad de un funcionamiento correcto.
Pero hasta el más fiable de los equipos acaba fallando, lo que genera que los fabricantes de hardware intenten anticiparse a los fallos aplicando la redundancia en áreas clave como son las unidades de disco, las fuentes de alimentación, las controladoras de red y los ventiladores, pero dicha redundancia no protege a los usuarios de los fallos de las aplicaciones. De poco servirá, por lo tanto, que un servidor sea fiable si el software de base de datos que se ejecuta en dicho servidor falla, ya que el resultado no será otro que la ausencia de disponibilidad. Ésa es la razón de que un solo equipo no pueda ofrecer los niveles de escalabilidad, disponibilidad y fiabilidad necesarios que sí ofrece un clúster.
22
Importante En un clúster activo / pasivo el incrementar el número de nodos disponibles en el clúster no incrementa la potencia del clúster ya que únicamente un nodo estará ofreciendo el servicio.
2.1.3. Funcionamiento de un clúster
El funcionamiento de los clusters es muy simple: se trata de un conjunto de piezas, por ejemplo, de varios microprocesadores a través de una red de alta velocidad que los vincula de forma tal que funcionan como un único ordenador pero de una potencia mayor al convencional.
Un clúster se implementa básicamente con varias computadoras similares
de
capacidades
no
necesariamente
altas.
Las
computadoras deben conectarse en una LAN compartida dedicada sólo para el clúster. El clúster de alto rendimiento opera bajo circunstancias en el que las tareas a procesar se reparten paralelamente a las computadoras.
Un servicio de clúster consta de:
Balanceador de carga.
Sistema para la detección de fallos en los nodos del clúster.
Servicio a clusterizar.
Recursos del clúster.
2.1.3.1. Balanceador de carga
Los balanceadores de carga permiten optimizar la utilización de los recursos de un clúster mediante la asignación de tareas a los
23
nodos con menor carga de trabajo, o con mayor cantidad de recursos libres. Son necesarios en las configuraciones que sean Activo / Activo y/o balanceo de carga.
La función de los balanceadores, también conocidos como network dispatcher es redireccionar las peticiones a los servidores que las están atendiendo.
Figura 2.5 Balanceador de Carga
2.1.3.2. Sistema para la detección de fallos en los nodos del clúster
En caso de aparición de fallo en algún componente, la tolerancia a fallos busca que el sistema siga trabajando, aunque esté funcionando en modo degradado, hasta que acabe la ejecución, lo que podrá incidir en mayor o menor medida en sus prestaciones.
24
La tolerancia a fallos en un sistema se logra mediante la inclusión de técnicas deredundancia. Puede haber redundancia en cualquier nivel: utilización de componentes hardware extra (redundancia en el hardware), repetición de las operaciones y comparación
de
los
resultados
(redundancia
temporal),
codificación de los datos (redundancia en la información) e incluso la realización de varias versiones de un mismo programa y del uso de técnicas de Replicación de Datos (redundancia de datos) o de checkpoint (redundancia de estados).
Los mecanismos para tolerancia a fallos pueden tener un soporte hardware o software, o bien una combinación de ambos. En sistemas en que la incidencia de fallos sea escasa puede ser recomendable emplear mecanismos de bajo coste con soporte software, siempre que el algoritmo pueda proporcionar la garantía de que acabe la ejecución correctamente aunque se degraden sus prestaciones. Es necesario un sistema que detecte cuando existen nodos en el clúster que no están disponibles para ofrecer el servicio. En este caso no se enviarán peticiones para ser atendidas si el clúster es Activo / Activo o no se balanceará el servicio sobre ellos si es Activo / Pasivo.
Para detectar esta situación se utilizan dos técnicas: 1. Heartbeat. 2. Disco de quorum. Estos conceptos serán detallados más adelante.
2.1.3.3. Recursos del clúster Son todos aquellos recursos necesarios para el servicio: IP de servicio.
25
Filesystems. Scripts para arrancar el servicio
Figura 2.6 Recursos del Clúster
2.1.3.4. Servicio a clusterizar
Es el servicio que se quiere clusterizar. Algunos de los servicios que pueden ser clusterizados son los siguientes: • Servidores de Bases de Datos. • Servidores Web. • Servidores de Balanceo de Carga. • Servidores de Correo. • Servidores Firewall. • Servidores de Archivos. • Servidores DNS. • Servidores DHCP.
26
• Servidores Proxy Cache
2.1.4. Balanceo de Carga
Con el crecimiento de Internet en los últimos años el tráfico en la red ha aumentado de forma radical y con él, la carga de trabajo que ha de ser soportada por los servidores de servicios, especialmente por los servidores web.
Para soportar estos requerimientos hay dos soluciones: o bien el servidor se basa en una máquina de altas prestaciones, que a largo plazo probablemente quede obsoleta por el crecimiento de la carga, o bien se encamina la solución a la utilización de la tecnología de clustering para mantener un clúster de servidores de tal manera que cuando la carga de trabajo crezca, se añadirán más servidores al clúster.
Hay varias formas de construir un clúster de balanceo de carga. Una solución basada en mantener varios servidores aunque no se trate de un clúster propiamente es utilizar un balanceo de carga por DNS. En este caso, se asigna un mismo nombre a distintas direcciones IP y se realiza un round robin a nivel de DNS entre ellas.
En una situación ideal la carga se repartirá equitativamente entre los distintos servidores. Sin embargo, los clientes “cachean” los datos del DNS, con lo que la carga no va a repartirse equitativamente y quedaría desbalanceada.
27
Figura 2.7 Balanceo de Carga
Además, aún cuando el balanceo de los accesos de los clientes a los servicios se haga de forma balanceada, estos clientes pueden solicitar cargas muy distintas de trabajo al servidor al que se conectan: mientras un cliente puede querer tan sólo ver una página, otro puede solicitar un buen número de ellas. Por otra parte, si un servidor cae, se van a seguir redirigiendo peticiones a él.
Una solución mejor es utilizar un balanceador de carga para distribuir ésta entre los servidores de un clúster. En este caso el balanceo queda a nivel de conexión, con una granularidad más fina y con mejores resultados. Además, se podrán enmascarar más fácilmente las posibles caídas de los nodos del clúster.
El balanceo de carga puede hacerse a dos niveles: de aplicación y a nivel IP. Sin embargo, el balanceo a nivel de aplicación puede provocar efectos de cuello de botella si el número de nodos es grande. Cada solución debe elegirse en función de las
28
necesidades del problema al que hacemos frente. El Linux Virtual Server utiliza balanceo a nivel IP.
El proyecto Linux Virtual Server (LVS) ofrece parches y aplicaciones de mantenimiento y gestión que permiten construir un cluster de servidores que implementa alta disponibilidad y balanceo de carga sobre el sistema operativo GNU/Linux. El sistema aparece al usuario externo como un único servidor (en realidad, como un único servidor virtual).
Cada uno de los servidores reales que forman el cluster, es controlado por un nodo director que se encarga de realizar el balanceo de carga. Este director corre un sistema operativo GNU/Linux con un kernel parcheado para incluir el código ipvs, que es la herramienta más importante ofrecida por el proyecto LVS. El director puede ser entendido en términos generales como un router con un conjunto concreto de reglas de enrutamiento.
Cuando un cliente solicita un servicio al servidor virtual, el director escoge un servidor real para que lo ofrezca. Desde ese momento el director debe mantener la comunicación entre el cliente y el servidor real. Esta asociación entre cliente y servidor real va a durar sólo lo que dure la conexión tcp establecida; cuando se inicie una nueva conexión el director escogerá de nuevo un servidor real que puede ser distinto del anterior. Así, si el servicio ofrecido es una página web, el cliente podría obtener las imágenes o los textos desde distintos servidores reales ocultos por el servidor virtual.
Con esta arquitectura, además del balanceo de carga, estamos permitiendo que los servidores reales individuales puedan ser
29
extraídos del LVS, actualizados o reparados y devueltos al clúster sin interrumpir la prestación de servicio.
Asimismo, el sistema es fácilmente escalable y la
alta
disponibilidad en LVS se diseña utilizando software mon, heartbeat, fake y coda, que se utilizan para gestionar la alta disponibilidad
y
para
mantener
una
gestión
segura,
la
comunicación (hearbeat) entre máquinas y un sistema de ficheros tolerante a fallos, respectivamente.
2.1.4.1. Balanceadores hardware
Los balanceadores de carga de Hardware son máquinas con el propósito específico de balancear la carga.
Este tipo de balanceadores tiene ventajas en cuanto a potencia, estabilidad y escalabilidad.
Las principales desventajas de este tipo de balanceadores es el precio que se incurra en el equipo y mantenimiento, así como también que se desperdicia recursos ya que son exclusivamente dedicadas al balanceo de carga.
Algunas de estas soluciones hardware de balanceo de carga son: WebMux Load Balancing, de CAI Networks. Big IP Local Traffic Manager, de F5. Quizás sea la principal alternativa. Barracuda Load Balancer, de Barracuda Networks. Cisco Arrowpoint.
30
2.1.4.2. Balanceadores software
Los balanceadores de software son servidores configurados para realizar la tarea del balanceo. Esto implica instalar en un computador, un sistema operativo y una aplicación que se encargue del balanceo de carga.
Las ventajas que tenemos en estos balanceadores es en cuanto al precio y que cuando necesitemos un servidor más potente para el balanceo de carga, este servidor puede ser reciclado y utilizado para otra tarea.
En cuanto a sus desventajas se tiene que estos balanceadores cuentan con una menor potencia y un mayor tiempo de mantenimiento.
2.1.4.3. Linux Virtual Server - LVS
Linux Virtual Server es una solución para poder implementar un servidor virtual altamente escalable y en alta disponibilidad.
Esta solución consiste en un balanceador de carga, también conocido como director, que será la máquina que será accesible directamente para los clientes y luego tendremos los servidores que serán aquellos que recibirán las peticiones de los clientes, vía el balanceador de carga, y responderán a las peticiones. Para los clientes, existirán solo los balanceadores de carga, los cuales distribuirán la carga entre los servidores reales.
31
Figura 2.8 Balanceadores de Carga
Se obtiene escalabilidad en el servicio añadiendo nodos, mientras que la disponibilidad se lograra identificando al balanceador que no funciona, y que el nodo añadido tome la función de balanceador, para que el servicio no se vea interrumpido.
Esta solución nos permitirá tener el servicio funcionando casi continuamente ya que no se verá afectado por posibles caídas de las máquinas debido a fallos en el suministro eléctrico o bien cortes en el ISP de una determinada granja.
Cualquiera de estos fallos, u otros que pudieran ocurrir, afectarán a una o varias granjas, pero nunca a todas con lo cual el servicio seguirá funcionando aunque los clientes podrán experimentar cierta demora en el servicio.
Para los clientes existirá un único servidor (el balanceador) que se encargará de distribuir la carga entre los servidores reales.
32
La escalabilidad en el servicio la conseguiremos añadiendo nodos, mientras que la disponibilidad se logrará identificando el nodo o el balanceador que no funciona y reconfigurando el sistema de tal forma que el servicio no se vea interrumpido. Es decir no enviando peticiones a un nodo que no pudiera dar servicio en ese momento.
2.1.5. Detección de fallos en los nodos del clúster Un clúster debe conocer cuando algún nodo no está disponible para no enviarle peticiones de servicio. Por lo cual, un sistema de detección de fallos en los nodos del Clúster es vital para su funcionamiento. Esto se hace de dos formas: Heartbeat Disco de quórum
2.1.5.1. Heartbeat
Figura 2.9 Heartbeat
33
Es la técnica más habitual. Consiste en comunicarse o bien a través de una interface de red o puerto serie cada cierto tiempo. Si se pierde la comunicación durante un determinado tiempo se supone que el nodo ha caído.
Para implementar esta técnica los nodos tiene líneas dedicadas, bien sea por red o conexiones serie por las que se comunican de forma continua para verificar el correcto funcionamiento de los nodos.
El funcionamiento de Heartbeat se basa en el envío y recepción de señales enviadas por los demonios de Hearbeat que se ejecutan en ambas máquinas, a estas señales se les conocen como “latidos”.
La diferencia entre el servidor maestro y el esclavo, radica en la prioridad que tienen para ofrecer un servicio. Aquí, el esclavo solo ofrecerá el servicio cuando deje de escuchar los latidos del maestro durante periodo de tiempo determinado, pasado el cual se supondrá que el servidor maestro dejó de funcionar.
Una vez que el esclavo vuelva a escuchar los latidos del maestro, este tomará el control nuevamente, a menos que dentro de la configuración
de
Heartbeat
se
haya
colocado
la
directiva
auto_failback en off. Esta directiva puesta en off, quiere decir que si la máquina que era maestro vuelve a funcionar, ya no retomará el control del servicio, sino se convertirá en la nueva esclava.
El maestro y esclavo pueden comunicarse por medio de dos interfaces, el puerto serial (RS-232) o las tarjetas Ethernet.
Puede darse el caso de un error en la interfaz que une a ambas máquinas que imposibilita la llegada de latidos hacia el esclavo. Si
34
sucede esto, el esclavo interpretará erróneamente que el servidor maestro ha caído y tratara de tomar el control de la prestación del servicio, cuando el servicio nunca ha dejado de prestarse.
2.1.5.2. Disco de quorum
Disco de quorum es una técnica complementaria que lo que se hace es que todos los nodos del clúster escriben su estado en un disco y de esa forma se determina quien está disponible para dar el servicio.
Si un nodo tiene problemas de red y no llega a los otros nodos pensará que los otros nodos no están disponibles e intentará hacerse con el servicio.
Si disponemos de dispositivos serie para el heartbeat entonces dispondremos de una forma de comprobar que los otros nodos están funcionando correctamente y el problema es nuestro. De no disponerlo se asumirá de forma incorrecta que los otros nodos han fallado, intentando asumir el control del clúster. Para evitar esto se utiliza el disco de quorum.
Cada nodo escribe de forma continua su estado en el disco y de esta forma se puede verificar que nodos están disponibles para hacerse con el servicio en el clúster.
Importante El disco de quorum no es una técnica que sustituya al heartbeat es una técnica que debe usarse como complemento al heartbeat.
35
Figura 2.10 Disco de Quorum
36
CAPITULO 3
INTRODUCCION En este capítulo se presentarán las soluciones de software libre para mitigar el problema de alta disponibilidad y balanceo de carga, se expondrán sus características así como las herramientas que hacen posible la construcción de dichas soluciones.
Además se llevará a cabo una comparativa de las herramientas existentes para la realización del clúster, además de ello, se describirán tales herramientas de forma breve en cuanto a sus componentes y su funcionamiento.
DIAGNOSTICO
3.1. Herramientas de open source para la construcción del Clúster Podemos encontrar una amplia variedad de aplicaciones para la creación de clústers, la utilización de una u otra de estas dependerá de la complejidad de instalación, uso específico y ventajas de este sobre otras herramientas. De las opciones que se pueden encontrar están:
openMosix.
Oscar.
Piranha.
Linux Virtual Server.
Ultramonkey.
A continuación la tabla 3.1 muestra las principales características de cada herramienta para la construcción de clústers.
37
Herramienta.
Características.
Parche al kernel de GNU/Linux.
Algoritmo interno de balance de carga que migra
openMosix
los procesos entre nodos.
Migración de procesos totalmente transparente.
Auto descubrimiento de nuevos nodos openMosix en la red del clúster.
Permite instalar un clúster tipo Beowulf.
Contiene todo el conjunto de paquetes necesarios
OSCAR
para programar y administrar el clúster.
Formado por dos componentes principales SIS (System Installation Suite) y ODA (OSCAR Database API).
Piranha
Implementación de software de alta disponibilidad.
Interfaz web para control completo del clúster.
Posee herramientas para su monitorización.
Balance mediante direcciones IP.
Requiere el sistema operativo Red Hat Enterprise.
Constituido por un servidor altamente escalable y de alta disponibilidad.
Linux Virtual Server – LVS
Balance de carga mediante nodo dedicado con sistema operativo GNU/Linux.
Clúster completamente transparente al usuario final.
Mecanismo para que el clúster funcione con una IP pública.
Permite balance de carga y alta disponibilidad.
Incluye monitorización de servidores reales y nodos de balance.
Permite el manejo de protocolos como HTTP, FTP,
38
DNS, entre otros. Ultramonkey
Permite usar iptables o ipchains para marcar los paquetes que pertenezcan al servicio prestado por el clúster.
Usado desde clústers de dos nodos hasta grandes sistemas.
Tabla 3.1 Características de Herramientas para Clústers.
Por último, se mostrarán las ventajas y desventajas de cada una de las herramientas anteriormente mencionadas, pues es importante tener
presente
esta
comparativa
para
hacer
una
primera
aproximación a la elección de una sola herramienta para llevar a cabo una implantación eficaz y sencilla que cubra las necesidades solicitadas; esto se refleja en la tabla 3.2.
Herramienta.
Ventaja.
openMosix
Desventaja.
No se requieren paquetes
Depende del kernel.
adicionales.
No migra todos los
No son necesarias modificaciones en el
procesos siempre.
código de openMosix.
Problemas con memoria compartida.
Migración de procesos.
Falla la detección de algunos componentes
Es una compilación auto
de hardware en
instalable.
versiones anteriores a
Infraestructura de software
la 3.
para instalar y administrar OSCAR
Soporte para
un clúster.
distribuciones basadas
Posee bibliotecas y
en RPMs solamente
39
compiladores para uso en
para versiones
clústers.
anteriores a la 5.
Requiere que la LAN no sea usada para instalar software en el clúster.
Piranha
Soporte por parte de Red
Al momento solo
Hat Inc.
disponible para
Fácil instalación debido al
versiones
formato de distribución.
empresariales de Red
Administración y manejo
Hat.
mediante interfaz web.
Dependiente del
Monitorización de
sistema operativo Red
servidores reales.
Hat Enterprise.
Fácil comprensión de
Algunos esquemas se
funcionamiento.
ven afectados por la
Amplia gama de
cantidad de servidores
configuraciones.
reales que se pueden utilizar.
Linux Virtual Server
Funciona a nivel TCP/IP.
- LVS
Manejo de varios tipos de
Cuando el número de
protocolos como HTTP,
servidores reales es
DNS, FTP entre otros.
elevado se genera mucho tráfico en la red de trabajo.
Múltiples esquemas de configuración.
Reúne varias herramientas de una manera sencilla.
Los nodos directores
Varios formatos para su
tienen que ejecutar
instalación.
estrictamente el
Amplia documentación
sistema operativo
sobre cada componente.
GNU/Linux.
40
Ultramonkey
Instrucciones de
Según el esquema de
instalación para las
configuración puede
distribuciones de
llegar a ser complejo.
GNU/Linux más comunes
Mismas que en LVS
en servidores.
para los componentes
Se apoya en el proyecto
que sean utilizados de
LVS para algunos
dicho proyecto.
componentes.
No es dependiente de una distribución de GNU/Linux en particular.
Tabla 3.2 Ventajas y Desventajas de las Herramientas para Clúster.
3.2. Comparación de las herramientas de balanceo de carga y alta disponibilidad
Formato
Distribucione
Balanceo de
Herramient
de
s Soportadas
carga y Alta
a
Distribució
Ventajas
Desventajas
disponibilidad
n No requiere
Dependiente
Balanceo de
paquetes
del kernel y
carga de
adicionales y
posee
Código
procesos sin
hace
problemas con
fuente.
alta
migración de
memoria
disponibilidad.
procesos.
compartida.
openMosix RPM,
Todas.
En versiones anteriores a la tercera falla la Auto instalable detección de
41
OSCAR
RPM,
Red Hat y
Balanceo de
con bibliotecas hardware y no
Código
basadas en
carga de
y
permite usar la
fuente.
esta.
procesos sin
compiladores
red interna
alta
para computo para
disponibilidad.
paralelo.
instalación de software.
Red Hat Piranha
RPM.
Posee
Soporte de
Actualmente
Red Hat,
disponible solo
Enterprise 4 o herramientas
administración en formato
posteriores.
propias para
y manejo
RPM y para
ambos
mediante
versiones
aspectos.
interfaz web.
empresariales. Instalación por
Amplia gama
segmentos;
Incluye
de
con un gran
Linux
RPM, DEB, Todas.
herramientas
configuracione número de
Virtual
Código
de código
s, función a
Server
fuente.
abierto para
nivel TCP/IP y reales el
ambos
manejo de
tráfico crece
aspectos.
distintos
de manera
protocolos.
significativa.
servidores
Los nodos de Múltiples Basadas en
Uso de
configuracione carga deberán
Debian, Red
componentes
s, manejo de
ejecutar el
distintos
sistema
ambos
protocolos,
operativo
compilación
aspectos
función a nivel GNU/Linux;
de código
añadiendo
TCP/IP,
dependiendo
fuente.
algunas
marcas de
del esquema
mejoras y
firewall y
llega a ser
Hat Enterprise de LVS para RPM. DEB, 4 y mediante Ultramonke Código y
fuente.
balance de
42
herramientas.
ampliación de complejo de LVS.
configurar.
Tabla 3.3 Comparación de herramientas para clúster.
Una de las herramientas las más usadas es Piranha de la empresa Red Hat., que incorpora balance de carga mediante direcciones IP y también hace la inclusión de código del proyecto LVS, en esta herramienta Red Hat incorporó mejoras; para poder hacer uso eficiente de Piranha es recomendado el uso de Red Hat Enterprise Linux 4 o posterior, su sencillez en instalación y amplio soporte por parte
de
dicha
empresa
brinda
satisfacción
al
hacer
una
implementación con esta. Fuera del pago de la licencia para el sistema operativo el software de Piranha está disponible de manera gratuita para usuarios registrados de esta distribución.
Junto a la anterior herramienta se puede encontrar el proyecto LVS el cual fue iniciado por Wensong Zhang en Mayo de 1998 y su principal objetivo era desarrollar un servidor GNU/Linux de alto rendimiento que proporcione un buena escalabilidad, confianza y robustez usando la tecnología de clúster. De los avances más importantes de LVS es el desarrollo de un sistema IP avanzado de balanceo de carga por software (IPVS), balance de carga por software a nivel de aplicación y componentes para la gestión de clúster. Se puede usar LVS como solución para construir sistemas altamente escalables, donde se garantiza una alta disponibilidad de los servicios de red como el correo electrónico, voz sobre IP y el servicio web.
La siguiente opción es Ultramonkey, siendo una de las herramientas más completas en cuanto a balanceo de carga y alta disponibilidad; ya en su tercera versión cuenta con formatos de instalación para
43
diversas distribuciones de GNU/Linux como Debian y Red Hat. Esta herramienta solo puede ser usada en estaciones cuyo sistema operativo
sea
GNU/Linux
siendo
este
uno
de
sus
pocos
inconvenientes en lo que respecta a la independencia de plataforma. Hace uso de las tecnologías de LVS, Linux-HA y Ldirectord para lograr ambas metas que son el balance de carga y la alta disponibilidad. De entre los posibles esquemas de configuración se cuenta con soluciones separadas o una que incorpore ambas, así como también un esquema estándar o uno más completo.
La herramienta OSCAR es una colección de software de código abierto para crear un clúster sobre GNU/Linux desarrollada por el Grupo de Clústers Abiertos (OCG – Open Clúster Group). El objetivo primario del grupo de trabajo OSCAR es conseguir que la instalación, la configuración y la administración de un clúster de tamaño modesto, sea fácil. Cualquier cosa necesaria para un clúster como instalación y configuración, mantenimiento, programación (paralela), sistemas de encolamiento, programación de tareas, está incluida en OSCAR. Su principal labor es para cómputo de alto rendimiento.
En Open Mosix los procesos no saben en qué nodo del clúster se ejecutan, y es el propio Open Mosix el responsable de "engañarlos", y redirigir las llamadas al sistema al nodo del clúster en el que se lanzó el proceso. Open Mosix implementa un algoritmo de balance de carga que permite repartir de forma óptima la carga, si está el clúster bien calibrado. Open Mosix puede migrar cualquier proceso mientras que no haga uso de los segmentos de memoria compartida. Según la calibración, migrarán procesos más ligeros, o más pesados.
44
Dadas las características vistas con anterioridad en la tabla 3.3 y esto aunado a los fines que persiguen hacen inclinar la balanza por las siguientes opciones mejor adaptadas a este campo que son:
Piranha.
Linux Virtual Server.
Ultramonkey.
Se procederá ahora a describir cada una de las tres herramientas más comunes, cabe destacar que cada una es revisada de manera breve resaltando mediante figuras el funcionamiento de cada una de ellas así como mencionando los componentes de cada una.
3.2.1. Herramientas de balanceo de carga y alta disponibilidad 3.2.1.1. Piranha Es un conjunto de aplicaciones en un ambiente bien unido para los administradores que desean instalar servicios de clúster en ambientes GNU/Linux. Un clúster piranha se compone de los siguientes elementos:
El parche IPVS para el kernel.
El demonio LVS para manejar las tablas IPVS a través de ipvsadm.
El demonio nanny para monitorizar servicios y servidores.
El demonio pulse para controlar el estado del resto de demonios del clúster y la entrada en funcionamiento del nodo de balance de carga de respaldo en caso de fallo del primario.
La interfaz gráfica piranha para administrar el clúster.
Todos estos demonios utilizan el mismo archivo de configuración ubicado en el directorio /etc/lvs.cf para su funcionamiento. Como un valor añadido a piranha este es capaz de adaptar los pesos de los algoritmos de planificación automáticamente según las estadísticas
45
de funcionamiento de cada servidor.
En la figura 3.1 se aprecia
cómo se compone un clúster con Piranha.
Figura 3.1 Esquema de funcionamiento de Piranha.
3.2.1.2. Linux Virtual Server Es un software para el balanceo de carga que permite crear un clúster de forma rápida y eficaz sin hacer grandes inversiones en hardware dedicado. Es una solución ideal para aquellas empresas que quieren ahorrar costos permitiendo tener tras una única dirección IP pública muchos servidores reales y servicios de forma transparente a los usuarios.
Es implementado como un conjunto de parches al kernel de GNU/Linux y un programa denominado ipvsadm. La principal meta de LVS es proveer un mecanismo de migración de sockets. Un clúster de este tipo está formado por dos tipos de máquinas, los nodos o servidores reales que corren con los servicios habituales que estos suelen proveer y los nodos directores o de balanceo de
46
los cuales uno de ellos será el principal y el resto estarán preparados para actuar de respaldo del principal para cuando este falle. LVS funciona a nivel TCP/IP, lo que se conoce como un switch de nivel 4 o mejor conocido como capa 4. Lo que en realidad administra LVS son direcciones y puertos de origen y destino, y toma decisiones para balancear la carga con esta información.
LVS soporta tres modos de trabajo distintos, estos modos definen el método
en
que
el
nodo
de
balanceo
retransmitirá
las
comunicaciones provenientes de los usuarios a los servidores reales definidos. LVS permite balancear muchos protocolos distintos. LVS se ha usado con HTTP, HTTPS, FTP, etc. En la figura 1.10 se muestra su funcionamiento.
Figura 3.2 Esquema de funcionamiento de LVS.
47
3.2.1.3. Ultramonkey Es un proyecto que integra diferentes herramientas de software libre para conseguir alta disponibilidad y balanceo de carga en redes LAN redes de área local. Estas herramientas son: LVS, Heartbeat, Ldirectord y MON como lo muestra la figura 3.3.
3.2.1.3.1. Componentes Ultramonkey LVS realiza balanceo de carga y facilita la alta disponibilidad entre los servidores reales. Sin embargo, el nodo de balanceo de carga se convierte en un punto único de fallo, si se quiere alta disponibilidad se deberá añadir otro nodo de balanceo de respaldo y usar software de alta disponibilidad que le permita tomar el papel del nodo de balanceo de carga principal.
3.2.1.3.1.1. Heartbeat 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. Se recomienda el uso de puertos serie puesto que están aislados de las tarjetas de red. Soporta múltiples direcciones IP y un modelo servidor primario/secundario.
Los mensajes de Heartbeat se envían por todas las líneas de comunicación a la vez, de esta manera, si una línea de apoyo cae, se avisará de ese problema antes de que la línea 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.
48
3.2.1.3.1.2. Ldirectord Se encarga de monitorizar que los servidores reales permanezcan funcionando periódicamente, enviando una petición a una dirección URL (Uniform Resource Locator) 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.
3.2.1.3.1.3. Mon (Service Monitoring Daemon) Es un software para la monitorización del sistema. Este permite definir una serie de alarmas y acciones a ejecutar cuando un servicio deja de funcionar y se utiliza ampliamente como componente de monitorización de recursos para Heartbeat.
Figura 3.3 Componentes de Ultramonkey.
Mientras el software Ultramonkey funciona por sí mismo en GNU/Linux, este puede proporcionar servicios de clúster para
49
virtualmente cualquier red de servicios corriendo en un sistema operativo que pueda comunicarse usando TCP o UDP. Soporta un amplio rango de protocolos, con comprobación nativa de integridad para: Web, Mail, FTP, News, LDAP y DNS. También provee de paquetes binarios para una lista de distribuciones seleccionadas.
La figura 3.4 muestra un esquema típico de funcionamiento de Ultramonkey en el cual existe balanceo de carga y alta disponibilidad.
Figura 3.4 Esquema de funcionamiento de Ultramonkey.
50
CAPITULO 4
INTRODUCCION En este capítulo se llevará a cabo un análisis de los métodos existentes de balanceo de carga, dado que estos llegan a ser complejos solamente se tratará la teoría más básica de operación; adicionalmente se realizará la toma de decisión de una herramienta para su implementación.
DISEÑO
4.1. Tipos de balanceo de carga Existen dos formas simples para montar un clúster y distribuir la carga entre los equipos mostradas en la tabla 4.1 a continuación.
Método
Ventajas
Desventajas El
DNS Round – Robin.
cache
de
la
información
en
la
Distribución de la carga
jerarquía
entre servidores reales
servidores DNS y la
de
forma
forma
pseudo-
de
simple
de
aleatoria.
tomar decisiones por
Es el más simple de
parte
implementar.
DNS restringen su
del
servidor
utilidad. “Los servidores no pueden
ser
51
seleccionados según el URL solicitado.”4 Este nodo distribuye las
Llega a convertirse
conexiones.
en cuello de botella.
Se
aumenta
Uso de nodo
sensación
de balanceo
del clúster.
de carga.
Única
de
la unidad
Hace uso de un nodo adicional
para
proveer el balanceo
dirección
IP
de carga.
pública a la cual dirigir
Al
existir
las peticiones.
nodo
Es sencillo enmascarar
este se convierte en
fallas de los servidores.
un punto único de
de
solo
un
balanceo
fallo.
Tabla 4.1 Métodos de balanceo de carga.
4.1.1. Modos de balanceo de carga en LVS LVS permite realizar el reenvío de paquetes a los servidores reales de tres formas. En la tabla 4.2 se muestran los tres modos de balanceo.
Modo de
Ventajas
Desventajas
balanceo Aprovecha
Balanceo mediante NAT.
la
El
nodo
posibilidad del kernel
balanceo se llega a
de Linux de funcionar
convertir en cuello
como router con NAT.
de botella.
Los servidores reales
Tiene que reescribir
pueden
todos los paquetes
ejecutar
(Network 4
de
http://www.wikilearning.com/monografia/balance_de_carga-la_aproximacion_via_dns/20837-2
52
Address
cualquier
Translation).
sistema
TCP/IP.
operativo que soporte
Número
TCP/IP.
servidores
Uso
de
una
solamente
dirección
IP
pública.
de reales
dependiente de la velocidad
de
conexión del nodo de balanceo. No
Escalado
los
hasta
sistemas operativos
Balanceo
100 servidores o más.
son soportados por
mediante
Se evita que el nodo
este modo.
de
Los
encapsulado IP (IP Tunneling)
de
todos
balanceo
se
convierta en cuello de
reales
botella.
tener
servidores necesitan una
IP
pública. Todos
los
servidores poseer
deben una
IP
Balanceo
El nodo de balanceo
pública en el mismo
mediante
no
segmento de
es
cuello
de
red
enrutamiento
botella.
del
directo (Direct
No se sobrecarga al
balanceo.
Routing)
nodo de balanceo en
No
reescribir
sistemas operativos
TCP/IP.
paquetes
nodo
todos
de
los
permiten configurar una IP o dispositivo para responder a comandos ARP.
Tabla 4.2 Modos de balanceo de carga en LVS.
53
Balanceo mediante NAT “NAT (es un mecanismo utilizado por routers IP para intercambiar paquetes
entre
dos
redes
que
se
asignan
mutuamente
direcciones incompatibles. Consiste en convertir en tiempo real las direcciones utilizadas en los paquetes transportados. También es necesario editar los paquetes para permitir la operación de protocolos que incluyen información de direcciones dentro de la conversación del protocolo)”.5 A continuación se explica mediante figuras el funcionamiento de cada uno de los modos de balanceo, en la figura 4.1 siguiente se puede ver todo el proceso para el modo NAT:
Figura 4.1 Balanceo mediante NAT.
5
http://www.adslfaqs.com.ar/que-es-nat-network-address-translation/
54
Balanceo mediante encapsulamiento IP De acuerdo a la figura 4.2 el proceso es el siguiente: 1.
El usuario realiza una petición de servicio a la IP pública del clúster (la del nodo de balanceo de carga o IP virtual del clúster).
2.
El nodo de balanceo planifica a qué servidor real se va a enviar la petición, reescribe las cabeceras de las tramas TCP/IP y las envía al servidor.
3.
El servidor recibe la petición, la procesa, genera la respuesta y la envía al nodo de balanceo de carga.
4.
El nodo de balanceo reescribe de nuevo las cabeceras de las tramas TCP/IP con la respuesta del servidor, y las envía de vuelta al usuario.
5.
La respuesta llega al usuario, como si la hubiese generado la IP pública del clúster.
En el modo de balanceo por encapsulamiento IP, su función se ilustra a continuación con la figura 4.2:
55
Figura 4.2 Balanceo mediante encapsulado IP.
El nodo de balanceo recibe todas las conexiones de entrada al clúster, y decide a qué servidor enviárselas. Para hacer esto, utiliza el encapsulado IP para enviar cada trama que recibe a la IP del servidor que vaya a encargarse de ella. Cuando el servidor elegido recibe el paquete, lo desencapsula y al tener configurada la IP pública del clúster como propia, acepta la trama original y se encarga de servir la petición que contuviera enviando éste servidor la respuesta al cliente directamente.
Balanceo mediante enrutamiento Directo El último modo de balanceo es mediante enrutamiento directo que se muestra en la figura 4.3:
Figura 4.3 Balanceo mediante enrutamiento directo.
56
Todos los equipos tendrán configurado una interfaz con la IP pública del clúster: el nodo de balanceo la tendrá en su acceso a Internet y será el punto de entrada al clúster; el resto de equipos estarán conectados al nodo de balanceo en la misma red física y en la interfaz conectada a ésta red tendrán configurada la IP pública del clúster, pero configurando la interfaz para que no responda a comandos ARP (todos los equipos responderían por la misma IP con distintas direcciones físicas). Al llegar una petición al nodo de balanceo éste decide a qué servidor enviársela y redirige el paquete a nivel de enlace a la dirección física del servidor elegido en lugar de modificar o encapsular el paquete TCP/IP. Cuando llega al servidor con la dirección física de destino y se analiza hasta el nivel de red (TCP/IP), como el servidor también tiene configurada la IP pública del clúster, acepta sin más el paquete y genera la respuesta que enviará directamente al cliente.
4.1.2. Resumen de los métodos de balanceo En la tabla 4.3 a continuación se resumen las características principales de los tres métodos de direccionamiento que puede utilizar el balanceador de carga de Linux Virtual Server:
NAT
Servidor
Red de servidores
Cualquiera
Red Privada
Encapsulamiento IP
Necesita Encapsulamiento
LAN/WAN
Enrutamiento Directo
Dispositivo no-ARP
LAN
57
Escalabilidad
Baja (10~20)
Salida hacia
Nodo
Internet
de
balanceo
Alta
Alta
Router
Router
Tabla 4.3 Métodos de direccionamiento.
4.1.3. Planificación del balanceo de carga Al momento de configurar el nodo de balanceo se podrá elegir entre una serie de algoritmos para ver cómo se distribuirá la carga entre los servidores y cómo se elegirá el servidor al que se envía cada petición. Linux Virtual Server permite utilizar los siguientes algoritmos que se muestran en la tabla 4.4:
Algoritmo
Funcionamiento Cada petición se envía a un servidor y la siguiente
Round Robin
petición al siguiente servidor de la lista hasta llegar al último tras lo cual se vuelve a enviar al primero, véase la figura 4.4. Igual que el anterior algoritmo pero añadiendo un peso a cada servidor, este peso es un entero que indica la
Round Robin
potencia de cálculo del servidor, de modo que la cola
Ponderado
Round Robin se modificará para que aquellos servidores con mayor capacidad de cálculo reciban peticiones más a menudo que el resto, véase la figura 4.5. Este mecanismo de distribución consulta a los servidores
Servidor con
para revisar en cada momento cuántas conexiones
menos
abiertas posee cada uno con los clientes, y envía cada
conexiones
petición al servidor que menos conexiones tenga en ese
activas. Servidor con
momento, véase la figura 4.6. Igual que el algoritmo anterior pero se le añaden pesos a
58
menos
los servidores para que de alguna forma se mida su
conexiones
capacidad de cálculo para modificar la preferencia al
activas
momento de hacer una elección, véase la figura 4.7.
Ponderado. Este algoritmo dirige todas las peticiones a un mismo Menos
servidor, hasta que se sobrecarga (su número de
conectado
conexiones activas es mayor que su peso) y entonces
basado en
pasa a una estrategia de menos conexiones activas
servicio.
ponderada sobre el resto de servidores del clúster, véase la figura 4.8. En estos algoritmos se dispone de una tabla de
Tablas Hash por
asignaciones fijas, en las que bien por la IP de origen o
origen y destino.
destino, se indica qué servidor deberá atender la petición. El nodo de balanceo compara las direcciones de las tramas TCP/IP que reciba con estas tablas y actúa en consecuencia, véase la figura 4.9.
Conexiones
A todos los algoritmos de planificación anteriores se les
Persistentes.
puede añadir el hecho cuando un cliente se ha conectado con un servidor, siempre se le dirija al mismo servidor.
Tabla 4.4 Algoritmos de planificación de balanceo de carga.
59
Figura 4.4 Round Robin.
Figura 4.5 Round Robin Ponderado.
60
Figura 4.6 Servidor con menos conexiones activas.
Figura 4.7 Servidor con menos conexiones activas ponderado.
61
Figura 4.8 Menos conectado basado en servicio.
Figura 4.9 Tablas Hash por origen y destino.
62
La elección de una u otra técnica depende principalmente del servicio que se quiera proveer, los conocimientos que se posean de los sistemas, el sistema operativo de los servidores, los recursos económicos que se estén dispuestos a gastar, y consideraciones de rendimiento que afectan al sistema en conjunto.
4.2. Elección de una herramienta para balanceo de carga y alta disponibilidad Para poder tomar una decisión acerca de cuál herramienta es la mejor opción se debe tomar en cuenta factores como: estabilidad, fiabilidad, costos de implementación (tanto en hardware como en conocimientos), escalabilidad entre otros. Como parámetros para poder evaluar dichas herramientas se usará la cantidad de requisitos por cada herramienta, facilidad de comprensión e implementación así como también su disponibilidad para su adquisición. Las herramientas evaluadas son Piranha, Linux Virtual Server y Ultramonkey. Como punto de partida se compararán los requisitos mínimos para la implementación de cada una en cuanto a los equipos que actúan como coordinadores o directores.
Piranha: Esta herramienta solamente requiere el uso de un navegador web para configurarse pero una de sus críticas es el hecho de estar fuertemente ligada a las versiones empresariales de Red Hat y por tal motivo los mínimos en hardware dependerán de la versión de dicha distribución que se utilice. Como un punto a favor, Piranha posee esa extrema sencillez de configuración brindada por su interfaz que se basa en web. Para implementarse se tiene que poseer una licencia de uso del sistema operativo de Red Hat
63
y en particular de una versión empresarial. La tabla 4.5 muestra los requisitos mínimos de hardware requeridos.
Procesador
Pentium II 300 MHz
Memoria RAM
64 MB
Espacio en Disco Duro
+2 GB recomendado
Interfaz de Red
10 Mbps
Tabla 4.5 Requisitos mínimos de hardware para Piranha.
Linux Virtual Server: Este es muy simple de implementar y debido a sus características los nodos directores o de balanceo pueden poseer o no una interfaz gráfica ya que su administración es vía línea de comandos. Como se ha visto, LVS es un parche al kernel de GNU/Linux y esto es importante de verificar puesto que algunas versiones del kernel pudiesen no contar con dicho parche de manera activa siendo uno de los casos todos aquellos kernels personalizados. Su mayor ventaja es su independencia de la distribución del sistema operativo (siempre y cuando sea GNU/Linux, la distribución puede variar) pues está más ligado con el kernel que con la distribución. Para su implementación bastará con un equipo que cubra los mínimos requisitos en hardware para una distribución basada en un kernel 2.4.27 o superior siendo un ejemplo el de la tabla 4.6.
Procesador
Pentium MMX 166 MHz
Memoria RAM
64 MB
Espacio en Disco Duro
+1 GB (sin interfaz gráfica)
Interfaz de Red
10 Mbps
64
Tabla 4.6 Requisitos mínimos de hardware para LVS.
Ultramonkey: Ultramonkey está pensado como una solución muy económica tanto a nivel de software como en hardware y por tal motivo su crecimiento se ha dado en gran medida por las contribuciones de los usuarios de este proyecto dado que es un requisitos dentro de la comunidad de software libre el compartir sus conocimientos y estos aportes vienen desde programadores aficionados hasta los gurúes de la informática. En la tabla 4.7 siguiente se aprecian los mínimos de hardware para ultramonkey.
Procesador
Pentium MMX 166 MHz
Memoria RAM
64 MB
Espacio en Disco Duro
+512 MB (recomendados +1GB)
Interfaz de Red
10 Mbps
Tabla 4.7 Requisitos mínimos de hardware para Ultramonkey.
Se concluye que Ultramonkey es la herramienta que requiere la menor cantidad de recursos para su instalación y funcionamiento, la tabla 4.8 compara los requisitos mínimos de hardware de Piranha, LVS y Ultramonkey.
Herramienta.
Procesador.
Memori
Espacio
Interfaz
a RAM.
en
de Red.
Disco Duro. Piranha.
Pentium II 300MHz
64 MB
+2GB
10 Mbps
65
LVS.
Pentium MMX
64 MB
+1GB
166MHz Ultramonkey.
Pentium MMX
10 Mbps
64 MB
+512MB
166MHz
10 Mbps
Tabla 4.8 Comparación de requisitos.
El siguiente punto a evaluar es la complejidad de instalación, tómese en cuenta que todos los parámetros que se están evaluando son sobre los nodos principales, sin tomar en cuenta los servidores reales.
Ultramonkey: Esta es la herramienta más simple de instalación de las 3, no es necesario revisar dependencias o instalar paquetes adicionales manualmente,
es
un
proceso
totalmente
automatizado
y
sumamente útil, pero si el sistema que actúa como nodo director posee un sistema diferente tendrá que llevarse a cabo la instalación de dos formas distintas dependiendo de: Basado en Red Hat: mediante paquetes RPM con la instrucción “rpm -iv *.rpm” estando dentro del directorio que contenga todos los paquetes de Ultramonkey. Basados en código fuente: tendrán que descargarse todos los paquetes que conformen Ultramonkey, luego se procede a descomprimir cada uno y posteriormente se procede a su compilación e instalación.
Piranha: Esta herramienta es sencilla de instalar si se posee una licencia del sistema operativo Red Hat Enterprise utilizado, su instalación puede realizarme mediante un administrador de paquetes gráfico propio del sistema operativo o bien, mediante la línea de comandos con el administrador indicado (en este caso yum). De
66
no poseer tal licencia se deben adquirir los paquetes por separado y proceder con una instalación manual en la cual dependerá el tipo de paquete adquirido, si es en formato RPM o en forma de código fuente. La instalación del conjunto de aplicaciones que conforman Piranha resulta especialmente compleja si no se posee la licencia del sistema operativo Red Hat Enterprise en donde se vaya a realizar la instalación.
LVS: Para llevar a cabo la instalación de LVS es necesario activar los módulos de LVS en el kernel de la distribución utilizada, posteriormente se debe instalar la aplicación ipvsadm pues esta será nuestra interfaz de comunicación con LVS. Una vez activado el soporte y la interfaz con LVS se procede a su configuración y pruebas pertinentes. Es importante notar que de no contar con un kernel con soporte activado las alternativas existentes son una recompilación del mismo kernel o la compilación de uno totalmente nuevo habilitando dicho soporte en ambos casos; si la distribución utilizada posee mecanismos para instalar un kernel con soporte incluido esto facilita la tarea, de otra manera el proceso de configuración, activación del soporte, compilación e instalación deberá realizarse de forma manual.
Se concluye que Ultramonkey es la herramienta que posee los mecanismos de instalación más simplificados, ahorrando tiempo y esfuerzo dada la automatización de los procesos y la facilidad de acceso a los paquetes que conforman la herramienta. Por último se verá que tan complejo es obtener las aplicaciones que conforman la herramienta y los diferentes métodos que posee cada una para su distribución.
67
Ultramonkey: Este proyecto es de fácil adquisición puesto que se encuentra empaquetado en diversos formatos, basta con agregar un repositorio al archivo y actualizar dichos repositorios para tener acceso a los paquetes que conforman Ultramonkey, el sistema de gestión de paquetes hará notar que debe instalar otros paquetes que son dependencias y ubicará los archivos en los sitios correspondientes; esta es la manera más fácil de instalar Ultramonkey, es limpia, rápida y muy eficiente. Si se desea instalar sobre una distribución como Red Hat se cuenta con los paquetes necesarios en formato RPM y se deben de descargar todos los paquetes y llevar a cabo la instalación de forma manual, en caso de usar una distribución distinta a estas dos, se procederá a descargar los paquetes en formato GZIP o BZIP2 dependiendo de las necesidades. Se concluye de lo anterior que la herramienta Ultramonkey posee una amplia variedad de medios de distribución y adquisición para varios sistemas operativos GNU/Linux eliminando la restricción de dependencia de una distribución en especial. Aunque LVS se distribuye como código fuente y Piranha en paquetes RPM o código fuente, la herramienta Ultramonkey brinda una mejor variedad de formatos y medios de adquisición siendo este punto el que le brinda ventaja sobre las anteriores y siendo esta la mejor elección.
Como se puede apreciar por estos tres indicadores, la mejor opción para elección es Ultramonkey debido a su sistema de instalación, variedad de formatos de distribución así como sus requisitos mínimos de hardware muy bajos. Sin duda las otras opciones son muy viables, pero presentan limitantes; con esto presente
queda
establecido
que
la
mejor
opción
para
68
implementación es Ultramonkey ya que está bien acoplado con la distribución Centos la cual tiene un elevado reconocimiento en cuanto a estabilidad y seguridad como en el aprovechamiento de recursos de una estación, sistema de gestión de paquetes muy avanzado y sencillo de usar que resuelve por si mismo varias de las dependencias de paquetes necesarias.
69
CAPITULO 5
INTRODUCCION Este capítulo tiene como finalidad describir la manera de cómo se lleva a cabo el proceso de construcción del clúster, así como también de hacer notar cuales aspectos se deberán tomar en cuenta para su configuración.
IMPLEMENTACION EN MAQUINAS VIRTUALES
5.1 INSTALACION Y CONFIGURACION DEL CLUSTER El clúster funcionará de la siguiente manera (figura 5.1), el usuario realizará una petición de una página web al servicio (el usuario desconoce que se trata de un clúster), al llegar la petición al nodo de balance este redireccionará dicha petición a uno de los servidores reales mediante al algoritmo de balanceo de carga establecido. El servidor real que atiende dicha petición tiene como origen de la misma al nodo de balanceo y no al usuario debido al método de direccionamiento empleado y su respuesta va dirigida a éste nodo. Una vez el nodo de balanceo recibe la respuesta del servidor real solicitado, la envía al usuario que la solicitó teniendo como su dirección la IP virtual del clúster y no la IP real del nodo de balanceo, esto es así porque al hacer el cliente la petición, se hace a la IP virtual del clúster y es de esta misma dirección de donde se obtiene la respuesta haciendo creer al usuario que es atendido por un solo equipo y no por un clúster. Tabla 5.1. En caso de existir una falla en uno de los servidores reales el balanceador verifica cuál se encuentra brindando el servicio y lo direccion hacia dicho servidor. Para el usuario esto es transparente ya que no afecta el servicio simplemente se ve afectado el rendimiento pero nunca en una pérdida de servicio, ésta se da cuando todos los nodos servidores fallan.
70
Figura 5.1 Funcionamiento del Clúster.
Se hace una petición de página a la IP virtual del clúster. La petición se envía al nodo de balanceo, éste mediante un algoritmo envía la petición al servidor real correspondiente. El servidor real que recibe la petición la procesa y envía el resultado al nodo de balanceo. El nodo de balanceo envía la respuesta a la petición al cliente indicando que la dirección IP del paquete que sale es la IP virtual del clúster y no la IP del nodo de balanceo. El cliente recibe la respuesta a su petición por parte de la IP virtual del clúster, el cliente en ningún momento se da cuenta que es atendido por un clúster. Tabla 5.1 Funcionamiento del Clúster.
71
5.1.1 SELECCIÓN DE NODOS PARA EL CLÚSTER Para la selección de los nodos que conforman el clúster es importante hacer notar que aquellos destinados a tomar la función de nodos de balanceo no necesariamente serán los de mayores prestaciones (con mayores recursos), con esto en mente se procederá a listar los componentes primordiales para dicha elección. Primero los nodos que actuarán como nodos de balanceo tendrán, como mínimo, que cubrir lo siguiente mostrado en la tabla 5.2: Procesador Pentium MMX a 166Mhz. Memoria RAM de 64MB. Unidad de Disco duro de 2GB. Tarjeta de Red Ethernet. Unidad de CDROM 8X (solo para instalación).
Tabla 5.2 Especificaciones del nodo de balanceo.
En lo concerniente a los nodos que funcionan como servidores web, estos deberán contar con una mayor capacidad que los nodos de balanceo pues son estos los que realizan el verdadero trabajo de atención a usuarios. Los requisitos mínimos aquí pueden variar dependiendo de la complejidad de los servicios web; un punto medio es la siguiente lista de requisitos mostrada en la tabla 5.3:
Procesador Pentium II 233Mhz. Memoria RAM de 128MB. Unidad de Disco duro de 4GB. Tarjeta de Red Fast Ethernet. Unidad de CDROM 8X (solo para instalación).
72
Tabla 5.3 Especificaciones de nodo servidor.
A continuación la tabla 5.4 indica las herramientas utilizadas para los nodos de balanceo, nodos servidores y los nodos clientes.
Tipo de Nodo
Herramientas Utilizadas Sistema Operativo (Windows, etc.) Navegador Web.
Cliente
Sistema Operativo GNU/Linux CentOs 5.3. Aplicaciones IPROUTE, IPTABLES, TCPDUMP [Tcpdump]. Balanceo de
Editor de textos VIM.
Carga Sistema Operativo GNU/Linux CentOs 5.3. Aplicaciones IPROUTE, IP RULE e IPTABLES. Editor de textos VIM. Servidor Real
Servidor de páginas web Apache2.
Tabla 5.4 Herramientas utilizadas en cada nodo.
Herramienta.
Características.
Características Principales.
Balanceo de carga. Escalabilidad. Bajo consumo de recursos.
Suite
Diversos esquemas de
Balanceo de carga.
configuración.
Alta disponibilidad.
73
Ultramonkey
Manejo de diversos protocolos
Escalabilidad.
como HTTP, FTP, etc. Crear y editar archivos de texto. Manejo de pestañas para múltiples documentos.
Editor de textos VIM.
Uso de números de línea.
Crear y editar archivos
Búsqueda de patrones dentro del
de texto.
documento.
Uso de números de
Ejecución de comandos sin salir
línea.
del editor.
Búsqueda de patrones dentro del documento.
Soporte de lenguajes de programación mediante módulos. Soporte para HTTPS. Servidor de
Soporte para SSL (Secure Socket
Páginas web
Layer) mediante módulo.
Apache2.
Permite crear host virtuales. Amplia gama de configuraciones.
Soporte de módulos para lenguajes y otras aplicaciones. Soporte de SSL. Creación de host virtuales.
Calidad de servicio. Mantenimiento de varias tablas de ruteo. Aplicación
Balanceo de carga.
IPROUTE.
Definición de túneles.
Balanceo de carga. Mantenimiento de varias tablas de ruteo.
Permite interceptar y manejar paquetes de red. Permite el manejo de paquetes en
Aplicación
diferentes estados del
Intercepción y manejo
procesamiento.
de paquetes de red.
Permite construir firewalls basados
Construcción de
en GNU/Linux.
firewalls basados en
74
IPTABLES.
Realiza traducción de direcciones
GNU/Linux.
(NAT).
Traducción de direcciones (NAT).
Permite depurar aplicaciones que utilizan la red para comunicar. Permite depurar la red misma. Aplicación
Permite capturar y leer datos
Permite capturar y leer
TCPDUMP.
enviados por otros usuarios o
datos enviados por otros
computadoras.
usuarios o computadoras.
Tabla 5.5 Características de herramientas utilizadas.
5.1.2 Instalación de los nodos Antes de iniciar, es necesario revisar la tabla 5.4 donde se indican las herramientas necesarias a instalar en cada nodo, la instalación se llevará a cabo en dos partes, la primera comprende la instalación del sistema operativo tanto en nodos de balanceo como en nodos servidores y la segunda parte comprende la instalación del software para el balanceo de carga. En cuanto a la primer parte que comprende la instalación del sistema operativo, se debe tomar en cuenta que se realiza con un entorno gráfico, por tanto se procederá conforme a la tabla 5.6.
Proceso de instalación del Sistema Operativo.
Creación de máquina virtual en VMware
Selección de medio de instalación.
Proceso de instalación del sistema base.
Instalación de paquetes adicionales.
Tabla 5.6 Proceso de instalación del Sistema Operativo.
75
El primer punto a cubrir nos brinda una variedad de medios de instalación como pueden ser los listados en la tabla 5.7.
Medios de Instalación.
DVDROM básico para instalación mediante red.
DVD del juego de la distribución.
Juego completo de discos de la distribución.
Archivo ISO guardado en el disco de la máquina virtual
Tabla 5.7 Medios de instalación.
Es importante contar con una conexión a Internet para hacer las actualizaciones pertinentes y facilitar la instalación de la herramienta de balanceo de carga. El segundo punto, la instalación del sistema base cuyo proceso se cubre en la tabla 5.8 a continuación:
Aspecto.
Descripción. Debe especificarse a qué zona horaria pertenece el
Zona Horaria.
servidor seleccionando el país/estado/ciudad en donde se ubica el servidor y esto ajustará el reloj del sistema sin necesidad de saber la franja horaria.
Contraseña de
Simplemente se pedirán las contraseñas para la
administrador y
cuenta de administrador y la(s) cuenta(s) de los
usuario(s).
usuarios comunes que utilizarán el sistema. Muestra las opciones de configuración automática mediante el protocolo DHCP; de forma manual en la
76
cual se proporcionan datos como la dirección IP y la Configuración de la red.
puerta de enlace y por último permite dejar de momento sin configuración la interfaz de red.
Aquí se marcarán aquellos servicios que sean Selección de aplicaciones.
necesarios de los presentes en la lista mostrada, si alguno no se encuentra en dicha lista, posteriormente se podrá instalar. Algunos de estos servicios son bases de datos y servidores web.
Tabla 5.8 Proceso de instalación del sistema base.
El resto del proceso de instalación y detalles relacionados se cubren en el anexo 1 (Instalación del sistema operativo en maquinas virtuales). La tabla 5.9 a continuación muestra los servicios que se deberán activar en los nodos servidores.
Servidor de páginas web Apache.
Editor de textos VIM.
Aplicaciones IPROUTE e IPTABLES.
Tabla 5.9 Servicios activados en los nodos servidores.
5.1.3. Configuración de los servidores web Los servidores reales deben ser configurados para ejecutar el servicio web provisto por el clúster usando como aplicación para tal efecto un software como Apache. Cuando se trabaja con servidores web es altamente recomendable hacer uso de direcciones IP estáticas y para ello se debe editar la configuración del dispositivo de red; para mayor detalle debe consultarse el Anexo 2, sobre el manejo de la interfaz de red. Se deben configurar los servidores reales para que acepten peticiones en la dirección IP virtual dado que estos no responden al cliente de
77
manera directa (ver figura 5.1). Para ello el servidor real deberá contar con la aplicación iproute (ésta aplicación se compone de un conjunto de herramientas muy potentes para administrar interfaces de red y conexiones en sistemas GNU/Linux). Las características que brinda esta configuración de balanceo de carga (ver figura 5.2) en primera instancia son brindar un equilibrio de la carga de trabajo en cuanto a las conexiones que puede atender cada servidor real haciendo posible, dependiendo del algoritmo de balanceo, el asignar más trabajo a un servidor con mayor capacidad que otro, repartir el total de conexiones si todos los servidores son iguales en características para no saturar ninguno y poder atender de manera eficiente al usuario final. Después permite que al incorporarse nuevos nodos servidores con mayores prestaciones estos sean quienes atiendan las peticiones con mayores prioridades y consumo de recursos dejando al resto libre para atender a otros usuarios finales. Las aplicaciones IPROUTE e IPTABLES son necesarios de configurar, pues las configuraciones que posee por defecto al instalarse no son suficientes. En lo que respecta a la alta disponibilidad cabe señalar que esta se brinda mediante la redundancia de nodos de balanceo pues es aquí donde reside el balanceo de la carga ya que tales nodos son los encargados de distribuir las conexiones. Esta alta disponibilidad requiere que no solo exista la redundancia en los nodos de balanceo sino también cierto grado en los servidores reales pues aunque con solo un servidor real se puede todavía brindar el servicio, en realidad no existe ningún balanceo de esta manera, siendo primordial la existencia de por lo menos dos nodos para tal efecto. Como las conexiones son redirigidas a los servidores reales usando NAT es importante que la ruta de regreso para tales conexiones sea a través del nodo de balanceo. Esto es así porque NAT puede revertir el proceso, de otra forma el paquete de retorno que es recibido por el usuario final será del servidor real y no del nodo de balanceo y por lo tanto la conexión será abandonada.
78
Figura 5.2. Configuración final de nodos.
5.2. Instalación de CentOs Para la instalación del sistema operativo utilizado (CentOs 5.3), es necesario tener el dvd con la distribución respectiva, para el caso de este proyecto se utilizó el archivo ISO de la distribución el mismo que se lo tiene guardado en un directorio del equipo principal. Cabe señalar que se utilizó en software de virtualización VMware Workstation en la versión 6.0.0. Este proceso se lo realizó para todos los servidores utilizados en el proyecto. El proceso de instalación del sistema operativo CentOs se encuentra detallado en el Anexo 1 Instalación de CentOs.
5.3. Instalación de Ultramonkey En cuanto a los medios de instalación de Ultramonkey, los podemos encontrar en forma de paquetes de código fuente, paquetes pre-
79
compilados que se pueden descargar desde la página web del proyecto y también en el repositorio siguiente:
http://www.ultramonkey.org/download/3/
La manera más sencilla de llevar a cabo la instalación ejecutar como superusuario el comando yum install para instalar la lista de paquetes disponibles. Este método es el que se utilizará para su instalación. Si no se cuenta con una conexión a Internet en el momento de instalar los paquetes que se proveen, se puede optar por descargar en otro equipo con acceso a Internet los paquetes que conforma la herramienta desde la página del proyecto, en este caso se entraría a la sección de descargas y se especifica que los paquetes a descargar son para la distribución GNU/Linux Redhat (cabe señalar que CentOs es la versión liberada de Redhat Enterprise, por esta razón su usan los paquetes disponibles para Redhat). Por último se puede optar por adquirir los paquetes en formato de código fuente comprimidos, una vez descargados se procederá a copiarlos en la estación donde se necesiten y se llevará a cabo todo el proceso de compilación e instalación. Como se puede apreciar, existen métodos de instalación para casi todas las distribuciones o preferencias; la mejor forma es mediante los repositorios, pero si se desea conservar un respaldo de dichos paquetes se sugiere su descarga y posterior respaldo en medios como discos compactos o en un servidor de respaldos.
5.3.1. Selección de topología de instalación de ultamonkey Aquí se determina como instalar la solución de alta disponibilidad y balanceo de carga que provee Ultramonkey de acuerdo a un esquema determinado, posteriormente se detallará el proceso de instalación. Como muestra la figura 5.2. “Configuración final de nodos”, la red está compuesta por 3 computadoras unidas mediante un router. Las direcciones IP 192.168.1.20 y 192.168.22.2 están asignadas al nodo director del clúster y las direcciones IP 192.168.22.4 y 192.168.22.5 a los
80
servidores reales. La VIP (dirección IP 192.168.1.20.
virtual) del clúster es
Esta topología permite el máximo rendimiento (en cuanto a tasa de transferencia) a través de la red, ya que el tráfico de retorno ya no tiene que viajar a través de un nodo de balanceo.
5.3.1.1. Directores Linux o Nodos de balanceo En cualquier momento uno de los nodos directores está activo, mientras el otro está en una espera atenta. El nodo de balanceo activo acepta el tráfico desde una IP virtual. Ésta es la IP que es anunciada a los usuarios finales. La carga de conexiones es balanceada hacia uno de los servidores reales usando LVS. Los dos nodos de balanceo se monitorean el uno al otro usando Heartbeat y en el evento de que el nodo de balanceo activo falle, el que está en espera asume la dirección virtual y el servicio se mantiene. Las conexiones son sincronizadas entre el nodo de balanceo activo y los que están en espera, de tal forma que cuando una falla ocurre las conexiones existentes pueden continuar. Cuando un nodo de balanceo recibe una conexión desde un usuario final, éste toma la decisión acerca de a cuál nodo servidor enviar la conexión. Todos los paquetes del tiempo de vida de esta conexión son enviados al mismo servidor real de tal forma que la integridad de la conexión entre el usuario final y el servidor real se mantiene. El director monitorea la salud o estado de los servidores reales, por medio de consultas periódicas de una página conocida y verificando que la respuesta contenga una cadena esperada. Si el servidor real falla, entonces el servidor es sacado del pool (los servidores reales seleccionables) de los servidores reales y se reinserta una vez que vuelve a estar en línea. Como el nodo de balanceo no es el router de entrada para los servidores reales, el tráfico no tiene que viajar a través del nodo de balanceo en el retorno si es que se usa “ruteo directo” o “tunneling”. Esto permite un mayor rendimiento (tasa de transferencia) ya que el nodo de balanceo no tiene que manejar los paquetes de retorno. Puede ser posible enviar tráfico de retorno a través de diferentes routers y/o switch cuando la conectividad externa lo permita.
81
5.3.1.2. Nodos servidores o servidores reales Los servidores reales pueden ejecutar una variedad de servicios incluyendo el servidor web HTTP Apache. Más servidores reales pueden ser añadidos a la red si se requiere capacidad extra dado que este esquema permite escalabilidad.
5.4. Configuración de Heartbeat en los nodos de balanceo Ultramonkey viene con paquetes adicionales. Estos paquetes sólo son requeridos para los nodos de balanceo que van a ejecutar Heartbeat. Pueden ser obtenidos usando el comando yum: yum install ultramonkey Otra alternativa para obtener los paquetes es desde el directorio de descargas en la página: http://www.ultramonkey.org/download/3/ El proceso de instalación de toda la solución se encuentra documentado en el Anexo 2 Instalación de la solución.
5.5. Configuración de la red de trabajo Como muestra la figura 5.1, la red está compuesta por 4 computadoras unidas mediante un switch. Las direcciones IP 192.168.1.20 y 192.168.22.2 están asignadas a al nodo director del clúster (nodo de balanceo) y las direcciones IP 192.168.22.4 y 192.168.22.5 a los nodos servidores A y B). La VIP del clúster LVS es 192.168.1.20. Para editar la configuración de un dispositivo de red usamos las herramientas administrativas para esto: system-config-network. Después de los cambios en el archivo es necesario reiniciar los servicios de red para que estos surtan efecto mediante el comando service network restart.
82
5.6. Configuración del clúster 5.6.1. Directores Linux, nodos de balanceo Los directores deben estar habilitados para enrutar el tráfico hacia los servidores reales. Específicamente, se debe habilitar el seguimiento IPv4. Esto se hace mediante el comando: echo 1 > /proc/sys/net/ipv4/ip_forward Para que los cambios tengan efecto se debe usar el comando sysctl: sysctl –p Configuramos el componente IPVS de ultramonkey para designar la dirección IP virtual y los servidores reales, además indicamos que se lo realizará mediante NAT y con el algoritmo round robin. ipvsadm -A -t 192.168.1.20:80 -s rr ipvsadm -a -t 192.168.1.20:80 -r 192.168.22.4:80 -m -w1 ipvsadm -a -t 192.168.1.20:80 -r 192.168.22.5:80 -m -w1
5.6.2. Heartbeat Para configurar el Heartbeat, deben estar instalados los archivos /etc/ha.d/ha.cf, /etc/ha.d/haresources y /etc/ha.d/authkeys. Para visualizar el archivo /etc/ha.d/ha.cf se debe ejecutar el siguiente comando: vim /etc/ha.d/ha.cf El monitoreo de los servidores reales y su inserción y eliminación del conjunto de servidores disponibles es controlado por ldirectord, el cual es ejecutado por Heartbeat. Para configurar ldirectord, el archivo /etc/ha.d/ldirectord.cf debe estar instalado.
83
vim /etc/ha.d/ldirectord.cf Al recibir una petición de conexión desde un cliente, el nodo de balanceo asigna un servidor real al cliente basado en un algoritmo. El tipo del algoritmo se define en este archivo. Algunos de los algoritmos disponibles son: RR, WRR: round robin, weighted round robin (con manejo de pesos). LC, WLC: least connection (menos conexiones), weighted least connection (el director tiene una tabla con el número de conexiones para cada servidor real). Los algoritmos RR, WRR, LC y WLC deberían todos funcionar de forma similar cuando el nodo de balanceo está dirigiendo servidores reales idénticos con servicios idénticos. El algoritmo LC será mejor manejando situaciones donde las máquinas son dadas de baja y activadas nuevamente. Si los servidores reales están ofreciendo diferentes servicios y algunos tienen usuarios conectados por un largo tiempo mientras otros están conectados por un corto periodo, entonces ninguno de los algoritmos va a hacer un buen trabajo distribuyendo la carga entre los servidores reales. Como el clúster a implementar posee servidores reales idénticos con servicios idénticos, se optó por implementarlo con un algoritmo RR (round robin).
5.7. Instalar y configurar IPROUTE en los nodos servidores Finalmente debemos configurar los nodos servidores 1 y 2 para que acepten peticiones de la IP 192.168.22.2. En los nodos 1 y 2 ejecutamos: ip route add default via 192.168.22.2 table 1 ip rule add fwmark 80 table 1 Es necesario utilizar firewall iptables para marcar todo el tráfico http, y luego la ruta es a través de una tabla de rutas alternativas. iptables -t mangle -I PREROUTING -p tcp --dport 80 -j MARK --set-mark 80 Aceptar conexiones web en los servidores por el puerto 80 y la interface de red eth1.
84
iptables -A INPUT –i eth1 -p tcp --dport 80 -j ACCEPT Guardamos la configuración de las reglas iptables. service iptables save Configuramos que el servicio de iptables en los nodos servidores este corriendo y se active en el inicio: chkconfig iptables on Iniciamos el servicio iptables service iptables start Configuramos para que el servicio http en los nodos servidores este corriendo y se active en el inicio, con el comando: chkconfig httpd on Iniciamos el servicio http service httpd start Asegurarse que los servidores reales (192.168.22.4 y 192.168.22.5) reenvíen los paquetes a través del linux director (192.168.22.2), es decir, los servidores reales deben tener como default gw a linux director. Encontrar toda la documentación acerca de la instalación en el Anexo 2.
5.8. Pruebas de desempeño Los servidores reales poseen una página web alojada en /var/www/html/ la misma que simplemente es informativa y nos indica que servidor es el que está mostrando la página así (servidor 1, servidor 2). Ver figuras 5.3 y 5.4 respectivamente.
85
El cliente realiza una petición al servidor director mediante la dirección IP Virtual del mismo 192.168.1.20 (www.tesismg.com), el servidor director realiza el balanceo y redirecciona la petición al servidor real disponible, si realizamos nuevamente una petición veremos que ahora es el otro servidor el que está mostrando su página.
Figura 5.3. Página del servidor 1
86
Figura 5.4. Página del servidor 2
Simulamos una caída del servidor 1 deteniendo el servicio http asi: service httpd stop
Figura 5.5. Detención del servicio httpd
Observamos que ahora el balanceador muestra solamente la página del servidor 2 en todas las peticiones.
5.8.1. Herramientas para medición de rendimiento 5.8.1.1. Selección de una herramienta para medición de rendimiento Existen varias herramientas para comprobar el correcto funcionamiento del clúster entre todas estas se ha decidido utilizar ipvmsad, tcpdump, tomando en cuenta que ipvsadm en el administrador de LVS componente de ultramonkey usado en la implementación.
87
Ipvsadm Ipvsadm se utiliza para establecer, mantener o inspeccionar la tabla del servidor virtual en el kernel de Linux. El Servidor Virtual Linux puede ser utilizado para construir los servicios de red escalable basada en un conjunto de dos o más nodos. El nodo activo del clúster redirecciona las peticiones de servicio a un nodo del clúster, un servidor que va a entregar los servicios. Entre sus características soportadas incluyen dos protocolos (TCP y UDP), tres métodos de reenvío de paquetes (NAT, túneles, y el encaminamiento directo), y ocho algoritmos de balanceo. El comando tiene dos formatos básicos para la ejecución: ipvsadm COMMAND [protocol] service-address [scheduling-method] [persistence options] ipvsadm command [protocol] service-address server-address [packet-forwarding-method] [weight options]
El primer formato manipula un servicio virtual y el algoritmo para la asignación de las solicitudes de servicio a los servidores reales. De manera opcional, un tiempo de espera persistentes y la máscara de red para la granularidad de un servicio persistente puede ser especificado. El segundo formato manipula un servidor real que está asociado con un servicio virtual existente. Cuando se especifica un servidor real, el método de reenvío de paquetes y el peso del servidor real, en comparación con otros servidores reales para el servicio virtual, se puede especificar, de lo contrario se usará por defecto. Ejemplos: Ipvsamd -l Lista la tabla del servidor virtual, las conexiones activas e inactivas existentes en el servidor. Ipvsamd –lnc Lista las conexiones entrantes, el estado de la conexión, el origen y el destino de la conexión.
88
Tcpdump Tcpdump es una excelente herramienta que nos permite monitorear a través de la consola de Linux todos los paquetes que atraviesen una interfaz indicada. A su vez, los múltiples filtros, parámetros y opciones que tcpdump nos ofrece, nos permite infinidades de combinaciones, al punto de poder monitorear todo el tráfico completo que pase por la interfaz, como el tráfico que ingrese de una ip, un host o una página específica, podemos solicitar el tráfico de un puerto específico o pedirle a la herramienta que nos muestre todos los paquetes cuyo destino sea una dirección MAC específica. Ejemplos: tcpdump –i eth0 port 80 Muestra todo el tráfico por la interface de red eth0 y el puerto 80. De las pruebas obtenidas con estas herramientas podemos verificar el estado de los servidores asi:
Figura 5.6. Verificación de servidores y conexiones con ipvsadm –l.
89
Figura 5.7. Verificación de servidores y conexiones con ipvsadm –lnc.
Figura 5.8. Tráfico en la red con tcpdump.
90
Figura 5.9. Salida de tráfico en la red con tcpdump.
91
CONCLUSIONES Una vez instalado todo el conjunto de paquetes necesario, (paquetes RPM, tipo de paquete utilizado en distribuciones Centos), la configuración resulta sencilla y solo se tienen que ejecutar comandos para especificar el algoritmo a utilizar para el balanceo de carga, datos sobre los servidores reales y nodos de balanceo como también los servicios que proporcionan y las páginas para control esperadas (servicio en este caso particular de páginas web o HTTP solamente). Para las pruebas de funcionamiento se utilizó configuraciones generales del clúster que incluye los nodos de balanceo, los algoritmos para balanceo de carga, instalación y configuración del servidor de páginas web Apache, pruebas simples para nodos de balanceo e instalación y configuración del paquete iproute en los nodos servidores. Sobre las pruebas realizadas, estas me ofrecen un panorama muy general, puesto que la mayoría de ellas son bien controladas y se esperan ciertos resultados, la mejor parte de las pruebas se pudo explorar esos aspectos no previstos e investigar el comportamiento del clúster en dichos casos; en las pruebas llevadas a cabo se contaba con un cliente con un sistema operativo distinto al utilizado para la construcción del clúster (recuérdese que el cliente solamente necesita un navegador web) el cual realiza las peticiones de la página web principal alojada en el clúster, de esta manera se pudo observar cual servidor real es el que atiende la petición (en un sistema en producción esto no deberá ser así ya que la intención es que los usuarios vean al sitio web como un solo equipo). La página web solicitada en las pruebas solamente contiene una cadena indicando a que nodo servidor real pertenece. Es importante aclarar que debido a las características de los nodos de balanceo empleados, estos no pueden procesar miles de peticiones sin embargo las pruebas realizadas demuestran que son suficientemente competentes para el
92
manejo de un sitio de dimensiones bajas a medias como lo son las pequeñas empresas. En el transcurso de las pruebas se observó que existían problemas no previstos en la elaboración del proyecto como la seguridad que debe mantenerse en los servidores lo cual fue solventado denegando la aceptación de paquetes y puertos por parte de los nodos servidores. Al final del proyecto se concluye que la solución desarrollada es aplicable en pequeñas empresas tomando en cuenta el correcto funcionamiento, la fácil instalación y mantenimiento del sistema además que, por tratarse de open source las empresas no incurre en gastos por licenciamiento.
BIBLIOGRAFIA
2007, José Angel de Bustos Pérez, GNU/Linux, software libre para la comunidad universitaria, 2007. Septiembre 2001, Vicente José Aguilar Roselló, Clustering de Alta Disponibilidad bajo GNU/Linux, septiembre 2001 2005, Rosa María Yánez Gómez, Introducción a las tecnologías de clustering en GNU/Linux, 2005. 30 de diciembre de 2003, Emilio José Plaza Nieto, Cluster Heterogéneo de computadoras, 30 de diciembre de 2003. Edición junio 2010, Joel Barrios Dueñas, Implementación de Servidores con GNU/Linux, 26 de junio 2010. 2007, Red Hat, Inc., Linux Clustering Building and Maintaining Linux Clusters, 2007 2004, Federico Esteban Pereda, Mini-Howto Servidores de Alta Disponibilidad (heartbeat + drbd), 2004. Junio 30, 2007, Tom Adestein, Bill Lubanovic, Administración de sistemas Linux, junio 30, 2007, Anaya Multimedia 2005, Charles Bookman, Clustering con Linux, 2005, Pearson Educación 2007, José Angel de Bustos Pérez, GNU/Linux, software libre para la comunidad universitaria, 2007. Septiembre 2001, Vicente José Aguilar Roselló, Clustering de Alta Disponibilidad bajo GNU/Linux, septiembre 2001 http://www.codigolibre.org/index.php?option=com_content&view=article& id=5389:clustering&catid=36:gnu-cat&Itemid=53 http://www.jumpingbean.co.za/linux-cluster-load-balancing-highavailability http://crysol.org/node/339 http://www.taringa.net/posts/linux/8289874/Monitoreo-de-trafico-en-red_tcpdump.html
http://linuxmanpages.com/man8/ipvsadm.8.php http://bulma.net/body.phtml?nIdNoticia=1615&nIdPage=3 http://www.adslfaqs.com.ar/que-es-nat-network-address-translation/ http://wiki.itlinux.cl/doku.php?id=cluster:ultramonkey-lbs http://mmc.geofisica.unam.mx/LuCAS/Manuales-LuCAS/doc-cursosalamanca-clustering/html/ch03s04.html http://www.wikilearning.com/tutorial/el_manual_para_el_clustering_con_ openmosix-clusters_ha_ii/9756-15 http://www.estrellateyarde.org/discover/cluster-ultramonkey-en-linux http://www.tcpdump.com/ http://linuxmanpages.com/man8/ipvsadm.8.php http://www.ultramonkey.org http://www.centos.org
View more...
Comments