Balanceador de carga MySQL con HAProxy

balanceadorHace unas semanas, vimos c贸mo configurar un balanceador de carga con la aplicaci贸n de balanceo en entornos Red Hat por antonomasia: LVS, (y Piranha). LVS es la aplicaci贸n nativa de balanceo, muy bien documentada en la documentaci贸n oficial de Red Hat, e incluso vendida como balanceador en forma de addons.

Este tipo de configuraciones, funcionan muy bien, pero tienen una serie de requisitos, pues se ha de reconfigurar la red de los servidores implicados para compartir una IP Virtual, o para cambiar el default gateway (en el caso de LVS-NAT). 脡sto no siempre nos es posible hacerlo, puesto que quiz谩 estemos trabajando con un proveedor de servidores dedicados, como en mi caso Hetzner, que no permite hacer cambios en las interfaces de red que vienen configuradas en el equipo, y que adem谩s parece que no lleva bien lo de las IPs compartidas.

En cualquier caso, hay otras soluciones de balanceo, como HA Proxy, que en el siguiente ejemplo usar茅 para balancear las peticiones MySQL entre dos servidores con IPs p煤blicas situados bajo el mismo switch, en Hetzner. Todos los servidores son CentOS 6.3 x64.

1- BALANCEADOR- Instalaci贸n

En primer lugar, instalaremos el paquete 芦Development Tools禄 en el balanceador:

yum -y groupinstall ‘Development Tools’

A continuaci贸n, nos descargaremos de la p谩gina oficial de HAProxy, la 煤ltima versi贸n (tar.gz) y la descomprimiremos.

tar -zvxf haproxy-1.4.22.tar.gz
Una vez descomprimido, miraremos qu茅 versi贸n de Kernel tenemos, en el caso de no saberlo:

# uname -r
2.6.32-279.22.1.el6.x86_64

Ahora que en nuestro ejemplo hemos visto que tenemos el Kernel 2.6, instalaremos HAProxy indicando como target 芦linux26禄. Si no se est谩 seguro de qu茅 target poner, se puede ejecutar 芦make禄 sin target, para ver las opciones disponibles.
cd haproxy-1.4.22
make TARGET=linux26
cp haproxy /usr/sbin/haproxy

2- BALANCEADOR- Configuraci贸n

A continuaci贸n, podremos copiar el fichero de ejemplo de configuraci贸n a /etc, o si lo preferimos, crear uno vac铆o:

cp /tmp/haproxy-1.4.22/examples/haproxy.cfg /etc/

En mi caso, he usado el siguiente fichero de configuraci贸n [Fuente]:

global
maxconn 4096
uid 99
gid 99
daemon

defaults
mode聽聽聽 http
option聽 tcplog
option聽 dontlognull
retries 3
option redispatch
maxconn 2000
contimeout聽聽聽聽聽 5000
clitimeout聽聽聽聽聽 50000
srvtimeout聽聽聽聽聽 50000

listen聽 mysql-cluster 0.0.0.0:3306
mode tcp
balance roundrobin
server nodo1 80.81.82.81:3306 check
server nodo2 80.81.82.82:3306 check

3- BALANCEADOR- Iniciar HA Proxy

Podemos iniciar HA Proxy indic谩ndole la ubicaci贸n del fichero de configuraci贸n que acabamos de realizar:

sudo聽haproxy聽-f聽/etc/haproxy.cfg

 

NOTAS

A partir de ese momento, ya tendremos HA Proxy balanceando peticiones MySQL entre nuestros nodos. Hay que recordar que:

  • Los nodos tienen que aceptar peticiones MySQL remotas (iptables abierto para el puerto 3306 y origen que toque).
  • Los nodos han de tener un usuario MySQL creado para permitir conectar remotamente.
  • Si se quiere iniciar haproxy al inicio, se puede a帽adir la siguiente instrucci贸n al /etc/rc.local:

/usr/sbin/haproxy -f /etc/haproxy.cfg

  • Finalmente, decir que para comprobar el correcto funcionamiento de la soluci贸n, se puede usar la sentencia聽 芦select @@hostname禄 para verificar a cual de los nodos estamos conectados. Si el algoritmo de balanceo es Round Robin, para cada nueva conexi贸n, deber铆amos conectar con un nodo diferente. De esta manera, podemos verificar si el sistema de balanceo est谩 funcionando.

mysql> select @@hostname;
+——————+
| @@hostname聽聽聽聽聽聽 |
+——————+
| mysql-server-01 |
+——————+
1 row in set (0.07 sec)

  • En el siguiente enlace se encuentra la documentaci贸n de HAProxy, por si se quiere comprender mejor qu茅 opciones de configuraciones tenemos. [enlace]

Fuentes:

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=HAProxyBalanceandoCarga

http://docs.neo4j.org/chunked/stable/ha-haproxy.html

http://wiki.joyent.com/wiki/display/jpc2/Load+Balancing+with+HAproxy

 

Flickr!Foto por Daquella manera

Deja una respuesta

Tu direcci贸n de correo electr贸nico no ser谩 publicada.