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 haproxy

Você pode verificar a versão por:

haproxy -v

Precisamos habilitar o HAProxy para ser iniciado pelo script init /etc/default/haproxy. Defina a opção ENABLED como 1:

ENABLED=1

Para 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 check

Explicação:

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

A 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     50000

A 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 check

O 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 start

Testando 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!

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.