HAProxy Load Balancer: Configuracao de Alta Disponibilidade

O HAProxy e o balanceador de carga open-source mais utilizado em ambientes de producao, processando milhoes de conexoes simultaneas com latencia minima. Grandes empresas como GitHub, Stack Overflow e Twitter confiam no HAProxy para distribuir trafego entre seus servidores. Este guia cobre a configuracao completa do HAProxy com terminacao SSL, health checks, sessoes sticky e alta disponibilidade com Keepalived.

Instalacao e Configuracao Basica

Instale o HAProxy e configure o balanceamento basico entre servidores backend:

sudo apt update && sudo apt install haproxy -y
sudo systemctl enable haproxy

# Verificar versao instalada
haproxy -v

Edite o arquivo de configuracao principal:

sudo nano /etc/haproxy/haproxy.cfg
global
    log /dev/log local0
    maxconn 50000
    user haproxy
    group haproxy
    daemon
    stats socket /var/run/haproxy.sock mode 660 level admin

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000ms
    timeout client  50000ms
    timeout server  50000ms
    retries 3

frontend http_front
    bind *:80
    default_backend http_back

backend http_back
    balance roundrobin
    option httpchk GET /health
    http-check expect status 200
    server web1 192.168.1.10:8080 check inter 5s fall 3 rise 2
    server web2 192.168.1.11:8080 check inter 5s fall 3 rise 2
    server web3 192.168.1.12:8080 check inter 5s fall 3 rise 2

O parametro check inter 5s fall 3 rise 2 significa que o HAProxy verifica cada servidor a cada 5 segundos, marca como inativo apos 3 falhas consecutivas e restaura apos 2 verificacoes bem-sucedidas.

Terminacao SSL e Seguranca

Configure a terminacao SSL no HAProxy para centralizar o gerenciamento de certificados:

# Combinar certificado e chave em arquivo PEM
sudo cat /etc/ssl/certs/site.crt /etc/ssl/private/site.key > /etc/haproxy/certs/site.pem
sudo chmod 600 /etc/haproxy/certs/site.pem
frontend https_front
    bind *:443 ssl crt /etc/haproxy/certs/site.pem alpn h2,http/1.1
    bind *:80
    http-request redirect scheme https unless { ssl_fc }

    # Headers de seguranca
    http-response set-header Strict-Transport-Security "max-age=31536000; includeSubDomains"
    http-response set-header X-Content-Type-Options "nosniff"

    # Rate limiting basico
    stick-table type ip size 100k expire 30s store http_req_rate(10s)
    http-request deny deny_status 429 if { sc_http_req_rate(0) gt 100 }

    default_backend https_back

Essa configuracao redireciona todo o trafego HTTP para HTTPS, adiciona headers de seguranca e implementa rate limiting basico de 100 requisicoes por 10 segundos por IP.

Sessoes Sticky e Algoritmos de Balanceamento

Para aplicacoes com estado, configure sessoes sticky baseadas em cookies:

backend app_back
    balance leastconn
    cookie SERVERID insert indirect nocache

    option httpchk GET /health
    http-check expect status 200

    server app1 192.168.1.10:8080 check cookie s1
    server app2 192.168.1.11:8080 check cookie s2
    server app3 192.168.1.12:8080 check cookie s3

O algoritmo leastconn envia novas conexoes ao servidor com menos conexoes ativas, ideal para requisicoes de longa duracao. Outros algoritmos incluem roundrobin para distribuicao uniforme e source para afinidade de IP.

Habilite a pagina de estatisticas para monitoramento:

listen stats
    bind *:8404
    stats enable
    stats uri /stats
    stats refresh 10s
    stats admin if LOCALHOST

Alta Disponibilidade com Keepalived

Para eliminar o HAProxy como ponto unico de falha, configure Keepalived em dois nos:

sudo apt install keepalived -y
sudo nano /etc/keepalived/keepalived.conf

Configuracao do no primario:

vrrp_script chk_haproxy {
    script "/usr/bin/systemctl is-active haproxy"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass segredo_compartilhado
    }
    virtual_ipaddress {
        192.168.1.100/24
    }
    track_script {
        chk_haproxy
    }
}

No no secundario, altere state para BACKUP e priority para 90. Quando o HAProxy falhar no no primario, o Keepalived reduz a prioridade em 20 pontos, fazendo com que o no secundario assuma o IP virtual automaticamente.

# Validar e reiniciar servicos
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl restart haproxy
sudo systemctl restart keepalived

Resumo

O HAProxy combinado com Keepalived fornece uma solucao robusta de balanceamento de carga com alta disponibilidade para ambientes de producao. Com terminacao SSL centralizada, health checks configurados e sessoes sticky quando necessario, voce garante distribuicao eficiente de trafego e resiliencia contra falhas de servidores ou do proprio balanceador.

Artigos Relacionados