Balanceamento de carga com HAProxy

haproxyConfigurar o balanceamento de carga entre vários servidores web pode parecer um desafio, porém na verdade não é. O HAProxy é uma ferramenta poderosa, leve, fácil de configurar e com um grande número de recursos sofisticados para gerenciar e servir conteúdo.

Neste artigo, tenho um cenário simples usando três servidores:

  1. Node1-LB (192.168.10.10): O nó com o HAProxy configurado e com função de load balancer
  2. Node2 (192.168.10.20): Servidor Web
  3. Node3 (192.168.10.30): Servidor Web

Todos os servidores estão com CentOS 5.8 e rodando dentro do Vagrant.

Configuração do Node1-LB:

Instalação do repositório EPEL

# wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
# rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

Instalação e Configuração do HAProxy

No caso vamos usar o algoritmo de balanceamento por RoundRobin. Existem outras opções de uso que você pode definir de acordo com sua necessidade. Neste link, tem uma boa explicação sobre eles.

# yum install haproxy
# mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.ori
# vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0
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 web-farm 0.0.0.0:80
cookie SERVERID rewrite
balance roundrobin
server node2 192.168.10.20:80 cookie app1inst1 check inter 2000 rise 2 fall 5
server node3 192.168.10.30:80 cookie app1inst2 check inter 2000 rise 2 fall 5

Start no serviço e garantia de inicialização no boot

# /etc/init.d/haproxy start
# /sbin/chkconfig haproxy on

Configuração do servidor Web – Node2 (192.168.10.20):

Instalação do repositório EPEL

# wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
# rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

Instalação e configuração básica do Apache

# yum install httpd
# rm /etc/httpd/conf.d/welcome.conf
# echo Node2 > /var/www/html/index.html

Start no serviço e garantia de inicialização no boot

# /etc/init.d/httpd start
# /sbin/chkconfig httpd on

Configuração do servidor Web – Node3 (192.168.10.30):

Instalação do repositório EPEL

# wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
# rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

Instalação e configuração básica do Apache

# yum install httpd
# rm /etc/httpd/conf.d/welcome.conf
# echo Node3 > /var/www/html/index.html

Start no serviço e garantia de inicialização no boot

# /etc/init.d/httpd start
# /sbin/chkconfig httpd on

Vídeo Demo o/

Assista ao vídeo com a validação do uso:

Plus: WebStats

Se você quiser disponibilizar uma interface Web para visualização das estatísticas do HAProxy similar à esta: http://demo.1wt.eu/, basta adicionar as linhas abaixo no arquivo /etc/haproxy/haproxy.cfg e reiniciar o serviço.

listen stats 0.0.0.0:9000
stats uri /haproxy_stats
stats realm HAProxy Statistics
stats auth admin:password

No caso, ao tentar acessar o serviço através da url http://192.168.10.10:9000/haproxy_stats será solicitado o usuário e senha conforme explicitados no arquivo acima (admin/password)

Até a próxima!

  • Tenshi SA

    Ótimo poste meu amigo.
    Tenho uma duvida, o trafego dos servidores Web “Node1 e Node2”
    Sempre passam por dentro do Haproxy ?

    Se for assim em um site com muitas requisições é preciso um Haproxy com uma banda de internet bem alta, é isso mesma a logico ou entendi errado?

    Muito obrigado pela atenção!

    • Ricardo Martins

      Oi @tenshisa:disqus,

      No caso, todo tráfego “bate” no HAProxy e é redirecionado para os Nodes seguindo a lógica de balanceamento escolhida.

      No caso de sites com muitas requisições, você entendeu corretamente.

      • Tenshi SA

        Certo, notei isso, tive que fazer os testes :v
        Obrigado mais uma vez!
        Abraço

  • Sophos GH

    Olá, teria com você fazer um exemplo de configuração do Haproxy, para balanceamento de carga de servidores DNS “bind dns”, para dividir as requisição entre dois servidores.
    Obrigado, Ótimo Blog.