Hoje em dia é importante garantir alta disponibilidade dos serviços online. Para esse cenário, é fundamental ter mais do que uma máquina e no caso de existirem muitos pedidos esse serem distribuídos pela várias máquina.
Este balanceamento de cargas pode ser feito usado o software HAProxy. Hoje mostramos como tudo funciona.
O HAProxy é um serviço Linux que garante um balanceamento e alta disponibilidade numa farm de servidores, como também serviço de proxying, ao não expor directamente estes mesmos servidores da farm na Internet.
Neste tutorial pretende-se configurar o HAProxy, de modo a garantir as funções referidas acima, numa farm constituída por dois webservers.
Cenário de Demonstração
Serão configuradas três máquinas virtuais, numa VLAN isolada e com endereçamento:
- HAProxy – servidor balanceador – 192.168.0.1/24
- Node01 – webserver 1 – 192.168.0.10/24
- Node02 – webserver 2 – 192.168.0.11/24
O cliente para este caso específico terá de estar também no mesmo segmento de rede e VLAN dos três servidores acima.
O sistema operativo utilizado nas três máquinas virtuais é Ubuntu, e o hypervisor é VMware (neste caso foi utilizado VMware Workstation).
Para quem desconhece, a imagem abaixo mostra como configurar VLANs a nível do VMWare workstation:
Configuração do Node1 e 2 (webservers) e virtualhost test.dev
Instalar apache2
sudo apt-get install apache2
Criar directório test.dev
sudo mkdir /var/www/html/test.dev
Definir permissões
sudo chown -R $USER:$USER /var/www/html/test.dev
sudo chmod -R 755 /var/www
Criar index.html (para testes)
sudo nano /var/www/html/test.dev/index.html

Criar um VirtualHost que aponte para test.dev bastr:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/test.dev.conf
sudo nano /etc/apache2/sites-available/test.dev.conf
ServerAdmin webmaster@localhost
ServerName test.dev
ServerAlias www.test.dev
DocumentRoot /var/www/html/test.dev
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow, deny
allow from all
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Para activarem o VH usando o a2ensite, e reiniciar o apache basta que usem os seguintes comandos:
sudo a2ensite test.dev.conf
sudo service apache2 restart
Para configurar no Node2, basta apenas fazer os mesmos passos, mas alterar as palavras a negrito para Node2. Esta configuração servirá para distinguir o acesso ao mesmo site, mas o seu carregamento dos diferentes nós da farm.
Configuração do balanceador (HAProxy)
Instalar HAProxy
sudo apt-get install haproxy
Adicionar ao ficheiro /etc/default/haproxy a linha:
ENABLED=1
Criar cópia de segurança do ficheiro de configuração:
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg_bck
Remover todo o texto do ficheiro /etc/haproxy/haproxy.cfg e adicionar o seguinte:
global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon
defaults
log global
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
mode http #define o modo de funcionamento do balanceador(1)
listen webfarm
bind 192.168.0.1:80 #apenas escuta neste IP do balanceador, e no porto 80
stats enable #activa as estatisticas do serviço (2)
stats auth admin:admin #autenticação nas estatísticas
acl url_test_dev path_beg /test.dev #definição da acl
use_backend testdev if url_test_dev #associar a acl a um grupo de servers
backend testdev #define a farm de servers backend para o site test.dev
balance roundrobin #define o algoritmo de balanceamento
server node1 192.168.0.10:80 check # define o servidor e porto e o parâmetro de Health check
server node2 192.168.0.11:80 check # define o servidor e porto e o parâmetro de Health check
Restart ao serviço HAProxy
sudo service haproxy restart
(1) In layer 7 mode, HAProxy analyzes the protocol, and can interact with it by allowing, blocking, switching, adding, modifying, or removing arbitrary contents in requests or responses, based on arbitrary criteria. Com isto podemos inspeccionar o pedido e fazer o forward do mesmo correctamente.
(2) Aceder às estatísticas através do url: 192.168.0.1/haproxy?stats e inserir as credenciais admin/admin
Aceder ao cliente, e no browser do mesmo colocar: 192.168.0.1/test.dev
Ir fazendo refresh várias vezes e validar o carregamento do site a partir do Node1 e 2 (tal como mostra a figura seguinte).
Se necessitam de um “balanceador de cargas” então o HAProxy pode ser uma solução interessante tento em conta que é opensource. O serviço tem ainda um sistema de reports que pode ser conhecido através deste demo aqui.

















