190
Ingeniería Técnica de Telecomunicaciones: Especialidad Telemática Proyecto Final de Carrera Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad (Linux Virtual Server), ACADE (LVS) Marcos Martínez Jiménez <[email protected]> Gabriel Bergés Pujol <[email protected]> V1.0.1 Marzo 2003

Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

Ingeniería Técnica de Telecomunicaciones: Especialidad Telemática Proyecto Final de Carrera

Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad (Linux Virtual Server), ACADE (LVS)

Marcos Martínez Jiménez <[email protected]> Gabriel Bergés Pujol <[email protected]>

V1.0.1 Marzo 2003

Page 2: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

Prefacio

Prefacio Estructura y contenido de la memoria

La memoria del proyecto ACADE (LVS) se estructura en tres bloques y el anexo. Los tres

bloques o partes son:

Parte 1: Conceptos teóricos fundamentales

Parte 2: Software libre para Arquitecturas de Clustering de Alta Disponibilidad y

Escalabilidad (ACADE).

Parte 3: Cluster Acade (LVS). Descripción, funcionamiento y pruebas efectuadas.

La primera parte recoge definiciones y aspectos teóricos básicos sobre balanceadores de

carga, clusters y otros temas importantes relacionados con el proyecto. Para ampliar los

conocimientos teoricos de esta parte ver [0].

Uno de los objetivos principales a la hora de iniciar el proyecto ACADE era el de ir más

allá del mero estudio teórico e implementar un cluster de alta disponibilidad y

escalabilidad que permitiera profundizar, mediante la experimentación, en todos los

aspectos de este tipo de arquitecturas. Se montó un cluster activo/pasivo de balanceadores

de carga (LVS) al que se nombró “Acade”, utilizando para ello software libre.

La segunda parte hace un recorrido por las diferentes soluciones software disponibles para

implementar arquitecturas de clustering de alta disponibilidad sobre plataformas libres,

centrándose especialmente en aquellas soluciones que han formado parte del cluster

Acade.

El tercer apartado describe el funcionamiento del cluster Acade, detallando su topología, y

el funcionamiento e interrelación de todos los elementos software utilizados.. Las

descripciones se acompañan con capturas de pantalla, que ayudan a entender el

comportamiento del software.

Finalmente, el anexo reúne toda la documentación complementaria al proyecto. El

apartado más importante del mismo es el “Manual Acade (LVS)” el cual se crea a partir de

Page 3: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

Prefacio

una serie de documentación propia de trabajo, generada durante el montaje del cluster

Acade. El propósito del manual es facilitar el montaje de una arquitectura similar a la del

proyecto ACADE, a cualquiera que pudiera estar interesado en ello.

Convenciones utilizadas.

Con el fin de facilitar una lectura clara y concisa, que ayude a una mejor comprensión de

los conceptos expuestos en esta memoria, se han utilizado las siguientes convenciones

tipográficas.

Cursiva

Las fuentes en cursiva se han utilizado para nombres de programas, términos técnicos en

inglés, para fragmentos de texto importados de otros documentos o URLs. Además, estas

últimas aparecen entre los símbolos <>.

Monoespaciada

Los caracteres monoespaciados son utilizados para comandos, variables de entrono,

direcciones IP y MAC, números y nombres de puertos, nombres de máquinas, nombres de

dispositivos y fragmentos de código.

Negrita

Utilizada para resaltar o remarcar palabras y determinados conceptos importantes.

Fondo Gris

Es usado para resaltar texto cuando éste representa la captura de la salida estándar de un

programa, en ejemplos de comandos de la shell o para mostrar el código fuente de un

programa.

[Referencias bibliográficas]:

Page 4: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

Prefacio

En ocasiones, a fin de invitar al lector a ampliar determinados conocimientos, o bien para

referenciar el origen de determinada información, se han utilizado referencias a la

bibliografía que se recoge en la bibliografía situada al final de esta memoria.

(Referencias internas)

Para referenciar apartados expuestos en otras partes de la memoria, se indicará entre

paréntesis el número del mismo . Por ejemplo (12.4) o así (anexo IV).

Page 5: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)
Page 6: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ÍNDICE I

Índice

1. INTRODUCCIÓN........................................................................................................... 1

1.1 DEFINICIONES............................................................................................................... 2 1.1.1 Clustering ............................................................................................................. 2 1.1.2 Alta disponibilidad ............................................................................................... 2 1.1.3 Alta escalabilidad................................................................................................. 2

Parte 1: Conceptos teóricos fundamentales

2. OBJETIVOS INICIALES DEL PROYECTO ACADE .............................................. 3

3. BALANCEADORES DE CARGA................................................................................. 5

3.1 INTRODUCCIÓN............................................................................................................. 5 3.2 DEFINICIÓN .................................................................................................................. 5 3.3 MEJORAS QUE APORTA EL BALANCEADOR DE CARGA ................................................... 6

3.3.1 Escalabilidad........................................................................................................ 6 3.3.2 Disponibilidad ...................................................................................................... 7 3.3.3 Gestión y flexibilidad en el mantenimiento .......................................................... 7 3.3.4 Seguridad.............................................................................................................. 8 3.3.5 Calidad de servicio (QoS) .................................................................................... 8

3.4 TIPOS............................................................................................................................ 8 3.5 MÉTODOS DE DISTRIBUCIÓN DE CARGA ........................................................................ 9

3.5.1 Stateless .............................................................................................................. 10 3.5.2 Stateful ................................................................................................................ 11 3.5.3 Algoritmos de Scheduling (Hashing).................................................................. 13

3.6 MONITORIZACIÓN DE LOS SERVIDORES....................................................................... 14 3.6.1 Sistemas in-band................................................................................................. 14 3.6.2 Sistemas out-band............................................................................................... 14 3.6.3 Métodos para monitorizar la salud del servidor (Health Checks)..................... 15

3.7 MÉTODOS DE REENVÍO ............................................................................................... 17 3.7.1 Network Address Translation (NAT) .................................................................. 17 3.7.2 Direct Server Return (DSR)................................................................................ 22

3.8 PERSISTENCIA DE SESIÓN............................................................................................ 23 3.8.1 Tipos de persistencia de sesión .......................................................................... 25 3.8.2 Métodos de persistencia basados en IP origen .................................................. 26 3.8.3 Métodos basados en la aplicación ..................................................................... 30

3.9 BALANCEADORES DE CARGA DE ALTA DISPONIBILIDAD.............................................. 33

4. CLUSTERING Y BASES DE DATOS........................................................................ 39

Page 7: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ÍNDICE II

Parte 2: Software libre para Arquitecturas de Clustering de Alta

Disponibilidad y Escalabilidad (ACADE).

5. EL SOFTWARE LIBRE COMO MOTOR DE DESARROLLO SOCIAL............ 41

6. BALANCEADORES DE CARGA LIBRES............................................................... 45 6.1 LINUX VIRTUAL SERVER PROJECT ............................................................................. 45 6.2 ¿QUÉ ES LVS? ........................................................................................................... 45

6.2.1 LVS, IP Virtual Server (IPVS)............................................................................ 46 6.3 MÉTODOS DE REENVÍO SOPORTADOS POR LVS .......................................................... 48

6.3.1 LVS-NAT............................................................................................................. 48 6.3.2 LVS-DR............................................................................................................... 51 6.3.3 LVS-Tun.............................................................................................................. 56 6.3.4 El problema con el Protocolo de Resolución de Direcciones (ARP)................. 57

6.4 PERSISTENCIA EN LVS ............................................................................................... 66 6.5 FIREWALL MARKS ...................................................................................................... 72 6.6 ALGORITMOS DE SCHEDULING IMPLEMENTADOS POR LVS........................................ 74 6.7 IPVSADM .................................................................................................................... 76 6.8 LVS, KERNEL TCP VIRTUAL SERVER (KTCPVS) .................................................... 87 6.9 DIRECT ROUTED WEB SWITCH (DRWS).................................................................... 87 6.10 HIGH UP TIME PROJECT (HUT)................................................................................ 88

7. CLUSTER ACTIVO/PASIVO CON LVS .................................................................. 91 7.1 HEARTBEAT ............................................................................................................... 91 7.2 FAKE .......................................................................................................................... 97 7.3 LINUX DIRECTOR DAEMON LDIRECTORD................................................................... 98 7.4 SERCICE MONITORING DAEMON, MON .................................................................... 100

8. SOFTWARE DE SERVIDOR ................................................................................... 103 8.1 APACHE.................................................................................................................... 103 8.2 PHP.......................................................................................................................... 104 8.3 MYSQL DATABASE SERVER.................................................................................... 105 8.4 PROFTPD ................................................................................................................ 106

Page 8: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ÍNDICE III

Parte 3: Cluster Acade (LVS). Descripción, funcionamiento y

pruebas efectuadas

9. CLUSTER ACADE (LVS).......................................................................................... 107

9.1 ¿QUÉ ES EL CLUSTER ACADE (LVS)? ....................................................................... 108 9.2 COMPONENTES SOFTWARE UTILIZADOS (LVS+HEARTBEAT+LDIRECTORD)............. 108 9.3 SERVICIOS OFRECIDOS .............................................................................................. 109 9.4 TOPOLOGÍA FÍSICA DEL CLUSTER ACADE ................................................................. 109 9.5 TOPOLOGÍA LÓGICA DEL CLUSTER ACADE................................................................ 110 9.6 FUNCIONAMIENTO E INTERRELACIÓN DE LOS DIFERENTES ELEMENTOS SOFTWARE DE ACADE............................................................................................................................ 111

9.6.1 Software utilizado en los balanceadores de carga........................................... 111 9.6.2 Software utilizado en los Servidores Reales..................................................... 120

9.7 PRUEBAS REALIZADAS.............................................................................................. 121 9.7.1 Balanceo de carga. ........................................................................................... 122 9.7.2 Persistencia de sesión....................................................................................... 123 9.7.3 Monitorización de contenidos .......................................................................... 124 9.7.4 Alta disponibilidad del balanceador de carga. ................................................ 125

10. CONCLUSIONES Y VALORACIONES................................................................ 129 10.1 LIMITACIONES Y ASPECTOS POR DESARROLLAR EN ACADE .................................... 130

10.1.1 Aspectos por desarrollar: LVS-DR y LVS-Tun .............................................. 130 10.1.2 Limitaciones de este modelo: Bases de Datos................................................ 130

10.2 CONCLUSIÓN FINAL................................................................................................ 131

Page 9: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ÍNDICE IV

Índice de figuras FIGURA 1: UBICACIÓN DEL BALANCEADOR DE CARGA............................................................... 6 FIGURA 2: ESTABLECIMIENTO DE CONEXIÓN TCP.................................................................. 10 FIGURA 3: DESTINATION NAT. .............................................................................................. 18 FIGURA 4: SOURCE NAT. ...................................................................................................... 19 FIGURA 5: NECESIDAD DE PERSISTENCIA EN APLICACIONES TRANSACCIONALES. ...................... 24 FIGURA 6: MEGAPROXY PROBLEM, CASO 1............................................................................. 29 FIGURA 7: MEGAPROXY PROBLEM, CASO 2............................................................................. 30 FIGURA 8: CLUSTER DE ALTA DISPONIBILIDAD ACTIVO/PASIVO................................................ 34 FIGURA 9: CLUSTER DE ALTA DISPONIBILIDAD ACTIVO/ACTIVO. .............................................. 35 FIGURA 10: CLUSTER DE ALTA DISPONIBILIDAD ACTIVO/ACTIVO OPTIMIZADO.......................... 36 FIGURA 11: CLUSTER DE ALTA DISPONIBILIDAD ACTIVO/ACTIVO OPTIMIZADO 2. ...................... 37 FIGURA 12: CLUSTERING Y BASES DE DATOS. ......................................................................... 39 FIGURA 13: LVS-NAT. ......................................................................................................... 49 FIGURA 14: TOPOLOGÍA LVS-DR.......................................................................................... 53 FIGURA 15: LARS’ METHOD. ................................................................................................. 64 FIGURA 16: MONITORIZACIÓN MEDIANTE LATIDOS................................................................. 91 FIGURA 17: TAKEOVER MEDIANTE EL ENVÍO DE GRATUITOUS ARP. ........................................ 94 FIGURA 18: CLUSTER ACADE EN ACCIÓN. ............................................................................ 107 FIGURA 19: CLUSTER ACADE. ............................................................................................. 110 FIGURA 20: TAKEOVER EN ACADE. ...................................................................................... 116 FIGURA 21: ESQUEMA SOFTWARE ACADE (LVS). ................................................................. 119 FIGURA 22: EJEMPLO DE ACCESO AL SERVICIO WEB DEL CLUSTER ACADE............................. 121 FIGURA 23: EJEMPLO DE ACCESO AL SERVICIO FTP VIA WEB DEL CLUSTER ACADE................. 122

Contenido de los anexos Anexo I Listado de sitios web que implementan soluciones basadas en LVS Anexo II Manual de ipvsadm Anexo III Archivos y scripts de configuración principales de los LVS del cluster Acade Anexo IV Esquema y código SQL de la base de datos documentacion Anexo V Manual Acade Anexo VI Código PHP del sitio web (en el CD-ROM 2) Anexo VII Análisis empírico del funcionamiento de la pila TCP/IP en kernels Linux 2.4.x Anexo VIII Software necesario para implementar el cluster Acade (en el CD-ROM 1 y 2)

Page 10: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 1

1. Introducción

Alta disponibilidad (HA) y alta escalabilidad son tecnologías emergentes. Éstas están

cimentadas sobre la base de soluciones propietarias, en su mayoría ligadas habitualmente a

costosas arquitecturas hardware.

Linux HA Project es el encargado de aunar los esfuerzos de la comunidad libre para hacer

de Linux una excelente plataforma sobre la cual ofrecer servicios de HA y escalabilidad.

HA permite la prestación permanente de servicios 24/7/365 demandados por la creciente

globalización del mundo empresarial. A su vez, la persistente necesidad de mantener la

competitividad de las empresas, requiere escalabilidad en las soluciones hardware

adoptadas para que sean capaces de amoldarse al dinamismo del mercado.

Desde el entorno del software libre, se están generando soluciones a necesidades hasta

ahora sólo cubiertas por soluciones basadas en software propietario y hardware específico.

En este sentido, Linux Virtual Server (LVS) es la principal apuesta de dicho entorno. LVS y

un conjunto de aplicaciones software asociadas, han alcanzado la madurez suficiente para

seducir a los principales distribuidores de sistemas Linux como RedHat, Turbolinux y

SuSE. Éste último como principal representante del consorcio UnitedLinux, llamado a ser

el estándar con el que vestir al hardware de los principales fabricantes. AMD, Computer

Associates, Fujitsu Siemens, Hewlett-Packard, IBM, Intel, NEC y demás, ya le han

mostrado su soporte. Incluso el principal contrincante de UnitedLinux, RedHat, ha

adoptado LVS.

Mención especial requiere el caso de la escalabilidad, puesto que las soluciones basadas en

el binomio software libre y hardware no específico aportan facilidad para la migración a

sistemas o plataformas hardware de otros fabricantes. No sucede así con las soluciones

hardware/software propietarias, las cuales obligan a grandes desembolsos tanto iniciales

como en posteriores ampliaciones.

Page 11: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

2 - Capítulo 1: Introducción

1.1 Definiciones

1.1.1 Clustering

En el ámbito telemático, un cluster es una agrupación de máquinas que, trabajando

coordinadamente, resuelven un determinado problema o prestan un determinado servicio

conjuntamente.

Dado que el termino clustering es en si mismo algo confuso, utilizamos otros términos

como por ejemplo, balanceador de carga, IP failover, Beowulf o MOSIX para describir

implementaciones específicas de un tipo de cluster. Por ejemplo, los clusters Beowulf se

diseñan para proporcionar alta capacidad de procesamiento paralelo y escalabilidad. Por

otro lado, las soluciones de clustering de alta disponibilidad se diseñan con el fin de

proporcionar la alta disponibilidad de un servicio o aplicación de red.

1.1.2 Alta disponibilidad

Puede entenderse como alta disponibilidad de un servicio o aplicación de red, el hecho de

prestarlo ininterrumpidamente y con relativa independencia del hardware que lo sustenta.

Se consigue alta disponibilidad redundando los sistemas, como por ejemplo

implementando algún tipo de arquitectura de clustering.

1.1.3 Alta escalabilidad

Un sistema altamente escalable es aquel que ha sido concebido para amoldarse en todo

momento, y con el mínimo coste, a unas necesidades que pueden ser cambiantes. La

modularidad es un elemento básico para lograr la alta escalabilidad, permitiendo el

crecimiento de la capacidad del servicio al añadir más nodos al cluster. Por su parte, un

sistema no escalable requeriría renovar por completo la arquitectura que estuviera

actualmente en uso.

Page 12: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 3

Parte 1: Conceptos teóricos fundamentales

2. Objetivos iniciales del proyecto ACADE

El objetivo principal del proyecto ACADE era el de permitir a sus autores adentrarse en el

mundo de las arquitecturas de clustering de alta disponibilidad y escalabilidad existentes

en Linux. Dado que el proyecto se ha desarrollado en pareja, se valoró que se contaba con

recursos humanos suficientes para no quedarse en el mero estudio teórico. Por ello, se

decidió construir un cluster de alta disponibilidad y escalabilidad que permitiera

profundizar, mediante la experimentación, en todos los aspectos de este tipo de

arquitecturas. Se montó un cluster activo/pasivo de balanceadores de carga (LVS) al que se

nombró “Acade”, utilizando para este fin únicamente software libre. Se pensó que llegar a

ofrecer contenido web dinámico a través del cluster, implicaría haber alcanzado, con

hechos tangibles, los objetivos iniciales del proyecto.

Page 13: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

4 - Capítulo 2: Objetivos Iniciales del Proyecto ACADE

Page 14: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 5

3. Balanceadores de carga 3.1 Introducción

Normalmente, un servicio de red funciona de la siguiente manera: los clientes solicitantes

del servicio dirigen sus peticiones a un servidor. Éste responde ofreciéndoles el servicio

solicitado en función de la petición. Las limitaciones de este modelo son dos: por un lado

la disponibilidad del servicio, que está ligada al correcto funcionamiento de un único

sistema servidor, y por otro el límite en la capacidad para atender, procesar y servir

peticiones del mismo.

Para ampliar la capacidad del servicio, hay dos opciones: o bien reemplazar el servidor por

otro de mayores prestaciones, o bien añadir más servidores. En caso de optar por la

segunda opción y dado que este cambio ha de ser transparente a los clientes, será necesario

seguir ofreciendo el servicio sin variar el escenario anterior, es decir, manteniendo la

dirección IP a la que los clientes dirigían sus peticiones (IP Virtual o VIP). A este tipo de

arquitectura se la conoce con el nombre de servidor virtual, cuyo dispositivo clave para ser

implementada con éxito es el balanceador de carga. Nótese que, mediante un cluster de

alta disponibilidad activo/pasivo (3.9 y 7), también se consigue un servidor virtual, si bien

este no ofrece un sistema escalable como el ofrecido por un balanceador de carga.

3.2 Definición

El balanceador de carga es el dispositivo de red que se ubica entre los clientes y los

servidores (figura 1), centralizando la recepción de peticiones. El balanceador de carga se

limitará a reenviar las peticiones a los servidores reales, que son los encargados de

procesarlas, incrementando de esta manera la capacidad de procesado de peticiones que

tenía el antiguo sistema, basado es un solo servidor. El balanceador de carga toma las

decisiones de reenvío de peticiones en función de un algoritmo de scheduling determinado.

El método de reenvío puede implementarse de varias formas, en función de la arquitectura

de red disponible para comunicar a los servidores reales con el balanceador de carga.

Page 15: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

6 - Capítulo 3: Balanceadores de carga

Cliente

Red

Balanceador decarga

ServidoresReales

Servidor Virtual

Figura 1: Ubicación del balanceador de carga.

3.3 Mejoras que aporta el balanceador de carga

El hecho de distribuir el trabajo entre diferentes máquinas permite que la capacidad de

carga del servidor virtual sea muy superior a la que tendría un solo servidor real. Además,

el balanceador de carga aporta escalabilidad, disponibilidad, facilidad de mantenimiento,

seguridad y calidad de servicio.

3.3.1 Escalabilidad

Si la demanda de un servicio es muy elevada, se puede incrementar el número de

servidores reales que prestan dicho servicio, de esta manera, con sólo aumentar el número

de servidores reales, se aumenta el número de conexiones que puede atender el servidor

virtual.

El balanceador de carga distribuye las peticiones de los clientes entre todos los servidores

reales disponibles, usando para ello algoritmos de distribución de la carga, que permiten

aumentar la capacidad de proceso que tendría un solo servidor. Suponiendo un balanceo

perfecto, la capacidad del servidor virtual equivaldría a la suma de las capacidades de cada

Page 16: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 7

uno de los servidores reales por separado, pero en términos reales la capacidad del servidor

virtual ronda entre el 80% y el 90%.

3.3.2 Disponibilidad

La máquina encargada de balancear la carga hace un chequeo continuo de los servidores

reales así como de las aplicaciones que corren en ellos. En caso de que un servidor real o

una aplicación dejen de responder, el balanceador ya no le reenviará más peticiones hasta

que el servicio esté disponible de nuevo. De esta forma, de cara al usuario final (cliente), el

servicio ofrecido por el servidor virtual estará siempre disponible, incluso en el caso de que

alguno de los servidores reales deje de prestar servicio. Si el sistema no dispone de los

mecanismos necesarios, las conexiones que en ese momento tenía el servidor real fallido se

perderán. En este sentido, el balanceador de carga hace automáticamente y con

transparencia lo mismo que se haría manualmente, mediante configuraciones estáticas del

balanceador de carga, pero disminuyendo notablemente los tiempos de respuesta ya que no

se requiere de intervención humana para reconfigurar el balanceador.

3.3.3 Gestión y flexibilidad en el mantenimiento

Si se necesita apagar algún servidor real o detener un servicio, debido a un cambio de

hardware o a una actualización del software, el uso de un balanceador de carga permite

hacerlo de forma controlada, en el sentido de que se dejan de reenviar las peticiones de los

clientes a dicho servidor. De esta forma, es posible proceder a realizar las tareas de

mantenimiento sin afectar a la disponibilidad del servicio. El proceso es totalmente

transparente para los clientes, ya que siempre encontrarán disponibilidad del servicio en la

IP habitual (VIP).

El balanceador de carga aporta flexibilidad en la gestión del servidor virtual porque

posibilita cambiar los servicios que está ofreciendo cada uno de los servidores reales en

función de las necesidades de cada momento.

Page 17: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

8 - Capítulo 3: Balanceadores de carga

Los balanceadores de carga permiten redireccionar las peticiones a los servidores reales

con independencia del sistema operativo que éstos últimos ejecuten. Este hecho permite

mezclar diferentes plataformas en un mismo servidor virtual.

3.3.4 Seguridad

Los balanceadores de carga se encuentran entre los clientes y los servidores reales,

pudiendo actuar como filtro ante posibles ataques. Adicionalmente, el uso de NAT

incrementa la seguridad debido al hecho de que las direcciones IP privadas de los

servidores reales no son alcanzables directamente desde Internet. Los clientes únicamente

ven la VIP que proporciona el balanceador, en cuyo interior se aplicarán las reglas de

filtrado.

3.3.5 Calidad de servicio (QoS)

Los balanceadores de carga pueden ser usados para distinguir diferentes tipos de clientes y

servicios, permitiendo de este modo la implementación de políticas de calidad de servicio

(QoS). Los clientes o servicios preferentes pueden disponer de: servicios ofrecidos por un

servidor en particular, mayor prioridad de sus paquetes IP y una determinada calidad de

servicio o ancho de banda.

3.4 Tipos

Los balanceadores de carga se pueden clasificar dentro de 4 grandes grupos: los

balanceadores de carga para servidores (server load balancing), los balanceadores de carga

para firewalls (firewall load balancing), los balanceadores de caches (cache load

balancing) y los balanceadores de carga entre sistemas servidores remotos (global server

load balancing).

Page 18: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 9

• server load balancing: Reparten la carga entre un grupo de servidores aumentando

la capacidad del sistema. Solucionan el problema de la caída de un servidor y

aumentan la escalabilidad del sistema.

• firewall load balancing: Reparten la carga entre un grupo de firewalls. Aumentan

la capacidad y escalabilidad del sistema.

• cache load balancing: Descargan de trabajo a los servidores web al redireccionar

las peticiones a sistemas de cache.

• global server load balancing: Permiten redireccionar las peticiones de los clientes

hacia el servidor o centro de datos más idóneo para estos, mejorando los tiempos de

respuesta y la calidad del servicio. La idoneidad del servidor elegido puede

realizarse en función de la distancia (un servidor por país o región), o en base a

otros factores como el tráfico, calidad del enlace, etc.

Esta memoria se centra en los balanceadores del primer tipo (server load balancing),

aunque también se tratan, en algunos casos, los balanceadores de carga globales entre

sistemas remotos (6.3.3).

3.5 Métodos de distribución de carga

Por método de distribución de carga, se entiende la manera en la que el balanceador toma

la decisión de a qué servidor, dentro de la granja de servidores, asignar una conexión.

El balanceo de carga puede realizarse de dos formas: stateless o stateful. Un balanceo de

carga que utilice un algoritmo que simplemente distribuya el tráfico a un determinado

servidor, sin tener en cuenta el estado de la información de cada sesión, es denominado

stateless load balancing. Por el contrario, el balanceador que tiene en cuenta el estado de

cada una de las sesiones, para tomar la decisión de a qué servidor dirigirlas, se denomina

stateful load balancing.

Independientemente de si el balanceador es stateful o stateless, éste utilizará un método de

distribución que le ha de permitir determinar qué cantidad máxima de tráfico puede asignar

a cada servidor. El objetivo es intentar realizar un reparto equitativo del tráfico en función

Page 19: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

10 - Capítulo 3: Balanceadores de carga

de las capacidades de cada servidor, ya que es posible que dentro de la granja de servidores

no todos los equipos tengan las mismas prestaciones.

Se puede clasificar el tráfico de red como TCP, UDP o simplemente IP. Un balanceador de

carga capaz de identificar el tráfico como TCP o UDP, podrá también identificar las

sesiones TCP o UDP en base al los puertos y direcciones IP origen/destino. El protocolo

TCP es orientado a conexión. Las sesiones se establecen y finalizan mediante el

intercambio de una serie de órdenes predeterminadas por el protocolo TCP. El balanceador

puede entender o no este diálogo y utilizarlo para determinar el inicio y finalización de

sesiones.

Establecimiento deconex ión TCP(Inic io de Ses ión)

three-w ay handshake

Cliente Servidor

F inalización de sesión TCP

SYN

ACK SYN

ACK

Intercambio de Datos

FIN

ACK FIN

R ecepc ión SYN (SEQ=x )

Env ío SYN (SEQ=x )

Env ío AC K SYN (SEQ=y , AC K=x +1)

R ecepc ión AC K SYN (SEQ=y , AC K=x )

Env ío AC K(SEQ= y +1)

R ecepc ión AC K(SEQ= y +1)

Env ío F IN (SEQ=n)

R ecepc ión F IN (SEQ=n)

Env ío AC K F IN (AC K=n+1)

R ecepc ión AC K F IN (AC K=n+1)

Figura 2: Establecimiento de conexión TCP.

Tanto el tráfico TCP como UDP funciona sobre IP. Por el contrario, algunos protocolos

propietarios sólo pueden correr directamente sobre IP, en estos casos, el balanceador sólo

podrá determinar las sesiones en base a las direcciones IP origen y destino.

3.5.1 Stateless

Un balanceador de tipo stateless no puede determinar el inicio y fin de sesiones. UDP es

un protocolo stateless, dado que no es orientado a conexión. Por el contrario, existen

determinados servicios que requieren que todos los paquetes pertenecientes a una sesión

Page 20: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 11

UDP, sean enviados al mismo servidor real. Por ejemplo, en aquellos servicios en los que

se requiere que se establezcan dos conexiones, una TCP y otra UDP, es requisito

indispensable que los paquetes UDP se envíen siempre al mismo servidor real en el que se

ha establecido la conexión TCP.

En estos casos, dado que el balanceador identifica la sesión UDP únicamente en base a las

direcciones IP y puertos origen/destino, el balanceador crea una regla, que lo configura

dinámicamente para reenviar siempre al mismo servidor real los paquetes pertenecientes a

esa sesión. Esta regla desaparece automáticamente, si durante un periodo predeterminado

de tiempo no se recibe otro paquete que case con ella.

La principal ventaja del balanceador de tipo stateless es la simplicidad de los algoritmos de

scheduling utilizados para tomar la decisión de a qué servidor reenviar los paquetes. El

hecho de que el balanceador stateless tenga menos elementos en los que basarse para la

toma de decisiones de reenvío, repercute en un algoritmo de scheduling más sencillo y por

tanto en menores requerimientos para su procesado.

3.5.2 Stateful

El balanceo de carga stateful requiere que el balanceador sepa reconocer y entender el

inicio, finalización y diálogo de las sesiones. De esta manera, cuando le llega una petición

de conexión, el balanceador crea una regla que lo configura dinámicamente para reenviar

todos los paquetes pertenecientes a esa sesión hacia un mismo servidor real. Del mismo

modo, cuando el balanceador detecte el fin de esa sesión, borrará la regla que previamente

le creó. En el caso de que la sesión no finalice y por un período de tiempo máximo

predeterminado, no se reciban más paquetes pertenecientes a la misma, el balanceador

también borrará la regla.

El balanceo de carga de tipo stateful es mucho más eficiente que el balanceo de carga

stateless, debido a que las decisiones de balanceo son realizadas también en base al estado

de la sesión y no sólo en base a su identificación. Esta importante mejora en el balanceo es

Page 21: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

12 - Capítulo 3: Balanceadores de carga

posible gracias a que los algoritmos de scheduling disponen de más elementos de juicio

para la toma de decisiones y que permiten un mejor reparto de las sesiones.

El balanceador stateless considera por igual todas las sesiones pertenecientes a una misma

IP, en cambio, el balanceador stateful es capaz de diferenciar la carga de las diferentes

sesiones.

Para lograr una mayor comprensión de lo anteriormente expuesto, considérese el siguiente

escenario:

Dos clientes efectúan peticiones a un mismo servidor virtual. El primero de ellos, genera

100 paquetes por segundo (60 de http, 30 de FTP y 10 de IRC) hacia el servidor virtual. El

segundo cliente sólo genera 5 paquetes (3 de http y 2 de FTP).

Un balanceador stateless considera que los 100 paquetes generados por el primer cliente

forman parte de una misma sesión, y por tanto, reenvía los 100 a un mismo servidor real.

Los 5 paquetes del segundo cliente, los considera pertenecientes a otra sesión, por lo que

los reenvía a otro servidor real.

Un balanceador stateful es capaz de diferenciar de entre los 100 paquetes enviados por el

primer cliente, a qué servicios/sesión pertenecen cada uno de ellos, y por tanto puede

repartir, por ejemplo, los 60 paquetes de http al servidor 1, los 30 de FTP al servidor 2 y

los 10 de IRC al servidor 3. Dependiendo del las capacidades stateful del balanceador en

particular, éste incluso podría llegar a diferenciar entre distintas peticiones http, en función,

por ejemplo, de la página solicitada.

Un balanceador stateful identificará cada una de las sesiones de cada cliente y realizará un

balanceo de carga mucho más eficiente. Como contrapartida, los balanceadores de carga de

tipo stateful requieren de una mayor capacidad de proceso.

Page 22: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 13

3.5.3 Algoritmos de Scheduling (Hashing)

Los balanceadores de carga pueden utilizar diferentes métodos para decidir a qué servidor

asignar las diferentes conexiones. Algunos de estos métodos son más efectivos que otros,

en función del servicio que se ha de balancear. Es por esto, que un balanceador de carga

puede utilizar diferentes algoritmos de scheduling para balancear diferentes tipos de

servicios.

Secuencial (Round-Robin):

- Es el más sencillo por lo que consume muy pocos recursos.

- Realiza una asignación secuencial y cíclica de los servidores.

- Es poco eficiente ya que no tiene en cuenta el número de conexiones establecidas

en cada servidor.

De menor número de conexiones (Least Connections):

- El balanceador conoce el número de sesiones establecidas en cada servidor real y

reenvía las conexiones nuevas al servidor que menos conexiones tiene en ese

momento.

Distribución Ponderada por pesos (Weighted Distribution):

- Este método permite al administrador asignar un peso a cada servidor, en función

de su capacidad y el servicio que ha de prestar.

- Se utilizan en combinación con Round-Robin y Least Connections.

Por tiempo de respuesta (Response Time):

- Complementa a otros algoritmos posibilitando la elección del servidor más rápido.

Mediante pruebas al servidor:

- Mediante la ejecución de programas en cada servidor, llamados agentes, el

balanceador puede detectar de forma muy precisa las condiciones de carga de cada

servidor. Por contra, esto implica una carga de trabajo extra para los servidores.

Además, los agentes han de haber sido programados para el mismo sistema

operativo que utilicen los servidores.

Page 23: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

14 - Capítulo 3: Balanceadores de carga

3.6 Monitorización de los servidores

Los balanceadores de carga se configuran para reenviar las conexiones de unos

determinados servicios a los servidores reales encargados de ofrecerlos. Para que un

balanceador de carga ofrezca alta disponibilidad de los servidores reales, es necesario que

actualice su configuración cuando se produce un fallo en alguno de los nodos de la granja

de servidores reales. Para poder cambiar dinámicamente esta configuración, se hace

necesario la utilización de algún sistema de seguimiento del estado de los servidores y de

sus aplicaciones. Estos sistemas monitorizan los servicios ofrecidos por cada servidor real

y realizan las modificaciones necesarias en la configuración del balanceador, cuando

detectan alguna anomalía. En función del tipo de monitorización que realizan, estos

sistemas se pueden clasificar como sistemas in-band o como sistemas out-band.

3.6.1 Sistemas in-band

Los sistemas in-band se caracterizan por utilizar el propio tráfico cliente-servidor para

controlar el estado del servidor real. Cuando se detecta un problema, es posible iniciar una

serie de controles más exhaustivos para determinar si el fallo se ha producido por la caída

del servidor que estaba ofreciendo el servicio. Si es así, se reconfigura oportunamente al

balanceador para que deje de reenviar peticiones a ese servidor.

3.6.2 Sistemas out-band

Los sistemas out-band generan su propio tráfico para monitorizar la salud de los servidores

reales, que pueden ir desde la simple comprobación de la conectividad, a nivel de capa de

enlace de datos, a la comprobación del correcto funcionamiento de los servicios de red

ofrecidos y las aplicaciones que los prestan.

Page 24: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 15

3.6.3 Métodos para monitorizar la salud del servidor (Health Checks)

Chequeo básico

Dentro de esta categoría entrarían aquellos chequeos que recurren a pruebas de

conectividad de las capas inferiores de la pila OSI: Peticiones ARP en la capa de enlace de

datos, peticiones echo ICMP (ping) en la capa de red o peticiones a un puerto TCP/UDP

determinado, en la capa de transporte. Estas pruebas son tanto más efectivas a medida que

se sube de nivel en la capa OSI, si bien, son siempre un método incapaz de determinar con

las garantías suficientes si un servicio está funcionando correctamente. Por otra parte, este

método no permite realizar ningún tipo de control sobre los contenidos. Por ejemplo, en el

caso de que un servidor web sirva una página de indicación de error (404 URL no

encontrada), el sistema de monitorización interpretará que el servidor muestra las páginas

correctamente, ya que el sistema no efectúa ningún tipo de comprobación de los

contenidos. En otro tipo de servicios, la simple contestación a una petición, aunque ésta sea

con un código de error, bastaría para que el sistema los considerase activos.

Chequeo específico de las aplicaciones

Este tipo de chequeos pretenden determinar el correcto funcionamiento de una aplicación

del servidor. La técnica más utilizada en este tipo de chequeo, consiste en realizar una

petición del servicio y analizar la información obtenida en respuesta a la misma. De esta

manera, es fácil determinar si la aplicación está respondiendo como se espera o no de ella.

Por ejemplo, para chequear un servidor web, puede enviarse una petición HTTP y observar

que el resultado de la respuesta obtenida concuerda con el esperado. Un chequeo a un

servidor FTP, podría consistir en conectarse a éste e identificarse con el correspondiente

LOGIN y PASS. Si se obtiene acceso al servicio, el sistema interpretará que la aplicación

funciona correctamente. En ocasiones, la correcta prestación de un servicio requiere del

correcto funcionamiento de los servicios que se prestan por otros puertos. Por ejemplo, en

el caso de un sitio web de e-comerce, si el servicio https (puerto 443 SSL) no funciona

correctamente, tampoco tiene sentido ofrecer el servicio http (puerto 80), ya que

normalmente dependen uno del otro. En estos casos, puede recurrirse al agrupado de

puertos, de manera que si uno de los puertos del grupo falla en alguno de los servidores

reales, se considere como fallidos a todos los servicios del grupo.

Page 25: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

16 - Capítulo 3: Balanceadores de carga

Chequeo de contenidos

El método de chequeo de contenidos se basa en la misma filosofía que la descrita

anteriormente en el sistema de chequeo de aplicaciones. En este caso, el sistema también

puede buscar determinados patrones o palabras clave, en la respuesta enviada por el

servidor. Un método usado también para este fin, es el de efectuar checksums de la

información recibida.

En ocasiones, el chequeo de una sola aplicación en el servidor, no es suficiente para

determinar su correcto funcionamiento cuando ésta depende de otras. Por ejemplo, puede

estar funcionando el servicio web y estar fallando las consultas que éste realiza a la base de

datos. Para evitar este tipo de situaciones, podría realizarse un chequeo adicional de los

contenidos. Un chequeo de contenidos de una base de datos, podría efectuarse llevando un

poco más allá el concepto de chequeo de aplicaciones. Así, una forma de resolver el

problema descrito en el ejemplo anterior, sería realizar una petición de comprobación al

servidor http, que debería retornar el contenido de una determinada base de datos. De no

ser así, se interpretaría que las consultas a la base de datos en cuestión están fallando.

Chequeo basado en agentes

Otra posibilidad, es la de utilizar sondas o agentes para monitorizar la salud de las

aplicaciones que corren en los servidores. Estas sondas envían la información recogida al

controlador que corre en el balanceador. Mediante la API que proporcionan estos sistemas,

es posible programar “alarmas” que disparen los mecanismos para reconfigurar el

balanceador en caso necesario. Muchos de estos sistemas de chequeo son compatibles con

estándares, como por ejemplo, SNMP.

La elección de uno de estos métodos de monitorización de servidores o la combinación de

varios de ellos, estará en función de las necesidades concretas para cada caso particular. No

obstante, lo ideal sería optar por la decisión más equilibrada entre necesidades, recursos

hardware disponibles, servicio que se quiere prestar y coste económico.

Page 26: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 17

3.7 Métodos de reenvío

El método de reenvío consiste en la forma en la que el balanceador de carga reenvía los

paquetes a los servidores reales. Los métodos de reenvío utilizados dependen en gran

medida del la infraestructura de red que interconecta los diferentes elementos del

balanceador de carga. En redes privadas, donde todas las máquinas pertenecen a la misma

red, lo más usual es utilizar NAT, si bien existen técnicas que no necesitan rescribir las

cabeceras de los paquetes IP, como Direct Server Return (3.7.2). Cuando las máquinas se

encuentran en redes diferentes, con routers y muchos kilómetros por medio, se utilizan

técnicas de balanceo global .

3.7.1 Network Address Translation (NAT)

La traducción de direcciones de red es el método principal en el que se basa el balanceo de

carga. Tal y como se describe en el RFC2663 [1] titulado “Terminología y Consideraciones

sobre Traducción de Direcciones IP”: “La ‘Traducción de Direcciones de Red’, Network

Address Translation (NAT), es un método mediante el que las direcciones IP son

mapeadas desde un dominio de direcciones a otro, proporcionando encaminamiento

transparente a las máquinas finales. Existen muchas variantes de traducción de

direcciones que se prestan a distintas aplicaciones. Sin embargo, todos las variantes de

dispositivos NAT deberían compartir las siguientes características:

- Asignación transparente de direcciones.

- Encaminamiento transparente mediante la traducción de direcciones (aquí el

encaminamiento se refiere al reenvío de paquetes, no al intercambio de

información de encaminamiento).

- Traducción de la carga útil de los paquetes de error ICMP.”

Este apartado se centra en algunos tipos de NAT utilizados en la implementación de

balanceadores de carga. Para un estudio en profundidad de NAT véase [2] y [3].

Page 27: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

18 - Capítulo 3: Balanceadores de carga

Destination NAT

Consiste en cambiar la dirección destino, de la cabecera IP, de los paquetes enviados por el

cliente. Esta dirección se sobrescribe en este caso con la dirección IP del servidor real

seleccionado por el balanceador de carga. Cuando el paquete retorna al cliente, se restituye

esta dirección para que figure como origen. De esta manera, el paso a través del

balanceador de carga, se realiza de forma transparente para el cliente. A este tipo de NAT

se le conoce también como half-NAT dado que sólo se cambia la dirección destino del

paquete.

i M ac

Clie nteOrigen DestinoDirecc ión IP:C

Direcc ión IP:R

Direcc ión IP:R S1

Balanceadorde carga

Direcc ión IP:B

Route r

Se rvidore sRe ale s

C B

Origen DestinoC B

Origen DestinoC B

RS1

Origen DestinoC RS1

O rigen DestinoRS1 C

Ruta Cliente-Servidor

Ruta Servidor-Cliente

Cabecera paq. IP

O rigen DestinoRS1 C

B

O rigen DestinoB C

O rigen DestinoB C

C B1

1

C B2

C RS13

2

3

RS1 C4

4

5

B C5

B C6

6

Sw itch

Figura 3: Destination NAT.

Source NAT

Este tipo de NAT es poco frecuente y sólo se recurre a él en situaciones en las cuales el

diseño de la red así lo requiere. En los casos en los que la topología de la red permite a los

paquetes volver al cliente evitando el paso a través del balanceador, puede recurrirse a

source NAT para éste fin. En determinados diseños de red, pueden existir otras alternativas

al source NAT, éstas pasan por utilizar Direct Server Return (DSR) o bien por poner al

balanceador como gateway por defecto de los servidores reales. Estas dos alternativas

requieren que el balanceador de carga y los servidores reales estén en el mimo dominio de

broadcast o capa de enlace.

Page 28: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 19

Source NAT se realiza cambiando las direcciones origen y destino de los paquetes. El

balanceador de carga cambia la dirección origen de todos los paquetes por una dirección

definida en el balanceador, llamada source IP, antes de reenviar los paquetes a los

servidores reales. Cuando los paquetes llegan a los servidores reales, estos últimos los ven

como peticiones realizadas por el balanceador de carga, puesto que los servidores no tienen

conocimiento de la dirección de los auténticos clientes finales que originaron dichos

paquetes. Las respuestas de los servidores reales tienen como dirección destino la IP del

balanceador de carga y no la del cliente final. El balanceador recoge estas respuestas y

rescribe nuevamente la cabecera IP de manera que la dirección de destino sea la IP del

cliente y la de origen la source IP.

i M ac

Clie nteOrigen Destino

Direcc ión IP:C

Direcc ión IP:R

Direcc ión IP:R S1

Balanceadorde carga

Direcc ión IP:BDirecc ión IP:S

Route r

Se rvidore sRe ale s

C B

Origen DestinoC B

Origen DestinoC B

RS1

Origen DestinoC RS1

O rigen DestinoRS1 S

Ruta Cliente-Servidor

Ruta Servidor-Cliente

Cabecera paq. IP

O rigen DestinoRS1 S

B

O rigen DestinoB C

O rigen DestinoB C

C B1

1

C B2

S RS13

2

3

RS1 S4

4

5

B C5

B C6

6

S

B: IP V irtual V IPS: Source IP

CSw itch

Figura 4: Source NAT.

Desde el punto de vista del balanceador de carga se establecen dos sesiones. Una con el

cliente y otra con el servidor real. Los servidores reales ven al balanceador de carga como

un cliente, lo cual implica que el balanceador de carga ha de disponer de un número de

puerto para cada una de las sesiones que establece con cada uno de los servidores reales. El

número de puertos máximos que puede abrir un sistema es de 65.536. Existe por lo tanto

Page 29: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

20 - Capítulo 3: Balanceadores de carga

una importante limitación en cuanto al número de máximo de conexiones simultáneas que

el balanceador de carga puede manejar para una sola IP. Para superar esta limitación el

balanceador ha de permitir configurar múltiples direcciones source IP.

La principal ventaja de source NAT es la de permitir la implementación de balanceadores

de carga independientemente de la topología de la red, con el inconveniente de que los

servidores reales no ven la dirección IP original del cliente. Por tanto, aquellas aplicaciones

que utilicen algún método de autenticación basado en IP no funcionarán apropiadamente

con source NAT.

Reverse NAT

Este tipo de NAT es el utilizado en una red con direcciones privadas, sólo que en esta

ocasión no son los clientes, sino los servidores reales de la red privada, los que inician

sesiones hacia la red pública.

El balanceador de carga realiza destination NAT para todas las sesiones iniciadas desde el

cliente. Si el servidor real necesita iniciar una sesión con el cliente, el balanceador de carga

deberá implementar reverse NAT, ya que las direcciones de los servidores reales son

privadas y no son enrutables desde Internet. Cuando el balanceador implementa reverse

NAT, lo hace cambiando la dirección origen de los paquetes para las sesiones iniciadas

desde los servidores reales, por la dirección pública que el balanceador tenga predefinida.

En función de las características del balanceador, ésta dirección puede o no ser la misma

que la dirección IP virtual, por la cual el balanceador de carga presta los servicios ofrecidos

por los servidores reales.

Enhaced NAT

El balanceo de carga mediante este tipo de NAT requiere de determinadas capacidades

stateful en el balanceador. Este tipo de NAT permite que determinados protocolos

específicos puedan ser correctamente balanceados. Algunos protocolos incorporan

direcciones o puertos, en la carga útil del paquete, que deben cambiarse si se cambian las

cabeceras del paquete IP. Un ejemplo de este tipo de protocolos serían los protocolos de

streaming. Estas aplicaciones requieren de elevada capacidad de proceso por lo que

acostumbran a servirse de forma concurrente desde muchos servidores. El streaming media

Page 30: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 21

es, por lo tanto, una de las aplicaciones típicas candidatas a servirse a través de un

balanceador de carga, y suelen utilizar protocolos basados en el estándar Real Time

Streaming Protocol (RTSP) descrito en el RFC2326 [4]. Los protocolos RTSP

generalmente implican el establecimiento de dos conexiones. Una conexión TCP para el

control y una UDP para el envío de los datos. La primera conexión se encamina hacia un

puerto del servidor, conocido previamente y configurado para recibir este tipo de

peticiones. La sucesivas conexiones se realizarán a un puerto aleatorio enviado a través de

la sesión de control TCP que se establece con el cliente. El balanceador ha de saber

identificar, de entre la información enviada en el dialogo que mantienen las aplicaciones

finales a través de la conexión TCP, el número de puerto seleccionado para el envío de los

datos. De esta forma, el balanceador sabrá recoger las peticiones de tramas UDP y

balancearlas hacia el servidor real apropiado.

Port-Address Translation (PAT)

Este tipo de NAT posibilita cambiar el puerto de destino, contenido en las cabeceras de los

paquetes enviados por los clientes, por el puerto de los servidores reales en el que

realmente se ofrece el servicio, con lo cual, se puede configurar el servicio en un puerto

diferente al estándar. El Internet Assigned Number Authority (IANA) [5] (Nota: sustituye al

RFC1700) es el organismo encargado de asignar el número de puerto a determinados

servicios conocidos, con el fin de estandarizar la relación servicio/puerto. El rango de

puertos estándares va del 0 al 1023. El hecho de utilizar puertos superiores a 1024, ayuda a

incrementar la seguridad del sistema frente a posibles ataques destinados a puertos

conocidos. Por otra parte, PAT permite ejecutar simultáneamente sobre un mismo servidor

real varios servidores de un determinado servicio. Con esta técnica, a veces se incrementa

el rendimiento de los servicios ofrecidos, especialmente en arquitecturas que consten de

varios procesadores. De esta manera, el balanceador puede realizar un balanceo de carga

no sólo entre los diferentes servidores reales, sino también entre las diferentes instancias de

un mismo programa servidor que ejecuta cada servidor real.

Page 31: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

22 - Capítulo 3: Balanceadores de carga

3.7.2 Direct Server Return (DSR)

Direct Server Return (DSR) es una técnica que permite introducir importantes mejoras en

cuanto a la eficiencia del balanceador. Estas mejoras en el rendimiento se consiguen

gracias a dos factores. El primero de ellos es que en DSR, los paquetes de respuesta

generados por los servidores reales, no han de ser procesados por el balanceador de carga,

sino que estos viajan directamente desde el servidor real al cliente sin pasar por el

balanceador. Este hecho permite reducir considerablemente el tráfico de paquetes que

atraviesa el balanceador, ya que el tráfico de respuesta es generalmente mucho más grande

que el de peticiones, sobretodo en servicios como el ftp o el streaming. El segundo factor

es que el balanceador de carga no necesita rescribir las cabeceras IP de las peticiones. El

reenvío de paquetes se hace ha nivel de capa de enlace de datos dejando la IP original

inalterada. Para que los paquetes puedan llegar al servidor real seleccionado por el

balanceador, es necesario que estos se encuentren en el mismo dominio de broadcast, en

otras palabras, conectados mediante un switch o conmutador de capa 2.

Dado que el balanceador no modifica la dirección destino de los paquetes antes de

reenviarlos a los servidores reales, estos se reenvían hacia los mismos con la dirección VIP

como destino. Para que los servidores reales procesen los paquetes que reciben por su

interfaz de red, son necesarias dos cosas: primero que la dirección del paquete recibido sea

la misma que la dirección configurada en la interfaz, y segundo, que dispongan de una

aplicación con un socket escuchando en esa IP. Todo ello obliga a configurar un

dispositivo con la VIP en cada servidor real, o de lo contrario no procesarán los paquetes

que les reenvíe el balanceador. Para usar DSR, tanto el balanceador de carga como los

servidores reales, deben de disponer de un dispositivo configurado con la VIP.

El protocolo de resolución de direcciones (ARP) es utilizado en Ethernet para resolver la

dirección MAC asociada a una determinada IP dentro de un mismo dominio de capa de

enlace de datos. En DSR, tanto el balanceador de carga como los servidores reales

disponen de un dispositivo configurado con la VIP. Es fácil advertir que si todos los

dispositivos configurados con la VIP contestan a peticiones ARP, el router podría enviar

las peticiones de los clientes directamente a un servidor real en lugar de al balanceador.

Para evitar este y otros problemas, que se derivan de disponer direcciones IP duplicadas en

Page 32: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 23

un mismo segmento de red, se utilizan dispositivos virtuales (loopback) sobre los que

configurar la VIP en los servidores reales. El dispositivo virtual de loopback, puede ser

configurado con cualquier dirección IP, además de la 127.0.0.1, y tiene la propiedad de

no responder a peticiones ARP en la mayoría de sistemas operativos. En Linux esto no es

siempre así (6.3.4).

Los servidores reales han de disponer de un dispositivo real con acceso al medio, además

de disponer del dispositivo virtual con la VIP. De no ser así, además de no poder hacer

llegar los paquetes al dispositivo virtual, el balanceador de carga no sabría con que

direcciones MAC encapsular los paquetes destinados a un servidor real en concreto. El

balanceador dispone de una lista con las direcciones IP de los servidores, sobre las que

efectuará peticiones ARP. El balanceador encapsulará las peticiones de los clientes, sin

modificar ningún parámetro del paquete, con la dirección MAC de la interfaz física de red

de la que dispone el servidor.

Cuando el servidor real genere la respuesta, pondrá como destino la dirección IP del cliente

y como origen la dirección IP del dispositivo que ha procesado la petición, que no es otra

que la VIP. De este modo no es necesario realizar reverse-NAT, por lo cual no es necesario

que el paquete sea procesado por el balanceador de carga antes de ser enviado al router de

salida.

3.8 Persistencia de sesión

Las principales mejoras que aporta el balanceador de carga se basan en la distribución de

que realiza de las peticiones de los clientes. Si embargo, en ocasiones, el balanceo de carga

puede estar reñido con la correcta prestación de un servicio.

Muchas aplicaciones web como por ejemplo HTTP, establecen varias conexiones TCP con

el servidor, por ejemplo, para descargar cada uno de los objetos que componen una página

web (texto, fotografías, etc). Si todos los servidores reales disponen un sitio web estático

con idéntico contenido, ofrecerlo a los clientes a través de un balanceador de carga no

representa un problema. Al cliente le es indiferente si los distintos elementos de la página

Page 33: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

24 - Capítulo 3: Balanceadores de carga

provienen de uno o de varios servidores reales, puesto que el contenido de la página

mostrada al cliente no ha de depender de si los elementos se han obtenido de distintos

servidores. Por el contrario, una aplicación web en la cual el cliente envía información al

servidor a través de formularios, o se autentifica como usuario en un sitio web realizando

diferentes conexiones para ello, puede no funcionar correctamente si cada una de estas

conexiones es reenviada por el balanceador a servidores reales distintos. Los diferentes

servidores reales no tienen por qué saber qué información envió el cliente en la conexión

anterior al servidor o qué variables envió el servidor al cliente (cookies). A este tipo de

servicios que intercambian datos a nivel de aplicación, utilizando para ello el

establecimiento de múltiples conexiones TCP, reciben el nombre de servicios o

aplicaciones transaccionales.

La figura 5, muestra un ejemplo de aplicación transaccional, en la cual la falta de

persistencia impide al cliente la compra de una serie de productos en una aplicación de e-

comerce. En ella, el cliente espera tener dos productos en el carrito de la compra cuando se

dispone a efectuar el pago de la misma. Debido a la falta de persistencia, cada servidor real

dispone de una perspectiva diferente de las compras realizadas por el cliente.

Server 1

Server 2

Server 3

Data S1

Data S2

Data S3

Balanceador decarga

Aplicación Transaccional

Conexión TCP 1Intercambio de información HTTPpara añadir producto 1 al carrito de

la compa del cliente A

Conexión TCP 2Nnuevo diálogo HTTP para añadir

producto 2 al carrito de la compa delcliente A

Conexión TCP 3Diálogo HTTP para efectuar el pago

del contenido del carrito de lacompra del cliente A

Fin deTransacción

Con. T

CP 1

Con. TCP 2

Con. TCP 3

Producto 1 en carritode la compra delcliecnte A

Producto 2 en carritode la compra delcliente ?

El carrito de lacompra del clienteestá Vacío

Cliente

Servidor Virtual

Figura 5: Necesidad de persistencia en aplicaciones transaccionales.

Page 34: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 25

Todo esto plantea la necesidad de habilitar mecanismos para determinar qué conexiones

han de ser balanceadas y cuales han de ser reenviadas persistentemente hacia un

determinado servidor real. El concepto de stateless y stateful visto en apartados anteriores

(3.5.1 y 3.5.2) determinará, en muchas ocasiones, los métodos utilizados para determinar

las necesidades de persistencia de un servicio y los mecanismos utilizados para

garantizarla. El problema principal es por tanto, cómo identificar el principio y el final de

las sesiones.

3.8.1 Tipos de persistencia de sesión

Cuando el balanceador de carga recibe una nueva petición de conexión, éste puede

balancear dicha petición o bien reenviarla persistentemente hacia un determinado servidor,

al considerarla parte de una sesión de aplicación que así lo requiere. El balanceo de carga

implica seleccionar un destino en base a las condiciones de los servidores reales. La

persistencia de sesión implica seleccionar un servidor real en base a la información del

primer paquete de la sesión TCP, o bien, en base a una información más relevante extraída

de los datos que el servidor real envía en respuesta al cliente. La información relevante del

primer paquete TCP SYN de una conexión está formada por la dirección IP origen, puerto

origen, dirección IP destino, y puerto destino. Gracias a esta información, el balanceador

de carga puede identificar al usuario en base a su dirección IP. Si el balanceador es capaz

de mirar en los datos de respuesta, encontrará información de aplicación más interesante.

Esto da lugar a dos tipos de persistencia de sesión, una en base a la información del

paquete TCP SYN y otra basada en los datos de la respuesta a nivel de aplicación. El

primer método recibe el nombre de Source IP based persistence, o persistencia basada en

IP origen. Los balanceadores que utilizan el segundo método son conocidos como

balanceadores de carga de aplicación y están basados en el método de balanceo delayed

binding (3.8.3).

Page 35: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

26 - Capítulo 3: Balanceadores de carga

3.8.2 Métodos de persistencia basados en IP origen

Estos métodos utilizan la información de las cabeceras TCP de los paquetes que atraviesan

el balanceador y de los datos de una tabla de sesiones. Cuando se recibe un paquete TCP

SYN, el balanceador busca la dirección origen del mismo en la tabla de sesiones. Si el

servidor no encuentra una entrada en la tabla para esa dirección origen, entonces creará una

entrada con esa dirección y reenviará el paquete hacia el servidor real que determine el

algoritmo de reenvío correspondiente. En caso contrario, si el servidor encuentra una

entrada en la tabla para la dirección origen del paquete, enviará el paquete al servidor que

indique dicha entrada, sin aplicarle el algoritmo de scheduling. Cuando el balanceador

recibe un paquete TCP FIN o RESET, finaliza la conexión pero mantiene la entrada en la

tabla de sesiones. De esta manera, el balanceador recuerda que la conexión realizada desde

esa IP origen, ha sido reenviada a un servidor real concreto y le reenviará todas las

conexiones pertenecientes a esa sesión.

El balanceador de carga es incapaz de comprender el protocolo (diálogo) que utilizan la

aplicación transaccional del servidor y la aplicación del cliente. Por ello, es incapaz de

determinar en que momento ha de finalizar la persistencia que impone la sesión de

aplicación. El método utilizado en este tipo de balanceadores de carga, para lograr la

persistencia de las diferentes conexiones TCP pertenecientes a una misma sesión de

aplicación, es la configuración de un temporizador conocido como session-persistence-

timer, que determina el tiempo máximo que ha de permanecer una entrada en la tabla de

sesiones desde el último TCP FIN o TCP RESET recibido. De esta manera, cuando finaliza

la ultima conexión activa para una sesión de aplicación, el temporizador empieza a contar.

Si finaliza el temporizador para una sesión de aplicación determinada, el balanceador

borrará la entrada que asocia a ese usuario con un determinado servidor real. De esta

manera, a los futuros paquetes pertenecientes a esa conexión se les volverá a aplicar el

algoritmo de scheduling. Si el balanceador recibe una nueva conexión de ese cliente antes

de que expire el temporizador, éste se pone a cero.

Mantener las sesiones de forma persistente es contrario al principio de balanceo de carga,

ya que mantener de forma persistente una conexión que no lo requiere, reduce

considerablemente el rendimiento del balanceador. Existen diferentes métodos, basados en

Page 36: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 27

el la IP origen, que permiten determinar con mayor o menor precisión la necesidad de

persistencia de las sesiones de aplicación, obteniendo así un mayor grado balanceo de

carga y consecuentemente un mayor rendimiento.

Persistent Port Connection (PPC), basado en IP origen, VIP y puerto

Cuando se utiliza este método, el balanceador de carga se basa en la combinación de tres

campos del paquete TCP SYN: IP origen, IP destino y puerto destino, por lo que se

encontrarán estos tres datos en la tabla de sesiones. Las siguientes conexiones serán

consideradas como pertenecientes a una sesión si casan con esta tripleta. De esta manera, el

balanceador reenviará hacia servidores distintos, los paquetes que, aun viniendo de la

misma IP origen, tengan como destino puertos de servicios diferentes, o bien direcciones

IP destino diferentes. La IP de destino deberá ser una dirección virtual configurada en el

balanceador (VIP).

Persistent Client Connection (PCP), basado en IP origen y VIP

En determinadas aplicaciones, es necesario que las conexiones TCP realizadas por un

mismo cliente sean procesadas por el mismo servidor real. Por ejemplo, una aplicación

transaccional de e-comerce, probablemente establecerá una sesión HTTP y otra SSL,

necesitando ambas ser atendidas por el mismo servidor real. Si el balanceador de carga se

basa en la tripleta IP origen, IP destino y puerto, probablemente asigne estas dos sesiones a

servidores reales distintos. Evidentemente, la aplicación transaccional no funcionará

correctamente (figura 5). La solución puede pasar entonces por un balanceador de carga

que simplemente tenga en cuenta la IP origen y destino de los paquetes, con lo que se

solventa el problema, si bien el balanceo de carga en menos eficiente. En este caso, es

recomendable ofrecer los servicios que requieren de esta técnica a través de una VIP

diferente, así no se verán afectados todos los servicios por la reducción de la eficiencia del

balanceo y tampoco dejarán de poder prestarse los mismos.

Agrupamiento de Puertos

Cuando utilizamos una misma dirección IP virtual (VIP) para diferentes aplicaciones, las

cuales no están todas interrelacionadas, es posible utilizar este método para agrupar sólo

aquellas aplicaciones que han de ser reenviadas de forma persistente hacia un mismo

servidor (6.5). De esta manera, es posible agrupar por ejemplo los servicios http y SSL

Page 37: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

28 - Capítulo 3: Balanceadores de carga

ofreciéndolos por la VIP1. Si nos interesa también que http corra separadamente a SSL es

posible ofrecer este servicio individualmente por otra VIP.

Conexiones Concurrentes

Este método está especialmente diseñado para aplicaciones como el passive-FTP. El

servicio FTP pasivo funciona de la siguiente manera. En primer lugar, el cliente establece

una conexión TCP al puerto 21 del servidor. A ésta se le llama conexión de control, y es

utilizada para indicarle al servidor los comandos que queremos ejecutar. Cuando el cliente

envía el comando PASV, el servidor selecciona un puerto arbitrario, por encima del puerto

1023, y se lo envía al cliente. Este puerto del servidor, será el utilizado por el cliente para

iniciar la conexión TCP para la transmisión de los datos. Por el contrario si se utiliza

active-FTP, entonces es el servidor el que utiliza un puerto especificado por el cliente para

iniciar la conexión de datos con él.

El método basado en IP origen y VIP es suficiente para permitir el correcto funcionamiento

del servicio FTP pasivo, como contrapartida, todas las conexiones de ese cliente serían

reenviadas al mismo servidor real, cuando en realidad tan sólo se requeriría que lo fuesen

la conexión de control y la de datos. El método concurrente resuelve este problema de la

siguiente forma. Cuando llega una petición con una determinada IP origen hacia la VIP, el

balanceador mira si existe una entrada en la tabla de sesiones, de no ser así, crea una

entrada y selecciona un servidor real para esa conexión. La siguiente conexión que se

establezca desde el cliente será, lo mas probable, la petición de conexión para el canal de

datos FTP. El balanceador interpreta eso y reenvía esa conexión hacia el mismo servidor

real. El resto de conexiones de ese cliente serán reenviadas a otro servidor real.

El Megaproxy problem

En algunas ocasiones la dirección IP origen del cliente no es suficiente para identificar a un

usuario en concreto. Generalmente, los ISP y muchas empresas tienen servidores proxy

desplegados en sus redes. Cuando los usuarios de estas redes salen a Internet, lo hacen a

través de un servidor proxy. El término megaproxy se utiliza para describir a potentes

servidores proxy de algunas grandes empresas que son utilizados por miles o incluso

cientos de miles de usuarios en grandes redes empresariales. Este tipo de escenarios

pueden plantear dos tipos de problemas para el balanceador de carga.

Page 38: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 29

El primero de ellos, se produce cuando un mismo usuario de este tipo de redes establece

dos o más sesiones con el balanceador de carga y éstas salen de su red a través de

servidores proxy diferentes.

Cliente 1

Cliente 3

Cliente n

Cliente 2

Cliente 4

Usuario

Balanceador de carga

ServidoresProxy

Internet

TCP SYN 1

TCP SYN 2

TCP SYN 1

TCP SYN 2

Red interna con múltiples servidores proxy

Las dos peticiones de conexión provienen del mismo cliente, sin embargola persistencia en función de la IP origen no funciona correctamente ycada conexión es tratada independientemente sin aplicar persistencia desessión.

Figura 6: Megaproxy problem, caso 1.

En estos casos, el balanceador de carga recibe el primer paquete TCP SYN y añade una

entrada en la tabla de sesiones. La segunda conexión proviene del mismo cliente, por lo

que debería ser asignada al mismo servidor real que la primera. Sin embargo, esto no

sucede así, ya que el proxy cambia la IP origen del cliente (privada) por su IP (pública).

Dado que cada petición ha salido por un servidor proxy diferente, el balanceador interpreta

erróneamente que ambas conexiones han sido iniciadas desde clientes distintos.

Resolver este problema pasa por detectar las direcciones IP origen de los servidores proxy

de esa red y agruparlos bajo un mismo origen virtual (virtual source). Este método de

persistencia agrupa todas esas direcciones para ser tratadas como un mismo origen virtual.

El segundo problema viene planteado por aquellos casos en los que muchos clientes de una

red situada tras un megaproxy, acceden a los servicios ofrecidos por el balanceador de

carga. Aunque estos clientes utilicen todos el mismo servidor proxy es posible que esto

represente un problema para el sistema balanceador.

Page 39: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

30 - Capítulo 3: Balanceadores de carga

Cliente 1

Cliente 2

Cliente n

Cliente A

Cliente B

ClienteC

ServidorProxy

Internet

TCP SYN A

TCP SYN B

Red interna con múltiples servidores proxyenviando peticiones de conexión albalanceador de carga

Todas la conexiónes se asignan al mismo balanceador de carga si ésteutiliza un mecanismo basado en IP origen.

TCP SYN 1C

TCP SYN 2C

Balanceadorde carga

TCP SYN A

TCP SYN B

TCP SYN 1C

TCP SYN 2C

Figura 7: Megaproxy problem, caso 2.

Dado que el método implementado por el balanceador de carga toma las decisiones de

reenvío en base a la dirección IP origen de los paquetes, y que estos tienen todos la misma

IP, todas las conexiones son asignadas al mismo servidor real. Mientras el tráfico

proveniente de ese servidor proxy no represente un porcentaje muy elevado, del total de

tráfico balanceado por el servidor virtual, no representará un problema serio.

3.8.3 Métodos basados en la aplicación

Vinculación retardada (Delayed Binding)

Los métodos de reenvío basados en la dirección IP origen de los paquetes, toman la

decisión de hacia dónde reenviar los paquetes, tras recibir el primer paquete TCP SYN de

una petición de conexión. Posteriormente, el resto de paquetes pertenecientes a esa

conexión son reenviados al servidor real seleccionado. El método delayed binding, mira la

información de aplicación contenida en los paquetes subsiguientes al de petición de

conexión. En la información de aplicación, existe información que puede ayudar al

balanceador a tomar una decisión de reenvío más inteligente. En una aplicación web, por

Page 40: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 31

ejemplo, las peticiones HTTP contienen URLs y cookies que el balanceador puede utilizar

para seleccionar el servidor real más apropiado.

El método de vinculación retardada, requiere que el balanceador de carga rescriba los

números de secuencia de las cabeceras TCP de los paquetes que balancea. En la figura 2

del apartado (3.5) se muestra el proceso de establecimiento de la conexión TCP, más

conocido como saludo a tres vías. En la misma figura, también se observa como funcionan

los números de secuencia de las cabeceras TCP intercambiados entre el cliente y el

servidor. Dado que el balanceador de carga espera a ver el contenido de los paquetes

siguientes al que establece la conexión antes de tomar la decisión de reenvío, ha de ser él el

que acepte y, por lo tanto, establezca las conexiones con los clientes. Cuando el

balanceador ya tiene la información necesaria para vincular la conexión del cliente a un

servidor real, será él el encargado de establecer una segunda conexión con el servidor real

asignado. Dado que el primer número de secuencia de la conexión TCP es aleatorio y

depende de la pila TCP/IP, el número que genera el balanceador de carga no coincidirá con

el que responda el servidor real seleccionado. Es por esto que el balanceador deberá

traducir los números de secuencia de todos los paquetes que le lleguen desde el cliente,

para que concuerden con los números de secuencia generados en la segunda conexión con

el servidor real. Este proceso puede llegar a cargar mucho al balanceador de carga, ya que

ahora ha de realizar además la traducción de los números de secuencia para cada uno de los

paquetes reenviados. Este proceso repercute también en unas necesidades de memoria

mayores en el balanceador.

Cookies

Cuando la aplicación a ofrecer por el balanceador de carga es un servicio http, es posible

implementar, gracias a la técnica de delayed binding y a la utilización de cookies, métodos

de balanceo que solventen el problema de los grandes servidores proxy.

Las cookies son variables enviadas por el servidor web al cliente en la cabecera HTTP.

Estas variables son manejadas por el navegador del cliente y almacenadas en el disco duro

de éste, y son enviadas dentro de las cabeceras HTTP de las siguientes peticiones que el

cliente efectúe para comunicarse con el servidor.

Page 41: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

32 - Capítulo 3: Balanceadores de carga

Cookie switching

Con el método de vinculación retardada, el balanceador de carga es capaz de entender las

cabeceras HTTP, y por lo tanto, las cookies de las peticiones de los clientes. El balanceador

puede, a partir de este momento utilizar uno de estos tres métodos de balanceo basado en

cookies (cookie switching): cookie-read, cookie-insert o cookie rewrite, para solucionar el

problema de los clientes situados tras grandes servidores proxy.

Cookie-read

Este método requiere en que el servidor web, de cada uno de los servidores reales, envíe

una cookie cada vez que éste acceda por primera vez a sus servicios. Posteriormente el

balanceador mira la cookie enviada por el cliente a partir de ese momento. La cookie

enviada por el servidor al cliente ha de servirle al balanceador para identificarlo, en base a

la cookie enviada por el servidor. De esta manera en lugar de identificar al cliente mediante

la dirección IP origen, se hace mediante la cookie. Este método no carga excesivamente al

balanceador, pero requiere que se modifique la página alojada en cada uno de los

servidores reales. Cada vez que se requiere añadir un nuevo servidor real al cluster, será

necesario retocar el código del sitio web a fin de adecuarlo a este método, por lo que las

capacidades de escalabilidad del sistema se ven mermadas.

Cookie-insert

Con este método no es necesario retocar el código del sitio web, ya que ahora no es el

servidor real el que envía la cookie al cliente, sino que lo hace el balanceador de carga.

Ahora, el balanceador reenvía la conexión a un servidor, y en la respuesta al cliente inserta

una cookie identificando el servidor asignado. Este método tiene como ventaja el que no es

necesario reprogramar las aplicaciones web, y tiene como inconveniente la sobrecarga que

produce en el balanceador. Además, podría surgir un problema al sobrepasar el tamaño

máximo permitido del paquete, siendo éste un problema de difícil solución.

Cookie-rewrite

Una solución más equilibrada es el cookie-rewrite, solución que está a medio camino entre

el cookie-read y el cookie-insert, aportando las ventajas de ambas. Mediante este método,

no se carga tanto al balanceador como con el método de cookie-insert, ya que no hay que

guardar los paquetes enteros en memoria para proceder a insertar la cookie. El servidor es

Page 42: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 33

el encargado de enviar la cookie al cliente, pero no determina el valor de esta variable,

simplemente lo establece en un número determinado de caracteres por ejemplo: (server =

XXXX). El balanceador es entonces el encargado de asignarle un valor a esta cookie,

sabiendo que éste deberá de ser de 4 dígitos para no alterar el tamaño final del paquete. De

esta manera, al no ser necesario guardar todo el paquete en memoria, se reducen

considerablemente los requerimientos de capacidad de proceso del balanceador.

3.9 Balanceadores de carga de alta disponibilidad

Los balanceadores de carga aportan, además de escalabilidad, la alta disponibilidad de los

servicios ofrecidos por los servidores reales. El problema que introduce el balanceador de

carga es que se convierte en un elemento vital en la prestación del servicio. Por lo que si

éste fallase, todo el sistema se vendría abajo. Nuevamente, la solución consiste en redundar

el elemento crítico del sistema para la prestación del servicio, el balanceador de carga.

Tradicionalmente, en networking se recurre a protocolos como el Virtual Router

Redundancy Protoco, (VRRP) [6], el cual permite a varios routers hacerse de backup unos

a otros. El diseño de sistemas de balanceadores de alta disponibilidad, se basa en conceptos

similares en los que se basa VRRP.

A fin de ofrecer alta disponibilidad, es posible disponer de dos balanceadores de carga

trabajando conjuntamente, bien en configuraciones en las cuales un balanceador hace de

backup del activo (activo/pasivo), o bien en configuraciones activo/activo, en las cuales los

dos balanceadores están balanceando tráfico, pero cualquiera de ellos puede asumir el

trabajo de su compañero en caso de que falle. Este tipo de arquitecturas reciben el nombre

de High-Availability (HA) clusters o clusters de alta disponibilidad. Los clusters o sistemas

de alta disponibilidad, en los cuales el servicio de alta disponibilidad es el balanceador de

carga, a menudo reciben el nombre de HA IP Clusters o HA Aplication Clusters, en

función de si utilizan balanceadores de carga basados en IP Origen o bien balanceadores de

carga de nivel de aplicación.

Page 43: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

34 - Capítulo 3: Balanceadores de carga

Una primera topología básica de un HA IP Cluster activo/pasivo podría ser la siguiente:

Internet

iMacCliente

Granja deServidoresReales 1

Granja deServidoresReales 2

Balanceadorde carga 2(Pasivo)

Balanceadorde carga 1

(Activo)

RouterVIP VIP

Aquitectura de Alta disponibilidad 1( Cluster Activo/Pasivo )

Figura 8: Cluster de alta disponibilidad activo/pasivo.

En ella, cada balanceador de carga tiene su propia granja de servidores reales, esta

configuración simplifica algunos aspectos de la configuración, si bien infrautiliza los

equipos de red, ya que dispone de una granja de servidores completa de backup.

Page 44: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 35

Una arquitectura activo/activo básica podría tener un aspecto similar al que muestra la

siguiente figura:

Internet

iMacCliente

Granja deServidoresReales 1

Granja deServidoresReales 2

Balanceadorde carga 2

(Activo)

Balanceadorde carga 1

(Activo)

Router

Aquitectura de Alta disponibilidad 2( Cluster Activo/Activo )

Figura 9: Cluster de alta disponibilidad activo/activo.

Este tipo de arquitectura aprovecha mejor los recursos de red que la arquitectura anterior,

por otra parte la complejidad del sistema también aumenta.

Page 45: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

36 - Capítulo 3: Balanceadores de carga

La siguiente arquitectura combina aspectos de las anteriores dos:

Internet

iMacCliente

ServidoresReales

Balanceadorde carga 2

VIP 1InactivaVIP 2 Activa

Balanceadorde carga 1

VIP 1 ActivaVIP 2 Inactiva

Router

Aquitectura de Alta disponibilidad 3( Cluster Activo/Activo)

Switch

Figura 10: Cluster de alta disponibilidad activo/activo optimizado.

Dispone de dos balanceadores de carga activos, si bien cada uno de ellos trabaja con VIPs

activas diferentes, de manera que sólo se hacen cargo de la VIP del otro balanceador en

caso de fallo de éste. Por otra parte, la granja de servidores ahora es común a los dos

balanceadores, con lo cual no se desaprovechan equipos.

Page 46: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 37

Finalmente, es posible encontrar arquitecturas más complejas (figura 11), que redundan

también los routers de salida hacia Internet. Además, en este ejemplo, el balanceador

dispone de una interfaz de salida para cada uno de los servidores reales.

Internet

iMacCliente

ServidoresReales

Balanceadorde carga 2(Pasivo)

Balanceadorde carga 1

(Activo)

Router 1

VIP VIP

Aquitectura de Alta disponibilidad 4( Cluster Activo/Pasivo )

VRRPRouter 2

Figura 11: Cluster de alta disponibilidad activo/activo optimizado 2.

Page 47: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

38 - Capítulo 3: Balanceadores de carga

Page 48: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 39

4. Clustering y bases de datos

Cuando se trabaja con arquitecturas de clustering de alta disponibilidad y escalabilidad,

uno de los principales problemas que se pueden plantear a menudo, tendrá que ver con el

almacenamiento de los datos. Estos problemas aparecen tanto en los sistemas de clustering

de alta disponibilidad de IP como en los sistemas basados en balanceadores de carga.

Existen dos tipos de situaciones bien diferenciadas. Por un lado tenemos aquellos

escenarios en los cuales el cliente del servicio, únicamente realiza una lectura de los datos,

como se muestra en la figura 12, por otro lado, estarían aquellas aplicaciones

transaccionales en las cuales el cliente ha de poder modificar o escribir datos.

Se rvidore sRe ale s

Balanceadorde carga

Data Data Data Data Data= = =

Cluster de Servidores de Aplicación Servidores de Aplicación Balanceados

Se rvidore sde

Aplicacion

Data

Dispositivode a lmacenamiento

compartido

Figura 12: Clustering y bases de datos.

Page 49: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

40 - Capítulo 4: Clustering y bases de datos

Estas dos situaciones plantean problemas diferentes en función del método utilizado para

intentar solventarlas. Una estrategia puede ser la utilización de dispositivos de

almacenamiento compartidos por todos los miembros del cluster, lo que implica introducir

un único punto de fallo para todo el sistema. La otra, pasa por dejar que cada nodo

disponga de sus propios datos y recurrir a dispositivos de mirroring, o bien replicar los

datos periódicamente, reparando la posible inconsistencia que se puede producir en los

mismos.

El siguiente cuadro (tabla 1), muestra las tres estrategias principales para garantizar la

disponibilidad e integridad de los datos en los sistemas de clustering de alta disponibilidad.

Mecanismos para garantizar los datos o la disponibilidad de almacenamiento tras una caída Descripción Ventajas Inconvenientes

Mirroring

Cada servidor almacena sus propios datos; Los servidores realizan operaciones de copiado constantes para conseguir la sincronización de los datos.

Alta velocidad de recuperación de datos tras un desastre.

Alta sobrecarga de la red y del sistema para realizar las operaciones de sincronización. Posibilidad de perdida de algunos datos cuando ocurre un fallo.

No Compartir Nada

Los servidores están conectados con un sistema autónomo de almacenamiento compartido, pero posen además su propios sistemas RAID. Durante una fallida, el nodo superviviente asume la propiedad de los discos y servicios del servidor fallido.

Mínima sobrecarga de red para mantener la consistencia de datos del cluster.

Requiere conexiones redundantes y tecnología RAID para prevenir que el sistema de almacenamiento autónomo se convierta en un único punto de fallo que pueda afectar a la integridad de todo el sistema.

Compartirlo Todo

Los servidores comparten el acceso simultáneo al mismo disco.

Mínima sobrecarga de red para mantener la consistencia de datos del cluster.

Requiere conexiones redundantes, tecnología RAID, y un complicado sistema de control en el acceso a los datos para poder mantener su integridad.

Tabla 1: Características de las diferentes estrategias en el acceso a datos.

Page 50: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 41

Parte 2: Software libre para Arquitecturas de Clustering de Alta

Disponibilidad y Escalabilidad (ACADE).

5. El software libre como motor de desarrollo social Basado en la conferencia ¿Qué es el software libre? Dentro de las I Jornadas de Software libre en Baleares. Impartida por

Jesús González Barahona, Profesor Titular de la Universisda Rey Juan Carlos de Madrid, Departamento de Ciencias

Experimentales e Ingeniería.

El modelo en el que se basa la industria del software de hoy día, difiere notablemente del

marco con el que funcionan el resto de industrias “tradicionales”. Las licencias actuales de

software, son en gran medida las responsables de esta situación, pues en el marco actual de

soluciones software propietarias, las regulaciones sólo afectan al usuario, que está obligado

a cumplir lo establecido en la licencia del software que utiliza, quedando la empresa

desarrolladora exenta de cualquier responsabilidad.

En la industria tradicional es imposible pensar en una situación de esas características. Por

ejemplo, cuando una empresa fabricante de coches vende un modelo al usuario, la empresa

ha de fabricar el mismo en base a una estricta normativa que asegure la calidad y seguridad

del producto. El cliente se compromete a utilizar el producto en base a lo que dictan las

normas de circulación y la empresa, por otro lado, ofrece unas garantías si el cliente hace

un uso normal del vehículo. En cambio, una licencia de software sólo implica compromiso

por parte del usuario: no utilizar el software en más de una máquina o en máquinas

diferentes con solo una licencia etc. Esto da lugar a situaciones poco razonables en las que

un usuario debería pagar dos licencias para instalar un mismo programa, dos veces, en

máquinas de su propiedad. El modelo libre establece sus propios mecanismos naturales

para evitar situaciones monopolistas.

El software libre no se ajusta al modelo actual de industria de software, ni en el modelo de

ingeniería de software, utilizado para su desarrollo, ni en el tipo de las licencias utilizadas

para su distribución. Del modelo de desarrollo utilizado se sabe muy poco, básicamente

que es está distribuido globalmente y que el resultado funciona, en tanto que es un hecho

que algunos programas libres funcionan igual o mejor que soluciones propietarias.

Page 51: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

42 - Capítulo 5: El software libre como motor de desarrollo social

Actualmente existen dos grandes corrientes en el mundo del software libre. Por un lado la

liderada por Richard M. Stallman, creador de la Free Software Fundation (FSF), y por el

otro la promovida por el movimiento Open Source. La primera basa sus motivaciones en

consideraciones éticas, la segunda en motivos prácticos. En cualquier caso las dos

confluyen el hecho de utilizar el mismo software.

El software libre establece un modelo de costes diferentes al tradicional. Si la empresa

utiliza el modelo propietario se le va todo el dinero en licencias, por el contrario, si la

empresa utiliza el modelo libre, se gastará el dinero en personal o en empresas de soporte

locales.

¿Qué es software libre?

Software libre es aquel software que cumple las siguientes cuatro características:

1. Libertad de uso

Los programas distribuidos bajo una licencia libre, permiten al usuario utilizar en la forma

que considere más oportuna y dándole plena libertad para que lo desee instalar, y hacerlo

en tantos sistemas como quiera.

2. Libertad de redistribución

El autor permite la libre distribución del programa conjuntamente con la de su código

fuente y su licencia. Copiar software libre no es ilegal, sino que además, es deseable y

contribuye a su divulgación.

3. Libertad para la modificación del código

Cualquier usuario tiene plena libertad para modificar el código fuente del programa. Esto,

trasladado a un entorno empresarial permite adaptar el programa a las necesidades

especificas de la empresa, en cambio, si la empresa opta por una solución propietaria, y

Page 52: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 43

esta no se ajusta del todo a sus necesidades, deberá esperar a que la empresa

suministradora de ese software decida implementar las características nuevas que la

empresa requiere, si es que esta lo hace. Por otro lado, eso permite que cualquier empresa

pueda dar soporte a un programa libre, si dispone de programadores preparados para ello,

pese a no ser la creadora del programa. Así, dado que existen diferentes empresas que den

soporte a un determinado programa, un empresario podría, eventualmente, cambiar de

empresa si no está satisfecho con el soporte obtenido. En el escenario actual, en el cual las

empresas suelen disponer de cuotas de mercado del 80% ó 90% para un determinado

producto, esto no es posible ya que se depende de la empresa creadora para el soporte a su

producto.

4. Libertad para redistribuir las modificaciones

Siempre y cuando las modificaciones se hagan también bajo una licencia libre, cualquiera

puede seleccionar un puñado de software y redistribuirlo a aquellas empresas capaces de

añadir sustanciales mejoras obteniendo mayor cuota de mercado, ya que software libre no

implica que no se pueda cobrar por su distribución. Es entonces cuando aparece la

competencia entre distribuciones y distribuidores que redundan en beneficio del usuario.

Page 53: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

44 - Capítulo 5: El software libre como motor de desarrollo social

Page 54: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 45

6. Balanceadores de carga libres

Este capítulo se centra de manera especial en el balanceador de carga del proyecto Linux

Virtual Server. Por otro lado, también se mencionan otros proyectos enfocados a

proporcionar sistemas de balanceo de carga de código abierto sobre otras arquitecturas

libres.

6.1 Linux Virtual Server Project

Linux Virtual Server Project centra sus esfuerzos en proporcionar un servidor virtual

altamente escalable y de alta disponibilidad sobre Linux, denominado Linux Virtual Server

(LVS). IP Virtual Server (IPVS) es el software con el que se implementa LVS. IPVS es un

balanceador de carga de capa de transporte. En mayo de 2000 y dentro del marco de

trabajo que se venía desarrollando en el proyecto LVS, se empieza el desarrollo en paralelo

de un balanceador de carga de nivel de aplicación llamado Kernel TCP Virtual Server

(KTCPVS).

Por razones históricas se asocia LVS con el balanceador de carga IPVS, utilizándose

ambos términos indistintamente para referirse al servidor virtual Linux de capa transporte.

Pese a que KTCPVS es también un balanceador que permite implementar un servidor

virtual Linux (LVS), nos referiremos a él cómo balanceador de carga de aplicación.

Quedando reservado el término LVS para el balanceador de carga de capa de transporte.

6.2 ¿Qué es LVS?

Linux Virtual Server (LVS) es un cluster de máquinas que se muestran como un único

servidor a los clientes. Este aparentemente único servidor es llamado “servidor virtual”. A

los servidores integrantes del clúster se los conoce como realservers o servidores reales, y

están bajo el control del balanceador de carga conocido como director. LVS se implementa

mediante el parche para el kernel de Linux IP Virtual Server (IPVS).

Page 55: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

46 - Capítulo 6: Balanceadores de carga libres

6.2.1 LVS, IP Virtual Server (IPVS)

El director ejecuta un kernel de Linux “parcheado” con el código IP Virtual Server

(IPVS), que es la característica principal de LVS. El director es un router con las reglas de

rutado modificadas. Cuando una nueva petición de conexión para alguno de los servicios

ofrecidos por LVS, por ejemplo http, es recibida, el director la reenviará a alguno de los

realservers para que sea atendida. A partir de entonces, todos los paquetes del cliente,

pertenecientes a esa conexión, atravesarán el director hacia un realserver en particular. La

asociación entre el cliente y el realserver se mantendrá sólo durante el tiempo de vida de la

conexión TCP o cuando expire el timeout, que establece el tiempo máximo de inactividad

para una conexión establecida. Para la siguiente petición de conexión TCP, el director

escogerá otro servidor real que podría o no ser el mismo que el de la conexión anterior.

Para decidir cual de estos servidores ha de ser el destinatario de esta nueva conexión, el

director dispone de un abanico de conjuntos secuenciales de normas, o algoritmos de

scheduling. Por ejemplo, este algoritmo podría basar sus decisiones en aspectos como la

carga (número de conexiones establecidas, tráfico soportado, etc) de cada servidor, o

simplemente en el hecho de intentar realizar un reparto equitativo de las peticiones de

conexión entre todos los servidores del cluster.

Se entiende por un balanceador de carga con capacidades stateful, a aquel que es capaz de

entender y hacer un seguimiento de los paquetes que pertenecen a las conexiones que está

reenviando. En ocasiones, un servicio requiere que todas las conexiones TCP/UDP que se

realizan durante la prestación del mismo (sesión), sean procesadas por el mismo

realserver.

LVS dispone de algunas capacidades stafeful pese a ser un balanceador de carga de capa de

transporte basado en IP origen. El director tiene conocimiento del inicio y finalización de

las conexiones TCP/UDP, así como de los puertos y direcciones IP, si bien desconoce lo

que se están diciendo las aplicaciones en capas superiores. Para garantizar la persistencia

en la que se requiere ver más allá de la capa 4, es decir, cuando todos los paquetes de una

sesión han de ser reenviados al mismo realserver para la correcta prestación del servicio,

LVS permite crear reglas para garantizarla en servicios como ftp o https. Dado que LVS no

tiene conciencia de lo que pasa más allá de la capa de transporte, cuando se requiere

Page 56: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 47

aplicar persistencia más allá de esa capa, se le debe indicar a LVS el tipo de servicio que se

deberá prestar de forma persistente. LVS se basará entonces únicamente en la IP y el

puerto para crear las reglas que aseguren la persistencia de esos servicios. Las indicaciones

que fuerzan la persistencia de los servicios que la requieren, se le proporcionan a LVS en

el momento de introducir las reglas que definen su comportamiento véase ipvsadm (6.7).

Para los servicios que no necesitan persistencia, como por ejemplo contenido web estático

que no establezca sesiones mediante cookies, podría darse el caso de que el navegador web

que conecta con un site de estas características, hospedado en el LVS, obtenga los

diferentes objetos que conforman la web (código HTML e imágenes) de realservers

distintos.

Hay tres tipos de topologías en LVS, que se diferencian entre ellas, no sólo en como se

interconectan los nodos, sino también en la técnica que utiliza el director para el reenvío de

paquetes. Las topologías posibles en función del método de reenvío son: LVS-NAT(6.3.1),

LVS-DR(6.3.2) y LVS-TUN(6.3.3).

Cabe la posibilidad de implementar una arquitectura LVS que disponga de más de un

balanceador de carga (IPVS). En este tipo de soluciones de alta disponibilidad, con un

balanceador principal (master) y los otros de reserva (backup), sólo uno de ellos está

funcionando como activo. El resto de los balanceadores permanecen a la espera por si un

fallo en el servicio, o una detención voluntaria por parte del administrador del sistema, les

obligara a entrar en acción para sustituir al master. LVS dispone de un mecanismo de

migración de conexiones para evitar que las que ya están establecidas en el balanceador

master se pierdan, en el caso de que éste sea reemplazado por un balanceador de backup.

Para ello, LVS dispone de un demonio que envía periódicamente menajes multicast al resto

de los balanceadores, con el fin de que tengan convenientemente actualizadas sus

respectivas tablas de conexiones así como los servicios asociados a ellas. De esta forma, en

caso de relevo de un balanceador por otro, sólo se perderán aquellas conexiones que se

establecieron entre el envío del último mensaje multicast y el momento en el que se

produjo el fallo.

Page 57: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

48 - Capítulo 6: Balanceadores de carga libres

6.3 Métodos de reenvío soportados por LVS

LVS se implementa de tres formas posibles, LVS-NAT, LVS-DR y LVS-TUN, en función

del método de reenvío utilizado por el balanceador. NAT fue el primer método de reenvío

utilizado por LVS, se implementa mediante una red local. Su escalabilidad y rendimiento

no son los más elevados, pero la relativa facilidad, rapidez, y los bajos requerimientos

hardware, lo convierten en una opción interesante en aquellas situaciones en las cuales no

se dispone de un elevado número de nodos y elevada carga de tráfico. Sin salir del entorno

local, LVS-DR es el método que mayor rendimiento es capaz de desarrollar. Basa su

funcionamiento en técnicas avanzadas de enrutamiento directo (capa 2) y en el hecho de

que el flujo de tráfico de los clientes atraviesa el balanceador de carga en un solo sentido.

Fuera de este tipo de aplicaciones locales, LVS-TUN permite distribuir los nodos del

cluster a escala global, pudiendo ser cada uno de ellos, un cluster o centro de datos en si

mismo. Así como LVS-NAT se limitaba a rescribir las cabeceras IP de los paquetes y

LVS-DR a encapsular con las cabeceras de la capa de enlace de datos, LVS-TUN aplica

encapsulado IP.

6.3.1 LVS-NAT

Para una mayor comprensión del funcionamiento de un servidor virtual LVS-NAT, es

preciso remarcar que Port Address Translation (PAT) es la variante de NAT utilizada en

Linux, y por lo tanto en LVS. Así mismo, es posible recurrir a diferentes topologías de red

que permitan implementar NAT (figura 13).

Page 58: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 49

ServidoresReales

Switch

Balanceadorde

Carga

ServidoresReales

SwitchBalanceadorde

Carga

Internet

Router

iMac

LVS-NAT 1 LVS-NAT 2 (Acade)

Internet

Router

iMac

Figura 13: LVS-NAT.

Network Addres Translation (NAT) en Linux

Dada la escasez de direcciones IP en IPv4 y por motivos de seguridad, cada vez más redes

están utilizando direcciones privadas (como 10.0.0.0/8, 172.16.0.0/12 y

192.168.0.0/16 ) las cuales no pueden ser utilizadas en Internet. La necesitad de

realizar Network Addres Translation (NAT) se manifiesta cuando los hosts de una red

interna quieren acceder y ser accesibles desde Internet.

NAT es la característica gracias a la cual un grupo de direcciones IP son mapeadas con

otro. Cuando el mapeo de direcciones es de N-a-N, es llamado NAT estático; cuando el

mapeo es M-a-N (M mayor que N), NAT dinámico. Network Addres Port Pranslation

(también conocido como PAT) es una extensión del NAT básico, en dónde varias

direcciones de red y sus respectivos puertos TCP/UDP son traducidos a una sola dirección

de red y a su respectivo puerto. Éste es el tipo de mapeo con el que Linux IP Masquerading

fue implementado, y además es el utilizado por LVS-NAT. Una descripción más detallada

sobre NAT está disponible en el RFC1631 [2].

Page 59: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

50 - Capítulo 6: Balanceadores de carga libres

Funcionamiento de LVS-NAT

Cuando un paquete llega al balanceador de carga, éste le examina la IP y el puerto, y si

coinciden con alguno de los servicios definidos en la tabla de reglas del servidor virtual del

balanceador de carga, entonces será reenviado hacia uno de los servidores reales en

función de un algoritmo de scheduling. Para efectuar el reenvío, el balanceador de carga

deberá rescribir la dirección IP de la cabecera del paquete por la del servidor real que

corresponda. Esta nueva conexión, es añadida como una nueva entrada en la tabla hash

(tabla de sesiones) del director, y permanecerá en ella hasta que la conexión finalice o bien

ésta haya excedido los tiempos máximos de inactividad. Cuando un paquete de respuesta

realiza el camino inverso, el balanceador de carga rescribe la dirección origen para que ésta

sea la de la interfaz externa del balanceador de carga (VIP).

A continuación se muestra un ejemplo que describe el funcionamiento de LVS-NAT a la

hora de rescribir los paquetes.

Si el balanceador de carga está configurado para ofrecer los siguientes servicios virtuales:

Protocolo VIP Puerto Dirección IP del servidor real Puerto Peso

192.168.10.101 80 1 TCP 192.168.3.150 80

192.168.10.102 80 1

192.168.10.101 21 2 TCP 192.168.3.150 21

192.168.10.102 21 1

Cualquier paquete que llegue al balanceador de carga con la IP 192.168.3.150 y los

puertos 80 ó 21, sufrirá un cambio de la IP por la del servidor real que corresponda. Véase

esto en el siguiente ejemplo:

Supóngase la recepción por parte del balanceador de carga del siguiente paquete:

IP / Puerto ORIGEN

202.50.63.127:2314

IP / Puerto DESTINO

192.168.3.150:80

Page 60: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 51

El balanceador de carga lo identifica como un paquete que solicita un servicio virtual

configurado, y por tanto seleccionará un realserver, rescribiendo la cabecera IP para

reenviarlo de esta manera:

IP / Puerto ORIGEN

202.50.63.127:2314

IP / Puerto DESTINO

192.168.10.101:80

Cuando el servidor real conteste, lo hará reenviando un paquete de vuelta al balanceador de

carga con una cabecera IP como la que se muestra a continuación:

IP / Puerto ORIGEN

192.168.10.101:80

IP / Puerto DESTINO

202.50.63.127:2314

En el balanceador de carga, el paquete se vuelve a rescribir para enviarlo de vuelta al

cliente quedando de la siguiente manera:

IP / puerto ORIGEN

192.168.3.150:80

IP / Puerto DESTINO

202.50.63.127:2134

6.3.2 LVS-DR

Introducción

LVS-DR está basado en NetDispatcher de IBM, el cual presenta a un conjunto de

máquinas que ofrecen servicios de red como si de una sola se tratase. Esta tecnología se

utilizó para proporcionar servicios http en las olimpiadas de Atlanta y de Sydney, por lo

que destaca como una solución capaz de servir un gran volumen de peticiones. También se

utilizó para retransmitir vía web la partida de ajedrez entre Kasparov y la máquina Deep

Blue.

LVS-DR aporta dos considerables mejoras en las prestaciones que ofrece LVS-NAT. La

primera de ellas, consiste en un nuevo método de reenvío en el cual el director no necesita

rescribir la cabecera IP de los paquetes antes de reenviarlos, puesto que se limita a

Page 61: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

52 - Capítulo 6: Balanceadores de carga libres

encapsular los paquetes IP con las direcciones de Control de Acceso al Medio (MAC),

dejando inalterada la cabecera IP original. La segunda mejora radica en que los paquetes

de respuesta de los servidores, en su camino de regreso al cliente, no atraviesan el director

sino que van directamente al cliente, y se consigue porque los clientes en sus respuestas

ponen la VIP como origen de las mismas, resultando innecesario realizar NAT inverso.

Una configuración más avanzada de LVS-DR permite a cada servidor real disponer de un

enlace exclusivo de retorno al cliente. En la configuración de mayor rendimiento teórico,

cada servidor real está conectado a su propio router de salida. Estas dos mejoras se

traducen en un considerable aumento de las prestaciones del servidor virtual.

Para formarse una idea intuitiva de las diferencias de rendimiento entre LVS-DR y LVS-

NAT, podría establecerse una analogía entre LVS-NAT y un router (capa3), y LVS-DR y

un switch (capa 2). LVS-NAT rescribe las cabeceras IP antes de encapsular a nivel de capa

de enlace, mientras que LVS-DR se limita a encapsular directamente a nivel de capa de

enlace sin modificar las cabeceras IP originales.

Prerrequisitos de LVS-DR

- El cliente debe poder conectar con la VIP del director.

- LVS-DR utiliza el mismo medio físico para el conexionado de todos sus nodos.

Todas las máquinas integrantes del cluster deben poder enviarse entre ellas peticiones

ARP, lo cual implica que todas están en la misma red sin dispositivos de rutado por medio,

por lo que comparten el mismo segmento de la capa de enlace. En otras palabras

comparten el mismo “cable”. Los paquetes se enviarán del balanceador de carga a los

servidores reales empaquetándolos únicamente con una dirección MAC, sin rescribir la

cabecera IP.

La ruta que siguen los paquetes de respuesta no pasa a través del balanceador de carga,

sino que va de los servidores reales directamente al cliente sin pasar por el director. Para

requerimientos de alta capacidad de transferencia, cada servidor real puede disponer de su

propio router o conexión hacia el cliente o Internet.

Page 62: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 53

director

rserver2rserver1 rserver3

CIPs

Internet

router routerrouterrouter

Figura 14: Topología LVS-DR.

Para implementar LVS-DR es necesario forzar un comportamiento atípico al que realizan

los protocolos de la capa de enlace de datos de la pila TCP/IP, en lo que a resolución de

direcciones MAC se refiere (ARP).

Funcionamiento de LVS-DR

El funcionamiento de LVS-DR guarda numerosas similitudes con el método DSR (3.7.2)

abordado en la parte teórica de esta misma memoria.

Así, todas las máquinas del cluster tienen asignadas en sus interfaces la misma IP virtual

(la VIP), con la salvedad de que sólo la interfaz del director responde a las peticiones ARP.

Para ello, es necesario que las interfaces con la VIP de los servidores reales no respondan a

peticiones ARP (mediante interfaces virtuales: loopback, dummy o tun). De esta manera,

el router de entrada sólo tiene conocimiento de la dirección MAC del director por lo que

Page 63: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

54 - Capítulo 6: Balanceadores de carga libres

los paquetes entrantes serán siempre enviados al balanceador. Posteriormente, él será el

encargado de redireccionarlos al servidor real que corresponda.

El dispositivo loopback (lo) no responde a peticiones ARP por defecto. Sucede así en casi

todos los sistemas operativos, excepto en Linux para las versiones 2.2.x, 2.4.x del kernel

(incluso cuando utilizamos la opción –noarp al configurar la interfaz con ifconfig).

Para saber más acerca de cómo solventar este problema y configurar dispositivos que no

respondan a peticiones ARP, en estas versiones del kernel de Linux, y los problemas que

de ahí se pueden derivar véase (6.3.4)

La VIP es la dirección IP encargada de ofrecer los servicios de red que ofrece el cluster,

por tanto, estos servicios se configuran en los servidores reales para recoger las peticiones

realizadas a esa IP. La VIP de los servidores reales está asignada a un dispositivo que no

responde a peticiones ARP (por ejemplo lo:0). ¿Cómo puede entonces el director

resolver la MAC asignada a la VIP para reenviar allí las peticiones? La solución es

sencilla: no lo hace. El balanceador no se configura para reenviar los paquetes

directamente a la VIP de los servidores reales, sino que se configura para hacerlo a las

MAC de las RIP de los mismos (eth0). El balanceador utiliza peticiones ARP para

resolver las direcciones MAC de las RIP con las cuales encapsular los datos para que

lleguen a los servidores reales. Cuando los paquetes llegan a los servidores reales, la capa

de enlace de datos de la capa OSI retira el encabezado MAC del paquete y se lo pasa a la

capa de red. Ésta ve que la dirección IP destino del paquete no se corresponde con la

dirección RIP de la interfaz por la que ha entrado (dado que el director no tocó la cabecera

IP, sólo encapsulo el paquete con la MAC), si bien, observa al mirar en su tabla de rutado

que la dirección destino (la VIP) es local, y reenvía el paquete a esa interfaz, que no es otra

que la interfaz virtual que no responde a peticiones ARP, de esta forma, el servidor real se

reenvía los paquetes a si mismo.

Cuando el paquete llega a la interfaz configurada con la VIP, el paquete es recibido por el

socket encargado de atender peticiones a ese puerto donde será procesado.

El software que ofrece el servicio de red que presta el servidor virtual y que recoge todo lo

que entra por la VIP, procesa el paquete recibido, genera la respuesta y la envía de vuelta

Page 64: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 55

al cliente por la VIP. Entonces la pila TCP/IP de Linux determina, en base a la dirección

destino del paquete (CIP) y a la tabla de rutado del sistema, que el paquete ha de ser

enviado al gateway por defecto para proseguir su camino de retorno al cliente. El gateway

por defecto está conectado a la segunda interfaz del servidor real, de manera que el paquete

retorna sin atravesar el director.

A continuación se muestra un ejemplo clarificador que explica de manera detallada cómo

trabaja LVS-DR:

El director recibe un paquete desde el cliente solicitando los servicios http que sirve el

cluster:

IP : Puerto ORIGEN IP : Puerto DESTINO Datos

CIP:3456 VIP:80 - El director consulta en la tabla de reglas del servidor virtual (IPVS) y tras aplicar el

algoritmo de scheduling pertinente, decide reenviar el paquete hacia la dirección RIP del

servidor real 1. El sistema operativo consulta entonces la cache ARP y si no encuentra en

ella la dirección MAC asociada a la RIP del servidor 1 lanzará una petición ARP

(broadcast ARP) para obtenerla.

Envabezado MAC Encabezdo IP Solicitud ARP

MAC origen (MAC DIP)

MAC destino Broadcast ARP(FF-FF-FF-FF-FF-FF)

IP origen(DIP)

IP destino(RIP)

¿Cuál es tu MAC?

Petición ARP (enviada por el director)

Envabezado MAC Encabezdo IP Respuesta ARP MAC origen (MAC RIP)

MAC destino Broadcast ARP (MAC DIP)

IP origen(RIP)

IP destino(DIP)

Esta es mi MAC (MAC RIP)

Respuesta ARP (enviada por el servidor real 1) El director, ahora, ya dispone de todos los datos necesarios para crear un paquete de capa

de enlace de datos como este:

MAC Origen MAC Destino Datagrama IP

IP : Puerto ORIGEN IP : Puerto DESTINO Datos MAC (DIP) MAC (RIP) CIP:3456 VIP:80 -

Page 65: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

56 - Capítulo 6: Balanceadores de carga libres

El paquete llega al servidor real, entonces la capa de enlace de datos retira la cabecera

MAC y entrega el paquete a la capa de red, la cual consulta su tabla de rutado y encuentra

que la VIP (destino final del paquete) es local. Entonces, la pila TCP/IP de Linux entrega

el datagrama al socket que está escuchando el dispositivo asociado a la VIP.

El servidor real procesa los datos localmente y genera un paquete de respuesta, el cual

tendrá unas cabeceras como estas:

IP:Puerto Origen IP:Puerto Destino Datos

VIP:80 CIP:3546 -

Acto seguido, el servidor real envía el paquete por la VIP, consulta su tabla de rutado y

decide que lo ha de enviar al gateway por defecto, por lo determina que el paquete deberá

salir a través de la interfaz (eth1) hacia el router/cliente. La respuesta no atraviesa el

director en su camino de regreso. El paquete le llegará al cliente con la VIP como

dirección origen, de manera que el servicio se ofrece de forma transparente al cliente que

no es consciente de que su petición ha atravesado o no el balanceador de carga.

6.3.3 LVS-Tun

Este método de reenvío permite implementar balanceadores de carga globales, es decir,

balanceadores de carga en los que los servidores reales pueden estar geográficamente

dispersos en diferentes redes. El balanceador crea túneles virtuales IP para reenviar los

paquetes a cada uno de los servidores reales del sistema balanceador. La utilización de esta

característica combinada con la utilización de protocolos como el VRRP permite crear

sistemas de alta disponibilidad más efectivos que otras soluciones como podrían ser el

Round-Robin de DNS y similares.

LVS-Tun está basado en LVS-DR y dispone de similares prestaciones en cuanto a

escalabilidad y capacidad. Si los servidores reales se encuentran en la misma red que el

director, entonces VS-DR y LVS-Tun son equivalentes en cuanto a términos de

rendimiento y facilidad de configuración. En LVS-Tun, el director o balanceador de carga

Page 66: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 57

encapsula los paquetes de petición dentro de un paquete IPIP (tunneling) antes de

reenviárselo al servidor real. El servidor real debe de ser capaz de desencapsular el paquete

IPIP, proceso que consiste en quitar el primer encabezado IP una vez que éste ha cumplido

su misión y posteriormente, utilizar el segundo. No todos los sistemas operativos son

capaces de manejar paquetes IPIP, por lo cual, es necesario que los sistemas operativos

utilizados en los servidores reales puedan hacerlo. En principio, son sólo los sistemas

operativos que utilizan un kernel Linux los capacitados para desarrollar correctamente esta

función, si bien con algunas pequeñas modificaciones, es posible utilizar sistemas

FreeBSD para implementar servidores reales en una arquitectura LVS-Tun.

Al contrario de lo que sucedía en LVS-DR, LVS-Tun permite que el director esté en una

red remota a la de los servidores reales, y que cada uno de estos pueda estar en redes

separadas e incluso que los servidores reales puedan estar en países diferentes. Si es este el

caso, los servidores reales deberán generar paquetes de respuesta con (VIP destinado a

CIP), no originados en la red VIP, con lo que los routers de los servidores reales deberán

ser reprogramados para aceptar paquetes con la dirección origen VIP. Los routers

normalmente eliminan estos paquetes como medida anti-spoofing, del mismo modo, los

servidores reales deberán contestar al cliente poniendo como dirección origen la VIP, lo

que puede representar un problema con algunos firewalls.

6.3.4 El problema con el Protocolo de Resolución de Direcciones (ARP)

El problema

Con LVS-DR y LVS-Tun, todas las máquinas, director y servidores reales, del LVS tienen

una dirección IP extra: la dirección IP virtual (VIP).

Cuando todas las máquinas y direcciones IP están en el mismo “cable”, todas comparten el

mismo segmento de la capa de enlace o dominio broadcast, por lo que pueden enviar

peticiones ARP a las demás. Si un cliente solicita una conexión a la VIP, deberá ser

entonces conectado a la VIP del director y no a la VIP de un servidor real, para ello, sólo

el director deberá contestar las peticiones ARP del router.

Page 67: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

58 - Capítulo 6: Balanceadores de carga libres

El director actúa como un router IP aceptando paquetes destinados a la VIP y enviándolos

posteriormente a un servidor real. El router por el cual el cliente accede al LVS, envía

peticiones ARP periódicamente para conocer la MAC asociada a la VIP y tener actualizada

de este modo su cache ARP, por lo que solamente el director deberá responder con su

MAC. Así, el router, tras recibir la respuesta ARP, enviará la petición de conexión al

director que, a su vez, la reenviará a uno de los servidores reales.

En cambio, si el router obtiene la dirección MAC de uno de los servidores reales en vez de

obtener la MAC del director, entonces los paquetes serán enviados directamente a ese

servidor real, ignorando el papel que debería desempeñar el director. Si los paquetes del

cliente son reenviados constantemente al mismo servidor real, el cliente estará teniendo

una sesión normal, ya que estará siempre conectado al mismo servidor real. Durante el

transcurso de la sesión, el router puede volver a enviar un broadcast ARP (petición ARP)

para mantener actualizadas sus tablas. En el caso de que en esta ocasión, responda primero

otro servidor real, los paquetes de la conexión ya establecida con el servidor real anterior,

serán enviados al servidor real que antes haya contestado al router. Si éste no es el mismo

que contestó en primer lugar la vez anterior, le llegarán los paquetes de una conexión ya

establecida y se limitará a enviar TCP RESETs en respuesta a los paquetes de una

conexión ya establecida, por lo que esa conexión finalmente se perderá.

Resumiendo, si la dirección MAC del director es la que figura siempre en las tablas ARP

del router, ya que éste ha sido el primero en responder a tal petición (por tener una CPU

más rápida, por ejemplo), entonces el LVS funcionará siempre sin necesidad de cambios

en los servidores reales, si bien no es una solución deseable para un entorno de producción.

No todas las versiones del kernel Linux se comportan de igual forma ante peticiones ARP,

por lo que supone un problema en algunas ocasiones, especialmente con la versiones más

recientes del kernel. A continuación, se explica como abordar los diferentes problemas que

aparecen con las diferentes versiones del kernel.

El problema de los ARP se resuelve en kernels 2.0.x mediante la utilización de diversos

dispositivos que no responden a las peticiones ARP (por ejemplo dummy0,tunl0,

lo:0) en donde la VIP les puede ser asignada. Para otros sistemas operativos, el flag

Page 68: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 59

NOARP del comando ifconfig debería detener las respuestas ARP, a las peticiones

ARP, en los servidores reales. En cambio, con kernels linux 2.2.x ó 2.4.x, los dispositivos

que no respondían a peticiones ARP en versiones 2.0.x del kernel, ahora sí que lo hacen.

Existe una opción -arp (NOARP) para ifconfig que (de acuerdo con las paginas man)

desactiva las respuestas a las peticiones ARP en estos dispositivos, y la opción arp que

vuelve a activarlas otra vez. Linux no siempre respeta este flag. Por ejemplo, no pueden

activarse las respuestas a peticiones ARP en dispositivos dummy0 en versiones 2.0.36 del

kernel de Linux, y no pueden desactivarse para dispositivos tunl0 en versiones 2.2.x. El

dispositivo eth0 se comporta adecuadamente en versiones 2.0.36, pero en versiones 2.2.x

o 2.4.x, responde a peticiones ARP ¡incluso aunque se le especifique que no lo haga! Este

comportamiento de no respetar el flag NOARP en los kernels 2.2.x y 2.2.4 no es

considerado como un “problema” por aquellos que desarrollan el código TCP/IP de Linux,

por lo cual no es de esperar que esto vaya a cambiar.

Otra particularidad es que en los kernels 2.0.36, los dispositivos “alias”, por ejemplo

eth0:1, podían configurarse independientemente del dispositivo primario eth0. Así, el

dispositivo eth0:1 se comportaba como si estuviera en una tarjeta de red diferente. El

comportamiento frente a peticiones ARP de los dispositivos alias podía ser configurado de

manera independiente a como se configurase el dispositivo primario eth0. Con el kernel

2.2.x, los dispositivos alias son ahora sólo nombres alternativos. Si se cambia una opción

(por ejemplo -arp), activándola o desactivándola, para un alias (o para el dispositivo

primario), todos los dispositivos alias también modifican su configuración. Con los kernels

2.2.x la configuración de los dispositivos alias pertenece al dispositivo primario (es decir

es sólo un dispositivo con varias IPs).

Cuando LVS corría sobre máquinas con kernel 2.0.36, la VIP solía configurarse como un

alias (lo:0, tunl0) al dispositivo ethernet principal (eth0), permitiendo a los nodos

del LVS disponer de una única tarjeta de red.

Desde entonces, hay que tener cuidado cuando sólo se dispone de una sola tarjeta de red en

los servidores reales (lo mas usual). En un servidor real, con una sola tarjeta de red eth0,

configurada con la RIP, ésta debe contestar a peticiones ARP (para poder recibir paquetes).

Page 69: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

60 - Capítulo 6: Balanceadores de carga libres

Si se crea un alias eth0:1 ó lo:0 para soportar la VIP, éste también contestará a las

peticiones ARP, incluso si se configuró con –noarp mediante ifconfig. Resumiendo,

si un servidor real está corriendo sobre un kernel 2.2.x y tiene la VIP en un ip_alias,

entonces la VIP del servidor real contestará a las peticiones ARP recibidas, que fueron

enviadas anteriormente por el router.

Con kernels 2.4, la utilización de alias IP sigue estando disponible, si bien presenta las

mismas limitaciones que teníamos con los kernels 2.2.x. Por otro lado, las nuevas

herramientas que vienen con 2.4 (iproute2 e ip_tables) no reconocen alias, los cuales han

sido reemplazados por IPs secundarias.

Las soluciones

Puede abordarse el problema de los ARP de varias maneras, de entre las diferentes

soluciones posibles, destacarían los siguientes métodos.

Detener las respuestas desde los servidores reales ante peticiones ARP para resolver

la VIP.

- Configurar dispositivos para que no respondan peticiones ARP (NOARP

flag).

- Parchear las versiones 2.2.x ó 2.4.x del kernel.

Ocultar la VIP de los servidores reales para que estas no vean las peticiones ARP.

- Poner una Network Interface Card (NIC) extra en los servidores para

soportar la VIP.

- Poner los servidores reales en una red diferente a la de la VIP (Lars’

Metod)

- Cebar al router del director con la MAC correcta para la VIP (la de director).

- Hacer que los servidores reales contesten con la MAC del director.

- Detener las peticiones ARP a la VIP hechas a los servidores reales.

-Modificar tabla de routado del router.

Page 70: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 61

- Permitir a los servidores reales aceptar paquetes con una IP destino igual a la VIP,

incluso si el servidor real no tiene una interfaz con esa IP.

- Proxy Transparente, (Horms’ Method)

Configurar dispositivos para que no respondan peticiones ARP (NOARP flag)

Esta es la solución que se aplicaba en versiones 2.0.x del Kernel. Consistía en la

posibilidad de poder configurar diferentes dispositivos de manera que no respondieran a

peticiones ARP. Lo normal era utilizar estos dispositivos para soportar la VIP, por ejemplo

un alias al dispositivo loopback lo:0 al que asignarle la VIP. Actualmente, este

dispositivo ya no se comporta así. Actualmente, en los kernels 2.2.x y 2.4.x, si se asigna la

VIP al dispositivo loopback mediante un alias, y se envía una petición ARP a la VIP, ésta

contestará diciendo que su MAC es la del dispositivo eth0. Ver (anexo VII)

Esta solución es sólo aplicable en aquellas situaciones en las que los servidores reales están

corriendo versiones 2.0.x del kernel de linux, lo cual es poco probable si tenemos en cuenta

que la última versión estable liberada en el momento de escribir estas líneas es la 2.4.20.

Ocultar dispositivos frente a peticiones ARP en kernels 2.2.x ó 2.4.x parcheados

Algunas de las soluciones arriba enunciadas, implican parchear el kernel de los servidores

reales. El parche que se aplica a los servidores reales (el parche “hidden”) es diferente al

que se aplica en el director (el parche “ipvs”). El primero evita que un dispositivo

determinado conteste a peticiones ARP, el segundo convierte al kernel del director en un

balanceador de carga.Para hacer que los dispositivos no respondan a peticiones ARP en los

servidores reales es necesario proceder de la siguiente manera:

Parchear el kernel con el parche adecuado la versión correspondiente, ver (kernels 2.2.x ó

kernels 2.4.x), y posteriormente ocultar el dispositivo de la siguiente manera:

#para activar la propiedad que permite ocultar dispositivos

echo 1 > /proc/sys/net/ipv4/conf/all/hidden

#para hacer que el dispositivo lo:0 no responda ARPs

echo 1 > /proc/sys/net/ipv4/conf/<nombre_interface>/hidden

Page 71: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

62 - Capítulo 6: Balanceadores de carga libres

Para comprobar que el dispositivo ocultado lo:0 no está respondiendo a peticiones ARP,

y suponiendo que se asigna la VIP al dispositivo lo:0 se puede hacer lo siguiente:

- Antes de ocultar el dispositivo lo:0, se envía un ping desde otra máquina a la VIP,

entonces se ejecuta el siguiente comando: arp -a, lo cual muestra que la dirección MAC

para la VIP es la del dispositivo eth0 de la máquina desde la cual se envió el ping.

- Se borra la entrada para la VIP de la cache arp con arp –d <VIP>. Y se comprueba

que esta entrada ya no está en la cache arp -a.

- Se envía un ping nuevamente y se comprueba como vuelve a aparecer una entrada MAC

para la VIP.

- Entonces se oculta el dispositivo lo:0 tal como se ha explicado:

echo 1 > /proc/sys/net/ipv4/conf/all/hidden

echo 1 > /proc/sys/net/ipv4/conf/lo:0/hidden

y se vuelve a enviar un ping a la VIP desde otra máquina. Lo más probable es la VIP

conteste al ping ya que la entrada para la VIP continua estando en la cache arp de la otra

máquina.

- Se borra entonces la entrada arp –d -VIP y se hace ping de nuevo, en esta ocasión no

se debería obtener respuesta.

Obtener el parche para Kernels 2.2.x

Dado que el parche hidden para kernels mayores o iguales a 2.2.14 forma parte

actualmente de la distribución Linux, se puede utilizar esta característica con un kernel

estándar. Los parches ARP permiten ocultar dispositivos frente a peticiones ARP,

retomando la característica no_arp de los kernels 2.0.x.

Obtener el parche para Kernels 2.4.x

El parche hidden de Julian para el kernel 2.2.x no esta incluido en los kernels 2.4.x. Se

puede descargar el mismo desde <http://www.ssi.bg/~ja/#hidden>. Actualmente este

parche se distribuye con el IPVS Netfilter module para kernel 2.4, y la última versión

disponible en estos momentos se puede bajar directamente desde:

Page 72: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 63

<http://www.linuxvirtualserver.org/software/kernel-2.4/ipvs-1.0.7.tar.gz>.

Una vez descomprimido el tarball se puede encontrar en el directorio:

ipvs-x.x.x/contrib/patches/hidden-x.x.x.diff.

La última versión del parche hidden se encontrará siempre en la web de software y parches

de Julian Anastasov <http://www.ssi.bg/~ja/#hidden>.

Por ejemplo, en el caso de que se esté parcheando un kernel 2.4.5 con los archivos de

ipvs-1.0.7, se seguirán los siguientes pasos:

cd /usr/src/linux

patch -p1 <../ipvs-1.0.7/contrib/patches/hidden-2.4.5-1.diff

Después, bastará recompilar el kernel utilizando las mismas opciones que se seleccionaron

para el kernel 2.4 del director. Ahora ya se pueden ocultar las interfaces (ver, Ocultar

dispositivos frente a peticiones ARP en kernels 2.2.x ó 2.4.x parcheados, en este mismo

apartado)

Poner una NIC extra en los servidores para soportar la VIP

Consiste en añadir otra tarjeta de red en los servidores reales. El único motivo por el que se

añade este dispositivo de red (eth1), es para poder configurar una VIP en el servidor.

Mientras que esta NIC adicional, no sea conectada al medio físico o se introduzca una

entrada para ella en la tabla de rutado del kernel, no responderá a peticiones ARP. Es decir,

la NIC no será conectada hub/switch. De esta manera, se consigue que esta interfaz no

responda a peticiones ARP en un kernel 2.2.x. Si bien será esta VIP la que ofrezca los

servicios de red a través de la eth0 y no a través de la eth1, ya que la eth0 no

responderá con su MAC cuando se reciba una petición ARP para la VIP (como sucedía si

la VIP era soportada por lo:0).

Lars’ Method

Este método requiere poner a los servidores virtuales en una red diferente, ocultándola de

esta manera de las peticiones ARP.

Page 73: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

64 - Capítulo 6: Balanceadores de carga libres

Este método fue implementado en un principio para LVS-Tun, si bien es también válido

para LVS-DR. Con este método, la topología del servidor virtual queda como aparece en la

siguente figura:

realserver realserverrealserver

director

c lient

router

V IP 192.168.1.150 eth0

DIP 10.1.1.1 eth1

R IP 10.1.1.4 eth0R IP 192.168.1.150 lo:0

R IP 10.1.1.3 eth0R IP 192.168.1.150 lo:0

R IP 10.1.1.2 eth0R IP 192.168.1.150 lo:0

CIP

router router router

Hacia el Cliente

Figura 15: Lars’ Method.

Con el método Lars’, el director dispone de dos tarjetas de red, lo que permite que los

servidores reales pertenezcan a otra red diferente. La VIP pertenece a la red

192.168.1.0/24 y las eth0 de los realservers a la 10.1.1.0/24. Todas los

dispositivos de red responden a peticiones ARP, sin embargo las peticiones ARP del router

a la VIP no llegan a los realservers dado que las RIP de los servidores reales no son

accesibles desde Internet.

Este método requiere que el director no reenvíe paquetes para la VIP, esto es fácil de

implementar dado que el director dispone de dos NICs.

Page 74: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 65

Hacer que los servidores reales contesten con la MAC del director

Se puede forzar a que cuando se recibe una petición ARP para resolver la MAC de la VIP,

se conteste con la MAC del director. De esta manera, los servidores reales responderán con

la MAC del director frente a peticiones ARP para la VIP. Para ello se pueden utilizar

entradas estáticas en la cache ARP, que se pueden conseguir de dos formas:

#arp –s director.acade.net 00:20:18:28:04:E9

otra forma de hacer lo mismo es editando el archivo /etc/ethers de los clientes:

director.acade.net 00:20:18:28:04:E9

En los ejemplos, se da por supuesto que se tiene una entrada en el archivo /etc/hosts,

el cual mapea la dirección IP del director con el nombre y dominio del director

director.acade.net. Si no se dispone de la entrada, basta con poner la dirección IP

en lugar de su nombre.

Este método no requiere parchear el kernel de los servidores reales así como tampoco

necesita de una NIC adicional como en el método Lars’, si bien en un entorno de

producción con un algún mecanismo de recuperación ante fallos, como Heartbeat, se hace

necesario un método adicional que cambie las entradas ARP estáticas de la cache de los

servidores reales. Para este tipo de configuraciones (failover), el método Horms’

proporciona un mayor grado de flexibilidad.

Modificar tabla de routado del router

Si se dispone de un router propio de salida que incorpora de dos NICs, puede utilizarse una

de ellas para el director y la otra para los realservers, de manera que las peticiones a la

VIP sean enrutadas hacia el director.

Proxy Transparente (TP), Horms’ Method

TP se enfrenta al problema de las peticiones ARP de forma parecida a la que lo hacía el

método que forzaba a los dispositivos a no responder a peticiones ARP, sólo que en vez de

hacerlo ocultando esos dispositivos, al colocarlos en una red distinta, lo hace forzando a

Page 75: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

66 - Capítulo 6: Balanceadores de carga libres

que estos dispositivos sólo acepten peticiones a determinados servicios. Es decir, mediante

ipchains o iptables, es posible configurar una interfaz para que sólo responda al servicio

que se desea, ignorando cualquier otra petición, ya sea ARP, ICMP, etc.

El método Horms’ utiliza también la característica transparent proxy de ipchains que

permite aceptar paquetes con destino igual a la VIP, por un host (director o realserver) que

no tiene un dispositivo con esa IP. Este método puede ser utilizado en los servidores reales

para solventar el problema con los ARPs o para permitir al director aceptar paquetes para

la VIP. Cuando se utiliza en el director, trasnparent proxy le permite ser el gateway por

defecto del LVS-DR (véase 13.4.2 del LVS-HOWTO) [7]

Una de las ventajas de este método, es que facilita el cambio de reglas en arquitecturas

faliover en las cuales se utiliza un balanceador de backup para asegurar la disponibilidad

del servicio.

Desafortunadamente, las versiones de proxy transparente en LVS para kernels 2.2 y 2.4 son

completamente distintas. Así, puede utilizarse proxy transparente en los kernels 2.2, tanto

en los servidores reales como en el director, mientras que el kernels 2.4.x, sólo en los

servidores reales.

6.4 Persistencia en LVS

En una situación de balanceo de carga normal, se asume que cada conexión de red es

independiente de las demás, de modo que cada conexión puede ser asignada a un servidor

diferente si el algoritmo de scheduling así lo cree conveniente. No obstante, en ocasiones

hay servicios que requieren que todas las conexiones de un mismo cliente sean asignadas al

mismo servidor real, lo cual recibe el nombre de persistencia de sesión. LVS identifica las

conexiones de los clientes en base al contenido de las cabeceras de los protocolos IP, TCP

y UDP, y utiliza por lo tanto métodos de persistencia basados en IP origen para garantizar

la persistencia de los servicios que la requieren.

Page 76: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 67

El resultado de aplicar un método de persistencia en LVS, implica que el cliente se

conectará al mismo servidor real para diferentes conexiones TCP o UDP, entendiendo

como conexión TCP el tiempo que transcurre desde que se establece la conexión TCP a

tres bandas hasta que ésta finaliza, ya sea de manera acordada TCP FIN, o de forma

abrupta, TCP RESET. Al conjunto de conexiones TCP/UDP realizadas, necesarias para la

correcta prestación de un determinado servicio, se le conoce como sesión, y al mecanismo

que permite garantizar que todas estas conexiones sean reenviadas a un mismo servidor,

como método de persistencia de sesión.

Servicios que requieren aplicar mecanismos para asegurar la persistencia de sesión

Existen tres situaciones en las que es necesario aplicar mecanismos de persistencia para la

correcta prestación de un servicio ofrecido LVS:

- Cuando el cliente necesita acceder siempre a al mismo servidor, debido a que sólo éste

dispone de la información intercambiada con el cliente durante la prestación de un

determinado servicio. Por ejemplo, debido al intercambio de llaves realizado durante una

sesión https .

- Si el cliente solicita un servicio que se ofrece a través de dos puertos diferentes, los cuales

han de ser abiertos en el mismo servidor real. Por ejemplo, el servicio FTP activo (puertos

20, 21), o el FTP pasivo (puerto 21 y otro puerto alto por encima del 1023), o bien los

servicios de un sitio de e-commerce (puertos 80, 443).

- Cuando un mismo cliente realiza conexiones pertenecientes a una misma sesión, pero

utiliza direcciones IP origen diferentes en cada una de las conexiones, debido a que está

accediendo a Internet a través de un proxy diferente en cada conexión. Esta situación se la

conoce también como el megraproxy problem, la cual es descrita en el apartado del mismo

nombre de esta memoria (3.8.2). Una forma de solucionar este problema, es asumiendo

que los diferentes servidores proxy por los cuales sale el cliente, pertenecen a la misma red.

Entonces, es posible configurar al balanceador para que considere a todas las conexiones,

realizadas desde un rango de direcciones de red determinado, como si fueran de un mismo

cliente u origen virtual (virtual source). En LVS, se conoce a este tipo de persistencia

como persistent granularity.

Page 77: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

68 - Capítulo 6: Balanceadores de carga libres

FTP es un ejemplo muy claro para entender la necesidad del uso de la persistencia. El

cliente establece dos conexiones con el servidor, una de ellas es la conexión de control

(puerto 21) para el intercambio de la información de control y la otra es la conexión de

datos (usualmente el puerto 20) para la transferencia de los datos. En el FTP activo, el

cliente informa al servidor del puerto por el que le escuchará, la conexión de datos es

inicializada por el servidor desde el puerto 20 y dirigida al puerto que el cliente le informó.

SSL es otro servicio que necesita conectarse siempre al mismo servidor durante toda la

sesión debido al uso de las llaves. Cuando se establece una conexión SSL, en el puerto 443

para servidores Web seguros y en el puerto 465 para servidores de correo seguro, una llave

para la conexión debe de ser escogida e intercambiada. Las últimas conexiones para el

mismo cliente son garantizadas por el servidor durante la vida de la llave SSL.

Mecanismos de persistencia implementados en LVS

LVS no puede interpretar el contenido de los paquetes más allá de la capa de transporte,

por este motivo no sabe determinar el inicio y finalización de sesiones. LVS implementa

métodos de persistencia basados en IP origen (3.8.2). LVS permite implementar Persistent

Client Connection (PCC) o Persistent Port Connection (PPC), en función de la versión del

kernel utilizada. De este modo, los kernels anteriores o iguales a la versión 2.2.10 sólo

permitían PCC, en cambio los kernels iguales o superiores a la versión 2.2.12 implementan

PPC, pudiendo implementar también PCC poniendo un ‘0’ al configurar el número de

puerto mediante la opción –p de ipvsadm (6.7). LVS no es capaz de implementar, por si

sólo, el método de agrupación de puertos descrito en el apartado (3.8.2), pero sí mediante

la utilización de marcas de firewall (6.5).

Funcionamiento de los mecanismos de persistencia en LVS

La tabla de sesiones utilizada por LVS muestra el estado de las conexiones de los clientes

que atraviesan el balanceador. Cada conexión balanceada por LVS se refleja mediante una

entrada en esta tabla de sesiones (hash table), constado cada una de ellas de los siguientes

campos:

Page 78: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 69

IPVS connection entries

pro expire state source virtual destination

El primer campo especifica el protocolo TCP o UDP. El segundo indica el tiempo que la

regla permanecerá en la tabla, si no se recibe otro paquete que coincida con el resto de

campos. Si se recibe un paquete que case con una entrada en la tabla, el campo state

puede cambiar de valor. El cambio de estado (state) implica reajustar el valor del

contador (timeout), mostrado en el campo expire. La siguiente captura muestra el

cambio de estados por los que va pasando una sesión, y el reajuste que del temporizador

(expire) en función del cambio:

pro expire state source virtual destination TCP 14:56 ESTABLISHED 192.168.3.157:1044 192.168.3.150:80 192.168.10.101:80 TCP 14:49 ESTABLISHED 192.168.3.157:1044 192.168.3.150:80 192.168.10.101:80 TCP 01:59 FIN_WAIT 192.168.3.157:1044 192.168.3.150:80 192.168.10.101:80 TCP 00:05 CLOSE 192.168.3.157:1044 192.168.3.150:80 192.168.10.101:80 TCP 00:02 CLOSE 192.168.3.157:1044 192.168.3.150:80 192.168.10.101:80 TCP 00:00 CLOSE 192.168.3.157:1044 192.168.3.150:80 192.168.10.101:80

Cuando el balanceador detecta el fin de una conexión TCP no la borra de la tabla, sino que

la mantiene durante 10 segundos, pasado este tiempo y si no recibe un nuevo paquete que

case con el resto de campos de la tabla (VIP, IP origen y puerto), elimina la entrada. Para

saber como especificar servicios de manera persistente véase (6.4 y 6.7).

Particularidades

- Persistencia en ftp

El método más optimizado para ofrecer el servicio ftp, en función de lo descrito hasta

ahora, sería recurriendo al agrupado de puertos mediante marcas de firewall, sin embargo,

existe otra posibilidad que es la de cargar el módulo ip_masq_ftp (para versiones

2.2.x), o el módulo ip_vs_ftp (en versiones 2.4). Estos módulos permiten ofrecer el

servicio ftp en LVS-NAT aplicando únicamente la persistencia a los puertos necesarios

para la prestación del servicio ftp (20 y 21 para el modo activo, 21 y un puerto alto para el

modo pasivo). Se procederá de la siguiente forma para configurar el servicio ftp en el

balanceador de carga (director1).

Page 79: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

70 - Capítulo 6: Balanceadores de carga libres

root@director1:~# modprobe ip_vs_ftp root@director1:~# lsmod Module Size Used by Not tainted ip_vs_ftp 4516 0 (unused) ip_vs_rr 1476 2 (autoclean) ip_vs 77272 5 (autoclean) [ip_vs_ftp ip_vs_rr]

Posteriormente, se configurará mediante ipvsadm, el comando que establece el servicio

ftp como persistente:

root@director1~#ipvsadm -A -t 192.168.3.150:21 -p 600 root@director1~#ipvsadm -a -t 192.168.3.150:21 -r 192.168.10.101 –m root@director1~#ipvsadm -a -t 192.168.3.150:21 -r 192.168.10.102 -m

- Persistencia http

Con la primera versión del protocolo http, HTTP 1.0, cuando el cliente solicitaba la

descarga de una página, se establecía una conexión TCP para descargar cada uno de los

objetos que contenía. No tenía demasiado sentido establecer una conexión TCP para

descargar el poco código de la página, cerrar la conexión y volver a establecer conexiones

nuevas para descargar el resto de objetos que componen la página (por ejemplo, imágenes).

Con HTTP 1.1 [9] las conexiones persistentes son posibles. Los extremos de la

comunicación cliente/servidor negocian para ver si la conexión persistente está disponible.

El servidor http mantiene la conexión abierta tras haber enviado toda la información

solicitada, por un periodo de tiempo de 16 segundos, normalmente (KeepAliveTimeout), si

pasado este tiempo el navegador del cliente no solicita nuevos objetos, la conexión se

cierra. El cliente puede cerrar la conexión en cualquier momento si así lo desea (por

ejemplo cuando ya tenga todos los objetos que conforman la página).

Si se solicita una página web alojada en el cluster desde un navegador tan difundido como

pueda ser Microsoft Internet Explorer y posteriormente se visualiza el contenido de la tabla

de sesiones del balanceador de carga LVS, se observa lo siguiente:

root@director1:~# ipvsadm -lcn

IPVS connection entries

pro expire state source virtual destination

TCP 14:59 ESTABLISHED 192.168.3.157:1063 192.168.3.150:80 192.168.10.102:80

TCP 14:59 ESTABLISHED 192.168.3.157:1062 192.168.3.150:80 192.168.10.101:80

Page 80: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 71

Se observa que el navegador ha establecido dos conexiones TCP para obtener el contenido

de la página web, lo que conlleva a plantearse la siguiente pregunta, ¿Es que Microsoft

Internet Explorer no implementa el protocolo HTTP 1.1? Antes de salir corriendo a

anunciar esta afirmación a bombo y platillo, sería recomendable continuar leyendo, pues

no es eso lo que está sucediendo. Lo que ocurre, es que los navegadores web lanzan

múltiples conexiones TCP concurrentes hacia el servidor, en su carrera por ser el

navegador más rápido en mostrar las páginas al cliente. Por otra parte, cada una de esas

conexiones ha utilizado el protocolo HTTP 1.1 para descargar diferentes objetos, de lo

contrario habría establecido tantas conexiones como objetos tuviese la página.

Para finalizar éste apartado, se muestran a continuación algunos ejemplos que permiten

configurar algunos servicios de forma persistente utilizando diferentes métodos de reenvío.

Estos ejemplos han sido extraídos de:

<http://www.linuxvirtualserver.org/docs/persistence.html>

- Persistencia http en LVS/NAT ipvsadm -A -t virtualdomain:www –p ipvsadm -a -t virtualdomain:www -r 192.168.1.2 –m ipvsadm -a -t virtualdomain:www -r 192.168.1.3 –m ipvsadm -a -t virtualdomain:www -r 192.168.1.4 –m

- Persistencia http en LVS/TUN ipvsadm -A -t virtualdomain:www –p ipvsadm -a -t virtualdomain:www -r 192.168.1.2 –I ipvsadm -a -t virtualdomain:www -r 192.168.1.3 –I ipvsadm -a -t virtualdomain:www -r 192.168.1.4 –I

- Persistencia ftp en LVS/DR ipvsadm -A -t virtualdomain:ftp -p 540 ipvsadm -a -t virtualdomain:ftp -r 192.168.1.2 –g ipvsadm -a -t virtualdomain:ftp -r 192.168.1.3 –g ipvsadm -a -t virtualdomain:ftp -r 192.168.1.4 –g

- Persistent Client Connection (PCC) en LVS/DR ipvsadm -A -t virtualdomain:0 –p ipvsadm -a -t virtualdomain:0 -r 192.168.1.2 –g ipvsadm -a -t virtualdomain:0 -r 192.168.1.3 –g ipvsadm -a -t virtualdomain:0 -r 192.168.1.4 –g

Page 81: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

72 - Capítulo 6: Balanceadores de carga libres

- Persistent granularity (Megaproxy Problem) ipvsadm -A -t virtualdomain:www -p -M 255.255.255.0 ipvsadm -a -t virtualdomain:www -r 192.168.1.2 ipvsadm -a -t virtualdomain:www -r 192.168.1.3 ipvsadm -a -t virtualdomain:www -r 192.168.1.4

6.5 Firewall marks

El método original para configurar el balanceador de carga LVS consiste en el uso de

comandos ipvsadm junto con una o varias direcciones IP virtuales. De esta manera, es

posible configurar diferentes servicios bajo una misma dirección IP virtual (VIP) o

configurarlos bajo diferentes direcciones IP virtuales (VIPs). Por otro lado, este método no

es muy escalable si el número de VIPs o servicios es muy elevado, debido a que se deberán

de configurar múltiples VIP en el dispositivo de red. Además, las conexiones para cada

servicio son independientes unas de otras, a no ser que se recurra a métodos de persistencia

basados en IP origen. Es por eso que el método basado en la VIP, no es el más

recomendable en muchas ocasiones.

En abril de 2000, Horms introdujo un método más flexible que mediante marcas de

firewall (fwmarks), permitía administrar de manera más simple y flexible un elevado

número de servicios. Más tarde, Ted Pavlic mostró como utilizar fwmarks para agrupar

servicios, de forma que estos fueran tratados conjuntamente por un mismo servidor real.

De esta manera, LVS puede utilizar el método de agrupamiento de puertos (3.8.2).

Fwmark es utilizado actualmente para:

- Agrupar servicios bajo un mismo balanceador de carga. Por ejemplo:

- Grupo 1, puertos 80, 443 para sitios web de e-commerce.

- Grupo 2, puertos 20, 21 para un servidor FTP.

- Agrupar un gran número de direcciones IP virtuales (VIP).

Page 82: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 73

Es preferible preparar a LVS mediante fwmarks antes que hacerlo con el método

tradicional, basado en la VIP, salvo en aquellos casos en los que únicamente configuremos

servicios de un solo puerto, o servicios que no requieran de ningún método de persistencia.

Cuando se usa el método basado en fwmarks, no tiene por qué existir una interfaz en el

servidor virtual configurada con la VIP. Para utilizar fwmarks, es necesario que los

paquetes del cliente sean entregados y aceptados por el balanceador, el cual no tiene la IP

destino de los paquetes del cliente (la VIP configurada). De esta manera, mediante

ipchains (kernels 2.2) o iptables (kernels 2.4), se configura al balanceador para recoger,

examinar y marcar los paquetes enviados por los clientes. Posteriormente, los paquetes

serán enviados a IPVS, que los balanceará basándose en la IP origen, IP destino, puerto y

en la marca colocada por el firewall (iptables o ipcahins). Es fácil darse cuenta de lo

sencillo que es ahora realizar port grouping, ya que tan solo hay que crear mediante

iptables o ipchains, las reglas que marquen de igual forma a aquellos paquetes

pertenecientes a los servicios que deseamos agrupar. Dado que las marcas de firewall no

son más que números, es fácil para el balanceador saber discernir qué paquetes han de ser

considerados como pertenecientes al mismo servicio, y que por lo tanto deben de ser

reenviados hacia el mismo servidor real.

¿Cómo enrutar paquetes hacia la VIP de un balanceador cuando éste carece de ella?

En condiciones normales, los mecanismos de rutado del router no enviarán los paquetes de

los clientes hacia el balanceador de carga, ya que éste carece de una interfaz configurada

con la VIP (destino de los paquetes), y no puede responder a las peticiones ARP que lanza

el router. Es posible modificar convenientemente la configuración del router para lograr

que envíe paquetes al balanceador. Hay dos formas de conseguirlo:

- Colocar la MAC del director en el router forzando al balanceador de carga a

contestar a las peticiones ARP con su MAC. Ésto es posible modificando el archivo

/etc/ethers en el director o balanceador de carga.

- Añadir una regla de rutado en el router.

Page 83: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

74 - Capítulo 6: Balanceadores de carga libres

¿Cómo hacer que el balanceador acepte los paquetes que no están destinados a una

dirección IP de su propiedad?

La forma más sencilla de implementar fwmarks, si únicamente se ofrecen servicios por la

VIP, es hacerlo configurando una interfaz de red con la VIP en el balanceador. Por otra

parte, existen varios métodos para permitir la entrega local de un paquete que ha llegado a

una máquina que no es la dueña de la IP destino del paquete.

- Si se van a utilizar un número reducido de VIPs, es posible ponerlas en un dispositivo de

red o bien en el dispositivo virtual lo.

- Como se muestra a continuación, si se requiere de un rango de direcciones IP, es posible

configurar un alias para soportar todas las direcciones de una red, sin necesidad de asignar

una IP a dicho dispositivo.

ifconfig lo:0 192.168.1.0 netmask 255.255.255.0

Para ver algunos ejemplos de cómo utilizar iptables o ipchains para marcar diferentes tipos

de paquetes véase el capítulo 8 del LVS-HOWTO [7].

6.6 Algoritmos de Scheduling implementados por LVS

El director es la máquina encargada de balancear la carga entre los diferentes servidores

reales. Para hacerlo se basa en conjunto secuencial de normas, llamadas algoritmos de

scheduling, que permite al director, decidir en cada momento a que servidor debe reenviar

los paquetes pertenecientes a una misma conexión. LVS (ipvsadm) puede implementar

hasta ocho distintos tipos de algoritmos.

Round-Robin (rr)

El algoritmo de Round-Robin envía cada petición de entrada al siguiente servidor de la

lista. Por ejemplo, en el supuesto de tener tres servidores, A, B y C, la primera petición la

recibiría el servidor A, la segunda el B y la tercera el C. El ciclo se vuelve a repetir

empezando nuevamente por el servidor A. Virtual server proporciona algunas ventajas

sobre el tradicional Round-Robin DNS.

Page 84: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 75

Weighted Round-Robin (wrr)

Este algoritmo está diseñado para mejorar el manejo de servidores con diferentes

capacidades de proceso. A cada servidor se le puede asignar un peso, que es un valor

entero que indica la capacidad de proceso y que determina la proporción del trabajo que le

será asignado. A mayor peso, se le envían más peticiones.

Weighted Round-Robin es mejor que Round-Robin cuando la capacidad de proceso de los

servidores reales es diferente. Actualmente, el Round-Robin es un caso particular del

Weighted Round-Robin, en el cual todos sus pesos son iguales.

Least-Connection (lc)

Dirige las conexiones de red al servidor con el menor número de conexiones. Este

algoritmo es de naturaleza dinámica ya que necesita contar las conexiones activas para

cada servidor dinámicamente, y es adecuado en el caso de que la carga varía notablemente.

Weighted Least-Connection (wlc)

El Weighted Least-Connection scheduling es un perfeccionamiento del Least-Connection

en el cual se le puede asignar un peso variable a cada servidor real.

Locality-Based Least-Connection (lblc)

Asigna trabajos destinados para la misma IP para el mismo servidor, si el servidor no está

sobrecargado y disponible. En caso contrario, lo asigna al servidor con menos trabajo y lo

mantiene para designaciones futuras.

Locality-Based Least-Cocnnection with Replication (lblcr)

Asigna trabajos destinados para la misma IP al servidor Least-Connection configurado

para esa IP. Si todos los servidores están sobrecargados, repone al servidor con menos

trabajo y lo añade a la lista de disponibles.

Destination Hashing (dh)

Asigna trabajos a los servidores a base de buscar una asignación estática, por la IP destino,

en la tabla hash.

Page 85: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

76 - Capítulo 6: Balanceadores de carga libres

Source Hashing (sh)

Asigna trabajos a los servidores a base de buscar una asignación estática, por la IP origen,

en la tabla hash.

6.7 Ipvsadm

Ipvsadm es la herramienta para administrar el Servidor Virtual Linux (LVS) que permite

configurar, mantener y visualizar el estado de la tabla del servidor virtual del kernel de

Linux. Así, mediante la interfaz de usuario ipvsadm, es posible configurar los servicios y

servidores que direccionará IPVS, el peso asignado a cada servidor, útil cuando unos

servidores son más rápidos que otros, y el algoritmo de scheduling utilizado para elegir el

servidor real al que deberán reenviarse los paquetes tratados por el balanceador.

Ipvsadm puede ser invocado desde la línea de comandos o utilizado para crear scripts de

inicialización que definan el comportamiento de IPVS.

Podemos utilizar ipvsadm para realizar las siguientes funciones:

- Añadir servicios

- Desactivar servicios

- Borrar servicios

- Lanzar o detener el demonio de sincronización de estado

- Salvar la configuración actual del LVS (ipvsadm-save)

- Restaurar una configuración para el LVS (ipvsadm-restore)

A continuación, se explica con la ayuda de algunos ejemplos, cómo trabajar con ipvsadm

para configurar y administrar el servidor virtual. La estructura de este capítulo está

inspirada en el manual de ipvsadm (anexo II). Para una información más detallada de

todas las opciones de la herramienta ipvsadm consúltese el mismo.

El formato de ejecución de ipvsadm es el siguiente:

ipvsadm COMANDO PARAMETROS

Page 86: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 77

Que en función del comando (MAYÚSCULAS/minúscula) da lugar a dos formatos básicos

de ejecución:

ipvsadm COMANDO [protocolo] dirección-del-servicio [método-de-scheduling]

[opciones de persistencia]

ipvsadm comando [protocolo] dirección-del-servicio dirección-del-servidor

[método de reenvío] [peso]

El primero de ellos define los servicios del LVS y el algoritmo utilizado para asignar, a un

servidor real determinado, las peticiones a esos servicios. Opcionalmente, si el servicio

requiere de persistencia, es posible definir el timeout y la máscara de red.

El segundo formato de instrucción, especifica los servidores reales que han de ser

asociados a cada uno de los servicios virtuales prestados por el LVS. Cuando se añade un

servidor real, el método de reenvío debe de ser especificado o de lo contrario se tomarán

los valores por defecto.

Si se ejecuta ipvsadm sin especificar ningún comando, el programa lista los servicios

configurados y los servidores reales que están configurados para prestarlos. Lo que

equivale a llamar a ipvsadm con el comando –L ó –l.

root@director1:~# ipvsadm IP Virtual Server version 1.0.6 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.3.150:ftp rr persistent 600 -> rserver1.acade.net:ftp Masq 5 0 0 TCP 192.168.3.150:http rr -> rserver1.acade.net:http Masq 5 0 0 -> rserver2.acade.net:http Masq 5 0 0

En esta captura se muestra un LVS configurado para ofrecer los servicios ftp y http. Para

cada servicio se listan los servidores reales a los que LVS reenviará las peticiones. En el

ejemplo, las conexiones ftp se redirigirán al rserver1, mientras que las conexiones http

serán reenviadas tanto al rserver1 como al rserver2. El algoritmo de scheduling

utilizado en ambos casos es Round Robin rr.

Page 87: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

78 - Capítulo 6: Balanceadores de carga libres

Conjuntamente a este comando, se pueden especificar otros parámetros. Así, si se utiliza –

lc se obtendrá una lista de las conexiones establecidas en el LVS.

root@director1:~# ipvsadm -lc IPVS connection entries pro expire state source virtual destination TCP 07:14 NONE calipso.odisea.net:0 192.168.3.150:0 rserver1.acade.net:0 TCP 06:40 NONE sem_alpha1.acade.net:0 192.168.3.150:0 rserver1.acade.net:0 TCP 12:15 ESTABLISHED sem_alpha1.acade.net:1033 192.168.3.150:ftp rserver1.acade.net:ftp TCP 00:09 TIME_WAIT calipso.odisea.net:1099 192.168.3.150:ftp-data rserver1.acade.net:ftp-data TCP 13:09 ESTABLISHED calipso.odisea.net:1095 192.168.3.150:ftp rserver1.acade.net:ftp

El ejemplo muestra dos equipos conectados al único servidor real que presta servicio de ftp

en el LVS. En el primero de los formatos que se han descrito, los comandos son letras en

mayúsculas, en el segundo minúsculas. De esta manera es fácil reconocer si es una

instrucción de configuración de servicio virtual, o bien una de especificación de servidor

virtual.

A continuación se detallan algunos de los COMANDOS (o comandos básicos) para

configurar y visualizar el estado del LVS.

COMANDOS

-A, --add-service

Añade un servicio virtual que queda definido únicamente por la tripleta: Dirección IP,

número de puerto y protocolo. Alternativamente, un servicio virtual podría ser definido por

una firewall-mark (6.5).

root@director1:~#ipvsadm –A –t 192.168.3.150:80 –s rr

Este comando configura el balanceador de carga con el servicio http, y de esta manera

IPVS se hará cargo de todos los paquetes destinados a la IP 192.68.3.150 dirigidos al

puerto 80 (http). Posteriormente con ipvsadm –a, se han de añadir los servidores

reales a los que se reenviarán las peticiones al servicio que se acaba de configurar.

Page 88: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 79

-D, --delete-service

Este comando elimina un servicio virtual así como cualquier servidor real asociado y debe

de ir acompañado del uno de los siguientes parámetros -t | -u | -f (-t para TCP, -

u para UDP y -f para firewall-mark).

Por ejemplo, en un director que tenga los siguientes servicios y servidores reales

configurados: root@director1:~# ipvsadm -l IP Virtual Server version 1.0.6 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.3.150:ftp rr persistent 600 -> rserver1.acade.net:ftp Masq 5 0 0 TCP 192.168.3.150:http rr -> rserver2.acade.net:http Masq 5 0 0 -> rserver1.acade.net:http Masq 5 0 0

Entonces, para borrar el servicio http y sus servidores asociados, se usará la instrucción con

el comando anteriormente descrito: root@director1:~# ipvsadm -D -t 192.168.3.150:http

Si se listan de nuevo los servicios, se observa que el de http y sus servidores reales ya no

están: root@director1:~# ipvsadm -l IP Virtual Server version 1.0.6 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.3.150:ftp rr persistent 600 -> rserver1.acade.net:ftp Masq 5 0 0

-C, --clear

Borra todas las entradas de la tabla de servicios del servidor virtual y sus respectivos

realservers, pero NO elimina las entradas de la tabla de conexiones establecidas como

muestran las siguientes capturas. root@director1:~# ipvsadm IP Virtual Server version 1.0.6 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.3.150:ftp rr persistent 600 -> rserver1.acade.net:ftp Masq 5 0 0 TCP 192.168.3.150:http rr -> rserver2.acade.net:http Masq 5 0 0 -> rserver1.acade.net:http Masq 5 0 0

Page 89: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

80 - Capítulo 6: Balanceadores de carga libres

La captura anterior muestra los servicios definidos en el balanceador de carga: ftp y http.

También muestra los servidores reales a los que se reenviarán peticiones para dichos

servicios: rserver1.acade.net para ftp y rserver1.acade.net,

rserver2.acade.net para http.

root@director1:~# ipvsadm -lc IPVS connection entries pro expire state source virtual destination TCP 09:16 NONE sem_alpha1.acade.net:0 192.168.3.150:0 rserver1.acade.net:0 TCP 01:48 TIME_WAIT sem_alpha1.acade.net:1065 192.168.3.150:ftp-data rserver1.acade.net:ftp-data TCP 14:49 ESTABLISHED sem_alpha1.acade.net:1064 192.168.3.150:ftp rserver1.acade.net:ftp root@director1:~# ipvsadm -C root@director1:~# ipvsadm -l IP Virtual Server version 1.0.6 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn root@director1:~# ipvsadm -lc IPVS connection entries pro expire state source virtual destination TCP 08:56 NONE sem_alpha1.acade.net:0 192.168.3.150:0 rserver1.acade.net:0 TCP 01:28 TIME_WAIT sem_alpha1.acade.net:1065 192.168.3.150:ftp-data rserver1.acade.net:ftp-data TCP 14:28 ESTABLISHED sem_alpha1.acade.net:1064 192.168.3.150:ftp rserver1.acade.net:ftp

Posteriormente se muestran las conexiones establecidas ipvsadm –lc. Se borran los

servicios y servidores configurados en el balanceador ipvsadm –C. Se observa que sólo

se borran los servidores y servicios, no así las conexiones establecidas en el balanceador.

comandos

-a, --add-server

Permite añadir un servidor real. De esta manera se le puede indicar al balanceador a que

servidor real debe de enviar los paquetes pertenecientes a un servicio configurado

previamente con el parámetro –A. Para añadir un servidor al balanceador, primero

configuraremos el servicio con -A:

root@director1:~# ipvsadm -A -t 192.168.3.150:80 -s rr root@director1:~# ipvsadm -l IP Virtual Server version 1.0.6 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP virtualip.acade.net:http rr

Page 90: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 81

Posteriormente se añaden los servidores reales a los cuales se reenviarán los paquetes

pertenecientes a una conexión del servicio que se acaba de definir en el balanceador:

root@director1:~# ipvsadm -a -t 192.168.3.150:80 -r 192.168.10.101 -m root@director1:~# ipvsadm -a -t 192.168.3.150:80 -r 192.168.10.102 -m root@director1:~# ipvsadm -l IP Virtual Server version 1.0.6 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP virtualip.acade.net:http rr -> rserver2.acade.net:http Masq 1 0 0 -> rserver1.acade.net:http Masq 1 0 0

-d, --delete-server

Permite borrar un servidor real, con lo que dejan de reenviársele paquetes.

-l, -L, list

Lista la tabla de servidores virtuales mostrando todos los servicios configurados en ellos.

Si además se especifica una service-address, se mostrarán únicamente las entradas

para este servicio.

--start-daemon state

Lanza el demonio de sincronización de estado que está implementado dentro del kernel de

Linux. Este comando es utilizado cuando se implementa LVS en un entorno de alta

disponibilidad en una arquitectura de clustering activo/pasivo. El demonio permite tener

varias máquinas parcheadas con IPVS actuando como balanceadores de carga. El

balanceador de carga primario, lanzará el demonio con state igual a master, y los

esclavos configurarán el demonio en modo backup. A partir de ese momento, el demonio

configurado como master enviará periódicamente mensajes multicast con los cambios del

estado de su tabla de conexiones. Los demonios de los balanceadores esclavos recibirán

estos mensajes multicast y, a su vez, también actualizarán sus tablas. Así, en el caso de que

el balanceador primario falle, el balanceador de carga de reserva podrá substituirlo y tendrá

la mayoría de las conexiones reflejadas en su tabla por lo que la mayor parte de las

conexiones establecidas en el momento del fallo seguirán pudiendo acceder a los servicios.

De esta forma sólo se perderían aquellas conexiones establecidas después del último

multicast enviado antes de que el master fallara.

Page 91: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

82 - Capítulo 6: Balanceadores de carga libres

Un análisis del código fuente del parche IPVS (linux-x.x.x-ipvs-

x.x.x.patch.gz ip_vs_sync.c) para el kernel de Linux, permite encontrar la

estructura del mensaje UDP multicast, tal y como se muestra en la siguiente captura:

+/* + The master mulitcasts messages to the backup load balancers in the + following format. + + 0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Count Conns | Reserved | Size | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + | IPVS Sync Connection (1) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | . | + | . | + | . | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + | IPVS Sync Connection (n) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +*/

A su vez, un campo IPVS Sync Connection (n) se define así:

+/* + * IPVS sync connection entry + */ +struct ip_vs_sync_conn { + __u8 reserved; + + /* Protocol, addresses and port numbers */ + __u8 protocol; /* Which protocol (TCP/UDP) */ + __u16 cport; + __u16 vport; + __u16 dport; + __u32 caddr; /* client address */ + __u32 vaddr; /* virtual address */ + __u32 daddr; /* destination address */ + + /* Flags and state transition */ + __u16 flags; /* status flags */ + __u16 state; /* state info */ + + /* The sequence options start here */ +};

De esta manera el mensaje multicast que tuviera que enviar la información correspondiente

a las siguientes conexiones:

Page 92: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 83

root@director2:/#ipvsadm -lcn IPVS connection entries pro expire state source virtual destination TCP 02:25 ESTABLISHED 192.168.3.157:1050 192.168.3.150:80 192.168.10.102:80 TCP 02:25 ESTABLISHED 192.168.3.157:1049 192.168.3.150:80 192.168.10.101:80

Sería así: Frame 34 (94 bytes on wire, 94 bytes captured) Ethernet II, Src: 00:20:18:28:04:e9, Dst: 01:00:5e:00:00:51 Internet Protocol, Src Addr: 192.168.3.155 (192.168.3.155), Dst Addr: 224.0.0.81 (224.0.0.81) User Datagram Protocol, Src Port: 1025 (1025), Dst Port: 8848 (8848) Data (52 bytes) 0000 01 00 5e 00 00 51 00 20 18 28 04 e9 08 00 45 00 ..^..Q. .(....E. 0010 00 50 12 6e 40 00 01 11 c2 9a c0 a8 03 9b e0 00 .P.n@........... 0020 00 51 04 01 22 90 00 3c da 88 02 20 34 00 6f 06 .Q.."..<... 4.o. 0030 04 19 00 50 00 50 c0 a8 03 9d c0 a8 03 96 c0 a8 ...P.P.......... 0040 0a 65 00 00 00 01 04 06 04 1a 00 50 00 50 c0 a8 .e.........P.P.. 0050 03 9d c0 a8 03 96 c0 a8 0a 66 00 00 00 01 .........f....

La parte en negrita, correspondería al “protocolo” utilizado por los demonios IPVS de

sincronización de conexiones, que evidentemente concuerda con la definición hecha en el

código fuente del parche IPVS.

Count Conns Reserved Size

02 20 34 00

reserved protocol client

port (1049)

virtual port (80)

destination port (80)

client address

(192.168.3.157)

virtual address

(192.168.3.150)

destination address

(192.168.10.101)

status flags

state info (Established)

6f 06 04 19 00 50 00 50 C0 A8 03 9d C0 A8 03 96 C0 A8 0a 65 00 00 00 01 IPVS Sync Connection (1)

reserved protocol client

port (1050)

virtual port (80)

destination port (80)

client address

(192.168.3.157)

virtual address

(192.168.3.150)

destination address

(192.168.10.101)

status flags

state info (Established)

04 06 04 1a 00 50 00 50 C0 A8 C3 9d C0 A8 03 96 C0 A8 0a 66 00 00 00 01 IPVS Sync Connection (2)

--stop-daemon

Detiene el demonio de sincronización de conexiones.

-h, --help

Ayuda, muestra una descripción de la sintaxis de los comandos.

Page 93: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

84 - Capítulo 6: Balanceadores de carga libres

PARAMETROS

Los comandos mostrados hasta el momento, requieren o aceptan algunos de los parámetros

que se listan a continuación:

-t, --tcp-service service-address

Se utiliza para especificar un servicio TCP. service-address se usa en la modalidad

host[:port]. Pudiéndose especificar el servidor real con su dirección IP o bien con su

nombre host (tal y como aparece en /etc/hosts). La especificación del puerto es

opcional, si se omite se utiliza cero por defecto, lo cual sólo es válido si el servicio es

persistente (opción -p). La opción –p y un cero en el nombre de puerto, configura al

balanceador para realizar Persistent Client Connection (PCC) en vez de Persistent Port

Connection (PPC) . Véase (3.8.2) ó (6.4) para entender las diferencias entre estos dos tipos

de persistencia.

-u, --udp-service service-address

Usado para especificar un servicio UDP. La dirección especificada en service-

address sigue los mismos convenios explicados para el parámetro –t del apartado

anterior.

-f, --fwmark-service integer

Permite utilizar una marca de firewall (entero mayor que 0) en lugar de una dirección,

puerto y protocolo (TCP ó UDP), para designar un servicio virtual. Para marcar los

paquetes, estos deberían procesarse previamente con iptables (opción -m). Las marcas de

firewall pueden ser utilizadas para asociar diferentes servicios virtuales (port grouping).

De manera que una sola definición de servicio virtual en IPVS, cubra diferentes servicios

virtuales correspondientes a múltiples tripletas: dirección, puerto y protocolo; siempre que

estos servicios estén ofrecidos, todos ellos, en los mismos servidores reales. De lo

contrario, se podrían enviar peticiones a servicios no ofrecidos en el servidor destino.

De esta forma, las firewall-marks permiten agrupar convenientemente diferentes

direcciones IP, puertos y protocolos bajo un solo servicio virtual. Lo cual simplifica la

configuración cuando son requeridos un elevado número de servicios y se necesita agrupar

la persistencia, que de otro modo requeriría de múltiples servicios virtuales (6.5).

Page 94: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 85

-s, --schedules scheduling-method

Parámetro usado para especificar el algoritmo utilizado por el scheduler para asignar a un

servidor real los datagramas UDP y las conexiones TCP. Los algoritmos se implementan

como módulos del kernel. Actualmente se pueden utilizar los siguientes métodos de

scheduling:

rr Round Robin

wrr Weighted Round Robin

lc Least-Connection

wlc Weighted Least-Connection

lblc Locality-Based Least-Connection

lblcr Locality-Based Least-Connection with Replication

dh Destination-Hashing

sh Source-Hashing

Para obtener información detallada de los métodos, consúltese (6.6)

-p --persistence [timeout]

Especifica qué servicios virtuales son persistentes. Si esta opción es especificada, las

múltiples peticiones de un cliente son redireccionadas hacia el mismo servidor real

seleccionado para la primera petición. Opcionalmente, el timeout de las sesiones

persistentes permite ser cuantificado en segundos por el usuario, de lo contrario, se utiliza

el valor por defecto que es de 300 segundos. Esta opción es utilizada en aquellos

protocolos, como SSL o FTP, en los que es importante que los clientes conecten

constantemente con el mismo servidor real.

Nota: Si un servicio virtual ha de manejar conexiones FTP, entonces requiere ser

configurado para aplicar reglas de persistencia para el servicio, en el caso de que se utilice

Direct Routing o Tunneling como mecanismo de reenvío. Si se utiliza Masquerading

(NAT) junto a un servicio FTP, entonces no es necesario configurar el servicio de manera

persistente, pero deberá cargarse el módulo del kernel ip_vs_ftp, usando para ello los

comandos insmod o modprobe.

Page 95: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

86 - Capítulo 6: Balanceadores de carga libres

-r --real-server server-address

Las peticiones a un servicio virtual han de ser asociadas a un servidor real. En este sentido,

el algoritmo de scheduling seleccionará un servidor real de entre los que especifiquen con

ese parámetro. El parámetro server-address es la dirección del servidor real, y

también permite especificar un número de puerto. La dirección del servidor real

(server-address) puede proporcionarse mediante la dirección IP o el nombre de host.

El puerto puede indicarse también mediante el número de puerto o bien mediante el

nombre de servicio para ese puerto (http, ftp, etc).

En el caso de utilizar el método de reenvío masquerading (NAT), la dirección del servidor

real es normalmente una dirección IP privada [8], y el puerto puede ser diferente al del

asociado con ese servicio. Para servicios fwmark, el puerto puede ser omitido, en ese caso

el puerto destino en el servidor real será el puerto destino de la petición enviada al servicio

virtual.

[packet-forwarding-method]

Este parámetro establece el método utilizado para reenviar los paquetes hacia los

servidores reales.

-g --gatewaying(Direct Routing)

Es el seleccionado por defecto y es el más rápido dado que no se rescriben las

cabeceras IP puesto que se trabaja a nivel de capa de enlace (capa 2), véase (6.3.2).

-i --ipip(Tunneling)

Encapsula los paquetes IP en IP para su reenvío. Permite que los servidores reales

se encuentren en redes externas, véase (6.3.3).

-m --masquerading (NAT)

Utiliza Network Address Translation (NAT) como método de reenvío. Las

cabeceras IP son reescritas para reenviar los paquetes. Se trabaja a nivel de capa 3,

véase (6.3.1). -w, --weight weight

El peso (weight) es un número entero que especifica la capacidad relativa de un servidor

real frente al resto de servidores reales del cluster. Los valores válidos para este van de 0 a

65535, pero el valor por defecto es 1. Se puede especificar un servidor inactivo

Page 96: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 87

asignándole un peso igual a cero. Un servidor inactivo no recibirá nuevas peticiones, sea

cual sea el método de scheduling del LVS, pero seguirá ofreciendo sus servicios.

Configurar un servidor inactivo puede utilizarse para evitar la sobrecarga de un

determinado servidor real, o bien para dejarlo fuera de servicio y poder realizar labores de

mantenimiento.

--mcast-interface interface

Especifica la interfaz por la cual el demonio de sincronización de conexiones enviará o

recibirá los mensajes multicast. Este parámetro se utiliza junto a --start-daemon, que

lanza el demonio de sincronización de conexiones.

root@director1:~# ipvsadm –-start-daemon=master –-mcast-interface=eth1

6.8 LVS, Kernel TCP Virtual Server (KTCPVS)

KTCPVS es un balanceador de carga enmarcado dentro del Linux Virtual Server Project

(6.1). KTCPVS implementa balanceo de carga de nivel de aplicación, también conocido

como conmutación de capa 7, dentro del kernel de Linux,. Debido a la sobrecarga que

supone el balanceo de carga de capa 7, es recomendable su implementación dentro del

kernel. A pesar de que KTCPVS es menos escalable que IPVS, es más flexible porque el

contenido de las peticiones es conocido antes de ser redireccionado a los servidores. Este

balanceador de carga está en sus primeros estadios de desarrollo, por lo que no es aun apto

para entornos de producción.

6.9 Direct Routed Web Switch (DRWS)

DRWS es un balanceador de carga de capa 7 y está basado en modificaciones del IPVS

0.9.8. DRWS ha sido desarrollado por Ping-Tsai Tsai <[email protected]> en el High

Speed Network Lab del Department of Computer & Information Science, NCTU.

Page 97: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

88 - Capítulo 6: Balanceadores de carga libres

Al igual que en LVS-DR, DRWS permite que los servidores reales contesten al cliente

directamente, con lo que el balanceador de carga dispone de más recursos para manejar las

peticiones entrantes de los clientes.

DRWS está disponible en <http://speed.cis.nctu.edu.tw/~motse/drws.htm>

6.10 High Up Time Project (HUT)

Este proyecto ofrece similares prestaciones a las que actualmente permite el proyecto LVS,

pero este ha sido desarrollado para sistemas BSD.

El High Up Time Project (HUT) es un sistema de clustering de alta disponibilidad

construido con dos o más servidores reales. HUT corre bajo FreeBSD 4.x y versiones

superiores, y está formado por dos módulos:

-El Demonio del Balanceador de Carga llamado Loadd (para distribuir la carga sobre todos

los servidores)

-El Demonio VRRP llamado Vrrpd (para la redundancia)

En HUT, todas las conexiones son transparentes para el usuario. Si un servidor deja de

prestar servicio, otro toma su lugar y responde a sus conexiones. Así, se pueden dar de baja

todos los puntos de fallo de la red o de la arquitectura del sistema sin que ello afecte a la

prestación del servicio.

El proyecto pretende construir un sistema de clustering a gran escala y está desarrollado

bajo licencia OpenSource.

Vrrpd es la implementación VRRP para FreeBSD 4.x y superiores. Este protocolo permite

crear backups de los servidores estratégicos con un sistema de IP redundante, al estilo de

los clusters activo/pasivo como los que permiten otros sistemas Linux como Heartbeat.

Page 98: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 89

Actualmente, este proyecto se encuentra en sus primeras fases de desarrollo, si bien su

código ya permite implementar las siguientes características:

HUT se puede montar usando las siguientes arquitecturas:

- NAT

- Direct Routing

- IP Tunneling

HUT implementa los siguientes algoritmos de scheduling:

- Round Robbin Scheduling

- Weighted Round-Robbin Scheduling

- Least-Connection Scheduling

- Least-Load Scheduling

El software HUT está siendo desarrollado por Sebastien Petit un estudiante de ingeniería

especializado en sistema UNÍX y redes Francés.

Para más información:

<http://www.bsdshell.net/hut_project.html>

<http://www.bsdshell.net/hut_hdpage1.html> (documentación en francés)

Page 99: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

90 - Capítulo 6: Balanceadores de carga libres

Page 100: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 91

7. Cluster activo/pasivo con LVS Una forma de ofrecer alta disponibilidad para un servicio de red, es redundando el servidor

que presta el mismo. De manera que si falla este servidor principal (activo) entre en acción

un servidor de respaldo (pasivo).

7.1 Heartbeat

Heartbeat permite implementar un cluster de alta disponibilidad IP de tipo activo/pasivo.

Heartbeat es, por lo tanto, un software destinado a mantener servicios en alta

disponibilidad bajo Linux, con el objetivo de que estén disponibles ininterrumpidamente.

Para ello, se requiere ejecutar heartbeat simultáneamente en un mínimo de dos máquinas.

La primera máquina, llamada master, es la que ofrece normalmente el servicio. La segunda

máquina, llamada esclava, es la que suplanta a la master en el caso de que, por algún

motivo, esta deje de funcionar y consecuentemente de prestar sus servicios. Tal y como se

explica en la documentación que acompaña a heartbeat, existe la posibilidad de montar

clusters activo/pasivo de más de dos máquinas, si bien no es lo más frecuente dado la

complejidad que suponen este tipo de arquitecturas.

Internet

ServidorMaster

ServidorEsclavo

(de reserva)

Paquetes Heartbeat(Latidos)

Figura 16: Monitorización mediante latidos.

Page 101: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

92 - Capítulo 7: Cluster activo / pasivo con LVS

Heartbeat basa su funcionamiento en el envío y recepción de “latidos”, que son las señales

enviadas por los demonios heartbeat que corren en ambas máquinas. La diferencia

entre master y esclavo radica en que el master es quien tiene la prioridad para ofrecer el

servicio. El esclavo pasará a ofrecer el servicio sólo cuando deje de escuchar los latidos del

master por un periodo predeterminado de tiempo, ya que entonces supondrá que éste ha

dejado de funcionar. Tan pronto como el esclavo vuelva a escuchar los latidos del master,

detendrá los servicios que estaba ofreciendo para que el master le tome el relevo y vuelva a

servirlos.

Las máquinas master y esclava deben de estar comunicadas mediante al menos una

interfaz. Heartbeat soporta actualmente las siguientes interfaces: puerto serie (RS-232) y

tarjetas Ethernet. Puede darse el caso de que un error en el enlace o interfaz de una de las

máquinas imposibilite la llegada de latidos a la otra. De esta manera, la máquina que

permanecía a la escucha interpretará erróneamente que el servicio ofrecido por su

homóloga ha caído, e intentará acto seguido lanzar dicho servicio cuando realmente éste no

ha dejado de prestarse en ningún momento. Para minimizar el riesgo de que puedan

producirse este tipo de situaciones, es recomendable el uso de conexiones redundantes,

como por ejemplo, doblar la conexión serie o añadir una conexión cruzada mediante

tarjetas Ethernet adicionales.

Los latidos o paquetes heartbeat pueden ser autenticados mediante MD5 ó SHA1.

Actualmente heartbeat implementa los siguientes tipos de “latidos”:

- Bidirectional Serial Rings (puerto serie)

- UDP/IP broadcast (ethernet, etc.)

- UDP/IP multicast (ethernet, etc.)

- “ping” especiales heartbeat para routers, etc.

Page 102: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 93

A continuación se muestra la captura de un paquete heartbeat (latido): >>> t=status st=active src=director2 seq=5f hg=61 ts=3dfdb278 ld=0.04 0.10 0.04 2/28 251 ttl=3 auth=2 c968bd9b <<<

El significado de cada uno de los campos sería el siguiente:

Tipo de mensage (t): status Nuevo estado (st): active Generador del paquete (src): director2 Número de secuencia (seq): 5f Heartbeat generation numbre (hg): 61 Marca de tiempo (ts): 3dfdb278 Carga media (ld): 0.04 0.10 0.04 2/28 251 Time to live (ttl): 3 Cadena de autentificación (auth): 2 c968bd9b

Heartbeat es el encargado de lanzar y de detener el servicio que se quiere prestar en alta

disponibilidad. El servicio que lanza heartbeat se presta a través de la misma IP en ambas

máquinas. Puesto que no pueden existir dos direcciones IP iguales en el mismo segmento

de red, se utiliza una dirección IP virtual (VIP). En Linux es posible que una misma

interfaz de red soporte simultáneamente más de una dirección de red mediante el uso de un

alias para la IP. Las máquinas master y esclava tienen cada una de ellas su propia IP.

Heartbeat lanza el servicio que ha de prestarse en alta disponibilidad y activa la VIP en esa

misma tarjeta mediante un alias cuando detecta la ausencia de latidos. Del mismo modo,

cuando heartbeat ha de detener el servicio, desactiva la VIP y detiene el servicio. El hecho

de crear un alias en lugar de configurar una IP estática permite poder acceder a la máquina

para su mantenimiento, aunque esta no se encuentre ofreciendo el servicio de alta

disponibilidad. Crear un alias para configurar la IP virtual, evita además que se deba

actualizar la tabla de rutado del kernel, para añadir el gateway por defecto, cada vez que se

activa la VIP. IPaddr es el script integrante del software heartbeat encargado de activar

y desactivar los alias en el dispositivo de red. IPaddr utiliza parte del código fake de

Horms (7.2).

Page 103: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

94 - Capítulo 7: Cluster activo / pasivo con LVS

Takeover es el proceso mediante el cual una máquina se adueña de la IP de otra que ha

dejado de estar activa. Sólo puede considerase efectuado con éxito, si la máquina que deja

de dar el servicio desactiva la IP de su interfaz y posteriormente, la máquina que toma el

relevo, activa dicha IP en la suya. Además, es necesario forzar al resto de máquinas de la

red a que actualicen sus tablas ARP, o de lo contrario encapsularán los paquetes con la

MAC de la máquina a la que se pretende suplantar. Dado que esa máquina ha dejado de

funcionar, los paquetes no alcanzarán su destino. Puesto que la asignación IP con MAC ha

cambiado, es necesario que todas las máquinas (incluido el router) actualicen su caché

ARP. La actualización de las tablas se consigue mediante el envío de peticiones y

respuestas ARP “innecesarias” (gratuitous ARP). Este proceso lo lleva a cabo el código

IPaddr, el cual es ejecutado por heartbeat cuando se produce un fallo en la máquina que

presta el servicio (faliover), o bien cuando el master vuelve a estar activo (failback)

después de un periodo de tiempo en el que fue reemplazado por el esclavo. Para ello,

S D

C isco 2500 SE RIE S

A B C D E F G HS EL EC TE D

ON -LIN E

Caché ARP (router)IP

192.168.3.150MAC

00:20:18:28:04:e9

(servidor2 VIP pública)eth0: 192.168.3.150

MAC:00:20:18:29:3e:d1

MAC00:20:18:29:3e:d1

CISC O YST E MSS

Figura 17: Takeover mediante el envío de gratuitous ARP.

IPaddr invoca a send_arp (send_arp.c) cinco veces para enviar paquetes broadcast

ARP. El objetivo es forzar a los dispositivos directamente conectados en la misma red a

que actualicen las entradas de la VIP en la caché ARP con la nueva MAC. Finalmente,

IPaddr activa o desactiva el alias al dispositivo de red, normalmente eth0:0, con la

dirección IP que presta el servicio.

Page 104: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 95

Las siguientes capturas, ayudarán a entender de que manera IPaddr consigue cambiar las

caches ARP del resto de máquinas de la red. A continuación se muestra el tráfico generado

por IPaddr durante proceso de takeover:

No. Time Source Destination Protocol Info 1 0.000000 CIS_29:3e:d1 Broadcast ARP Who has 192.168.3.150? Tell 192.168.3.150 2 2 118674.846614 CIS_29:3e:d1 Broadcast ARP 192.168.3.150 is at 00:20:18:29:3e:d1 3 2.039875 CIS_29:3e:d1 Broadcast ARP Who has 192.168.3.150? Tell 192.168.3.150 4 118676.886692 CIS_29:3e:d1 Broadcast ARP 192.168.3.150 is at 00:20:18:29:3e:d1 5 4.069753 CIS_29:3e:d1 Broadcast ARP Who has 192.168.3.150? Tell 192.168.3.150 6 118678.916799 CIS_29:3e:d1 Broadcast ARP 192.168.3.150 is at 00:20:18:29:3e:d1 7 6.101866 CIS_29:3e:d1 Broadcast ARP Who has 192.168.3.150? Tell 192.168.3.150 8 118680.949137 CIS_29:3e:d1 Broadcast ARP 192.168.3.150 is at 00:20:18:29:3e:d1 9 8.138262 CIS_29:3e:d1 Broadcast ARP Who has 192.168.3.150? Tell 192.168.3.150 10 118682.985763 CIS_29:3e:d1 Broadcast ARP 192.168.3.150 is at 00:20:18:29:3e:d1

Como se aprecia en esta captura, la máquina que ejecuta IPaddr realiza 5 peticiones ARP

en las cuales, la máquina 192.168.3.150 solicita la MAC asociada a la IP

192.168.3.150, lo cual a priori parece absurdo. Como resultado de esta petición, la

dueña de la IP 192.168.3.150, se contesta a si misma con la MAC solicitada:

00:20:18:29:3e:d1. Dado que las peticiones ARP son broadcast a nivel MAC, todas

las máquinas actualizarán sus caches ARP al recibir la respuesta a la anterior solicitud

MAC. Así, lo que en un principio parecía “innecesario” se ve justificado a la vista de que

el resultado obtenido es el buscado: que todas las máquinas actualicen sus cachés ARP.

Véase en detalle la petición y respuesta ARP que envía IPaddr:

Frame 1 (60 bytes on wire, 60 bytes captured) Ethernet II, Src: 00:20:18:29:3e:d1, Dst: ff:ff:ff:ff:ff:ff Address Resolution Protocol (request) 0000 ff ff ff ff ff ff 00 20 18 29 3e d1 08 06 00 01 ....... .)>..... 0010 08 00 06 04 00 01 00 20 18 29 3e d1 c0 a8 03 96 ....... .)>..... 0020 ff ff ff ff ff ff c0 a8 03 96 00 00 00 00 00 00 ................ 0030 00 00 00 00 00 00 00 00 00 00 00 00 ............

Si se decodifica esta petición, se observa que, a nivel de capa de enlace, se encapsula con

un broadcast MAC y por lo tanto, el paquete llega a todas las máquinas de la red.

Page 105: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

96 - Capítulo 7: Cluster activo / pasivo con LVS

Frame 1 (60 bytes on wire, 60 bytes captured) Ethernet II, Src: 00:20:18:29:3e:d1, Dst: ff:ff:ff:ff:ff:ff Address Resolution Protocol (request) Hardware type: Ethernet (0x0001) Protocol type: IP (0x0800) Hardware size: 6 Protocol size: 4 Opcode: request (0x0001) Sender MAC address: 00:20:18:29:3e:d1 (CIS_29:3e:d1) Sender IP address: 192.168.3.150 (192.168.3.150) Target MAC address: ff:ff:ff:ff:ff:ff (Broadcast) Target IP address: 192.168.3.150 (192.168.3.150)

La respuesta a esta petición también la hace la máquina 192.168.3.150 (que se

responde a su propia petición).

Frame 2 (60 bytes on wire, 60 bytes captured) Ethernet II, Src: 00:20:18:29:3e:d1, Dst: ff:ff:ff:ff:ff:ff Address Resolution Protocol (reply) 0000 ff ff ff ff ff ff 00 20 18 29 3e d1 08 06 00 01 ....... .)>..... 0010 08 00 06 04 00 02 00 20 18 29 3e d1 c0 a8 03 96 ....... .)>..... 0020 ff ff ff ff ff ff c0 a8 03 96 00 00 00 00 00 00 ................ 0030 00 00 00 00 00 00 00 00 00 00 00 00 ............

Frame 2 (60 bytes on wire, 60 bytes captured) Ethernet II, Src: 00:20:18:29:3e:d1, Dst: ff:ff:ff:ff:ff:ff Address Resolution Protocol (reply) Hardware type: Ethernet (0x0001) Protocol type: IP (0x0800) Hardware size: 6 Protocol size: 4 Opcode: reply (0x0002) Sender MAC address: 00:20:18:29:3e:d1 (CIS_29:3e:d1) Sender IP address: 192.168.3.150 (192.168.3.150) Target MAC address: ff:ff:ff:ff:ff:ff (Broadcast) Target IP address: 192.168.3.150 (192.168.3.150)

Como esta respuesta broadcast tiene como destino MAC a todas las máquinas, se consigue

que estas actualicen sus tablas ARP con la dirección MAC de la nueva máquina propietaria

de la IP 192.168.3.150.

Ldirectord

Es el demonio lanzado por heartbeat para la monitorización y control de los servidores

reales, así como para llevar a cabo la administración de las tablas de forwarding del kernel.

Ldirectord testea el estado de los servidores reales en intervalos de tiempo

predeterminados con el objetivo de mantener actualizada la tabla del servidor virtual.

Ldirectord genera reglas ipvsadm (6.7) para gestionar el LVS. Para más información

sobre este programa véase (7.3).

Page 106: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 97

Datos del sortware Heartbeat Nombre: Heartbeat Última versión: 0.4.9.2 2002/10/07 Sitio web: http://www.linux-ha.org Autores: Alan Robertson <[email protected]>

Volker Wiegand <[email protected]> Rudy Pawul <[email protected]> Mitja Sarp <[email protected]> Guenther Thomsen <[email protected]> Jacob Rief <[email protected]> Luis Claudio R. Gonçalves <[email protected]> Marcelo Tosatti <[email protected]> Horms <[email protected]> Eric Ayers <[email protected]>

Tom Vogt <[email protected]> (udp code) yuri volobuev <[email protected]>(send_arp.c)

7.2 Fake

Fake es un script que permite activar servidores de backup en un entorno LAN cuando es

requerido. En particular, ha sido diseñado para servidores Mail, Web y servidores Proxy.

Fake permite apropiarse de la dirección IP de otra máquina que esté en la misma LAN.

Para hacerlo, activa una interfaz adicional y hace uso de ARP spoofing. Mediante esta

técnica convence al resto de maquinas de la red de que el servidor de backup, es ahora el

servidor fallido. Esta interfaz adicional puede ser otra interfaz física o bien un alias IP.

Fake es fácil de configurar y se ha diseñado para permitir ser invocado de forma

automática por sistemas como Mon que permiten monitorizar la disponibilidad de un

servidor, también es utilizado por Heartbeat como parte integrante de si mismo. Fake

pude, por otro lado, ser utilizado junto a mecanismos de balanceo de carga como Linux

Virtual Server (LVS),

Datos del programa

Nombre: Fake

Autor: Horms <[email protected]> aka. Simon Horman

Sitio web: <http://www.vergenet.net/linux/fake/>

Page 107: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

98 - Capítulo 7: Cluster activo / pasivo con LVS

7.3 Linux Director Daemon Ldirectord Linux Director Daemon (ldirectord) es un demonio programado en Perl, que permite

monitorizar los servicios ofrecidos por los nodos de una granja de servidores reales

balanceados mediante LVS, y añadir o borrar entradas en la tabla de sesiones del kernel del

Servidor Virtual de Linux (LVS), como resultado de la monitorización. De esta manera,

ldirectord permite actualizar dinámicamente las tablas que definen el comportamiento del

balanceador de carga IPVS. Si uno de los realservers deja de servir peticiones de alguno de

los servicios prestados por LVS, ldirectord creará una llamada a ipvsadm que hará que el

balanceador deje de reenviarle paquetes al realserver.

Funcionamiento

Ldirectord está especialmente diseñado para poder ser llamado desde el programa

Heratbeat, si bien también es posible hacerlo desde la línea de comandos. Ldirectord se

puede configurar para monitorizar los servicios, http, https y ftp de los servidores reales.

Cuando ldirectord es llamado desde heartbeat, lee la información contenida en su archivo

de configuración, especificado en /etc/ha.d/haresources.

director1 IPaddr::192.168.3.150/24 ldirectord::configuration

En este ejemplo, el archivo utilizado se llama configuration y deberá estar ubicado

en /etc/ha.d/conf/. Mediante este archivo se configuran los servicios que ldirectord

ha de monitorizar y configurar en el balanceador, usando llamadas a ipvsadm, en el caso

de que la monitorización sea exitosa.

Page 108: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 99

Un ejemplo de archivo de configuración podría tener el siguiente aspecto.

# Archivo de configuracion del ldirectord arrancado por heartbeat # checktimeout = 6 checkinterval = 2 virtual = 192.168.3.150:80 real = 192.168.10.101:80 masq 5 real = 192.168.10.102:80 masq 5 service = http scheduler = rr checktype = negotiate request = "articulos.php?id_articulo=PPP2300" receive = "Pintura Plastica Pantone 2300" virtual = 192.168.3.150:21 real = 192.168.10.101:21 masq 5 real = 192.168.10.102:21 masq 5 service = ftp scheduler = rr login = "anonymous" passwd = "[email protected]" persistent = 600 protocol=tcp

Para el servicio http, ldirectord permite monitorizar mediante simples pruebas de

conectividad, checktype = connect o bien mediante pruebas de contenido

checktype = negotiate. En este último tipo de pruebas, se envía una petición:

request = "articulos.php?id_articulo=PPP2300”, y se mira la

respuesta obtenida, receive = "Pintura Plastica Pantone 2300", si el

resultado obtenido es el indicado en recive, se considera que el servicio está

funcionando correctamente. Esto permite monitorizar algo más que el contenido web, ya

que si el valor esperado “Pintura Plastica Pantone 2300” se obtiene tras una

consulta a una base de datos, se comprueba implícitamente el correcto funcionamiento de

la base de datos utilizada por la aplicación web.

La monitorización en el caso del servicio ftp es similar, pero en esta ocasión, en lugar de

realizar un petición y esperar una determinada respuesta, se obtiene el servicio enviando el

correspondiente USER y PASS requerido por el servicio ftp de los servidores reales.

Si el resultado de las monitorizaciones es el esperado, ldirectord añade los servidores

reales especificados en la directiva real para cada uno de los servicios configurados en

el balanceador especificados en la directiva virtual.

Page 109: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

100 - Capítulo 7: Cluster activo / pasivo con LVS

Datos del programa

Autors: Jacob Rief <[email protected]>

Horms <[email protected]>, <[email protected]>

Skliarouk Peter <[email protected]>

Sitio Web: <http://www.vergenet.net/linux/ldirectord/>

<http://www.ultramonkey.org> (Horms)

<http://www.linux-ha.org> (Heartbeat)

Descarga:

<http://www.ultramonkey.org/download/>

<http://www.linux-ha.org/download/heartbeat-ldirectord-x.x.x.x-x.i386.rpm>

7.4 Sercice Monitoring Daemon, Mon

Mon es un administrador de tareas y un manejador de alertas de propósito general,

utilizado para monitorizar la disponibilidad de servicios y para disparar alertas en caso de

detección de fallos. Mon fue diseñado para ser abierto y extensible, en el sentido de que

acoge facilidades de monitorización arbitrarias y métodos de alerta vía una interfaz común,

las cuales son implementadas fácilmente con programas en C, shellscript, capturadores

SNMP y capturadores (paquetes UDP) mon especiales.

Mon ve la monitorización de recursos como dos tareas separadas: el examen de una

condición y la ejecución de una acción en ante un fallo. Mon fue diseñado para

implementar las tareas de prueba y de ejecución de acciones mediante programas

separados y con autonomía propia. Mon es esencialmente un programador que ejecuta los

monitores (cada uno prueba una condición específica) y pone en funcionamiento las alertas

apropiadas si éste fallase. La decisión de invocar a una alerta está gobernada por una

lógica, la cual ofrece varias características y dependencias que son configuradas por el

usuario.

Los monitores y las alertas no son una parte del núcleo del servidor mon, incluso aunque la

distribución venga con algunos de ellos, ya programados, para facilitar la programación de

monitores propios. Esto significa que si un servicio nuevo necesita ser monitorizado, o si

Page 110: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 101

una nueva señal de alerta es necesaria, el servidor mon no precisará ser cambiado, lo que

implica que mon sea fácilmente extensible.

Mon se compone de un servidor (mon), un cliente (moncmd) y un cliente web/text

(monshow).

mon: Monitoriza la disponibilidad de servicios, envía alarmas al detectar fallos.

moncmd: Envía comandos al demonio servidor mon y muestra los resultados.

monshow: Interface web.

Datos del programa

Autor: Jim Trocki <[email protected]>

Sitio Web: <http://www.kernel.org/software/mon/>

Descarga: <ftp://ftp.kernel.org/pub/software/admin/mon/>

Page 111: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

102 - Capítulo 7: Cluster activo / pasivo con LVS

Page 112: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 103

8. Software de servidor

Implementar una arquitectura de alta disponibilidad basada en balanceadores de carga

LVS, implica el disponer de servidores reales. Lo servidores reales son los encargados de

prestar los servicios de red que balancea el software LVS. En este capítulo se describen las

características principales del software libre más destacable, disponible actualmente para

prestar servicios web (Apache), bases de datos (MySQL), FTP (ProFTPD) y lenguajes de

programación de servicios web (PHP).

8.1 Apache

El servidor Apache HTTP es un proyecto de la Apache Software Fundation, para

desarrollar y mantener un servidor HTTP de código abierto para sistemas operativos

modernos como UNIX o Windows. El objetivo de este proyecto es proveer un servidor

seguro, eficiente y extensible que proporcione servicios HTTP en sintonía con los actuales

estándares de HTTP. Apache es el servidor web más popular de Internet desde abril del

1996. Como características principales del mismo destacan:

- Soporte de los últimos protocolos incluyendo HTTP/1.1 [9]

- Es altamente configurable y extensible mediante módulos externos.

- Puede personalizarse mediante la programación de módulos personalizados

utilizando la API de la que dispone.

- Se distribuye junto a su código fuente y dispone de una licencia no restrictiva.

- Funciona sobre plataformas Windows NT/9x, Netware, OS/2 y la mayoría de

sistemas UNIX.

- Está en desarrollo constante y abierto a nuevas ideas, reporte de errores etc.

Actualmente se mantienen es desarrollo dos ramas de este servidor, la 1.3 y la 2.0. Los

desarrolladores trabajaron durante más de dos años antes de liberar la primera versión beta

de Apache 2.0 en abril de 2001. Una de las principales mejoras de la versión 2.0 es que se

Page 113: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

104 - Capítulo 8: Software de servidor

ha añadido soporte multi-threading para aumentar el rendimiento del proceso que sirve las

peticiones, por lo que fue necesario rescribir totalmente el código.

La versión 1.3 es actualmente la más utilizada en entornos de producción si bien la

segunda versión del servidor está llamada a sustituir definitivamente a la primera. Por el

momento, ambas versiones gozan de pleno soporte y siguen siendo periódicamente

actualizadas por parte de sus desarrolladores.

8.2 PHP

La mejor descripción de lo que es PHP sea quizás la aparecida en el prefacio del manual de

PHP [10], disponible en su sitio web.

“PHP, acrónimo de ‘PHP: Hypertext Preprocesor’, es un lenguaje ‘Open Source’

interpretado de alto nivel, especialmente pensado para desarrollos web y el cual puede ser

embebido en páginas HTML. La mayoría de su sintaxis es similar a C, Java y Perl y es

fácil de aprender. La meta de este lenguaje es permitir escribir a los creadores de páginas

web, páginas dinámicas de una manera rápida y fácil, aunque se pueda hacer mucho más

con PHP.”

A diferencia de otros lenguajes como JavaScript, que se ejecuta en el cliente, PHP se

ejecuta en el servidor y envía el resultado de esta ejecución al cliente junto con el resto del

código HTML. El código PHP está embebido dentro del código HTML que se envía

directamente al cliente. Así, mediante unas etiquetas especiales de inicio y final, se puede

ir insertando código PHP. El navegador del cliente recibirá el código HTML y el resultado,

si lo hay, producido tras la ejecución del código PHP.

PHP permite realizar fácilmente las mismas tareas que pueda realizar un script CGI, como

procesar la información de formularios, generar páginas con contenidos dinámicos, o

mandar y recibir cookies etc.

Page 114: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 105

PHP puede ser ejecutado en la mayoría de los sistemas operativos. Así, existen versiones

para Linux, Unix (incluido HP-UX, Solaris, FreeBSD y OpenBSD), Microsoft Windows y

Mac OS X. También es capaz de operar con los servidores web más importantes,

incluyendo Apache, Microsoft Internet Information Server, Personal Web Server, iPlanet

(ahora Sun[tm] ONE Web Server), Oreilly Website Pro server, Caudium, Xitami,

OmniHTTPd y muchos otros.

PHP no sólo genera código HTML. Es posible crear código XHTM, XML, crear imágenes,

archivos PDF, y películas Flash.

PHP es capaz de operar con multitud de diferentes tipos de bases de datos. El acceso a

bases de datos es realmente sencillo mediante PHP. Éste puede operar directamente con las

siguientes bases de datos: Adabas D, dBase, Empress, FilePro(sólo-lectura), Hyperwave,

IBM DB2, Informix, Ingres, InterBase, FrontBase, MSQL, Direct MS-SQL, MySQL,

ODBC, Oracle (OCI7 y OCI8), Ovrimos, PostgreSQL, Solid, Sysbase, Unix dbm y

Velocid. También es posible trabajar con cualquier otra base de datos que soporte el

estándar DBX u ODBC (The Open Database Connection Standard).

PHP permite comunicarse con otros servicios que utilicen los protocolos LDAP, IMAP,

SNMP, NNTP, POP3, HTTP, COM (en Windows) y otros. Es capaz de utilizar objetos

Java y la extensión de CORBA para acceder a objetos remotos.

Para el proceso de texto, dispone de características como las expresiones regulares POSIX

Extended, Perl o el parseador de documentos XML. Además dispone de interesantes

funciones para el comercio electrónico, entre las que destacan Cybercash, CyberMUT,

VeriSign Payflow Pro y CCVS.

8.3 MySQL Database Server

Según sus creadores, MySQL es la base de datos de código abierto más popular del

mundo, diseñada para ser veloz, poderosa y precisa en misiones críticas y de gran

capacidad de carga.

Page 115: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

106 - Capítulo 8: Software de servidor

MySQL es un sistema de gestión de bases de datos relacionales, que sigue los estándares

ANSI SQL y ODBC SQL, y usa la implementación de expresiones regulares de Henry

Spencer que cumplen con POSIX 1003.2.

Por otra parte, MySQL dispone de capacidades para la replicación de bases de datos. Para

ello, pueden seleccionarse dos tipos de modos: master fijo y master variable.

En el modo master fijo, uno de los servidores del cluster centraliza el proceso de escritura

en la base de datos e informa periódicamente a los demás esclavos de las actualizaciones.

Si el master sufre algún percance, todo el sistema se viene abajo. En este modo por tanto,

los esclavos únicamente permite realizar operaciones de lectura en su base de datos.

En el modo master variable, cualquier nodo del cluster puede convertirse en master en

caso de problemas, pero solamente de modo exclusivo, por lo que la escritura en la base de

datos continua siendo centralizada por un solo elemento.

8.4 ProFTPD

ProFTPD es un servidor de FTP escalable y de características avanzadas escrito desde cero

bajo las premisas de la simplicidad, seguridad y facilidad de configuración. ProFTPD se

utiliza en algunos de los mayores sitios de Internet. Entre sus características principales

destacan, la simplicidad de la sintaxis de programación, similar a la de Apache y la

posibilidad de utilizar módulos. Incluye soporte para múltiples servidores FTP virtuales,

FTP anónimo, y visibilidad de directorios basada en permisos.

Page 116: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 107

Parte 3: Cluster Acade (LVS). Descripción, funcionamiento y

pruebas efectuadas

9. Cluster Acade (LVS)

En esta parte de la memoria, se realiza una descripción funcional de la arquitectura de

clustering de alta disponibilidad y escalabilidad, implementada para la realización de la

segunda parte del trabajo. La arquitectura ha sido bautizada con el nombre de cluster

Acade. El “Manual Acade” anexado (anexo V), describe los pasos para montar la solución

aquí descrita.

Figura 18: Cluster Acade en acción.

Page 117: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

108 - Capítulo 9: Cluster Acade (LVS)

9.1 ¿Qué es el cluster Acade (LVS)?

El cluster Acade implementa la arquitectura mínima necesaria para evaluar las capacidades

de alta disponibilidad y escalabilidad que ofrece una solución de clustering basada en

software libre LVS-NAT.

9.2 Componentes software utilizados (LVS+Heartbeat+ldirectord)

Los clusters de alta disponibilidad de IP (activo/pasivo) permiten garantizar la alta

disponibilidad de un servicio de red. Por otra parte, los clusters basados en balanceadores

de carga proporcionan arquitecturas altamente escalables y manejables. Heartbeat y Linux

Virtual Server (LVS) permiten crear clusters de alta disponibilidad de IP y balanceadores

de carga respectivamente. Acade utiliza aspectos de la filosofía en la que se basan los

clusters de alta disponibilidad de IP, aprovechando también la alta escalabilidad que

ofrecen los balanceadores de carga.

Como resultado se obtiene una solución que ofrece alta disponibilidad, escalabilidad y

manejabilidad en los servicios ofertados. Acade se sirve de ldirectord para configurar y

monitorizar los servicios de red que se están ofreciendo, actualizando las reglas de reenvío

según sea necesario.

Por otra parte, los servidores reales del cluster Acade utilizan el servidor Apache junto con

PHP y la base de datos MySQL para servir contenido web dinámico. También se ha

experimentado satisfactoriamente con el servicio FTP (ProFTP) lo que ha permitido

evaluar las capacidades para garantizar la persistencia en aquellos servicios que la

requieren.

El (anexo VIII) incluye todo el software utilizado para implementar el cluster Acade. La

programación del sitio web ofrecido por Acade ha sido desarrollada íntegramente en PHP,

JavaScript y MySQL (anexo IV). Se trata de la sección de documentación y eventos de la

Asociación de Soporte Al Software Líbre (ASSL) <http://assl.ath.cx>. El código fuente de

la misma está disponible en el CD-ROM del (anexo VI).

Page 118: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 109

9.3 Servicios ofrecidos

Los servicios ofrecidos por el cluster Acade son dos: Servicio web y FTP. El primero de

ellos, consiste en un sitio web dinámico que accede a una base de datos, el segundo ofrece

un servidor de FTP anónimo. El sitio web albergado por el cluster ha sido desarrollado,

paralelamente a este proyecto, para la ASSL. Actualmente forma parte del sitio web de

dicha asociación, conformando la sección de documentación y eventos de la misma.

9.4 Topología Física del cluster Acade

Se compone de 4 máquinas. Dos balanceadores de carga (director1 y director2) y

dos servidores reales (rserver1 y rserver2). Estas cuatro máquinas están conectadas

entre si mediante una red Ethernet conmutada. Los balanceadores carga disponen de una

segunda interfaz que les conecta con la red exterior compartida. Además, los directors

están interconectados entre si mediante un enlace serie.

Page 119: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

110 - Capítulo 9: Cluster Acade (LVS)

A B C D E F G HS EL EC TE D

O N -LIN E

A B C D E F G HS EL EC TE D

O N - LIN E

eth0:0 VIP: 192.168.3.150eth0 IP: 192.168.3.155eth0 MAC: 00:20:18:28:04:e9

eth0:0 VIP: 192.168.3.150eth0 IP: 192.168.3.156eth0 MAC: 00:20:18:29:3e:d1

eth1:0 VIP: 192.168.10.100eth1 IP: 192.168.10.2eth1 MAC: 00:e0:29:25:4e:aa

eth1:0 VIP: 192.168.10.100eth1 IP: 192.168.10.1eth1 MAC: 00:e0:29:25:4d:4c

eth0 IP: 192.168.10.102eth0 MAC: 00:e0:29:25:46:57

eth0 IP: 192.168.10.101eth0 MAC: 00:e0:29:25:4e:9a

eth0 IP: 192.168.3.157eth0 MAC: 00:e0:98:33:6a:b8

eth0 IP: 192.168.3.158eth0 MAC: 00:06:5B:31:4B:74

director2director1

rserver1 rserver2

client1 client2

Topología Física del Cluster Acade

Figura 19: Cluster Acade.

9.5 Topología lógica del cluster Acade

Existen dos redes, la red cliente o externa y la red del cluster o interna.

Los servidores reales pertenecen únicamente a la red interna, mientras que los directors a

ambas, actuando de este modo como pasarelas.

Cada interfaz de red tiene asignada una dirección IP distinta. Sin embargo, cada una de las

dos interfaces del director activo en ese momento, tiene también asignada una VIP

flotante. Estas direcciones son idénticas para ambos directors, pero nunca están activas

simultáneamente en los dos. La gestión dinámica de las VIPs es tarea heartbeat, si bien el

encargado de ejecutar esta tarea es IPaddr. La principal ventaja de esta topología es la de

permitir el uso de cualquier sistema operativo en los servidores reales.

Page 120: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 111

9.6 Funcionamiento e interrelación de los diferentes elementos software

de Acade.

El cluster Acade es un cluster activo/pasivo de servidores virtuales Linux (balanceadores

de carga) que ofrecen los servicios que corren en los servidores reales. Acade se compone

de un cluster activo/pasivo, en el cual, el servicio de alta disponibilidad que se ofrece es un

balanceador de carga. Esto implica tener un escenario que se compone de dos

balanceadores de carga: uno primario (activo o master) y otro de reserva (pasivo o

backup). En cualquier momento, el balanceador de carga de reserva puede cambiar su rol y

pasar a ser el balanceador activo. Por otra parte, los servidores reales también han de poder

detenerse en cualquier momento sin que ello afecte a la disponibilidad del servicio. Es por

todo esto que se requiere la utilización de una serie de software periférico al balanceador

de carga (LVS) y al cluster activo/pasivo (Heartbeat), por lo que se recurre a una serie de

programas, scripts y demonios auxiliares que permiten que todo funcione.

A continuación, se enumeran todos los elementos software a los que se ha recurrido para

implementar la arquitectura Acade (figura 21), el papel que realiza cada uno de ellos en el

escenario Acade y que relación se establece entre todos ellos.

9.6.1 Software utilizado en los balanceadores de carga.

A continuación, se explica el papel que desarrollan los diferentes elementos software

utilizados en los balanceadores de carga director1 y director2 del cluster Acade.

Sistema operativo (Slackware 8.1)

El balanceador de carga utilizado, IPVS está programado para formar parte integrante del

kernel Linux. Ello implica la utilización de un sistema operativo que incorpore dicho

kernel, por lo que se ha optado por el sistema operativo GNU, que actualmente se basa en

él. La distribución elegida ha sido Linux Slackware 8.1 dado que es la que posee un mayor

conocimiento por parte de sus autores.

Page 121: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

112 - Capítulo 9: Cluster Acade (LVS)

- Scripts de inicialización del sistema

El archivo principal para la puesta a punto de los dispositivos de red y desde el que se

lanzan las aplicaciones es el /etc/rc.d/rc.local, el cual presenta el siguiente

aspecto:

#!/bin/sh # # /etc/rc.d/rc.local: Local system initialization script. # # Put any local setup commands in here: # Logs del hertbeat y de ldirectord en la shell tail -f /var/log/messages >/dev/tty12 & tail -f /var/log/ha-log > /dev/tty8 & tail -f /var/log/ha-debug > /dev/tty9 & tail -f /var/log/ldirectord.log > /dev/tty10 & # Configuración de los dispositivos de red /sbin/ifconfig eth0 192.168.3.156 /sbin/ifconfig eth1 192.168.10.2 /sbin/ifconfig lo 127.0.0.1 /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo /sbin/route add default gw 192.168.3.1 eth0 # Cargamos el demonio de sincronización de la tabla de sesiones de LVS /sbin/ipvsadm --start-daemon backup # cargamos el modulo para poder hacer ls en ftp con LVS NAT /sbin/modprobe ip_vs_ftp # Iniciamos el programa q mantiene el servicio de alta disp. (LVS) /etc/init.d/heartbeat start

Este archivo es utilizado para que el sistema, al arrancar, tenga los diferentes dispositivos

de red de acuerdo a la topología Acade. Desde aquí también se lanza el demonio de

sincronización de la tabla de sesiones de IPVS y se carga el módulo ip_vs_ftp que

garantiza la persistencia de las sesiones FTP. Finalmente, se lanza el programa Heartbeat

encargado de realizar el resto de configuraciones en la máquina si así se requiere.

Page 122: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 113

Balanceador de carga (IPVS)

- Descripción

El parche IPVS para el kernel Linux, le dota de las características necesarias para que se

convierta en un balanceador de carga de capa 4. Los balanceadores de carga del cluster

Acade se implementan mediante un Kernel estandard Linux 2.4.19 parcheado con la

versión correspondiente del código IPVS.

- Funcionamiento

IPVS crea dos tablas en el kernel de Linux. La primera de ellas es la tabla de servicios y

servidores reales, contiene información acerca de los servicios (protocolo/puerto) que

balanceará IPVS. La segunda, es la tabla de conexiones activas o sesiones, en la que se

introduce una entrada para cada una de las conexiones que el cluster está balanceado hacia

un servidor real.

Cada vez que llega un paquete, se mira si corresponde con alguno de los servicios descritos

en la primera tabla. Si es así, se mira entonces si dicho paquete corresponde con alguna de

las entradas de la segunda tabla (conexiones ya establecidas), de ser así, este paquete se

reenvía al servidor que indica dicha entrada. En caso contrario, el scheduler selecciona un

servidor real para este paquete, de entre los que figuran en la primera tabla, refleja esta

conexión en la segunda y rescribe la cabecera IP del paquete para enviarlo al servidor real

elegido.

En la arquitectura Acade, las reglas que definen el contenido de la tabla de servicios y

servidores reales, se crean dinámicamente mediante ipvsadm, el demonio ldirectord. Dado

que ldirectord monitoriza constantemente el estado de los servicios de los servidores

reales, el balanceador sólo reenviará paquetes a un servidor real cuando éste se encuentre

disponible.

Dado que IPVS funciona a nivel de kernel de Linux, entra en funcionamiento en el mismo

momento en que se arranca el sistema sin que sea necesario lanzarlo, si bien, no se

configuran sus servicios hasta que Heartbeat realice las acciones oportunas para hacerlo.

Page 123: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

114 - Capítulo 9: Cluster Acade (LVS)

Interface para administrar el balanceador de carga (Ipvsadm)

- Descripción

Ipvsadm es el administrador del balanceador de carga IPVS, y permite configurar los

servicios y servidores reales que configuran al balanceador. Gracias a esta herramienta, es

posible determinar qué servicios ha de ofrecer el balanceador de carga, así como

especificar qué servidores reales los están ofreciendo. Ipvsadm también permite lanzar el

demonio de sincronización de conexiones, el cual posibilita al balanceador de reserva,

mantener actualizada la tabla de conexiones activas, pese a no estar balanceando tráfico en

ese momento. De esta forma y llegado el momento, podrá sustituir al balanceador activo y

hacerse cargo de las conexiones ya establecidas en la otra máquina, con lo que de esta

manera se evita que éstas se pierdan con el cambio de balanceador.

- Funcionamiento

En una arquitectura LVS estática, se configurarían los servicios y servidores estáticos,

mediante un script de inicialización. Este script realizaría llamadas a ipvsadm con los

parámetros necesarios para la configuración del balanceador. De esta manera, no se

contempla la posibilidad de que uno o varios servidores reales puedan dejar de funcionar,

ya sea por fallo del mismo o por detención voluntaria por parte de los administradores del

cluster. Dado que la arquitectura Acade busca la alta disponibilidad, escalabilidad y

manejabilidad de los servicios ofrecidos, se hacen necesarios una serie de demonios,

programas y scripts que permitan la configuración dinámica y automática del cluster en

función del estado del resto de nodos que lo componen.

Así, ipvsadm es utilizado por el demonio de monitorización de servidores reales

(ldirectord) para configurar y mantener constantemente actualizada la configuración del

balanceador de carga (IPVS). Por otro lado, se ha creado el script ipvsyncd, que es

ejecutado por heartbeat y que mediante llamadas a ipvsadm lanza y configura el

demonio de sincronización de conexiones, el cual permite que un balanceador pueda

suplantar al otro sin que ello suponga el que se pierdan las conexiones ya establecidas.

Page 124: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 115

Solución IP Failover (Heartbeat)

- Descripción

Heartbeat es junto al código IPVS, pieza fundamental de la arquitectura Acade. Heartbeat

permite ofrecer servicios en alta disponibilidad. El servicio ofrecido en este caso no es otro

que LVS. Heartbeat es el encargado de velar de que en todo momento exista un

balanceador de carga activo en el cluster, monitorizando constantemente la salud del

balanceador de carga remoto. Para esta tarea, utiliza el envío y recepción de latidos. Si

heartbeat deja de recibir estos latidos, interpreta que el balanceador de carga remoto a

dejado de prestar sus servicios y lanza una serie de programas para reactivarlos en la

máquina en la que se ejecuta.

- Funcionamiento

El envío y recepción de latidos se realiza en la arquitectura Acade a través del puerto serie

de los balanceadores de carga (/dev/ttyS0).

Heartbeat es el encargado de levantar y configurar las interfaces de red, para ello se sirve

del código IPaddr. IPAddr configura las interfaces de red del nuevo balanceador de

carga con la VIP y la DIP. De esta manera se adueña de la IP que ofrece los servicios

virtuales. Heartbeat fuerza entonces, también mediante IPaadr, al resto de máquinas del

cluster a que actualicen sus caches ARP (gratouitous ARP) para que actualicen la MAC de

la VIP.

Page 125: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

116 - Capítulo 9: Cluster Acade (LVS)

A B C D E F G HS ELE CT EDO N-L INE

S D

Ci s co 2 500S ER IE S

Caché ARP (rserver2)IP

192.168.10.100M AC

00:e0:29:25:4d:4c

Caché ARP (rserver1)IP

192.168.10.100M AC

00:e0:29:25:4d:4c

A B C D E F G HS ELE CT EDO N-L INE

Caché ARP (router)IP

192.168.3.150M AC

00:20:18:28:04:e9

(director1 V IP pública)eth0: 192.168.3.150

MA C: 00:20:18:28:04:e9

(director2 V IP pública)eth0: 192.168.3.150

MA C: 00:20:18:29:3e:d1

(director2 V IP interior)eth1: 192.168.10.100

MA C: 00:e0:29:25:4e:aa

(director1 V IP interior)eth1: 192.168.10.100

MAC: 00:e0:29:25:4d:4c

MA C00:20:18:29:3e:d1

MAC00:e0:29:25:4e:aa

MA C00:e0:29:25:4e:aa

C I S C O Y S T E M SS

Figura 20: Takeover en Acade.

Heartbeat también lanza el demonio ldirectord, que configura la tabla del kernel del

balanceador de carga IPVS, estableciendo los servidores y servicios con los que trabajará

el balanceador carga. Ldirectord además monitorizará el estado de los servidores reales y

mantendrá actualizada la tabla de servicios constantemente, evitando de este modo el envío

de paquetes a un servidor que no se encuentre disponible.

Heartbeat es además utilizado en Acade para ejecutar el script ipvsyncd, creado para

esta arquitectura, y que cambia la configuración del demonio de sincronización de

conexiones. Este demonio es configurado como master o como backup en función del

estado activo/pasivo del balanceador de carga, de manera que envíe mensajes multicast

Page 126: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 117

periódicamente al demonio remoto, o bien reciba estos mensajes y actualice la tabla de

conexiones del kernel con la información que estos contienen, que no es otra que las

conexiones establecidas en el otro balanceador de carga.

Configuración dinámica de interfaces (IPaddr)

- Descripción

IPaddr será el encargado de levantar configurar y activar las interfaces de red del

balanceador de carga cuando heartbeat así se lo ordene. Además, mediante el envío de

gratuitous ARP (7.1), fuerza al resto de máquinas a actualizar sus caches ARP.

- Funcionamiento

En la arquitectura Acade, el método de reenvío utilizado por los balanceadores de carga es

LVS-NAT. Para ello, se utilizan dos tarjetas de red en cada servidor (eth0 y eth1). La IP

virtual VIP se asigna al dispositivo eth0 mediante un alias a este (eth0:0). Del mismo

modo, la IP por la que se reenviarán los paquetes hacia los servidores reales también es

flotante. En la red interna, IPaddr también mantiene una IP flotante que se activa

levantando un alias al dispositivo eth1 (eth1:0).

Sistema de monitorización de servidores (Ldirectord)

- Descripción

Ldirectord es un script en Perl que permite configurar y monitorizar los servicios y

servidores con los que trabajará el balanceador de carga, con lo que es posible configurar y

mantener siempre actualizada la tabla que define el comportamiento del balanceador de

carga.

- Funcionamiento

Ldirectord es también lanzado por Heartbeat y realiza dos funciones. En primer lugar,

configura los servicios que ha de prestar el balanceador de carga. Para ello, realiza las

llamadas a ipvsadm necesarias, en función de lo que se especifica en su archivo de

configuración (anexo III). En segundo lugar, monitoriza constantemente los servicios

ofrecidos por los servidores reales. En Acade, éste se ha configurado para comprobar el

estado de los servicios HTTP y FTP de los servidores reales. Para determinar el correcto

funcionamiento de estos servicios, este programa envía peticiones periódicas a los puertos

Page 127: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

118 - Capítulo 9: Cluster Acade (LVS)

en los que corren los servicios web y ftp. Si ldirectord recibe una respuesta satisfactoria a

estas peticiones, mantiene ese servidor en la tabla de servidores del kernel, en caso

contrario borra ese servidor real de la tabla. De esta manera, ldirectord permite monitorizar

la disponibilidad de los servicios de los servidores reales.

Control del demonio de sincronización de conexiones (Script IPVSyncd)

- Descripción

IPVSyncd (anexo III) es un script que cambia el rol del demonio de sincronización de

conexiones de IPVS del modo master a esclavo y viceversa, cuando Heartbeat así se lo

indica.

- Funcionamiento

IPVSyncd ha sido escrito para Acade para que actué como intermediario entre Heartbeat y

el demonio de sincronización de conexiones de IPVS. El script es lanzado por Heartbeat

con el parámetro de entrada start o stop para que decida que tipo de llamada debe de

efectuar a ipvsadm, para que el demonio quede configurado como master o como backup

según sea necesario. Las llamadas a ipvsadm constan de dos pasos. Primero se detiene el

demonio para posteriormente lanzarlo en modo master o esclavo. Así, el demonio del

balanceador activo será siempre configurado como master y el del balanceador de reserva

como backup. Todo el proceso se basa en la capacidad que tiene heartbeat para determinar

el estado de los directors. De este modo, nunca hay activos dos masters o dos esclavos

simultáneamente.

El demonio de sincronización de conexiones master, envía con cierta periodicidad las

actualizaciones en forma de paquete multicast, que contienen las nuevas conexiones.

En el cambio de rol, sólo se perderán aquellas nuevas conexiones que se reciben entre el

envío del último paquete de actualización por parte del antiguo master, hasta que el

director que le releva asume sus funciones. Cuando el director que originalmente tiene la

prioridad para ser master vuelve a iniciarse en sus tareas, primero debe de configurarse en

modo esclavo para recibir la tabla de conexiones. Después, cuando heartbeat entre en

funcionamiento, el director secundario dejará de ser master para pasar a ser esclavo al

mismo tiempo que el director principal pasará de esclavo a master.

Page 128: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 119

KE

RN

EL+

IPVS

pat

ch

hea

rtbe

atIP

add

r(f

ake)

ipv

sadm

ldire

ctor

d

scri

ptIP

VSY

NC

Apa

che

(htt

pd)

Pro

FTP

MyS

QL

MO

D_P

HP

rser

ver1

dire

ctor

1(m

aste

r)

SER

IAL

/dev

/ttyS

0et

h0:

0et

h0

Tab

la d

ese

rvic

ios

yse

rvid

ores

Tab

la d

eco

nexi

ones

Con

nect

ions

sync

(M

aste

r)da

emon

Con

teni

doW

eb

Fot

os

Doc

s

Cód

igo

PH

P

Bas

e de

dato

s

Apac

he(h

ttpd

)P

roFT

P

MyS

QL

MO

D_P

HP

rser

ver2

Con

teni

doW

eb

Fot

os

Doc

s

Cód

igo

PH

P

Bas

e de

dato

s

KER

NE

L+

IPV

S p

atch

hea

rtb

eat

IPad

dr

(fak

e)

ipvs

adm

ldire

ctor

d

scri

ptIP

VSY

NC

dire

ctor

2(b

acku

p)

SER

IAL

/dev

/ttyS

0et

h0:0

Tab

la d

ese

rvic

ios

yse

rvid

ores

Tab

la d

eco

nexi

ones

Con

nect

ions

sync

(M

aste

r)da

emon

eth1

eth1

eth

1:0

eth

0et

h0

paq

uete

s he

artb

eat (

latid

os)

paq

uete

s m

ultic

ast

(sin

cron

izac

ión

de c

onex

ione

s)

petic

ione

s ht

tp y

ftp

para

lam

onito

riza

ción

de

los

serv

idor

es r

eale

s

com

unic

ació

n en

tre

proc

esos

inte

rnos

activ

ació

n de

inte

rfac

es

com

unic

ació

n en

tre

proc

esos

rem

otos

Esq

uem

a S

oftw

are

AC

AD

E (

LVS

)

Figura 21: Esquema software Acade (LVS).

Page 129: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

120 - Capítulo 9: Cluster Acade (LVS)

9.6.2 Software utilizado en los Servidores Reales.

A continuación, se explica el papel que desarrollan los diferentes elementos software

utilizados en los servidores reales rserver1 y rserver2 del cluster Acade.

Sistema operativo (Slackware 8.1)

Pese a que LVS-NAT permite utilizar, en los servidores reales, cualquier sistema operativo

capaz de ejecutar la pila TCP/IP, se ha optado por utilizar un sistema operativo libre GNU,

si bien, en un principio se valoró la posibilidad de utilizar sistemas FreeBSD en los

servidores reales, finalmente se opto por Slackware por razones de homogeneidad.

- Scripts de inicialización del sistema

En los servidores reales, la red se configura normalmente desde el archivo

/etc/rc.d/rc.inet1, por otro lado, el archivo etc/rc.d/rc.local es utilizado

para lanzar la base de datos MySQL. El script /etc/rc.d/rc.httpd es llamado desde

el script /etc/rc.d/rc.M para lanzar el servidor web Apache. El servicio de ftp es

lanzado por el demonio inetd.

Sistema software para servir la aplicación web (Apache + PHP + MySQL)

En el cluster Acade, el contenido web es servido por el servidor Apache junto con el

modulo PHP de éste, y la base de datos utilizada es MySQL. En el anexo está disponible el

código PHP (anexo VI) para el sitio web así como el código (anexo IV) que define la base

de datos MySQL. También está disponible en el Manual Acade (anexo V) el proceso

detallado para la instalación y configuración y puesta en marcha de estos tres componentes.

Sitio web (Sección de documentación y eventos de la ASSL)

El contenido web que sirve Acade está formado por documentos, fotos y los datos

almacenados en la base de datos documentacion. El código PHP, es el encargado de

ofrecer todo este contenido de una forma clara y sencilla al usuario de esta web.

Page 130: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 121

Servidor FTP (ProFTPD)

A fin de probar la capacidad de ofrecer servicios que requieren de persistencia, se opto por

configurar los servidores reales con un servidor de FTP. Posteriormente, se configuraron

los balanceadores de carga para permitir ofrecerlo adecuadamente. El sistema de

monitorización ldirectord que corre en los directors, también fue configurado para que

realizara la monitorización del correcto funcionamiento de ProFTPD. Esta monitorización

consiste en “logearse” en el servicio y bajarse un archivo predeterminado. Posteriormente,

se buscan una serie de palabras clave en dicho archivo.

9.7 Pruebas realizadas

El cluster Acade implementado en este proyecto, ofrece servicio web y ftp a los clientes,

los cuales acceden a ellos, de la misma forma que lo harían si estos fueran ofrecidos desde

un servidor normal y no desde un cluster. De manera, que los procesos de balanceo de

carga son transparentes para el usuario final, que no es consciente de que estos están siendo

prestados a través de un balanceador de carga. Un cliente que acceda al servicio web

disponible en la dirección IP virtual 192.168.3.150, verá algo similar a esto:

Figura 22: Ejemplo de acceso al servicio web del cluster Acade.

Page 131: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

122 - Capítulo 9: Cluster Acade (LVS)

Del mismo modo, si un cliente accede al servicio de ftp ofrecido en esa misma dirección,

tendrá un acceso normal a dicho servicio, sin ser consciente de si su petición está siendo

reenviada persistentemente a un servidor real o no.

Figura 23: Ejemplo de acceso al servicio ftp via web del cluster Acade.

A continuación, se exponen las pruebas realizadas al cluster, el cumplimiento de las cuales

permiten que los servicios sean mostrados correctamente al cliente.

9.7.1 Balanceo de carga.

Cuando el cliente obtiene en su navegador el contenido mostrado en la figura 22, no es

consciente de que en realidad esa página web se ha obtenido desde dos servidores reales

distintos. Si se miran las conexiones establecidas en el balanceador de carga activo, se

Page 132: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 123

observa que se han realizado dos conexiones TCP a servidores reales distintos, como

muestra la siguiente tabla de sesiones:

root@director1:/etc/ha.d/conf# ipvsadm -lnc IPVS connection entries pro expire state source virtual destination TCP 14:56 ESTABLISHED 192.168.3.157:1075 192.168.3.150:80 192.168.10.101:80 TCP 14:56 ESTABLISHED 192.168.3.157:1074 192.168.3.150:80 192.168.10.102:80

Lo cual demuestra que se están balanceado las peticiones realizadas por los clientes.

9.7.2 Persistencia de sesión

Determinados servicios como el ftp, requieren utilizar dos puertos del servidor para ser

prestados. En el primero se establece el canal de control y el segundo es utilizado para la

transferencia de los archivos. Cuando el cliente se baja un archivo del cluster Acade, es

necesario que el balanceador reenvíe persistentemente las conexiones del cliente hacia el

mismo servidor real. En un cluster basado únicamente en la dirección IP origen del cliente,

todas las conexiones, sean del servicio que sean, se reenvían al mismo servidor real. El

balanceador de carga LVS, sin embargo, utiliza un método de balanceo basado en

Persistent Port Connection (PPC) (3.8.2), y además, gracias al modulo ip_vs_ftp es

capaz de implementar el método de conexiones concurrentes (3.8.2), lo cual le permite

discernir entre las conexiones a diferentes servicios realizadas por un mismo cliente, de

manera que asegure la persistencia para el servicio ftp y sin embargo, se balanceen las

peticiones a otros servicios.

La siguiente captura, muestra el contenido de la tabla de conexiones cuando un mismo

cliente está utilizando los servicios web y ftp del cluster Acade. Se observa como las

conexiones pertenecientes a los puertos del ftp, puertos 20 y 21 del servidor, se reenvían

persistentemente a la dirección 192.168.10.102, en cambio las conexiones realizadas

al servicio http (puerto 80) son balanceadas de acuerdo al algoritmo de scheduling round

robin.

Page 133: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

124 - Capítulo 9: Cluster Acade (LVS)

root@director1:/etc/ha.d/conf# ipvsadm -lnc IPVS connection entries pro expire state source virtual destination TCP 08:59 NONE 192.168.3.157:0 192.168.3.150:0 192.168.10.102:0 TCP 01:40 TIME_WAIT 192.168.3.157:1087 192.168.3.150:20 192.168.10.102:20 TCP 01:28 TIME_WAIT 192.168.3.157:1086 192.168.3.150:20 192.168.10.102:20 TCP 14:40 ESTABLISHED 192.168.3.157:1085 192.168.3.150:21 192.168.10.102:21 TCP 14:56 ESTABLISHED 192.168.3.157:1089 192.168.3.150:80 192.168.10.101:80 TCP 14:56 ESTABLISHED 192.168.3.157:1088 192.168.3.150:80 192.168.10.102:80

9.7.3 Monitorización de contenidos

La monitorización de contenidos realizada por el cluster Acade, permite garantizar la alta

disponibilidad de los servidores reales, de manera que si el sistema encuentra algún

problema con los servicios ofrecidos por los servidores reales, se dejarán de reenviar

nuevas peticiones hacia dichos servidores.

En condiciones normales, la tabla que muestra los servicios configurados en el balanceador

de carga activo, mostrará los siguientes servicios y servidores:

root@director1:~# ipvsadm IP Virtual Server version 1.0.6 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP virtualip.acade.net:ftp rr persistent 600 -> rserver2.acade.net:ftp Masq 5 0 0 -> rserver1.acade.net:ftp Masq 5 0 0 TCP virtualip.acade.net:http rr -> rserver2.acade.net:http Masq 5 0 0 -> rserver1.acade.net:http Masq 5 0 0

Para que las páginas web que sirve Acade se muestren correctamente al cliente, es

necesario que la base de datos MySQL funcione adecuadamente, de lo contrario las

páginas se mostrarán parcialmente y con errores. El sistema de monitorización basado en

Ldirectord de Acade, es capaz de detectar un mal funcionamiento de la base de datos, ya

que realiza peticiones regulares al demonio httpd de los servidores reales. Entre los datos

obtenidos como respuesta a estas peticiones, el sistema de monitorización espera encontrar

datos que se obtienen tras una consulta a la base de datos MySQL.

Page 134: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 125

La siguiente prueba, muestra como tras detener el demonio de la MySQL en el servidor

real, el balanceador es reconfigurado automáticamente para que las nuevas peticiones de

conexión ya no se reenvíen a dicho servidor.

Prueba

Se detiene el demonio de la MySQL en el servidor real 2:

root@rserver2:~#mysqladmin -u root –p shutdown

Enter password:

030112 04:38:07 mysqld ended

El balanceador de carga es reconfigurado de manera que ya no envíe nuevas peticiones

hacia el servidor real 2:

root@director1:~# ipvsadm IP Virtual Server version 1.0.6 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP virtualip.acade.net:ftp rr persistent 600 -> rserver2.acade.net:ftp Masq 5 0 0 -> rserver1.acade.net:ftp Masq 5 0 0 TCP virtualip.acade.net:http rr -> rserver1.acade.net:http Masq 5 0 0

Si se vuelve a lanzar la base de datos MySQL (safe_mysql) en el servidor real

rserver2, el balanceador de carga vuelve a reconfigurarse para volverle a reenviar

peticiones. Entre otras cosas, esto permite realizar actualizaciones de software en uno de

los servidores reales sin tener por ello que dejar de prestar los servicios Acade.

9.7.4 Alta disponibilidad del balanceador de carga.

De nada sirve disponer de alta disponibilidad en cuanto a servidores reales, si el

balanceador supone un único punto vital para todo el sistema. Es por ello que Acade

dispone de dos balanceadores de carga en una arquitectura de cluster activo/pasivo.

Heartbeat es el software que permite implementar esta arquitectura. Los siguientes Logs

Page 135: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

126 - Capítulo 9: Cluster Acade (LVS)

del balanceador de carga de reserva (director2), reflejan como se realiza el proceso de

takeover cuando se produce un fallo en el balanceador de carga primario (director1).

ha-log

heartbeat: 2003/01/17_17:33:09 WARN: node director1: is dead

heartbeat: 2003/01/17_17:33:09 info: Link director1:/dev/ttyS0 dead.

heartbeat: 2003/01/17_17:33:09 info: Running /etc/ha.d/rc.d/status status

heartbeat: 2003/01/17_17:33:09 info: Running /etc/ha.d/rc.d/ifstat ifstat

heartbeat: 2003/01/17_17:33:09 info: Taking over resource group IPaddr::192.168.3.150/24

heartbeat: 2003/01/17_17:33:10 info: Acquiring resource group: director1 IPaddr::192.168.3.150/24 ldirectord::configuration

heartbeat: 2003/01/17_17:33:10 info: Running /etc/ha.d/resource.d/IPaddr 192.168.3.150/24 start

heartbeat: 2003/01/17_17:33:10 info: ifconfig eth0:0 192.168.3.150 netmask 255.255.255.0 broadcast 192.168.3.255

heartbeat: 2003/01/17_17:33:11 info: Sending Gratuitous Arp for 192.168.3.150 on eth0:0 [eth0]

heartbeat: 2003/01/17_17:33:11 info: Running /etc/ha.d/resource.d/ldirectord configuration start

heartbeat: 2003/01/17_17:33:14 info: Taking over resource group IPaddr::192.168.10.100/24

heartbeat: 2003/01/17_17:33:15 info: Acquiring resource group: director1 IPaddr::192.168.10.100/24 ipvsyncd

heartbeat: 2003/01/17_17:33:15 info: Running /etc/ha.d/resource.d/IPaddr 192.168.10.100/24 start

heartbeat: 2003/01/17_17:33:16 info: ifconfig eth1:0 192.168.10.100 netmask 255.255.255.0 broadcast 192.168.10.255

heartbeat: 2003/01/17_17:33:16 info: Sending Gratuitous Arp for 192.168.10.100 on eth1:0 [eth1]

heartbeat: 2003/01/17_17:33:16 info: Running /etc/ha.d/resource.d/ipvsyncd start

heartbeat: 2003/01/17_17:33:17 info: mach_down takeover complete.

ha-debug

heartbeat: 2003/01/17_17:33:10 debug: Starting /etc/ha.d/resource.d/IPaddr 192.168.3.150/24 start

heartbeat: 2003/01/17_17:33:11 debug: /etc/ha.d/resource.d/IPaddr 192.168.3.150/24 start done. RC=0

heartbeat: 2003/01/17_17:33:11 debug: Starting /etc/ha.d/resource.d/ldirectord configuration start

heartbeat: 2003/01/17_17:33:14 debug: /etc/ha.d/resource.d/ldirectord configuration start done. RC=0

heartbeat: 2003/01/17_17:33:15 debug: Starting /etc/ha.d/resource.d/IPaddr 192.168.10.100/24 start

heartbeat: 2003/01/17_17:33:16 debug: /etc/ha.d/resource.d/IPaddr 192.168.10.100/24 start done. RC=0

heartbeat: 2003/01/17_17:33:16 debug: Starting /etc/ha.d/resource.d/ipvsyncd start

heartbeat: 2003/01/17_17:33:17 debug: /etc/ha.d/resource.d/ipvsyncd start done. RC=0

ldirectord.log

[Fri Jan 17 17:33:14 2003|configuration] Starting Linux Director Daemon

[Fri Jan 17 17:33:14 2003|configuration] Adding virtual server: 192.168.3.150:80

[Fri Jan 17 17:33:14 2003|configuration] Adding virtual server: 192.168.3.150:21

[Fri Jan 17 17:33:16 2003|configuration] Adding real server: 192.168.10.101:80 (1 x 192.168.3.150:80)

[Fri Jan 17 17:33:16 2003|configuration] Adding real server: 192.168.10.102:80 (2 x 192.168.3.150:80)

[Fri Jan 17 17:33:16 2003|configuration] Adding real server: 192.168.10.101:21 (1 x 192.168.3.150:21)

[Fri Jan 17 17:33:16 2003|configuration] Adding real server: 192.168.10.102:21 (2 x 192.168.3.150:21)

Page 136: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 127

messages

Jan 17 17:33:09 director2 heartbeat[152]: info: Link director1:/dev/ttyS0 dead.

Jan 17 17:33:09 director2 heartbeat: info: Running /etc/ha.d/rc.d/status status

Jan 17 17:33:09 director2 heartbeat: info: Running /etc/ha.d/rc.d/ifstat ifstat

Jan 17 17:33:09 director2 heartbeat: info: Taking over resource group IPaddr::192.168.3.150/24

Jan 17 17:33:10 director2 heartbeat: info: Acquiring resource group: director1 IPaddr::192.168.3.150/24

ldirectord::configuration

Jan 17 17:33:10 director2 heartbeat: info: Running /etc/ha.d/resource.d/IPaddr 192.168.3.150/24 start

Jan 17 17:33:10 director2 heartbeat: info: ifconfig eth0:0 192.168.3.150 netmask 255.255.255.0 broadcast

192.168.3.255

Jan 17 17:33:11 director2 heartbeat: info: Sending Gratuitous Arp for 192.168.3.150 on eth0:0 [eth0]

Jan 17 17:33:11 director2 heartbeat: info: Running /etc/ha.d/resource.d/ldirectord configuration start

Jan 17 17:33:14 director2 heartbeat: info: Taking over resource group IPaddr::192.168.10.100/24

Jan 17 17:33:15 director2 heartbeat: info: Acquiring resource group: director1 IPaddr::192.168.10.100/24

ipvsyncd

Jan 17 17:33:15 director2 heartbeat: info: Running /etc/ha.d/resource.d/IPaddr 192.168.10.100/24 start

Jan 17 17:33:16 director2 heartbeat: info: ifconfig eth1:0 192.168.10.100 netmask 255.255.255.0 broadcast

192.168.10.255

Jan 17 17:33:16 director2 heartbeat: info: Sending Gratuitous Arp for 192.168.10.100 on eth1:0 [eth1]

Jan 17 17:33:16 director2 heartbeat: info: Running /etc/ha.d/resource.d/ipvsyncd start

Jan 17 17:33:16 director2 kernel: IPVS: stopping sync thread 15332 ...

Jan 17 17:33:16 director2 kernel: IPVS: sync thread stopped!

Jan 17 17:33:16 director2 kernel: IPVS: sync thread started.

Jan 17 17:33:17 director2 heartbeat: info: mach_down takeover complete.

Migrado de conexiones

Los balanceadores de carga del cluster se han configurado de manera que informen en todo

momento al balanceador remoto del estado de su tabla de sesiones (hash table). Al tener

los dos balanceadores el mismo contenido en sus tablas, son mutuamente capaces de

hacerse cargo de las conexiones que pueda tener establecidas el otro balanceador, en caso

de producirse un fallo. Además de constatar, que ambos balanceadores disponen en todo

momento de las mismas entradas en las tablas de sesión, es posible realizar una prueba que

demuestre su correcto funcionamiento en caso de fallida. La prueba puede consistir en

descargarse un archivo vía ftp, que sea lo suficientemente largo como para dar tiempo a

detener el balanceador de carga que tiene esa conexión establecida. Si todo el proceso

descrito anteriormente se ha llevado a cabo convenientemente, la conexión ftp debe migrar

Page 137: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

128 - Capítulo 9: Cluster Acade (LVS)

al nuevo balanceador de carga, y por tanto continuándose la descarga del archivo sin

mayores problemas. Lo único que ha de notar el cliente en este proceso, es una pequeña

pausa en la descarga cuando el primer balanceador se viene abajo. Esta prueba ha sido

llevada a cabo con éxito satisfactoriamente.

Page 138: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 129

10. Conclusiones y valoraciones

Para la consecución de los objetivos iniciales de ACADE, sus autores se han visto en la

necesidad de incrementar sus conocimientos en sistemas operativos así como en la de

ganar soltura en labores de configuración y mantenimiento de servidores. No sólo fue

necesario saber implementar soluciones que resolvieran los objetivos planteados al iniciar

el proyecto, utilizando para ello software libre, sino que también hubo que encontrar algún

método para documentar debidamente el proceso de instalación y documentación. En este

sentido, cabe resaltar la creación del manual ACADE, que recoge el proceso completo de

descarga, instalación y configuración de todo el software usado para implementar el cluster

Acade.

En el campo del Networking, ha sido imprescindible afianzar e incrementar los

conocimientos en redes IP: Asignación de direcciones, direcciones IP virtuales, tablas de

rutado, técnicas como el NAT, ARP spoofing (7.2) o el envío de gratuitous ARP(7.1),

profundizando consecuentemente en el conocimiento de la pila TCP/IP de Linux.

A nivel teórico, se han estudiado técnicas avanzadas de enrutado directo (capa 2) como el

Direct Routing (6.3.2), utilizado en soluciones avanzadas de IBM, para soportar cargas

elevadas de tráfico.

Casi toda la información utilizada para desarrollar ACADE está en inglés. Bien sea

documentación web, manuales, artículos, foros de discusión, etc. En ocasiones, estos textos

tienen además la particularidad de no siempre utilizar un lenguaje demasiado académico o

estándar, sino que más bien son comentarios, a veces en jerga, de desarrolladores y

usuarios experimentados.

En el campo del hardware, ha sido necesario revisar todas las máquinas que componen el

cluster ya que no estaban inicialmente en óptimas condiciones.

Se optó por el trabajo en equipo, actitud muy valorada en cualquier empresa.

Page 139: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

130 - Capítulo 10: Conclusiones y valoraciones

Se han conseguido y ampliado gran parte de los objetivos iniciales, aunque queda por

resolver un aspecto muy importante: la escritura remota por parte de los clientes en la base

de datos del cluster, no obstante se han planteado posibles soluciones a éste y otros

problemas.

10.1 Limitaciones y aspectos por desarrollar en Acade

10.1.1 Aspectos por desarrollar: LVS-DR y LVS-Tun

Este proyecto ha priorizado la consecución de una solución de alta disponibilidad

(Heartbeat) que el hecho exprimir al máximo las posibilidades del balanceador de carga,

que por otra parte hubiera requerido de una infraestructura hardaware más compleja. Es

por ello que, aun han quedado por explorar las capacidades de los métodos de reenvío

Direct Routing y las capacidades como balanceador de carga global de LVS.

10.1.2 Limitaciones de este modelo: Bases de Datos

Las aplicaciones transaccionales, en las cuales los clientes del cluster han de poder escribir

en la base de datos, representan actualmente la principal limitación del modelo Acade.

Al igual que el contenido web, las bases de datos que corren independientemente en cada

servidor real, han de mantener su contenido sincronizado. Mientras los clientes del cluster

sean sólo de lectura, el administrador podrá actualizar el contenido de las bases de datos

regularmente y mediante esta sencilla operación (ejecutar un script periódicamente, por

ejemplo), los clientes podrán acceder a aplicaciones web que no requieran realizar una

transacción de información entre el cliente y la base de datos del servidor. Para facilitar las

tareas de sincronización del contenido web, de cada uno de los servidores reales puede

recurrir a sistemas de archivos distribuidos como NFS, GFS CODA, Intermezzo... o bien

utilizar herramientas de sincronización como rsync <http://rsync.samba.org/>.

Page 140: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ACADE (LVS) - 131

Si cada servidor real dispone de su propia base de datos y el cliente realiza una operación

transaccional con el cluster, entonces la información que suba el cliente, irá a parar a un

solo servidor real, por lo cual, las bases de datos de los otros servidores no serán

actualizadas y consecuentemente, los clientes obtendrán una información inconsistente al

acceder al cluster. Esta información, dependerá del servidor real al que se conecten.

El proyecto The Linux Scalable Database (LSD)

<http://sourceforge.net/projects/lsdproject/> está trabajando en un código que permita

escribir en todas las bases de datos de los diferentes servidores reales a través de un agente

intermediario. Lamentablemente, como otros programas utilizados en el cluster, este

código está aun en fase experimental. A nivel funcional, es posible conseguir unos

resultados similares a los que permitirá el LSD project mediante las capacidades de

MySQL Replication.

Para abordar este problema, es posible hacer que todos los servidores reales utilicen la

misma base de datos, pero esta solución tiene dos inconvenientes: por una parte se

balancea el servicio web pero no el acceso a la base de datos, y por otra, se introduce un

único elemento vital para el correcto funcionamiento del sistema, lo cual va en contra de la

filosofía que aborda el problema de la alta disponibilidad mediante el balanceo de carga y

la redundancia de los sistemas.

A fin de solventar este problema, se estudiaron multitud de posibles soluciones basadas en

MySQL replication, descritas en el apartado 9.29.1 del LVS-HOWTO [7], y en la

utilización de sistemas de archivos distribuidos si bien, ninguna de ellas resolvía

completamente el problema. Otra forma de abordar el problema pasaría por utilizar Paralel

Databases como ORACLE Open Parallel Server (OPS) [11].

10.2 Conclusión Final

Una infraestructura como el cluster Acade plantea dos problemas: uno telemático en

cuanto al control y gestión del tráfico que originan los sistemas finales en arquitecturas

cliente/servidor, y otro informático que requiere entender el comportamiento de estas

Page 141: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

132 - Capítulo 10: Conclusiones y valoraciones

aplicaciones finales. Por ello, el telemático no puede quedarse sólo en el tratamiento del

tráfico originado, sino que debe entender también el funcionamiento interno de los

sistemas finales que lo generan, si lo que se pretende es resolver los problemas que plantea

poder ofrecer alta disponibilidad y escalabilidad mediante la redundancia de los sistemas

que han de trabajar, aparentemente como uno solo, en una solución cliente/servidor virtual.

El hecho de ofrecer una aplicación cliente/servidor mediante un conjunto de máquinas, en

vez de hacerlo a través de una sola, permite ofrecer una serie de ventajas, en cuanto a

capacidad, escalabilidad y disponibilidad, a costa de introducir nuevos problemas a

resolver que no se daban en el arquitectura cliente/servidor tradicional.

Por otra parte, el modelo de ingeniería en el cual se cimenta el software libre, que ha

permitido desarrollar todas la aplicaciones necesarias para construir el cluster Acade,

demuestra su viabilidad y madurez para implementar soluciones que respondan a

problemas reales. Como muestra de ello, véase la lista de sitios web que actualmente

utilizan solucione basadas en el balanceador de carga del proyecto LVS (anexo I).

Page 142: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO I

ANEXO I Listado de sitios web que implementan soluciones basadas en LVS

El siguiente cuadro está extraídos del site de LVS <http://www.linuxvirtualserver.org>, en

el se recoge un listado de diferentes sitios web y proyectos que han sido implementados

con el servidor virtual linux (LVS)

Site Description LVS Notes

linux.com The Linux Portal LVS web cluster

sourceforge.net The largest open source development site

LVS (load balancing HTTP, HTTPS, FTP, SSH, CVS)

themes.org The largest interface/themes site for the X Window System LVS web cluster

wwwcache.ja.net UK National JANET Web Cache Service 40 Squid cache servers in three LVS clusters, ~900GB content shipped/day. for more information

www.zope.org The leading Open Source web application server web cluster, for more information

masks.org Online mask museum A LVS cluster of four Pentium and Pentium II class computers. More information

TuxFamily.org Free hosting for free software like sourceforge and savannah

using LVS/heartbeat (2 load balancers failover and 8 real servers) for all the hosting services

www.care2.com Largest web site community of people who care about the environment

6+ web servers and a single load balancer by Jeremy Brand. more information

valinux.com VA Linux Systems, Inc. LVS web cluster

www.real.com Real Networks, Inc. LVS media cluster (>20 nodes)

www.netwalk.com A full service Internet Access and Presence Provider LVS web hosting cluster

www.greenheck.com Leading manufacturer of air movement and control equipment

LVS web cluster (5 node). Cliff Baeseman provides two pictures (1, 2) of the cluster

map.net An ICP that allows you to explore the Internet in the same way you explore a map

LVS web cluster (6 nodes) by Brian Edmonds

anandtech.com a big hardware review site two primary-backup load balancers and eleven web servers, more information

www.tiscover.com The 3rd largest Portal Site in Austria with more than 500,000 visits per day LVS web cluster

www.cycosmos.com An virtual community website in United Kingdom and Germany LVS web cluster

Page 143: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO I

www.mybiz.com mybiz provides customer service and marketing tools that enable small businesses to build stronger and more profitable customer relationships.

LVS cluster handling just about every public service, mainly web, plus back-end clusters for in-house daemons. managed by tc lewis

Undergraduate Compute Cluster

Undergraduate Students in the Electronics and Computer Science Department at the University of Southampton (England) use it for compilation, and running software remotely

It consists of 3 dual processor real servers and balances telnet and ssh connections. More information

datingfaces.com Online dating site A LVS cluster with 2 directors (VS/DR) and 10 real servers handles about 1.6-2 million hits per day. More information

www.chez.com perso.respublica.fr perso.libertysurf.fr perso.libertysurf.se perso.libertysurf.co.uk perso.skyrock.com perso.worldonline.fr perso.infonie.fr

Tiscali Group's massive web hosting services

4 LVS directors: 1 for chez.com (+ 1 for fail over) and 1 for the 7 other domains (+ 1 for fail over), load balancing ~80+50Mb/s of HTTP and FTP

serve.com Large shared hosting environment LVS web cluster with live fail-over

noguska.com Noguska web site and other web hostings

1 Director, 2 Realserver LVS-NAT cluster. It serves noguska.com and about 7 other domains. More information

yescall.com One of the largest yellowpage site in Korea

1 director/load balancer(single Pentium3 SuseLinux 7.3) and 4+ FreeBSD 4.X web server cover about 12mil. hits/day static HTTP traffic by Direct Routing. Setup by SangSeok Park. (under consideration to increase director and realserver for performance and high-availability)

astro.com Astrodienst Homepage 1 LVS director running in VS/NAT mode with four real servers. Setup by Alois Treindl.

www.songn.com Music potal Site with soribada(famous mp3 p2p in Korea) in Korea

One LVS director running in VS/DR mode with 6+ nodes of Windows 2000 servers, setup by Wonyoung Choi.

www.prideindustries.com PRIDE Industries - Creating jobs for people with disabilities. We host several websites which compliment the services we provide to our customers.

Two Directors running LVS-NAT and Keepalived driving three Realservers. Everything is Linux and we are using FWMARKs for persistence port groupings. Setup by Richard L. Allbery.

Page 144: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO II

ANEXO II Anexo 2 Manual de ipvsadm

IPVSADM(8) Linux Administrator's Guide IPVSADM(8) NAME ipvsadm - Linux Virtual Server administration SYNOPSIS ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] ipvsadm -D -t|u|f service-address ipvsadm -C ipvsadm -R ipvsadm -S [-n] ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] ipvsadm -d -t|u|f service-address -r server-address ipvsadm -L|l [options] ipvsadm -Z [-t|u|f service-address] ipvsadm --set tcp tcpfin udp ipvsadm --start-daemon state [--mcast-interface interface] ipvsadm --stop-daemon ipvsadm -h DESCRIPTION Ipvsadm(8) is used to set up, maintain or inspect the vir- tual server table in the Linux kernel. The Linux Virtual Server can be used to build scalable network services based on a cluster of two or more nodes. The active node of the cluster redirects service requests to a collection of server hosts that will actually perform the services. Supported features include two protocols (TCP and UDP), three packet-forwarding methods (NAT, tunneling, and direct routing), and eight load balancing algorithms (round robin, weighted round robin, least-connection, weighted least-connection, locality-based least-connec- tion, locality-based least-connection with replication, destination-hashing, and source-hashing). The command has two basic formats for execution: ipvsadm COMMAND [protocol] service-address [scheduling-method] [persistence options] ipvsadm command [protocol] service-address server-address [packet-forwarding-method] [weight options] The first format manipulates a virtual service and the algorithm for assigning service requests to real servers. Optionally, a persistent timeout and network mask for the granularity of a persistent service may be specified. The second format manipulates a real server that is associated with an existing virtual service. When specifying a real server, the packet-forwarding method and the weight of the real server, relative to other real servers for the vir-

Page 145: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO II

tual service, may be specified, otherwise defaults will be used. COMMANDS ipvsadm(8) recognises the commands described below. Upper- case commands maintain virtual services. Lower-case com- mands maintain real servers that are associated with a virtual service. -A, --add-service Add a virtual service. A service address is uniquely defined by a triplet: IP address, port number, and protocol. Alternatively, a virtual ser- vice may be defined by a firewall-mark. -E, --edit-service Edit a virtual service. -D, --delete-service Delete a virtual service, along with any associated real servers. -C, --clear Clear the virtual server table. -R, --restore Restore Linux Virtual Server rules from stdin. Each line read from stdin will be treated as the command line options to a separate invocation of ipvsadm. Lines read from stdin can optionally begin with "ipvsadm". This option is useful to avoid execut- ing a large number or ipvsadm commands when con- structing an extensive routing table. lines 47-90/485 19% -S, --save Dump the Linux Virtual Server rules to stdout in a format that can be read by -R|--restore. -a, --add-server Add a real server to a virtual service. -e, --edit-server Edit a real server in a virtual service. -d, --delete-server Remove a real server from a virtual service. -L, -l, --list List the virtual server table if no argument is specified. If a service-address is selected, list this service only. If the -c option is selected, then display the connection table. The exact output is affected by the other arguments given. -Z, --zero Zero the packet, byte and rate counters in a ser- vice or all services. --set tcp tcpfin udp

Page 146: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO II

Change the timeout values used for IPVS connec- tions. This command always takes 3 parameters, representing the timeout values (in seconds) for TCP sessions, TCP sessions after receiving a FIN packet, and UDP packets, respectively. A timeout value 0 means that the current timeout value of the corresponding entry is preserved. --start-daemon state Start the connection synchronization daemon. The state is to indicate that the daemon is started as master or backup. The connection synchronization daemon is implemented inside the Linux kernel. The master daemon running at the primary load balancer multicasts changes of connections periodically, and the backup daemon running at the backup load bal- ancers receives multicast message and creates cor- responding connections. Then, in case the primary load balancer fails, a backup load balancer will takeover, and it has state of almost all connec- tions, so that almost all established connections can continue to access the service. --stop-daemon Stop the connection synchronization daemon. -h, --help Display a description of the command syntax. PARAMETERS The commands above accept or require zero or more of the following parameters. -t, --tcp-service service-address Use TCP service. The service-address is of the form host[:port]. Host may be one of a plain IP address or a hostname. Port may be either a plain port num- ber or the service name of port. The Port may be omitted, in which case zero will be used. A Port of zero is only valid if the service is persistent as the -p|--persistent option, in which case it is a wild-card port, that is connections will be accepted to any port. -u, --udp-service service-address Use UDP service. See the -t|--tcp-service for the description of the service-address. -f, --fwmark-service integer Use a firewall-mark, an integer value greater than zero, to denote a virtual service instead of an address, port and protocol (UDP or TCP). The mark- ing of packets with a firewall-mark is configured using the -m|--mark option to iptables(8). It can be used to build a virtual service assoicated with the same real servers, covering multiple IP addresss, port and protocol tripplets. Using firewall-mark virtual services provides a convenient method of grouping together different IP

Page 147: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO II

addresses, ports and protocols into a single vir- tual service. This is useful for both simplifying configuration if a large number of virtual services are required and grouping persistence across what would otherwise be multiple virtual services. -s, --scheduler scheduling-method scheduling-method Algorithm for allocating TCP connections and UDP datagrams to real servers. Scheduling algorithms are implemented as kernel modules. Six are shipped with the Linux Virtual Server: rr - Robin Robin: distribute jobs equally amongst the available real servers. wrr - Weighted Round Robin: assign jobs to real servers proportionally to there real servers' weight. Servers with higher weights receive new jobs first and get more jobs than servers with lower weights. Servers with equal weights get an equal distribution of new jobs. lc - Least-Connection: assign more jobs to real servers with fewer active jobs. wlc - Weighted Least-Connection: assign more jobs to servers with fewer jobs and relative to the real servers' weight. This is the default. lblc - Locality-Based Least-Connection: assign jobs destined for the same IP address to the same server if the server is not overloaded and available; oth- erwise assign jobs to servers with fewer jobs, and keep it for future assignment. lblcr - Locality-Based Least-Connection with Repli- cation: assign jobs destined for the same IP address to the least-connection node in the server set for the IP address. If all the node in the server set are over loaded, it picks up a node with fewer jobs in the cluster and adds it in the sever set for the target. If the server set has not been modified for the specified time, the most loaded node is removed from the server set, in order to avoid high degree of replication. dh - Destination Hashing: assign jobs to servers through looking up a statically assigned hash table by their destination IP addresses. sh - Source Hashing: assign jobs to servers through looking up a statically assigned hash table by their source IP addresses. -p, --persistent [timeout] Specify that a virtual service is persistent. If this option is specified, multiple requests from a client are redirected to the same real server selected for the first request. Optionally, the

Page 148: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO II

timeout of persistent sessions may be specified given in seconds, otherwise the default of 300 sec- onds will be used. This option may be used in con- junction with protocols such as SSL or FTP where it is important that clients consistently connect with the same real server. Note: If a virtual service is to handle FTP connec- tions then persistence must be set for the virtual service if Direct Routing or Tunnelling is used as the forwarding mechanism. If Masquerading is used in conjunction with an FTP service than persistence is not necessary, but the ip_vs_ftp kernel module must be used. This module may be manually inserted into the kernel using insmod(8). -M, --netmask netmask Specify the granularity with which clients are grouped for persistent virtual services. The source address of the request is masked with this netmask to direct all clients from a network to the same real server. The default is 255.255.255.255, that is, the persistence granularity is per client host. Less specific netmasks may be used to resolve problems with non-persistent cache clusters on the client side. -r, --real-server server-address Real server that an associated request for service may be assigned to. The server-address is the host address of a real server, and may plus port. Host can be either a plain IP address or a hostname. Port can be either a plain port number or the ser- vice name of port. In the case of the masquerading method, the host address is usually an RFC 1918 private IP address, and the port can be different from that of the associated service. With the tun- neling and direct routing methods, port must be equal to that of the service address. For normal services, the port specified in the service address will be used if port is not specified. For fwmark services, port may be ommitted, in which case the destination port on the real server will be the destination port of the request sent to the virtual service. [packet-forwarding-method] -g, --gatewaying Use gatewaying (direct routing). This is the default. -i, --ipip Use ipip encapsulation (tunneling). -m, --masquerading Use masquerading (network access translation, or NAT). Note: Regardless of the packet-forwarding mecha- nism specified, real servers for addresses for which there are interfaces on the local node will be use the local forwarding method, then packets

Page 149: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO II

for the servers will be passed to upper layer on the local node. This cannot be specified by ipvsadm, rather it set by the kernel as real servers are added or modified. -w, --weight weight Weight is an integer specifying the capacity of a server relative to the others in the pool. The valid values of weight are 0 through to 65535. The default is 1. Quiescent servers are specified with a weight of zero. A quiescent server will receive no new jobs but still serve the existing jobs, for all scheduling algorithms distributed with the Linux Virtual Server. Setting a quiescent server may be useful if the server is overloaded or needs to be taken out of service for maintenance. --mcast-interface interface Specify the multicast interface that the sync mas- ter daemon sends outgoing multicasts through, or the sync backup daemon listens to for multicasts. -c, --connection Connection output. The list command with this option will list current IPVS connections. --timeout Timeout output. The list command with this option will display the timeout values (in seconds) for TCP sessions, TCP sessions after receiving a FIN packet, and UDP packets. --daemon Daemon information output. The list command with this option will display the daemon status and its multicast interface. --stats Output of statistics information. The statistics information of services and its servers will be displayed, when the services are listed. --rate Output of rate information. The rate information (such as connections/second, bytes/second and pack- ets/second) of services and its servers will be displayed, when the services are listed. -n, --numeric Numeric output. IP addresses and port numbers will be printed in numeric format rather than as as host names and services respectively, which is the default. EXAMPLE 1 - Simple Virtual Service The following commands configure a Linux Director to dis- tribute incoming requests addressed to port 80 on 207.175.44.110 equally to port 80 on five real servers. The forwarding method used in this example is NAT, with each of the real servers being masqueraded by the Linux lines 311-354/485 73%

Page 150: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO II

Director. ipvsadm -A -t 207.175.44.110:80 -s rr ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.1:80 -m ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.2:80 -m ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.3:80 -m ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.4:80 -m ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.5:80 -m Alternatively, this could be achieved in a single ipvsadm command. echo " -A -t 207.175.44.110:80 -s rr -a -t 207.175.44.110:80 -r 192.168.10.1:80 -m -a -t 207.175.44.110:80 -r 192.168.10.2:80 -m -a -t 207.175.44.110:80 -r 192.168.10.3:80 -m -a -t 207.175.44.110:80 -r 192.168.10.4:80 -m -a -t 207.175.44.110:80 -r 192.168.10.5:80 -m " | ipvsadm -R As masquerading is used as the forwarding mechanism in this example, the default route of the real servers must be set to the linux director, which will need to be con- figured to forward and masquerade packets. This can be achieved using the following commands: echo "1" > /proc/sys/net/ipv4/ip_forward EXAMPLE 2 - Firewall-Mark Virtual Service The following commands configure a Linux Director to dis- tribute incoming requests addressed to any port on 207.175.44.110 or 207.175.44.111 equally to the corre- sponding port on five real servers. As per the previous example, the forwarding method used in this example is NAT, with each of the real servers being masqueraded by the Linux Director. ipvsadm -A -f 1 -s rr ipvsadm -a -f 1 -r 192.168.10.1:0 -m ipvsadm -a -f 1 -r 192.168.10.2:0 -m ipvsadm -a -f 1 -r 192.168.10.3:0 -m ipvsadm -a -f 1 -r 192.168.10.4:0 -m ipvsadm -a -f 1 -r 192.168.10.5:0 -m As masquerading is used as the forwarding mechanism in this example, the default route of the real servers must be set to the linux director, which will need to be con- figured to forward and masquerade packets. The real server should also be configured to mark incoming packets addressed to any port on 207.175.44.110 and 207.175.44.111 with firewall-mark 1. If FTP traffic is to be handled by this virtual service, then the ip_vs_ftp kernel module needs to be inserted into the kernel. These operations can be achieved using the following commands: echo "1" > /proc/sys/net/ipv4/ip_forward modprobe ip_tables iptables -A PREROUTING -t mangle -d 207.175.44.110/31 -j MARK --set-mark 1

Page 151: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO II

modprobe ip_vs_ftp NOTES The Linux Virtual Server implements three defense strate- gies against some types of denial of service (DoS) attacks. The Linux Director creates an entry for each con- nection in order to keep its state, and each entry occu- pies 128 bytes effective memory. LVS's vulnerability to a DoS attack lies in the potential to increase the number entries as much as possible until the linux director runs out of memory. The three defense strategies against the attack are: Randomly drop some entries in the table. Drop 1/rate packets before forwarding them. And use secure tcp state transition table and short timeouts. The strategies are controlled by sysctl variables and corresponding entries in the /proc filesystem: /proc/sys/net/ipv4/vs/drop_entry /proc/sys/net/ipv4/vs/drop_packet /proc/sys/net/ipv4/vs/secure_tcp Valid values for each variable are 0 through to 3. The default value is 0, which disables the respective defense strategy. 1 and 2 are automatic modes - when there is no enough available memory, the respective strategy will be enabled and the variable is automatically set to 2, other- wise the strategy is disabled and the variable is set to 1. A value of 3 denotes that the respective strategy is always enabled. The available memory threshold and secure enabled and the variable is automatically set to 2, other- wise the strategy is disabled and the variable is set to 1. A value of 3 denotes that the respective strategy is always enabled. The available memory threshold and secure TCP timeouts can be tuned using the sysctl variables and corresponding entries in the /proc filesystem: /proc/sys/net/ipv4/vs/amemthresh /proc/sys/net/ipv4/vs/timeout_* FILES /proc/net/ip_vs /proc/net/ip_vs_app /proc/net/ip_vs_conn /proc/net/ip_vs_stats /proc/sys/net/ipv4/vs/am_droprate /proc/sys/net/ipv4/vs/amemthresh /proc/sys/net/ipv4/vs/drop_entry /proc/sys/net/ipv4/vs/drop_packet /proc/sys/net/ipv4/vs/secure_tcp /proc/sys/net/ipv4/vs/timeout_close /proc/sys/net/ipv4/vs/timeout_closewait /proc/sys/net/ipv4/vs/timeout_established /proc/sys/net/ipv4/vs/timeout_finwait /proc/sys/net/ipv4/vs/timeout_icmp /proc/sys/net/ipv4/vs/timeout_lastack /proc/sys/net/ipv4/vs/timeout_listen /proc/sys/net/ipv4/vs/timeout_synack /proc/sys/net/ipv4/vs/timeout_synrecv /proc/sys/net/ipv4/vs/timeout_synsent /proc/sys/net/ipv4/vs/timeout_timewait

Page 152: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO II

/proc/sys/net/ipv4/vs/timeout_udp SEE ALSO iptables(8), insmod(8), modprobe(8) AUTHORS ipvsadm - Wensong Zhang <[email protected]> Peter Kese <[email protected]> man page - Mike Wangsmo <[email protected]> Wensong Zhang <[email protected]> Horms <[email protected]> LVS Administration 11th April 2002 IPVSADM(8)

Page 153: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO II

Page 154: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO III

ANEXO III Archivos y scripts de configuración principales de los LVS del cluster Acade

Este anexo recoge los archivos de configuración de los programas más importantes del

cluster Acade.

Linux Director Daemon (ldirectord)

/etc/ha.d/conf/configuration # Archivo de configuracion del ldirectord arrancado por heartbeat # checktimeout = 6 checkinterval = 2 virtual = 192.168.3.150:80 real = 192.168.10.101:80 masq 5 real = 192.168.10.102:80 masq 5 service = http scheduler = rr checktype = negotiate request = "ficha_evento.php?id_evento=00000001" receive = "Joan Carles" virtual = 192.168.3.150:21 real = 192.168.10.101:21 masq 5 real = 192.168.10.102:21 masq 5 service = ftp scheduler = rr login = "anonymous" passwd = "[email protected]" persistent = 600 protocol=tcp

Heartbeat

/etc/ha.d/haresources

director1 IPaddr::192.168.3.150/24 ldirectord::configuration

director1 IPaddr::192.168.10.100/24 ipvsyncd

Page 155: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO III

/etc/ha.d/ha.cf debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 5 serial /dev/ttyS0 baud 9600 node director1 node director2

/etc/ha.d/authkeys

auth 2 2 crc Script IPVSyncd

#!/bin/sh # # Controlador del estado del demonio de sincronización de conexiones # # ACADE (LVS) # case "$1" in 'start') /sbin/ipvsadm --stop-daemon /sbin/ipvsadm --start-daemon master;; 'stop') /sbin/ipvsadm --stop-daemon /sbin/ipvsadm --start-daemon backup;; *) echo "Se debe de usar: $0 start|stop" ;; esac Archivo de inicialización del sistema

/etc/rc.d/rc.local

#!/bin/sh # # /etc/rc.d/rc.local: Local system initialization script.

Page 156: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO III

# # Put any local setup commands in here: tail -f /var/log/messages >/dev/tty12 & tail -f /var/log/ha-log > /dev/tty8 & tail -f /var/log/ha-debug > /dev/tty9 & tail -f /var/log/ldirectord.log > /dev/tty10 & /sbin/ifconfig eth0 192.168.3.155 /sbin/ifconfig eth1 192.168.10.1 /sbin/ifconfig lo 127.0.0.1 /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo #/sbin/route add 192.168.3.150 eth0 /sbin/route add default gw 192.168.3.1 eth0 /sbin/ipvsadm --start-daemon backup # cargamos el modulo para poder hacer ls en ftp con LVS NAT /sbin/modprobe ip_vs_ftp /etc/init.d/heartbeat start

Page 157: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO III

Page 158: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO IV

ANEXO IV Esquema y código SQL de la base de datos documentacion

El código que define las tablas de la base de datos documentacion utilizada para el sitio

web es el siguiente.

-- MySQL dump 8.22 -- -- Host: localhost Database: documentacion --------------------------------------------------------- -- Server version 3.23.51 -- -- Table structure for table 'admin' -- CREATE TABLE admin ( id_admin tinyint(8) unsigned zerofill NOT NULL auto_increment, login char(8) NOT NULL default '', password char(16) NOT NULL default '', PRIMARY KEY (id_admin) ) TYPE=MyISAM; -- -- Table structure for table 'album' -- CREATE TABLE album ( id_evento tinyint(8) unsigned zerofill NOT NULL default '00000000', id_foto tinyint(8) unsigned zerofill NOT NULL auto_increment, fichero char(128) default NULL, alto char(4) default NULL, ancho char(4) default NULL, PRIMARY KEY (id_evento,id_foto), KEY id_ (id_evento,id_foto) ) TYPE=MyISAM; -- -- Table structure for table 'autores' -- CREATE TABLE autores ( id_doc tinyint(8) unsigned zerofill NOT NULL default '00000000', id_colaborador tinyint(8) unsigned zerofill NOT NULL default '00000000', PRIMARY KEY (id_doc,id_colaborador), KEY id_doc (id_doc,id_colaborador) ) TYPE=MyISAM; -- -- Table structure for table 'bibliografia' -- CREATE TABLE bibliografia (

Page 159: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO IV

id_doc tinyint(8) unsigned zerofill NOT NULL default '00000000', id_evento tinyint(8) unsigned zerofill NOT NULL default '00000000', PRIMARY KEY (id_doc,id_evento), KEY id_doc (id_doc,id_evento) ) TYPE=MyISAM; -- -- Table structure for table 'colaboradores' -- CREATE TABLE colaboradores ( id_colaborador tinyint(8) unsigned zerofill NOT NULL auto_increment, nombre char(40) NOT NULL default '', datos char(100) NOT NULL default '', PRIMARY KEY (id_colaborador) ) TYPE=MyISAM; -- -- Table structure for table 'docs' -- CREATE TABLE docs ( id_doc tinyint(8) unsigned zerofill NOT NULL auto_increment, titulo varchar(128) default NULL, tema varchar(30) default NULL, nivel varchar(8) default NULL, descripcion text, fecha date default NULL, archivo_txt varchar(128) NOT NULL default 'txt-no-disponible', archivo_html varchar(128) NOT NULL default 'html-no-disponible', archivo_pdf varchar(128) NOT NULL default 'pdf-no-disponible', archivo_tar_gz varchar(128) NOT NULL default 'tar_gz-no-disponible', link_a_archivo varchar(255) NOT NULL default 'NO', PRIMARY KEY (id_doc) ) TYPE=MyISAM; -- -- Table structure for table 'eventos' -- CREATE TABLE eventos ( id_evento tinyint(8) unsigned zerofill NOT NULL auto_increment, tipo varchar(35) NOT NULL default '', titulo varchar(128) NOT NULL default '', fecha datetime NOT NULL default '0000-00-00 00:00:00', descripcion text, cronica varchar(255) default NULL, localizacion varchar(75) default 'EUPMT', PRIMARY KEY (id_evento), KEY id_charla (id_evento) ) TYPE=MyISAM; -- -- Table structure for table 'ponentes' -- CREATE TABLE ponentes ( id_evento tinyint(8) unsigned zerofill NOT NULL default '00000000',

Page 160: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO IV

id_colaborador tinyint(8) unsigned zerofill NOT NULL default '00000000', PRIMARY KEY (id_evento,id_colaborador), KEY id_charla (id_evento,id_colaborador) ) TYPE=MyISAM; -- -- Table structure for table 'temas_doc' -- CREATE TABLE temas_doc ( id_tema tinyint(8) unsigned zerofill NOT NULL default '00000000', tema char(25) NOT NULL default '', PRIMARY KEY (id_tema), KEY id_evento (id_tema) ) TYPE=MyISAM; -- -- Table structure for table 'tipo_evento' -- CREATE TABLE tipo_evento ( id_tipo tinyint(8) unsigned zerofill NOT NULL default '00000000', tipo char(35) NOT NULL default '', PRIMARY KEY (id_tipo), KEY id_evento (id_tipo) ) TYPE=MyISAM;

Page 161: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO IV

docs

PK

id_d

oc

titul

ote

ma

nive

lde

scrip

cion

fech

aar

chiv

o_tx

tar

chiv

o_ht

ml

arch

ivo_

pdf

arch

ivo_

tar_

gzlin

k_a_

arch

ivo

even

tos

PK

id_e

vent

o

tipo

titul

ofe

cha

desc

ripci

óncr

ónic

alo

caliz

acio

n

cola

bora

dore

s

PK

id_c

olab

orad

or

nom

bre

dato

s

albu

m

PK

id_e

vent

oP

Kid

_fot

o

id_a

lbum

fiche

roal

toan

cho

adm

in

PK

id_a

dmin

logi

npa

ssw

ord

id_t

ema

tem

ate

mas

_doc

id_t

ipo

tipo

tipo_

eve

nto

auto

res

id_d

ocid

_col

abor

ador

bibl

iogr

afia

id_d

ocid

_eve

nto

pone

ntes

id_e

vent

oid

_col

abor

ado

r

Bas

e de

Dat

os D

ocum

enta

ción

(Sec

ción

de

Doc

umen

taci

ón y

Eve

ntos

de

la A

SS

L)

Page 162: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

Anexo V Manual Acade (LVS) Este manual recoge los pasos a seguir para la instalación y configuración del cluster Acade, empezando por el sistema operativo, continuando con el software del balanceador y finalizando por el software de los servidores. El contenido del manual está basado en documentos de trabajo propios (trabajo de campo). Arquitectura a montar

A B C D E F G HS EL EC TE D

O N - LIN E

A B C D E F G HS EL EC TE D

O N - LIN E

eth0:0 VIP: 192.168.3.150eth0 IP: 192.168.3.155eth0 MAC: 00:20:18:28:04:e9

eth0:0 VIP: 192.168.3.150eth0 IP: 192.168.3.156eth0 MAC: 00:20:18:29:3e:d1

eth1:0 VIP: 192.168.10.100eth1 IP: 192.168.10.2eth1 MAC: 00:e0:29:25:4e:aa

eth1:0 VIP: 192.168.10.100eth1 IP: 192.168.10.1eth1 MAC: 00:e0:29:25:4d:4c

eth0 IP: 192.168.10.102eth0 MAC: 00:e0:29:25:46:57

eth0 IP: 192.168.10.101eth0 MAC: 00:e0:29:25:4e:9a

eth0 IP: 192.168.3.157eth0 MAC: 00:e0:98:33:6a:b8

eth0 IP: 192.168.3.158eth0 MAC: 00:06:5B:31:4B:74

director2director1

rserver1 rserver2

client1 client2

Topología Física del Cluster Acade

Sistema Operativo

protopkg Compilar y parchear el kernel (con código ipvs)

Software del Balanceador

heartbeat ldirectord ipvsadmin

Software de los Servidores Reales

apache php mysql

Page 163: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

protopkg

Descripción Cómo crear un paquete para Slackware con protopkg 2.0 ¿Qué es un paquete y que aporta? La característica principal de los sistemas operativos OpenSource es la de que cualquiera puede tener acceso total al código fuente tanto de los programas que componen el sistema operativo como al de las aplicaciones que corren sobre él. El problema se presenta a medida que se van instalando nuevas aplicaciones al sistema, ya que va creciendo el numero de archivos que se van guardando en multitud de directorios así como el número de nuevos directorios que se van creando. El código fuente no acostumbra a ir solo, es decir, junto a él se adjunta toda la documentación necesaria tanto para su instalación, manejo como funcionamiento. También se adjunta un changelog, que es un fichero que contiene las diferencias del programa respecto a versiones anteriores. Generalmente se muestran las cuentas de e-mail de contacto con sus creadores, e incluso puede que también se adjunte información para su desarrollo. Generalmente todos los programas añaden su página al manual del sistema. Si se encapsula toda este conjunto de archivos en un paquete se obtienen algunas ventajas, la principal de ellas es la compacticidad y la de que se ha creado un paquete siguiendo el formato por defecto de la distribución, con lo que las facilidades para el mantenimiento del paquete instalado estarán garantizadas. El sistema tiene una lista con todo el software que se ha instalado usando el sistema de paquetes, por lo que es resulta muy fácil conocer todo el software instalado así como desinstalarlo “limpiamente”, ya que en la desinstalación se borran todos y sólo los archivos del programa que se instaló. Procedimiento - Primero se crea en /var/spool/prototypes un directorio para cada paquete que se quiera instalar, con el nombre genérico del programa a instalar facilitando así su identificación. Éste directorio contiene el tarball .tar.gz del paquete a crear. - Dentro del nuevo directorio creado, se edita un nuevo archivo llamado prototype, que no es más que un shellscript que le indica a protopkg los pasos que ha de realizar para generar el paquete. Algunas de las directivas importantes del archivo prototype son: VERSION [Aquí se especifica la versión del programa que se va a instalar.] BUILD [Indica el número de veces que se ha ejecutado el script para generar el paquete] ARCH [Indica la arquitectura del microprocesador. /bin/arch para indicarle

automáticamente la arquitectura para la que el kernel fue compilado.] PROGNAME [nombre del programa] - Finalmente, con todas estas variables se genera automáticamente el nombre del paquete de la siguiente manera: PKGNAME="$PROGNAME-$VERSION-$ARCH-$BUILD"

Page 164: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

DESC [Es la descripción de lo que hace el paquete. Éste mensaje aparecerá en pantalla al utilizar el "installpkg".

IGNOREPATH [En esta variable iremos añadiendo los PATHS en dónde NO hay que mirar los

cambios que no se incluirán en la orden 'find' como pueden ser /dev, /proc....] MANTAINER [Los nombres y e-milios de los que mantienen el paquete.] SOURCE [Especifica el sitio web de dónde se baja el paquete.] Una vez crado el paquete .tgz se mueve a /var/spool/packages

Compliar y parchear el kernel Descripción Proceso a seguir para compilar un kernel de Linux genuino bajo una distribución Slackware. Descarga Una versión genuina y actualizada del kernel se puede obtener en: ftp.kernel.org www.kernel.org Se descarga el package que más interese se guarda en /usr/src por ejemplo: kernel-2.4.19.tar.gz para descomprimirlo: #tar -zxvf kernel-2.4.19.tar.gz Procedimiento Se crea el link simbólico linux que apunta al nuevo directorio generado en donde se guardarán las fuentes del kernel: #ln -s kernel-2.4.19 linux Dentro del directorio se ejecuta: #cd /usr/src/linux #make menuconfig Una vez seleccionadas las opciones de los diferentes menús, se guarda la configuración con un nombre alternativo: config.director y antes de salir se guardan los cambios hechos en el fichero por defecto. #make dep #make clean #make bzImage #make modules #make modules_install Una forma más compacta de hacer lo mismo es:

Page 165: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

#make dep && make clean && make bzImage && make modules && make modules_install Si el proceso finaliza con éxito, se nos habrá generado una imagen del nuevo kernel en: /usr/src/linux/arch/i386/boot/bzImage Ahora se copia o se mueve la imagen al directorio que por convenio se utiliza para albergar las imágenes del kernel y se le cambia el nombre: #cp bzImage /boot/vmlinuz-director-2.4.19 Después se crea un link simbólico a la nueva imagen para no tener que modificar el lilo: #ln -s vmlinuz-director-4.4.19 vmlinuz Y se compila el lilo nuevamente con: #lilo

heartbeat Descripción Explicación del proceso de instalación y configuración de heartbeat. También se explica el proceso seguido para generar el paquete .tgz para slackware a partir del fichero tarball .tar.gz utilizando para ello protopkg. Introducción Descripción y funcionamiento: Heartbeat es el subsistema que dota de alta disponibilidad a Linux. En ocasiones, tenemos la necesidad de ofrecer un servicio de red ininterrumpidamente y deseamos que esté disponible aun en el caso de que el hardware que soporta dicho servicio no esté funcionando. En otras ocasiones, podemos tener la necesidad de realizar cambios en la máquina que está ofreciendo un servicio sin querer cortarlo. Por ejemplo, para actualizaciones de software, parcheos de seguridad para hacer frente a nuevas vulnerabilidades, cambios en el hardware, etc. Una posible solución para hacer frente a estos requisitos es la de utilizar dos máquinas ofreciendo el mismo servicio, si bien sólo una de las dos máquinas lo ofrece mientras la otra está encendida por si tuviera que suplantar a la primera. En Linux, disponemos de una aplicación llamada 'heartbeat', la cual nos permite realizar estas funciones. Heartbeat funciona de la siguiente manera: Cada una de las máquinas ejecuta el programa heartbeat, el cual escucha y envía 'latidos' a su proceso homónimo en la otra máquina. De esta manera, el programa heartbeat que también se encuentra en la máquina suplente sabe que debe de entrar en acción, levantando los servicios, cuando la máquina principal deja de enviar sus latidos. La ausencia de latidos indica la no disponibilidad del servicio para el cual heartbeat fue configurado. Cuando la maquina principal vuelve a estar en condiciones de volver a lanzar los servicios de red, la maquina secundaria se da cuenta de ello. Entonces detiene los servicios de red que estaba ofreciendo e informa a la maquina principal de que puede relanzar sus servicios. La maquina secundaria vuelve a quedar a la espera de ser requerida nuevamente.

Page 166: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

Heartbeat esta diseñado para ejecutar una serie de scripts cuando es inicializado y otra serie de scripts cuando es detenido. - Obteniendo el tarball y creando el paquete Protopkg es una herramienta creada por David Cantrell utilizada para automatizar el proceso de creación de paquetes para slackware. Esta aplicación utiliza un archivo de configuración llamado prototype que no es mas que un shell-scrpt que se ejecuta secuencialmente y contiene las ordenes necesarias para compilar el source y generar la lista de ficheros instalados en el sistema. Esta lista es importante para posteriormente borrar, actualizar el paquete instalado. De hecho, esta es la esencia y el porque de un sistema de paquetes. Creamos el directorio /var/spool/prototypes. Este directorio será el que contenga los archivos prototype que nos permitan generar cada uno de los paquetes q vayamos necesitando. Asi creamos el directorio /var/spool/prototypes/heartbeat y descargaremos aquí el tarball de hertbeat wget -c www.linux-ha.org/download/heartbeat-0.4.9.tar.gz Antes de proceder con la creación del paquete, hemos de cumplir los siguientes requisitos para la correcta creación del mismo. -Tener instalados en nuestra maquina: lynx, ucd-snmp NOTA: Nos podemos bajar el paquete ucd-snmp compilado para slackware desde el ftp de la assl ftp://ftp.assl.cx -Es posible que aparezca algún problema con el grupo pop, si esto es así para poder compilar con éxito será necesario eliminar este grupo o bien cambiar su GID ya que este es requerido en el proceso de creación del paquete. Antes de eliminarlo es muy recomendable comprobar con un find que el grupo pop no esta siendo utilizado por ninguna aplicación. #find / -group pop 2>/dev/null #find / -user pop 2>/dev/null Si estas dos búsquedas no obtienen un resultado, nos podemos cargar o renombrar en ID de estos usuarios o grupos, actualizando convenientemente el fichero /etc/passwd con un #vipw. otra forma patillera de hacerlo es editar a mano el /etc/groups y el /etc/passwd y rebotar la maquina... mmm seguro q existe una manera mas académica de hacer esto. (nota: 2>/dev/null es para evitar mensajes de error "tontos" mientras hacemos el find) Ahoa, deberemos crear el fichero /var/spool/prototypes/heartbeat/prototype # heartbeat prototype VERSION=0.4.9.2 BUILD=2 ARCH=`/bin/arch` PROGNAME="heartbeat" PKGNAME="$PROGNAME-$VERSION-$ARCH-$BUILD" DESC="\ Heartbeat es un componente de la solucion \ Linux Virtual Server (LVS).Éste permite el \ chequeo periodico de los nodos que componen \ la arquitectura LVS. \"

Page 167: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

IGNOREPATH="/dev:/proc:/home:/root:/var:/tmp:/export:/mnt:/floppy:/cdrom" STRIPBIN=n STRIPLIB=n SETATTR=y MAINTAINER="Marcos Martínez <[email protected]> Gabriel Bergés <gabb@me nta.net>" SOURCE="www.linux-ha.org/download/$PROGNAME/$VERSION/$PROGNAME-$VERSION-source.t ar.gz" LOCATION="http://www.linux-ha.org" compile() { tar zxvfp $CWD/$PROGNAME-$VERSION.tar.gz cd $PROGNAME-$VERSION } install() { mkdir -p /usr/doc/$PROGNAME-$VERSION cp -R doc/ /usr/doc/$PROGNAME-$VERSION make install } attributes() { echo "No attributes..." } special() { echo "No special..." } subpacks() { echo "No subpacks..." } para generar el paquete basta ya solo picar el siguiente comando: #protopkg -vcd NOTA: Si lo tenemos, nos podemos bajar el paquete del programa protopkg compilado para slackware desde el ftp de la assl ftp://ftp.asslath.cx - Configuración de hertbeat Antes de nada deberemos disponer de un cable serie null-modem para interconectar los dos dierctors por el puerto serie RS-232. Para comprobar el correcto funcionamiento de ambos puertos serie basta con picar estos comandos: en un director : # cat < /dev/ttyS0 y en el otro:

Page 168: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

# echo Hola > /dev/ttyS0 Si el echo que enviamos desde una maquina aparece en el otro nuestros puertos serie funcionan correctamente. Configuración Para poder iniciar heartbeat correctamente, será necesario editar 3 archivos que son: /etc/ha.d/ha.cf debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 5 serial /dev/ttyS0 baud 9600 node director1 node director2 /etc/ha.d/haresources director1 IPaddr::192.168.3.150/24 ldirectord::configuration director1 IPaddr::192.168.10.100/24 ipvsyncd (esta linea solo si tenemos dicho script ver anexo III) /etc/ha.d/authkeys auth 2 2 crc Directorios /etc/ha.d -> ha.cf (configuración de heartbeat) -> haresources -> authkeys /etc/init.d heartbeat (explicar como se tira y eso start|stop|status...) /etc/ha.d/resource.d (contiene scripts necesarios para el funcionamiento de heartbeat y es en donde buscara los scripts de inicio no estándares (httpd, seria estándar)) /etc/rc.d/rc.local (archivo desde el que se lanza heartbeat al arrancar si la distribución Linux no tiene el sistema de arranque de System V. - Factores a tener en cuenta 1) Cómo heartbeat selecciona la interface de red: Cómo se ha explicado con anterioridad, el archivo /etc/ha.d/haresources especifica en primer lugar cual de las dos m quinas es la principal (las dos maquinas deben de tener este archivo idéntico ya que han de saber en todo momento cual es la maquina destinada como principal y cual como secundaria). En segundo lugar, especifica la IP que ha de soportar el servicio de red de alta disponibilidad. Por último, especifica cuales han de ser estos servicios.

Page 169: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

Nótese que en ningún momento se este indicando a heartbeat por que‚ interfaz de red se han de ofrecer los servicios de alta disponibilidad. Es decir, se le dice que IP es la que ha de dar estos servicios pero no la interfaz que ha de ser configurada con esa IP. En el caso de que la maquina disponga de mas de una tarjeta de red, heartbeat recurre a la tabla de enrutado del sistema para decidir que interfaz de red se hará cargo. Por ejemplo, uno podría pensar que si el servicio de alta disponibilidad se ha de dar por la 192.168.3.155, añadir esta entrada a la tabla de rutado con: #route add 192.168.3.0 eth0 sería suficiente para que heartbeat supiera que la IP 192.168.3.155 ha de ser levantada utilizando la interfaz eth0. Craso error! Ya que la entrada correcta sería: #route add 192.168.3.155 eth0 ya que el script /etc/ha.d/resources.d/IPaddr no sabe de mascaras de red y solo busca en la tabla de enrutado la IP que se especifico en /etc/ha.d/haresources. 2) En cuanto al archivo /etc/ha.d/authkeys... ‚ste esta incorrectamente especificado en el Getting Started with Linux-HA (GSLHA) (heartbeat) as¡ como en otra documentación, por lo menos en la configuracion que hace referencia a crc. El archivo 'authkeys' debería de quedar así: # authkeys auth 2 2 crc Con 1's no funciona !!!!!!!!!!! 3) Pese a que en el documento GSLHA se advierte que no se debe de realizar ninguna configuración en la IP de la interfaz externa, esto ha de ser correctamente interpretado. Se refiere a que no se ha de asignar una IP a ese interfaz, si bien esta interfaz deberá se mostrada la hacer 'ifconfig' ya que de lo contrario no estará configurada. Eso es asi porque heartbeat no levanta o no configura las interfaces, sino que simplemente crea un alias de la interfaz que hemos configurado. Con: #ifconfig 0.0.0.0 eth0 Configuramos la interfaz eth0 sin asignarle una IP. Es decir si hacemos #ifconfig eth0 saldrá como activa, si bien no nos mostrara una IP asociada a dicha interface. De esta manera, cuando lanzemos hertbeat se creara un alias a eth0 con la IP que ha de ofrecer el servicio de alta disponibilidad. Así si hacemos #ifconfig tras lanzar heartbeat, se nos mostrara: eth0 .........(sin ip asignada) ..... ....

Page 170: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

eth0:0 IP 192.168.3.155 (lo cual indica que la eth0 esta escuchando todos los puerto (:0) en la IP 192.168.3.155) PATH=" .......... :/etc/init.d" Añadimos ésta entrada ya que el archivo shellcript del "heartbeat" se encuentra ahí. - Archivos de configuración que hay que editar # /etc/ha.c/ha.cf debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 10 serial /dev/ttyS0 baud 9600 node director1 node director2 # /etc/ha.d/haresources director1 IPaddr::192.168.3.155/24 prueba-ha El formato de haresources es el siguiente: director1: Aquí le indicamos cual es la m quina dominante (de mayor prioridad). Ipaddr::192.168.3.155/24: Se podría omitir Ipaddr y poner directamente la IP, pero esto añadiría una máscara 255.255.255.255. Dado que queremos que la mascara sea de clase C, debemos hacerlo de la forma indicada en el archivo. Ipaddr es el script encargado de asignar la interface a la IP que le pasamos. Este script se encuentra en: /etc/ha.d/resource.d # /etc/ha.d/authkeys auth 2 2 crc Renombramos el /etc/rc.d/rc.inet1 para que no sea ejecutado al arrancar. Pasaremos toda la configuración al /etc/rc.d/rc.local # /etc/rc.d/rc.local #!/bin/sh # # /etc/rc.d/rc.local: Local system initialization script. # # Put any local setup commands in here: tail -f /var/log/messages >/dev/tty12 & tail -f /var/log/ha-log >/dev/tty5 & tail -f /var/log/ha-debug >/dev/tty6 & /sbin/ifconfig eth0 127.0.0.3 # Configuramos la eth1 con una IP distinta para cada realserver # dado que el heartbeat no la toca para nada. /sbin/ifconfig eth1 192.168.10.2 /sbin/route add 192.168.3.155 eth0 /etc/init.d/heartbeat start

Page 171: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

- Comandos útiles Para comprobar el correcto funcionamiento de hertbeat y detectar con facilidad posibles errores, pueden ser útiles los siguientes comandos: #tail -f /var/log/ha-debug (en una consola) y #tail -f /var/log/ha-log (en otra consola) de esta manera podremos ver los mensajes que esta lanzando la ejecución de heartbeat. otros comandos #heartbeat [start| stop | status]

ldirector Descripción Instalación y configuración de ldirectord ¿Qué es ldirectord? Ldirector es un programa que permite monitorizar los servicios balanceados por IPVS, y en función de la misma cambiar la configuración del balanceador de forma dinámica. Ldirectord permite monitorizar servicios como ftp, http y https. En función de los servicios que deseemos monitorizar requeriremos de más o menos librerías adicionales. Ldirectord está programado en Perl, por lo cual es necesario en primer lugar tener instalado el mismo en el sistema. Pre-requisitos para la instlación del ldirectord Según el archivo "README" de la documentación interna del heartbeat-0.4.9.2.tar.gz, pues se requieren las librerías allí especificadas antes de proceder a compilar la aplicación. La mayoría de librerías requeridas están disponibles en el sitio: http://search.cpan.org Las descargamos y generamos los prototypes y posteriormente los packages por este orden. También se deben de instalar uno a uno después de la compilación para evitar los problemas de dependencias. http://search.cpan.org #wget http://www.cpan.org/authors/id/G/GA/GAAS/MIME-Base64-2.12.tar.gz (Sólo requiere perl 5.002 ó posteriores) #wget http://www.cpan.org/authors/id/G/GA/GAAS/URI-1.22.tar.gz #wget http://www.cpan.org/authors/id/S/SB/SBURKE/HTML-Tagset-3.03.tar.gz #wget http://www.cpan.org/authors/id/S/SB/SBURKE/HTML-Parser-3.26.tar.gz #wget http://www.cpan.org/authors/id/ ................................Digest MD5

Page 172: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

#wget http://www.cpan.org/authors/id/G/GB/GBARR/libnet-1.12.tar.gz #wget http://www.cpan.org/authors/id/G/GA/GAAS/libwww-perl-5.65.tar.gz Descarga de la versión actualizada Pese a que la versión que acompaña a heartbeat no es la más actualizada. La última versión suele estar en www.ultramonkey.org . Se peden producir fallos si utilizamos una versión que crea reglas no compatibles con la versión de ipvsadm que tengamos en nuestra máquina. Ldirectord se puede lanzar desde la línea de comandos o bien utilizando para ello el programa heartbeat. Si lo hacemos de la primera forma, el ejecutable es: /usr/sbin/ldirectord. Si lo que deseamos es que ldirectord sea lanzado por heartbeat, como en nuestro caso, deberemos crear un link simbólico en /etc/ha.d/resource.d/ldirectord que apunte al programa real situado en /usr/sbin/directord. #ln -s /usr/sbin/ldirectord /etc/ha.d/resource.d/ldirectord a) Sobre el script en perl: /usr/sbin/ldirectord Hay que comentar las funciones que chequean los servicios que no queremos monitorizar, para dejarlas inactivas, para que al arrancar el perl no nos de errores.

check_https check_ftp

Como se ha comentado antes, algunas versiones de este programa crean reglas que pueden no ser compatibles con la versión de IPVS con la que hemos parcheado el kernel. Ipvsadm cambia el significado del comando –R y pasa a utilizar –r para añadir servidores reales. Si nos encontramos con este fallo y no queremos volver a compilarlo todo, es posible cambiar las –R por –r en el código fuente de ldirectord. Esta tarea se puede hacer muy rápidamente si utilizamos el editor vim. Bastará con utilizar la orden siguiente desde el modo de comandos del vim: #vim /usr/sbin/ldirectord :1,1694s/-R/-r/g con esto hemos cambiado todas las -R por -r Archivos de configuración de ldirectord /etc/ha.d/conf/configuration # Archivo de configuracion del ldirectord arrancado por heartbeat # checktimeout = 6 checkinterval = 2 virtual = 192.168.3.150:80 real = 192.168.10.101:80 masq 5 real = 192.168.10.102:80 masq 5 service = http scheduler = rr checktype = negotiate request = "index.html(la web que solicito)" receive = "pepito grillo (la cadena que espero)" virtual = 192.168.3.150:21 real = 192.168.10.101:21 masq 5 real = 192.168.10.102:21 masq 5

Page 173: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

service = ftp scheduler = rr login = "anonymous" passwd = "[email protected]" persistent = 600 protocol=tcp Este archivo permite configurar el balanceador de carga con los servicios http y ftp. Notas adicionales En el archivo de configuración del ldirecord no se deben de dejar líneas en blanco después de la sección virtual. Configuración de los realservers echo "1" > (también hay que poner esto en los directors para activar el forwarding) Ojo con estos archivos pq a veces pueden dar problemas! /etc/hosts /etc/resolf.conf Arrancadar ldirectord vía heartbeat # /etc/ha.d/haresources director1 IPaddr::192.168.3.150/24 ldirectord::configuration director1 IPaddr::192.168.10.100/24 Configuración básica de ldirector probar esto antes de intentar otras más complejas # /etc/ha.d/conf/configuration checktimeout = 6 checkinterval = 2 virtual = 192.168.3.150:80 real = 192.168.10.101:80 masq 5 real = 192.168.10.102:80 masq 10 service = http scheduler = rr request = "index.html" receive = "Real" Nota: No dejar ninguna línea en blanco después de la sección virtual.

Page 174: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

lpvs Descripción Este documento describe el proceso de configuración del ipvsadm. Tabla de contenidos: - Obtención de las fuentes del ipvsadm. Creación del paquete ipvsadm.tgz para Slackware. - Configuración Configuración de prueba (balanceador de carga simple) - Configuración de prueba (balanceador de carga simple) Seguimos el esquema indicado en ACADE-NAT-IPconfig.(a determinar), pero con un solo director, en este caso, el director1 a solas. En primer lugar bastara con editar el siguiente archivo en los directors rc.lvs_nat, que configura el director1 para capacitarlo para redirigir las peticiones de telnet a los rserver1 y rserver2. #!/bin/sh # Script de configuración (basado en el del mini-howto) # # Activamos ip_forward cat /proc/sys/net/ipv4/ip_forward echo "1" > /proc/sys/net/ipv4/ip_forward # El director es el gateway de los realserver # desactivamos la redireccion ICMP echo "0" > /proc/sys/net/ipv4/conf/all/send_redirects cat /proc/sys/net/ipv4/conf/all/send_redirects echo "0" > /proc/sys/net/ipv4/conf/default/send_redirects cat /proc/sys/net/ipv4/conf/default/send_redirects echo "0" > /proc/sys/net/ipv4/conf/eth0/send_redirects cat /proc/sys/net/ipv4/conf/eth0/send_redirects # Setup VIP /sbin/ifconfig eth0 192.168.3.155 broadcast 192.168.3.255 netmask 255.255.255.0 # Setup eth1 /sbin/ifconfig eth1 192.168.10.1 broadcast 192.168.10.255 netmask 255.255.255.0 # Set default gateway /sbin/route add default gw 192.168.3.1 netmask 0.0.0.0 metric 1 # Clear ipvsadm tables /sbin/ipvsadm -C # Instalamos los servicios LVS con ipvsadm # Añade el servicio telnet a la VIP con Round Robin como politica de reenvio

Page 175: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

/sbin/ipvsadm -A -t 192.168.3.155:telnet -s rr # Primer realserver # reenvia peticiones telnet al realserver 192.168.10.101 utilizando # LVS-NAT (-m), con espera=1 /sbin/ipvsadm -a -t 192.168.3.155:telnet -r 192.168.10.101:telnet -m -w 1 ping -c 1 192.168.10.101 # Second realserver # reenvia peticiones telnet al realserver 192.168.10.102 utilizando # LVS-NAT (-m), con espera=1 /sbin/ipvsadm -a -t 192.168.3.155:telnet -r 192.168.10.102:telnet -m -w 1 ping -c 1 192.168.10.102 # Listamos la table ipvsadm del kernel echo "Estado actual de la tabla ipvsadm del kernel" /sbin/ipvsadm Después de editar dicho script le dan permisos de ejecución. #chmod 755 rc.lvs_nat Antes de ejecutar el script, hay que desactivar las interfaces de red si estan up, con los comandos: #ifconfig eth0 down #ifconfig eth1 down Posteriormente ejecutamos el script. #./rc.lvs_nat Ahora deberemos ejecutar este otro scipt en cada uno de los realservers. #!/bin/sh # Asignamos el gateway correcto para vs-nat /sbin/route add default gw 192.168.10.1 # mostramos la tabla de rutado /bin/netstat -rn # comprobamos si el gateway es alcanzable ping -c 1 192.168.10.1 # deshabilita el reenvío de paquetes echo "0" > /proc/sys/net/ipv4/ip_forward cat /proc/sys/net/ipv4/ip_forward

Page 176: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

Apache Descripción El servidor Apache HTTP es un proyecto de la Apache Software Fundation, para desarrollar y mantener un servidor HTTP de código abierto para sistemas operativos modernos como UNIX o Windows. El objetivo de este proyecto es proveer un servidor seguro, eficiente y extensible que proporcione servicios HTTP en sintonía con los actuales estándares de HTTP. Apache es el servidor web más popular de Internet desde abril del 1996. Lanzando el servicio Al instalar el apache como paquete se nos crea el archivo /etc/rc.d/rc.http el cual es invocado por los archivos de inicio y detención del sistema. De esta manera, en función del parámetro que se le pasa al script este lanzará el servicio con el típico apachectl start o lo detendrá con un apachectl stop. Así, el archivo de inicio del sistema /etc/rc.d/rc.M mira si existe el archivo rc.httpd y si es así lo ejecuta pasándole como parámetro start. Del mismo modo, si nos vemos en la necesidad de parar el servicio, podremos hacerlo con apachectl stop. Lo podemos volver a lanzar con apachectl start y si lo que queremos es reiniciarlo para hacer efectivo un cambio en el archivo de configuración lo podemos hacer de una sola vez con apachectl restart. Configuración básica Los archivos de configuración de Apache se encuentran en el directorio /etc/apache. El archivo de configuración del demonio del apache httpd es /etc/apache/httpd.conf. Para configurar el apache es necesario editar este archivo y descomentar la línea que hace referencia a la IP y el puerto por el cual ha de recibir las peticiones http. Listen 192.168.10.102:80 Si una vez descomentada la línea anterior el apache no se lanza correctamente con un apachectl start lo más probable es que sea porque la configuración de la red de nuestra máquina no está del todo terminada. Si no tenemos acceso a un DNS y el archivo /etc/hosts no contiene una entrada capaz de resolver nuestra propia IP, el apache no funcionará. Basta entonces con añadir a este archivo una línea como esta: 192.168.10.102 rserver1.acade.net rserver1 Así, aunque no podamos acceder a un DNS, la máquina es capaz de resolver el nombre asociado a la IP en la que ha de correr el httpd, ya que, antes de ir a consultar un DNS externo, el sistema consulta siempre antes de archivo /etc/hosts, motivo por el cual conviene siempre tener dicho archivo al día. En principio esto es suficiente para probar que el httpd funciona. Si no tocamos nada más del archivo de configuración de Apache, este servirá por defecto una web que nos indica que la instalación se ha realizado con éxito. El contenido de esta página está en /var/www/htdocs, pero podemos hacer que por defecto sirva otro contenido mediante la siguiente directiva: DocumentRoot "/var/www/htdocs"

Page 177: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

si en lugar de /var/www/htdocs ponemos la ruta al directorio que contenga las paginas que deseamos servir. Otra opción es redireccionar el directorio anterior mediante un link simbólico que apunte al lugar que contiene las páginas que queremos servir. Configuración avanzada (Virtual Hosting) Apache soporta virtual hosting, es decir, la posibilidad de alojar más de un sitio web en una misma máquina. Para ello deberemos comentar la directiva "Listen" del archivo de configuración de apache /etc/apache/httpd.conf. Y añadir una entrada "VirtualHost" para cada sitio web que deseamos ofrecer. De esta forma, cuando Apache reciba una petición de servicio http será capaz de discernir qué contenido a de ser servido como respuesta a esa petición. En primer lugar, deberemos especificar mediante la directiva: NameVirtualHost xxx.xxx.xxx.xxx la dirección IP por la que haremos virtual host. Posteriormente, añadiremos tantas entradas de virtual host como webs diferentes deseemos servir por la IP especificada en NameVirtualHost. <VirtualHost xxx.xxx.xxx.xxx> ServerAdmin [email protected] DocumentRoot /acade/sites/assl ServerName assl.acade.net ErrorLog logs/assl-error_log Customlog logs/assl-access_log common </VirtualHost> <VirtualHost xxx.xxx.xxx.xxx> ServerAdmin ... DocumentRoot /acade/sites/prueba ServerName prueba.acade.net ... </VirtualHost> Las directivas DocumentRoot y ServerName son las que le dicen a apache qué ha de mostrar y cuando. Así, si el cliente teclea en su navegador http://assl.acade.net, Apache le mostrará la pagina por defecto alojada en el directorio /acade/sites/assl. Si por el contrario el cliente pica en su navegador http://prueba.acade.net, Apache le servirá la pagina por defecto que se encuentre en /acade/sites/prueba. Es importante resaltar que los archivos /logs/assl-error_log y /logs/assl-access_log han de existir en nuestra máquina, de lo contrario apache no arrancará. Estos archivos se buscan en /usr/logs a no ser que especifiquemos la ruta completa al archivo. Por defecto, Apache mostrará la pagina index.html del directorio especificado en DocumentRoot para la URL indicada por ServerName, ahora bien, es posible hacer que Apache busque otra página para servir por defecto. Basta con añadir el nombre de la página que deseamos que se muestre por defecto utilizando para ello la directiva DirectoryIndex de la siguiente manera: <IfModule mod.dir.c>

DirectoryIndex index.html index.htm index.php index.php3 index.php4 </IfModule> De esta manera apache buscará por este orden la página que ha de ser servida.

Page 178: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

Por último, es necesario decirle a Apache que cargue los módulos de PHP para poder servir páginas programadas en PHP. Para ello, basta con introducir lo siguiente al final del archivo de configuración /etc/apache/httpd.conf: Include /etc/apache/mod_php.conf Include /etc/apache/mod_ssl.conf De esta manera Apache cargará los módulos externos necesarios para poder servir páginas PHP. Bibliografía Documentación Oficial Apache 1.3, en inglés: http://httpd.apache.org/doc

PHP Descripción PHP, acrónimo de “PHP: Hypertext Preprocesor”, es un lenguaje “Open Source” interpretado de alto nivel, especialmente pensado para desarrollos web y el cual puede ser embebido en páginas HTML. La mayoría de su sintaxis es similar a C, Java y Perl y es fácil de aprender. La meta de este lenguaje es permitir escribir a los creadores de páginas web, páginas dinámicas de una manera rápida y fácil, aunque se pueda hacer mucho más con PHP. Instalación y configuración Al instalar el paquete de PHP se crean en /etc/apache los archivos de configuración de PHP php.ini y mod_php.conf. El primero de ellos deberá contener las siguientes entradas: LoadModule php4_module libexec/libphp4.so AddModule mod_php4.c AddType application/x-httpd-php.php El segundo archivo php.ini configura PHP. Para que pueda ejecutar correctamente la web que hemos programado a modo de ejemplo, es necesario activar las siguientes directivas de este archivo. register_globals = On register_argc_argv = On Bibliografía Manual de PHP: http://www.php.net/manual/es

Page 179: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

MySQL Descripción Este documento explica los pasos a seguir para instalar y configurar una MySQL en los servidores reales. También se documenta la opción de MySQL replication. Instalando el software Utilizaremos los paquetes correspondientes a Apache, PHP y MySQL que trae nuestra distribución que son: apache-1.3.26-i386-1.tgz php-4.2.1-i386-1.tgz mysql-3.23.51-i386-1.tgz Los instalaremos de esta manera: root@rserver1:/#mount /dev/cdrom root@rserver1:/#installpkg /mnt/cdrom/slackware/n/apache-1.3-26-i386-1.tgz root@rserver1:/#installpkg /mnt/cdrom/slackware/n/php-4.2.1-i386-1.tgz root@rserver1:/#installpkg /mnt/cdrom/slackware/ap/mysql-3.23.51-i386-1.tgz Configurando MySQL Tras instalar el paquete de MySQL, deberemos hacer lo siguiente: root@rserver1:/#mysql_isnstall_db Esto crea los archivos necesarios para poder ejecutar mysql. Este script coloca estos archivos en /usr/lib/mysql/mysql/ pero para que mysql los pueda leer al arrancar, es necesario cambiar el propietario de dichos archivos y del directorio que los contiene. Así, deberemos asegurarnos de que el propietario de estos directorios y archivos: /usr/lib/mysql /usr/lib/mysql/mysql /usr/lib/mysql/mysql/* es el usuario mysql y están en el grupo mysql. Podemos lograr esto así: root@rserver1:/var/lib/#chown mysql:mysql mysql root@rserver1:/var/lib/mysql/#chown mysql:mysql mysql root@rserver1:/var/lib/mysql/mysql/#chown mysql:mysql * Ahora ya estamos en condiciones de lanzar el demonio mysqld. root@rserver1:/safe_mysqld & Si el demonio arranca sin problemas podemos añadir la siguiente línea en el archivo /etc/rc.d/rc.local: /usr/bin/safe_mysqld &

Page 180: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

Eso hará que el demonio de la mysql sea lanzado de forma automática cada vez que arranca el sistema. Los pasos siguientes, una vez tenemos el demonio corriendo en nuestro sistema, serán los de asignar un password al usuario root, crear las bases de datos y los usuarios que vamos a necesitar. - Para asignar el password al usuario root: root@rserver1:/#mysqladmin -u root password "mi_password" - Para crear una base de datos: root@rserver1:/#mysqladmin -u root -pmi_password create mi_base_de_datos - Para borrar una base de datos: root@rserver1:/#mysqladmin -u root -pmi_password drop mi_base_de_datos Las consultas al demonio mysqld, se realizan mediante el cliente mysql. Es muy importante crear más usuarios para acceder a nuestras bases de datos, ya que el usuario root tiene permisos en todas las tablas, además de permiso para crear tablas en todas las bases de datos. Lo normal es crear un usuario diferente con acceso únicamente a aquellas bases de datos que sea necesario, además este podrá realizar sólo el tipo de consultas que nosotros queramos, por ejemplo "SELECT", "INSERT" y "UPDATE" de manera que no se le permita crear (CERATE) o borrar (DROP) tablas de la base de datos o tabla a la que le hemos dado acceso. - Crear un usuario nuevo. Primero ejecutaremos el cliente mysql: root@rserver1:/#mysql -u root -pmi_password Esto me da el prompt de la consola cliente del demonio mysqld. Mediante este cliente, podremos realizar consultas al demonio de la MySQL. En este ejemplo las consultas que introduzca en la consola cliente de MySQL serán como usuario root. Una ves estamos ante la consola cliente de MySQL utilizamos el siguiente comando para crear un usuario: mysql>GRANT select,insert,update ON documentacion.* TO epito@localhost IDENTIFIED BY 'password_para_pepito'; Esto crea un usuario nuevo llamado "pepito". Este usuario tiene permisos para realizar consultas tipo SELECT, INSERT y UPDATE. Le hemos dado permiso para consultar todas las tablas de la base de datos "documentacion" (documentacion.*) y su password de acceso será "password_para_pepito". Así, ahora podemos ejecutar el cliente de MySQL como el usuario "pepito", lo haremos así: root@rserver1:/mysql -u pepito -ppassword_para_pepito mysql>use documentacion; o bien de una sola vez: root@rserver1:/mysql -u pepito -ppassword_para_pepito documentacion mysql>

Page 181: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

NOTA: Es importante no dejar espacios en blanco entre el parámetro "-p" y el password, de lo contrario no nada de lo anteriormente explicado funcionará. Comandos y consultas básicas - Comandos: Además de la orden "use" para utilizar una base de datos diferentes, nos serán útiles los siguientes comandos: ? Muestra una lista con los comandos MySQL. use <db_name>; Cambia la base de datos acutal status; Muestra información relativa a MySQL: Versión del servidor, bases de

datos actual, usuario logeado, versión del servidor, uptime, consultas realizadas etc, etc.

- Consultas básicas: mysql>SHOW tables; Muestra las tablas de la base de datos acutal. mysql>DROP table <db_name>; Elimina una tabla si tenemos permiso para ello. Para crear una tabla en la base de datos: mysql>CREATE TABLE <nombre_tabla> ( campo_1 tinyint(8) unsigned zerofill NOT NULL auto_increment, campo_2 char(50) NOT NULL default 'valor_por_defecto', campo_n ..., PRIMARY KEY (campo_1) ) TYPE=MyISAM; Para insertar un dato en la tabla creada: INSERT INTO <nombre_tabla> VALUES (00000001,'dato_campo_2','dato_campo_n'); Con una consulta así: SELECT campo_1, campo_2 FROM nombre_tabla; Obtendremos retorna los campos campo_1 y campo_2 de la tabla nombre_tabla. Una consulta así: SELECT campo_1 FROM nombre_tabla WHERE campo_2='verde'; Retorna el campo_1 de todas los registros de la tabla cuyo campo_2 vale verde. Herramientas Útiles Hemos visto como utilizar mysqladmin, safe_mysql y mysql para crear bases de datos, lanzar el demonio mysqld y realizar consultas a MySQL. A continuación, describimos algunos ejemplos de otros comandos que nos pueden resultar muy útiles: root#rserver1:/#mysql -u root -pmi_password documentacion < backup_bd.sql Este comando es muy útil para cargar los datos que definen la base de datos documentacion. Es decir, el archivo backup_bd.sql contiene todas las consultas necesarias para crear las tablas

Page 182: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

de la base de datos documentacion. Además, también contiene las consultas INSERT que nutren la base de datos. Seguramente, te estarás preguntando de dónde demonios sacamos el archivo backup_db.sql? Pues bien, tenemos dos opciones: o bien lo picamos a mano, probablemente tendrás que hacerlo la primera vez ;oP ), o bien lo generamos con la utilidad mysqldump que trae MySQL. Así: root@rserver1:/#mysqldump -u root -pmi_password documentacion > backup_bd.sql vuelca todas las consultas que crean y nutren la base de datos al archivo backup_bd.sql. MySQL Replication Configuración para MySQL Replication con master fijo. En el master creamos el usuario replicador con los siguientes comandos: Para logearnos en la base de datos como root: #mysql -u root -ppof.rulez Y una vez dentro generamos el usuario con permisos totales de tipo FILE. mysql> GRANT FILE ON *.* TO repl@"%" IDENTIFIED BY 'pof.rulez'; En el master debemos de editar el siguiente archivo de configuración. # /etc/my.cnf [mysqld] log-bin server-id=1 Para cada slave también editamos un archivo de configuración. La única diferencia será el valor de server-id, que no puede repetirse en ningún servidor. En master-user le indicamos al slave con qué cliente debe de logearse al master. # /etc/my.cnf [mysqld] server-id=2 master-host=rserver1 master-user=repl master-password=pof.rulez master-connect-retry=10 Nota: El puerto por defecto es el 3306. Algunos archivos importantes a tener en cuenta son: /var/run/mysql/mysql.sock= Dónde residen los sockets que posibilitan la connexion entre ambos servidores. /var/lib/mysql/rserver1.err Log que informa de la disponibilidad del master para aceptar connexiones. /var/lib/mysql/rserver2.err Log que informa de si el slave se ha podido conectar al master con éxito. /var/lib/mysql/master.info Archivo que genera el slave a partir del my.cnf. Nosotros lo borramos cada vez que hacemos algún cambio en my.cnf y rebotamos posteriormente el servicio.

Page 183: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO V

Puede encontrarse la lista completa de todas las opciones de configuración para los my.cnf en el apartado 4.10 del manual de MySQL. Documentación MySQL Manual http://www.mysql.com/documentation/index.html

Page 184: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO VII

Anexo VII Análisis empírico del funcionamiento del dispositivo lo:0 frente a peticiones ARP en kernels Linux 2.4.x Escenario del experimento: Configuración rserver1: eth0: 192.168.1.1 255.255.255.0 lo: 127.0.0.1 255.0.0.0 lo:0 192.168.1.110 255.255.255.255 Configuración rserver2: eth0: 192.168.1.2 255.255.255.0 lo: 127.0.0.1 255.0.0.0 Las caches arp de las dos máquinas están vacias.

Hacemos ping desde el rserver2 a la 192.168.1.110 que esta en el alias al loopback

lo:0 del servidor real 1.

Captura de la interface eth0 del rserver2: 10:01:00.287617 arp who-has 192.168.1.110 tell 192.168.1.2 10:01:00.287945 arp reply 192.168.1.110 is-at 0:e0:29:25:4e:9a 10:01:00.288051 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 10:01:00.288339 192.168.1.110 > 192.168.1.2: icmp: echo reply 10:01:01.299715 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 10:01:01.299998 192.168.1.110 > 192.168.1.2: icmp: echo reply 10:01:02.299709 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 10:01:02.299962 192.168.1.110 > 192.168.1.2: icmp: echo reply 10:01:03.299705 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 10:01:03.299955 192.168.1.110 > 192.168.1.2: icmp: echo reply 10:01:04.299706 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 10:01:04.299971 192.168.1.110 > 192.168.1.2: icmp: echo reply 10:01:05.285115 arp who-has 192.168.1.2 tell 192.168.1.1 10:01:05.285319 arp reply 192.168.1.2 is-at 0:e0:29:25:46:57 10:01:05.299704 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 10:01:05.299962 192.168.1.110 > 192.168.1.2: icmp: echo reply 10:01:06.299713 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 10:01:06.299964 192.168.1.110 > 192.168.1.2: icmp: echo reply 10:01:07.299705 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 10:01:07.299958 192.168.1.110 > 192.168.1.2: icmp: echo reply 10:01:08.299700 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 10:01:08.299943 192.168.1.110 > 192.168.1.2: icmp: echo reply 10:01:09.299709 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 10:01:09.299967 192.168.1.110 > 192.168.1.2: icmp: echo reply 10:01:10.299696 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 10:01:10.299944 192.168.1.110 > 192.168.1.2: icmp: echo reply 10:01:11.299710 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 10:01:11.299959 192.168.1.110 > 192.168.1.2: icmp: echo reply 10:01:12.299699 192.168.1.2 > 192.168.1.110: icmp: echo request (DF)

Page 185: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO VII

10:01:12.299944 192.168.1.110 > 192.168.1.2: icmp: echo reply 10:01:13.299703 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 10:01:13.299953 192.168.1.110 > 192.168.1.2: icmp: echo reply 10:01:14.299706 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 10:01:14.299953 192.168.1.110 > 192.168.1.2: icmp: echo reply 10:01:15.299702 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 10:01:15.299952 192.168.1.110 > 192.168.1.2: icmp: echo reply Captura de la interface lo del loopback del rserver2: 10:00:49.992113 localhost.blackjack > localhost.domain: 58561+ A? rserver1. (26) (DF) 10:00:49.992284 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:00:49.992839 localhost.blackjack > localhost.domain: 58561+ A? rserver1. (26) (DF) 10:00:49.992990 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:00.002677 localhost.blackjack > localhost.domain: 58562+ A? rserver1. (26) (DF) 10:01:00.002846 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:00.003406 localhost.blackjack > localhost.domain: 58562+ A? rserver1. (26) (DF) 10:01:00.003560 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:00.297400 localhost.blackjack > localhost.domain: 2756+[|domain] (DF) 10:01:00.297568 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:00.298366 localhost.blackjack > localhost.domain: 2756+[|domain] (DF) 10:01:00.298524 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:00.300767 localhost.blackjack > localhost.domain: 2757+[|domain] (DF) 10:01:00.300991 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:00.301516 localhost.blackjack > localhost.domain: 2757+[|domain] (DF) 10:01:00.301674 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:05.287364 localhost.blackjack > localhost.domain: 2758+[|domain] (DF) 10:01:05.287534 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:05.288060 localhost.blackjack > localhost.domain: 2758+[|domain] (DF) 10:01:05.288213 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:10.012061 localhost.blackjack > localhost.domain: 58563+ A? rserver1. (26) (DF) 10:01:10.012230 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:10.012809 localhost.blackjack > localhost.domain: 58563+ A? rserver1. (26) (DF) 10:01:10.012961 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:20.022044 localhost.blackjack > localhost.domain: 58564+ A? rserver1. (26) (DF) 10:01:20.022212 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:20.022758 localhost.blackjack > localhost.domain: 58564+ A? rserver1. (26) (DF) 10:01:20.022912 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:30.032052 localhost.blackjack > localhost.domain: 58565+ A? rserver1. (26) (DF) 10:01:30.032227 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:30.032777 localhost.blackjack > localhost.domain: 58565+ A? rserver1. (26) (DF) 10:01:30.032929 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:40.042047 localhost.blackjack > localhost.domain: 58566+ A? rserver1. (26) (DF) 10:01:40.042214 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 10:01:40.042753 localhost.blackjack > localhost.domain: 58566+ A? rserver1. (26) (DF) 10:01:40.042904 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0]

Page 186: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO VII

Captura de la interface eth0 del rserver1: 17:31:33.348856 arp who-has 192.168.1.110 tell 192.168.1.2 17:31:33.349021 arp reply 192.168.1.110 is-at 0:e0:29:25:4e:9a 17:31:33.349268 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:33.349412 192.168.1.110 > 192.168.1.2: icmp: echo reply 17:31:34.360939 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:34.361044 192.168.1.110 > 192.168.1.2: icmp: echo reply 17:31:35.360908 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:35.360988 192.168.1.110 > 192.168.1.2: icmp: echo reply 17:31:36.360877 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:36.360959 192.168.1.110 > 192.168.1.2: icmp: echo reply 17:31:37.360859 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:37.360951 192.168.1.110 > 192.168.1.2: icmp: echo reply 17:31:38.346082 arp who-has 192.168.1.2 tell 192.168.1.1 17:31:38.346425 arp reply 192.168.1.2 is-at 0:e0:29:25:46:57 17:31:38.360833 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:38.360921 192.168.1.110 > 192.168.1.2: icmp: echo reply 17:31:39.360821 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:39.360899 192.168.1.110 > 192.168.1.2: icmp: echo reply 17:31:40.360791 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:40.360871 192.168.1.110 > 192.168.1.2: icmp: echo reply 17:31:41.360760 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:41.360839 192.168.1.110 > 192.168.1.2: icmp: echo reply 17:31:42.360752 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:42.360838 192.168.1.110 > 192.168.1.2: icmp: echo reply 17:31:43.360712 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:43.360792 192.168.1.110 > 192.168.1.2: icmp: echo reply 17:31:44.360705 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:44.360785 192.168.1.110 > 192.168.1.2: icmp: echo reply 17:31:45.360671 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:45.360749 192.168.1.110 > 192.168.1.2: icmp: echo reply 17:31:46.360653 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:46.360732 192.168.1.110 > 192.168.1.2: icmp: echo reply 17:31:47.360634 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:47.360712 192.168.1.110 > 192.168.1.2: icmp: echo reply 17:31:48.360607 192.168.1.2 > 192.168.1.110: icmp: echo request (DF) 17:31:48.360689 192.168.1.110 > 192.168.1.2: icmp: echo reply

Page 187: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

ANEXO VII

Captura de la interface lo del rserver1: 17:31:33.354609 localhost.blackjack > localhost.domain: 12559+ PTR? 110.1.168.192.in-addr.arpa. (44) (DF) 17:31:33.354738 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 17:31:33.355162 localhost.blackjack > localhost.domain: 12559+ PTR? 110.1.168.192.in-addr.arpa. (44) (DF) 17:31:33.355246 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 17:31:33.356460 localhost.blackjack > localhost.domain: 12560+ PTR? 2.1.168.192.in-addr.arpa. (42) (DF) 17:31:33.356553 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 17:31:33.356810 localhost.blackjack > localhost.domain: 12560+ PTR? 2.1.168.192.in-addr.arpa. (42) (DF) 17:31:33.356891 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 17:31:38.347297 localhost.blackjack > localhost.domain: 12561+ PTR? 1.1.168.192.in-addr.arpa. (42) (DF) 17:31:38.347406 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] 17:31:38.347670 localhost.blackjack > localhost.domain: 12561+ PTR? 1.1.168.192.in-addr.arpa. (42) (DF) 17:31:38.347748 localhost > localhost: icmp: localhost udp port domain unreachable [tos 0xc0] Captura de la interface lo:0 del rserver1: 17:31:33.354609 127.0.0.1.blackjack > 127.0.0.1.domain: 12559+ PTR? 110.1.168.192.in-addr.arpa. (44) (DF) 17:31:33.354738 127.0.0.1 > 127.0.0.1: icmp: 127.0.0.1 udp port domain unreachable [tos 0xc0] 17:31:33.355162 127.0.0.1.blackjack > 127.0.0.1.domain: 12559+ PTR? 110.1.168.192.in-addr.arpa. (44) (DF) 17:31:33.355246 127.0.0.1 > 127.0.0.1: icmp: 127.0.0.1 udp port domain unreachable [tos 0xc0] 17:31:33.356460 127.0.0.1.blackjack > 127.0.0.1.domain: 12560+ PTR? 2.1.168.192.in-addr.arpa. (42) (DF) 17:31:33.356553 127.0.0.1 > 127.0.0.1: icmp: 127.0.0.1 udp port domain unreachable [tos 0xc0] 17:31:33.356810 127.0.0.1.blackjack > 127.0.0.1.domain: 12560+ PTR? 2.1.168.192.in-addr.arpa. (42) (DF) 17:31:33.356891 127.0.0.1 > 127.0.0.1: icmp: 127.0.0.1 udp port domain unreachable [tos 0xc0] 17:31:38.347297 127.0.0.1.blackjack > 127.0.0.1.domain: 12561+ PTR? 1.1.168.192.in-addr.arpa. (42) (DF) 17:31:38.347406 127.0.0.1 > 127.0.0.1: icmp: 127.0.0.1 udp port domain unreachable [tos 0xc0] 17:31:38.347670 127.0.0.1.blackjack > 127.0.0.1.domain: 12561+ PTR? 1.1.168.192.in-addr.arpa. (42) (DF) 17:31:38.347748 127.0.0.1 > 127.0.0.1: icmp: 127.0.0.1 udp port domain unreachable [tos 0xc0]

Page 188: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

Bibliografía

Bibliografía

[0] Chandra Kopparapu, Load Balancing Servers, Firewalls, and Caches, Published by

John Wiley & Sons, Inc. 2002

[1] P. Srisuresh, M. Holdrege, IP Network Address Translator (NAT) Terminology and

Considerations, RFC 2663 Agosto 1999

[2] K. Egevang, P. Francis, The IP Network Address Translator (NAT), RFC 1631

Mayo 1994

[3] P. Srisuresh, K. Egevang, Traditional IP Network Address Translator (Traditional

NAT), RFC 3022 Enero 2001

[4] H. Schulzrinne, A. Rao, R. Lanphier, Real Time Streaming Protocol (RTSP), RFC

2326 Abril 1998

[5] http://www.iana.org/assignments/port-numbers, IANA Port Numbers, última

modificación 2003-01-17

[6] S. Knight, D. Weaver, D. Whipple, R. Hinden, D. Mitzel, P. Hunt, P. Higginson,

M. Shand, A. Lindem, Virtual Router Redundancy Protocol , RFC 2338 Abril 1998

[7] Joseph Mack, LVS-HOWTO Install, testing and running of a Linux Virtual Server

with 2.2.x and 2.4.x kernels, Septiembre 2002

[8] Y. Rekhter, B. Moskowitz, D. Karrenberg, G. J. de Groot, E. Lear, Address

Allocation for Private Internets, RFC 1918 Febrero 1996

[9] R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, T. Berners-Lee,

Hypertext Transfer Protocol -- HTTP/1.1, RFC 2616 Junio 1999

Page 189: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

Bibliografía

[10] http://www.php.net/manual/es , Stig Sæther Bakken, Alexander Aulbach, Egon Schmid, Jim Winstead, Lars Torben Wilson, Rasmus Lerdorf, Andrei Zmievski, Jouni Ahto, Manual de PHP, Enero de 2003

[11] http://otn.oracle.com/products/oracle8/htdocs/xpsf3twp.htm, An Oracle Technical

White Paper, Oracle® Parallel Server, Junio 1997

Page 190: Arquitecturas de Clustering de Alta Disponibilidad y Escalabilidad … · 2005-02-27 · Prefacio Prefacio Estructura y contenido de la memoria La memoria del proyecto ACADE (LVS)

Agradecimientos: La realización de este proyecto ha sido posible gracias a la colaboración de muchas personas, entre las que destacan: Joan Carles Núñez (Lmann) e Iván Belmonte (ttyp0) de la Asociación de Soporte al Software Libre (ASSL) por su inestimable ayuda, así como a Pau Oliva (pof) por sus sabias orientaciones. De otro modo, no queremos olvidarnos del apoyo de nuestros familiares y amigos, especialmente de Elisenda Fernández, Valeria, Juan Carlos Moreno, Miguel Ángel Moreno, Pilar Formiga, Txus, Laia y muchos otros. Gracias a Pere Manzanos y a Léonard Janer por tutelar este proyecto. En último lugar, pero no por ello menos importante, nuestro agradecimiento a: Vinton G. Cerf, Richard M. Stallman, Linus Torvalds y al resto de miembros de “la comunidad”, sin cuyo trabajo este proyecto no hubiera podido existir.