domingo, 6 de abril de 2008

Squid + heartbeat = Alta disponibilidad en Linux

Primero
... dijeron que Linux era un producto de las universidades y que no saldría de ellas, luego dijeron que no tenia cabida en los escritorios, que era cosa de gurus y freaks; el resultado es que cada vez mas servidores son Linux, incluso algunas empresas como Oracle están creando su propia distro en la que incluir su software, y que incluso con la ayuda inesperada del fracaso de Vista cada vez mas gente prueba y se queda en Ubuntu, y es que Linux esta experimentando un crecimiento increíble y cada vez incluye servicios mas y mas avanzados como la alta disponibilidad.

Crear un servicio de proxy en Linux es relativamente facil, poco mas que hacer un;
#apt-get install squid

y retocar el fichero de configuración;
#vim /etc/squid/squid.conf

Ya tenemos un proxy-cache funcionando para nuestra red, pero que pasa si esta maquina se cae? se rompe el disco duro o simplemente alguien tropieza con el cable de red? pues que dejamos a 'x' personas sin internet y esto en las empresas de hoy en día con webmail, miles de aplicaciones web, etc...puede llegar a ser un problema, si este es tu caso voy a intentar explicar como montar un claster simetrico de alta disponivilidad de un servicio proxy basado en mi experiencia...

En primer lugar explicar que la alta disponibilidad se basa en multiplicar los resursos, o sea que donde antes teníamos un servidor ahora vamos a necesitar mas. Podríamos crear un cluster con dos miembros, pero ante la caída de uno de ellos se produce una situación denominada "split-brain", por lo que para crear una cluster siempre es recomendable utilizar al menos tres miembros.

En Debian o Ubuntu server instalamos Heartbeat y las herramientas de administracion se instalaran como dependencias;

#apt-get install heartbeat heartbeat-gui

Una vez instalado esto en las tres mauinas ya tenemos los servidores listos para crear nuestro clusterHA, ahora hay que comprobar un par de cosas;
- en primer lugar tenemos que comprobar que las tres maquinas se ven entre si, yo recomiendo incluir el en fichero /etc/hosts los nombres y las ip's de cada maquina
- una vez comprobada la conectividad por nombre hay que tener en cuenta que medio vamos a usar para enviar la senal de heartbeat multicast, broadcast... que determinara el tipo de topologia de red que tenemos que usar, en este caso vamos a usar broadcast por lo que los tres servidores deben de estar en la misma red y compartir el dominio de broadcast, por ejemplo;

M30 192.168.0.3 255.255.255.0
M40 192.168.0.4 255.255.255.0
M50 192.168.0.5 255.255.255.0
Gateway de internet: 192.168.0.254
IP virtual para nuestro cluster 192.168.0.1

Ahora vamos a ver los dos ficheros que tenemos que modificar y la configuración mínima para hacer funcionar nuestro cluster;

root@M50:~# cat /etc/ha.d/ha.cf
node M30 M40 M50

bcast eth0

crm on


En este fichero ha.cf esta la configuración mínima para nuestro cluster, los miembros, el tipo de sealizacion para la senal de heartbeat y con "crm on" habilitamos el uso de las funciones de la versión 2 de heartbeat.

root@M50:~# cat /etc/ha.d/authkeys
auth 1
1 sha1 ClaveSuperSecreta

En el fichero authkeys establecemos la codificación de la senal de heatbeat y la clave a utilizar, estos dos ficheros deben de estar presentes en los tres servidores y despues de modificarlos hay que reiniciar el demonio de heartbeat

#/etc/init.d/heartbeat restart

podemos utilizar las herramientas de linea de comandos pero voy a explicar como darlo todo de alta con la herramienta grafica, que aunque se encuentra en una primera fase de desarrollo es muy util. Lo primero que tenemos que hacer es ponerle una password al usuario hacluster en la maquina o maquinas donde queramos conectarnos a la herramienta grafica, y como root ejecutar;

#hb_gui


Aqui vemos la pantalla de entrada, ponemos nuestra password y al acceder deberiamos de ver nuestro cluster simetrico con los tres nodos en verde y con el estado quorum.

Ahora vamos a dar de alta los recursos que va a ofrecer este cluster, en nuestro caso van a ser;
- una ip virtual para que conecten los clientes.
- un servicio de proxy Squid.
- un servicio de NTP, para que toda nuestra red se pueda sincronizar con una unica hora.

Cuando estas insertando el resource de Ipaddr tienes que poner un parametro que sea ip y otorgarle el valor de la ip virtual que queramos usar.

Es importante dar todos estos servicios sobre un grupo que permita que ante la caída de un nodo todos los servicios se muevan en grupo al siguiente nodo disponible.

Una vez que estan dados de alta los servicios pulsa con el boton derecho sobre el grupo y dale al triangulo verde de activar, veras que se activan y se arrancan en uno de los nodos. Ahora viene lo divertido, prueba que tienes internet poniendote de servidor proxy la Ip virtual que hemos configurado, tienes internet verdad? prueba a tirar del cable de red del servidor que tiene los servicios arrancados...

Seguro que se puede mejorar, para eso estan los comentarios....

6 comentarios:

George dijo...

Como siempre, muy interesante,en cuanto tenga un hueco lo pruebo, aunque lo que mas me ha gustado ha sido lo de "tirar del cable".

Saludos.

JulianFigueroa86 dijo...

por favor, necesitamos los comandos, podrias postearlos??, muchas gracias, es que tenemos problemas con la aplicacion hb_gui

JulianFigueroa86 dijo...

por favor, necesitamos los comandos, podrias postearlos??, muchas gracias, es que tenemos problemas con la aplicacion hb_gui

Miguel dijo...

me podrias decir cual es la direccion del servidor? a mi me aparece 127.0.0.1 pero igual no me conecta.

Axier dijo...

JulianFigueroa86, no se que problemas te esta dando el hb_gui pero usar el cibadmin da para escribir un libro, es mucho mas facil con la herramienta gráfica que a demás la mejoran dia a dia.

http://www.linux-ha.org/v2/AdminTools/cibadmin

Axier dijo...

Miguel, no entiendo tu pregunta, ten en cuenta que la configuracion que he presentado es para el direccionamiento de una LAN que no tiene por que ser la tuya, de todas formas 127.0.0.1 es la direccion de loopback???