HAProxy · 5 min read · Nov 12, 2025
Balanceamento de Carga do Servidor Web com HAProxy no Ubuntu 14.04
O que é HAProxy?
HAProxy(High Availability Proxy) é um balanceador de carga de código aberto que pode balancear qualquer serviço TCP. HAProxy é uma solução gratuita, muito rápida e confiável que oferece balanceamento de carga, alta disponibilidade e proxy para aplicações baseadas em TCP e HTTP. É particularmente adequado para sites com tráfego muito alto e alimenta muitos dos mais visitados do mundo.
Desde a sua existência, tornou-se o padrão de fato para balanceadores de carga de código aberto. Embora não se anuncie, é amplamente utilizado. Abaixo está um diagrama básico de como a configuração se parece: 
Instalando HAProxy
Estou usando o Ubuntu 14.04 e o instalo por:
apt-get install haproxyVocê pode verificar a versão por:
haproxy -vPrecisamos habilitar o HAProxy para ser iniciado pelo script init /etc/default/haproxy. Defina a opção ENABLED como 1:
ENABLED=1Para verificar se essa alteração foi feita corretamente, execute o script init do HAProxy sem parâmetros. Você deve ver o seguinte:
$ service haproxy
reload restart start status stop HAProxy está agora instalado. Vamos agora criar uma configuração na qual temos 2 (duas) instâncias do Apache Web Server e 1 (uma) instância do HAProxy. Abaixo estão as informações da configuração:
Usaremos três sistemas, gerados virtualmente através do VirtualBox: Instância 1 - Balanceador de Carga Hostname: haproxy OS: Ubuntu IP Privado: 192.168.205.15 Instância 2 - Web Server 1 Hostname: webser01 OS: Ubuntu com LAMP IP Privado: 192.168.205.16 Instância 2 - Web Server 2 Hostname: webserver02 OS: Ubuntu com LAMP IP Privado: 192.168.205.17
Aqui está o diagrama de como a configuração se parece:
Vamos agora configurar o HAProxy.
Configurando HAProxy
Faça um backup do arquivo original renomeando-o:
mv /etc/haproxy/haproxy.cfg{,.original}Vamos criar nosso próprio arquivo haproxy.cfg. Usando seu editor de texto favorito, crie o arquivo /etc/haproxy/haproxy.cfg como:
global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
server webserver01 192.168.205.16:80 check
server webserver02 192.168.205.17:80 checkExplicação:
global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemonA diretiva de log menciona um servidor syslog para o qual as mensagens de log serão enviadas. A diretiva maxconn especifica o número de conexões simultâneas na frente. O valor padrão é 2000 e deve ser ajustado de acordo com a configuração do seu sistema. As diretivas user e group alteram o processo do HAProxy para o usuário/grupo especificado. Estas não devem ser alteradas.
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000A seção acima contém os valores padrão. A opção redispatch habilita a redistribuição de sessão em caso de falhas de conexão. Assim, a persistência da sessão é substituída se uma instância do servidor web falhar. A diretiva retries define o número de tentativas a serem realizadas em uma instância do servidor web após uma falha de conexão. Os valores a serem modificados são as várias diretivas de timeout. A opção contimeout especifica o tempo máximo a esperar para que uma tentativa de conexão a uma instância do servidor web tenha sucesso. As opções clitimeout e srvtimeout se aplicam quando o cliente ou servidor deve reconhecer ou enviar dados durante o processo TCP. O HAProxy recomenda definir os timeouts do cliente e do servidor para o mesmo valor.
listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
server webserver01 192.168.205.16:80 check
server webserver02 192.168.205.17:80 checkO bloco acima contém a configuração para o frontend e backend. Estamos configurando o HAProxy para escutar na porta 80 para webfarm, que é apenas um nome para identificar uma aplicação. As diretivas de stats habilitam a página de estatísticas de conexão. Esta página pode ser visualizada com a URL mencionada em stats uri, então, neste caso, é http://192.168.205.15/haproxy?stats, uma demonstração desta página pode ser vista aqui. A diretiva balance especifica o algoritmo de balanceamento de carga a ser utilizado. As opções de algoritmo disponíveis são:
- Round Robin (roundrobin),
- Round Robin Estático (static-rr),
- Menos Conexões (leastconn),
- Fonte (source),
- URI (uri) e
- Parâmetro de URL (url_param).
Informações sobre cada algoritmo podem ser obtidas na documentação oficial.
A diretiva server declara um servidor de backend, a sintaxe é:
server [:port] [param*] O nome que mencionamos aqui aparecerá nos logs e alertas. Existem mais alguns parâmetros suportados por esta diretiva e usaremos o parâmetro check neste artigo. A opção check habilita verificações de saúde na instância do servidor web, caso contrário, a instância do servidor web é sempre considerada disponível.
Uma vez que você tenha terminado de configurar, inicie o serviço HAProxy:
sudo service haproxy startTestando Balanceamento de Carga e Fail-over
Vamos adicionar o nome do servidor em ambos os arquivos index.html padrão localizados por padrão em /var/www/index.html
Na Instância 2 - Web Server 1 (webserver01 com IP- 192.168.205.16), adicione a linha abaixo:
sudo sh -c "echo Hostname: webserver01 (192.168.205.16)
>> /var/www/index.html"Na Instância 3 - Web Server 2 (webserver02 com IP- 192.168.205.17), adicione a linha abaixo:
sudo sh -c "echo Hostname: webserver02 (192.168.205.17)
>> /var/www/index.html"Agora abra o navegador na máquina local e navegue pelo IP do haproxy, ou seja, http://192.168.205.15
Cada vez que você atualizar a aba, verá que a carga está sendo distribuída para cada servidor web. Abaixo está uma captura de tela do meu navegador:
Na primeira vez que visito http://192.168.205.15, eu recebo: 
E na segunda vez, ou seja, quando atualizo a página, eu recebo: 
Você também pode verificar as estatísticas do haproxy visitando http://192.168.205.15/haproxy?stats
Há mais que você pode fazer com esta configuração. Algumas ideias incluem:
- tirar um ou ambos os servidores web offline para testar o que acontece quando você acessa o HAProxy
- configurar o HAProxy para servir uma página de manutenção personalizada
- configurar a interface web para que você possa monitorar visualmente as estatísticas do HAProxy
- mudar o agendador para algo diferente de round-robin
- configurar priorização/pesos para servidores específicos
Isso é tudo!
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.