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!