Balancear servicio web con HAProxy en Ubuntu 18.04

HAProxy es un software que nos permite balancear carga entre varios servidores. Se suele usar para balancear servicios web, pero puede balancear cualquier servicio que funcione bajo protocolo TCP. En este artículo os vamos a enseñar varias configuraciones de HAProxy incluso que tenga en cuenta las cookies, parece una tontería, pero puede provocar que fallen nuestra web. Imagínate que  tienes 2 servidores web -en adelante frontales- cuando el usuario llega por primera vez a tu web lo hace en el frontal-01. Cuando el usuario se registra crea una cookie, el usuario siguen navegando y de repente HAProxy envía el tráfico al frontal-2, en ese servidor no existe la cookie y por tanto le cerrará la sesión :(, configurando adecuadamente HAProxy esto no sucederá.

Instalación HAProxy

La configuración mínima para poder balancear carga es de 3 servidores: HAProxy + 2 frontales webs. La ventaja de usar HAProxy es que en cualquier momento puedes añadir más frontales.
Otra de las ventajas de usar HAProxy es que podemos restringir el acceso a los frontales por la IP Pública con lo cual no estarán accesibles directamente. Con los siguientes comandos ya podemos instalar HAProxy.

apt update
apt upgrade
apt install haproxy
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.org

Configuración base

Ahora ya podemos crear nuestro primer fichero de configuración.

global
    daemon
    maxconn 256
    user    haproxy
    group   haproxy
    log     127.0.0.1       local0
    log     127.0.0.1       local1  notice

defaults
        log     global
        mode    http
        option  tcplog
        option  dontlognull
        maxconn 8000
        timeout connect 5s
        timeout client 300s
        timeout server 300s
        retries 3
        timeout check 10s
        timeout queue 1m
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

listen test_kb
    bind *:80
    mode http
    stats enable
    stats auth  cda:cda
    balance roundrobin
    server frontend-01 10.20.10.54:80 #IP Privada frontal-01
    server frontend-02 10.20.10.56:80 #IP Privada frontal-02

Ahora que ya tenemos la configuración hecha, tenemos que reiniciar el servicio de HAProxy, esto lo haremos cada vez que cambiemos la configuración.

systemctl restart haproxy

Ver estadísticas

Para ver estadísticas vía web, añadiremos la siguiente configuración:

listen stats
        bind *:8083
        mode http
        stats enable
        stats uri /stats
        stats realm HAProxy\ Statistics
        stats auth haproxy:TestKB

Ahora iremos a nuestro navegador y abriremos la web http://IP_Publica_HAProxy:8083/stats, nos pedirá usuario y contraseña, indicaremos haproxy y TestKB.

Si queremos que la página de estadísticas se actualice sola cada 10 minutos podemos añadir la directiva:

        stats   refresh 10s

Comprobar estado y controlar cookies

Podemos controlar que un usuario siempre acceda al mismo frontal, en nuestro ejemplo nos basaremos en una variable de PHP pero podemos usar cualquier variable.
Otra característica importante de HAProxy es que puede controlar si un frontal está caído o sobrecargado y desconectarlo temporalmente.

listen test_kb
    bind *:80
    mode http
    stats enable
    stats auth  cda:cda
    balance roundrobin
    option httpchk GET /index.php HTTP/1.0
    http-check expect rstatus (2|3)[0-9][0-9]|503
    cookie PHPSESSID prefix indirect nocache
    server frontend-01 10.20.10.54:80 check maxconn 4000 fall 3 cookie L1
    server frontend-02 10.20.10.56:80 check maxconn 4000 fall 3 cookie L2

¿Lo has probado? ¡Déjanos tus comentarios! 🙂

To write a comment on this article, fill out the form below. Fields marked with an asterisk (*) are required.