Balanceo de servicios con Haproxy

¿Quieres aumentar el rendimiento de tus servicios y además hacerlos más tolerantes a fallos?
El balanceo de servicios aumentará el rendimiento de los mismos al permitir un número mayor de accesos simultáneos. Además aumentará la tolerancia a fallos del servicio, ya que el balanceador eliminará del balanceo aquel servidor cuyo servicio haya dejado de funcionar.

Existen muchos balanceadores de servicios, unos de los más rápidos y sencillos es Haproxy. Veamos como utilizarlo.

 

Balanceo de servicios
Ventajas del balanceos de servicios

 

Haproxy es un balanceador de puertos TCP (no nos servirá si queremos balancear un servicio que use puertos UDP) open source, con control de sesiones, asignación de pesos por servidor balanceado y control de puertos.

Vamos a configurar un caso muy sencillo de balanceo para el servicio Mysql (puerto tcp/3306):

IP balanceador -> 192.168.0.100
IP servidor mysql1 -> 192.168.0.101
IP servidor mysql2 -> 192.168.0.102
IP servidor mysql3 -> 192.168.0.103

Una vez instalado el paquete ‘haproxy’ desde el repositorio, o bien descargados, compilados e instalados los fuentes, pasaremos a configurar el fichero de configuración, generalmente en ‘/etc/haproxy/haproxy.cfg‘.

Está será la configuración para balancear los tres servidores con un peso de 50 para ‘mysql1’ y 25 para los otros dos (mysql1 recibirá el 50% de las peticiones), además de chequear cada 30 segundos si el puerto tcp/3306 sigue abierto:


listen mysql 192.168.0.100:3306
mode tcp
balance roundrobin
option tcp-check


server mysql1 192.168.0.101:3306 check inter 30s rise 2 fall 3 weight 50
server mysql2 192.168.0.102:3306 check inter 30s rise 2 fall 3 weight 25
server mysql3 192.168.0.103:3306 check inter 30s rise 2 fall 3 weight 25

 

  • listen mysql 192.168.0.100:3306‘:
    El servidor que realiza el balanceo escuchará en su puerto tcp/3306 todas las peticiones mysql que le lleguen.
  • weight XX‘, ‘balance roundrobin‘:
    Enviará las peticiones a los servidores correspondientes (mysql1, mysql2 y mysql3) en una proporción de 50%, 25% y 25% respectivamente, y utilizando una planificación roundrobin para gestionar la lista de servidores.
  • option tcp-check‘, ‘‘check inter 30s‘:
    Comprobará si los servidores tienen su puerto tcp/3306 abierto cada 30 segundos (se puede utilizar la opción ‘option mysql-check “username”‘ que abrirá una sesión al mysql correspondiente; en este caso habría que dar de alta permisos de acceso desde la IP del balanceador para el usuario ‘username’).
  • rise 2 fall 3‘:
    El balanceador eliminará del balanceo un servidor si se producen tres fallos consecutivos en los chequeos. De igual manera devolverá un servidor caído al balanceo siempre que se produzcan dos éxitos consecutivos en los chequeos.

 

Una vez arrancado el haproxy podemos probarlo conectándonos al puerto tcp/3306 del balanceador y comprobando que cada vez nos envía la petición a uno de los servidores mysql: mysql1, mysql2 o mysql3.

 

Si queremos acceder vía web a las estadísticas de conexiones de balanceo, añadiremos en el fichero de configuración:


listen stats 192.168.0.100:3117
mode http
option httpclose
balance roundrobin
stats enable
stats auth admin:miPassword
stats uri /
stats realm Haproxy\ Statistics

 

Nos conectamos a la dirección del balanceador con el puerto escogido, introduciendo el usuario y la contraseña, y podremos ver las estadísticas de las conexiones recibidas.

Estadísticas Haproxy
Ejemplo de informe estadístico (Haproxy)

 

Encontraremos más información sobre haproxy en su página web http://www.haproxy.org.

Guardar

Guardar

Guardar

Deja un comentario