Balanceo de carga con HAProxy

HAProxy es un balanceador de carga TCP Open Source de uso general para mejorar el rendimiento de los sitios y servicios TCP mediante la difusión de las solicitudes a través de múltiples servidores.

HAProxy es utilizado en múltiples sitios muy populares en Internet como Reddit, Tumblr, Twitter y se utiliza en el producto OpsWorks de Amazon Web Services

La configuración de HAProxy es muy sencilla y tiene una opción de “stats” que habilita la generación de estadísticas. Y a parte permite utilizar parámetro cookie para conseguir el mantenimiento de sesión por host.

Un ejemplo de uso de HAProxy sería el siguiente:

Instalamos socat para ver el balanceo de las conexiones

    yum install socat

Instalamos HAProxy

    yum install haproxy

Arrancamos HAProxy

    /etc/init.d/haproxy start

En una consola arrancamos un proceso que escuche en el puerto 5001

    socat – TCP4-LISTEN:5001,reuseaddr,fork

En otra consola arrancamos otro proceso que escucha en el puerto 5002

    socat – TCP4-LISTEN:5002,reuseaddr,fork

Y utilizamos la «navaja suiza» netcat para abrir y cerrar conexiones TCP al puerto 5000 que es el que está escuchando HAProxy y ver como van de un nodo a otro

echo «vale» | nc localhost 5000

echo «venga» | nc localhost 5000

HAProxy4

Si nos fijamos en las consolas vemos como cada mensaje (vale y venga) han ido a un proceso distinto

HAProxy2

HAProxy5

El ejemplo mostrado funciona con la configuración por defecto de HAProxy aun así copio el fichero de configuración /etc/haproxy/haproxy.cfg que hemos utilizado:

#———————————————————————
# Las opciones globales
#———————————————————————

log 127.0.0.1 local2

chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon

# turn on stats unix socket
stats socket /var/lib/haproxy/stats

#———————————————————————
# Valores comunes para todas las secciones
#———————————————————————

defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000

#———————————————————————
# Algoritmo round robin para el balanceo entre los backends
#———————————————————————
backend app
balance roundrobin
server app1 127.0.0.1:5001 check
server app2 127.0.0.1:5002 check

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s