blog del equipo de tecnología de 11870.com

Wackamole: Alta Disponibilidad con Balanceo de Carga


UN POCO DE INTRODUCCIÓN

Uno de los típicos “puntos únicos de fallo” de las topologías de red de los servicios web suele ser el servidor que conecta nuestra red con el exterior, normalmente el firewall.

Topología con 1 Firewall

Topología con 1 Firewall

La solución más evidente a esta limitación sería la de disponer de varios firewall trabajando en paralelo, en balanceo de carga, cada uno con su IP de entrada:

Topología con 2 Firewall

Topología con 2 Firewall

Para poder balancear la carga entre los distintos servidores de entrada, la solución más lógica sería la de utilizar el propio balanceo natural del DNS. Si asignamos al nombre de dominio de nuestra web las IPs de todos nuestros servidores de entrada, la resolución de nombres se hará por Round-Robin, entregando secuencialmente una IP por cada petición.

El único problema de este modelo es la falta de Alta Disponibilidad, ya que el servidor de DNS no tiene forma de saber si uno de los servidores está caido. Si ese caso se produjera, entregaría igualmente su IP y una parte de las peticiones no llegarían a la aplicación.

La solución se llama…


¡WACKAMOLE!

Wackamole es un sencillo software disponible para Linux, que permite garantizar que un grupo de IPs estarán siempre activas, repartiéndolas entre varios servidores. Si uno de los servidores cae, sus IPs pasarán a estar activas en otro. De esta forma es posible el modelo de balanceo anteriormente descrito.


¿PERO COMO SE INSTALA?

Debe ser instalado en todos los servidores implicados:

# sudo apt-get install wackamole

Por dependencias se instalará el paquete spread. Spread es un software que permite la comunicación entre distintos servidores, especialmente útil en aplicaciones distribuidas.


CONFIGUREMOS EL SPREAD

Spread es un demonio que escucha por el puerto TCP/4803 y UDP/4803. Se configura con el fichero:

/etc/spread/spread.conf

en el que basta con especificar los servidores implicados:

Spread_Segment 192.168.0.255:4803 {

firewall1 192.168.0.1
firewall2 192.168.0.2
….
}

He comprobado que, al menos en el paquete de Ubuntu, en el fichero /etc/init.d/spread está mal referenciado el fichero de configuración, ya que pone:

DOPTIONS=”-c /etc/spread.conf”

en lugar de:

DOPTIONS=”-c /etc/spread/spread.conf”


AHORA CONFIGUREMOS EL WACKAMOLE

Se configura en el fichero:

/etc/wackamole.conf

El fichero será el mismo en todos los servidores, excepto por el aparatado prefer

Y la configuración básica sería:

Definimos un nombre que agrupe a los servidores implicados:

Group = W2E5E

Podemos definir, de todo el pool de IPs, cuáles queremos que estén preferentemente en este servidor:

prefer { eth1:11.11.11.10/32 eth1:11.11.11.12/32 eth0:192.168.0.1/32 }

Es obligatorio poner la máscara /32 para que funcione.

Ahora definimos todo el pool de direcciones:

VirtualInterfaces {
{ eth1:11.11.11.10/26 eth1:11.11.11.12/26 eth0:192.168.0.1/24 }
{ eth1:11.11.11.11/26 eth1:11.11.11.13/26 eth0:192.168.0.2/24 }
}

Aquí ya sí podemos poner la máscara real de cada IP, aunque al ser IPs virtuales dentro de la misma subred, algunos Sistemas Operativos como FreeBSD, Solaris o Mac OS X, recomiendan usar siempre /32.

Como vemos, podemos poner las IPs agrupadas para garantizar que siempre irán juntas. También existe la posibilidad de no agruparlas:

VirtualInterfaces {
{ eth1:11.11.11.10/26 }
{ eth1:11.11.11.11/26 }
{ eth1:11.11.11.12/26 }
{ eth1:11.11.11.13/26 }
{ eth0:192.168.0.1/24 }
{ eth0:192.168.0.2/24 }
}

Ya sólo falta notificar a los demás, mediante ARP Updates, cada vez que se produzcan cambios de IP.

Notify {
eth1:11.11.11.1/32
eth0:192.168.0.0/24
arp-cache
}

Como vemos, se puede notificar tanto a un puesto como a todos los puestos de una red. Cada vez que falle un servidor y se recoloquen las IPs, el wackamole lanzará ARPs updates a esas direcciones.


ALGUNOS PROBLEMAS

He detectado que cuando en los Virtual Interfaces agrupamos las IPs, los ARPs se mandan sólo a los dos primeros de la lista. Esto es, al parecer, un bug conocido pero aún no resuelto, y hace que no se detecten los cambios de IP, por lo que los paquetes no son capaces de llegar al servidor que recibes las nuevas IPs

En este caso, podemos hacer el ARP de forma manual desde el servidor que tiene las nuevas IPs:

# arping -I [Interface] [IP-destino]


Y YA ESTAMOS FUNCIONANDO

Y ya está. Arrancamos el spread y el wackamole y en cada servidor se levantará uno o más interfaces virtuales repartiéndose las IPs. Si probamos a parar el wackamole en uno de los servidores (o todo el servidor), veremos que sus IPs son levantadas en otro de forma inmediata.

También se puede forzar a Wackamole a considerar caído o levantado a un servidor con el comando wackatrl:

Servidor caído:

# wackatrl -f

Servidor levantado:

# wackatrl -s

Esto permite elaborar scripts que fuercen la caída en caso de que falle algún servicio como el apache o similar…

Y eso es todo, amigos…

Tags: , ,

1 comentario

rssComments RSS transmitTrackBack Identifier URI


[...] Wackamole: Alta Disponibilidad con Balanceo de Carga, por parte de nuestro Pablo. [...]

Pingback por 2E5E » Archive » Reunión de sistemistas en la oficina on Abril 30, 2009 9:48 pm

addDejar un comentario