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.