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.
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:
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: alta disponibilidad, redes, sistemas
1 comentario
Comments RSS
TrackBack Identifier URI
Dejar un comentario



