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
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.