Prévia do material em texto
LAB: Balanceamento de carga com HAProxy v1.3
LAB: Balanceamento de carga com HAProxy
Fonte: https://www.ricardomartins.com.br/2014/04/02/balanceamento-de-carga-com-haproxy/
https://pplware.sapo.pt/tutoriais/tutorial-balanceamento-de-carga-em-servidores-com-haproxy/
https://phcco.com/alta-disponibilidade-e-balanceamento-de-carga-http-com-haproxy
O que é o HAProxy?
O HAProxy é oferecido como um confiável balanceador de carga de alto desempenho para HTTP e TCP; na prática
ele recebe as conexões dos usuários e atua como um proxy, criando um canal entre o usuário e um dos servidores de
aplicação; esta aplicação possui alguns mecanismos interessantes para escolher o servidor web que deve encaminhar
a solicitação do usuário. Dentre as estratégias de escalonamento suportadas as mais importantes, no meu ponto de
vista, são:
Round-robin
Onde o servidor é escolhido de forma circular, independente da carga em cada um dos servidores de aplicação;
Menos conexões:
Onde o servidor com menos conexões é escolhido, o que garante que o servidor mais ocioso seja utilizado;
Cookie:
Onde o HAProxy tentará sempre indicar o mesmo servidor que o usuário conectou pela primeira vez;
Hash de IP:
Neste caso a aplicação irá escolher o servidor de acordo com o IP.
Dentre os mecanismos acima, apenas o mecanismo de cookie não é um escalonador do HAProxy, ou seja, deve ser
combinado com o escalonador round-robin ou de menos conexões; o mecanismo de cookie ou o escalonador por hash
de IP são muito importantes para garantir que seu cliente não perca a sessão da aplicação HTTP; sem isso seu usuário
pode ser "deslogado" da aplicação quando o escalonador trocar o servidor de aplicação; o uso do escalonador de
menos conexões é muito útil em casos onde as conexões demoram a ser fechadas, nestes casos evita-se que por uma
"sorte" um servidor seja sempre escolhido para as conexões mais demoradas.
Premissas e informações importantes
Lembre-se: vamos utilizar 3 máquinas virtuais conectadas via recurso Rede NAT do VirtualBox; logo, o próprio monitor
de máquinas virtuais que deve disponibilizar o endereço IP para cada VM; verifique se a associação ao endereço foi
realizada corretamente através do comando ipconfig:
root@debian:~# ifconfig
Não se esqueça de verificar se os “cabos de rede estão conectados” nas máquinas virtuais e se a conectividade de
rede está disponível (efetue um tente “pingando” o Proxy UNIP):
root@debian:~# ping 192.168.0.1
LAB: Balanceamento de carga com HAProxy v1.3
Atenção: os próximos passos devem deve ser executado nas três VMs pois existem módulos que precisam
ser instalados em cada uma das máquinas.
Vamos iniciar configurando o proxy do espelho de rede (APT); no diretório /etc/apt, crie um arquivo com nome apt.conf;
abaixo alguns dos comandos mais utilizados no editor nano:
root@debian:~# nano /etc/apt/apt.conf
CTRL + X: Sai do editor. Se você estiver no meio da edição de um arquivo, o processo de saída irá perguntar se você
quer salvar seu trabalho.
CTRL + K: Recorta o texto da linha.
CTRL + U: Colar o texto da linha recortada anteriormente.
CTRL + O: Salva o arquivo aberto e continua trabalhando.
CTRL + W: Faz uma busca no texto.
CTRL + A: Leva o cursor para o início da linha.
CTRL + E: Leva o cursor para o fim da linha.
Adicione as informações abaixo no referido arquivo; esta configuração indica ao APT qual o proxy de internet para sua
navegação e download; respeite maiúsculas e minúsculas, mantendo a formatação idêntica ao conteúdo
descrito:
Acquire {
HTTP::proxy "http://192.168.0.1:8080";
FTP::proxy "http://192.168.0.1:8080";
}
Além da configuração do proxy, o APT precisa ser informado sobre os repositórios onde deve buscar os pacotes de
instalação; configure o arquivo /etc/apt/sources.list conforme exemplo.
root@debian:~# nano /etc/apt/sources.list
Adicione somente as linhas abaixo; referências a CD´s ou DVD´s devem ser comentadas (coloque um “#” na frente da
linha a ser comentada):
deb http://ftp.br.debian.org/debian jessie main
deb-src http://ftp.br.debian.org/debian jessie main
deb http://ftp.br.debian.org/debian jessie-updates main
deb-src http://ftp.br.debian.org/debian jessie-updates main
deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main
LAB: Balanceamento de carga com HAProxy v1.3
Load Balance com HAProxy e Apache2
Neste LAB, vamos montar um cenário simples usando três servidores virtuais com os seguintes hostnames:
haproxy (10.0.2.XXX*): HAProxy configurado e funcionando como Load Balancer
apache1 (10.0.2.XXX*): Servidor Web Apache2
apache2 (10.0.2.XXX*): Servidor Web Apache2
* XXX é o IP de cada uma das máquinas que foi delegado pelo VirtualBox; verifique (e anote!) os endereços de cada
uma das máquinas através do comando abaixo (lembrando que a placa que conecta a VM a internet é a nomeada
como ETH0):
root@debian:~# ifconfig
Configuração da VM haproxy - Instalação e Configuração do HAProxy
Em primeiro lugar, verifique se hostname da VM denominada como “Debian_Cluster_HAProxy” está setado para
“haproxy”; caso contrário altere o nome da máquina utilizando o comando abaixo:
root@haproxy:~# nano /etc/hostname
Para efetivar a alteração, reinicie a máquina utilizando o comando init:
root@haproxy:~# init 6
Feito isso, faça novo logon no shell e atualize o repositório do APT utilizando o comando abaixo:
root@haproxy:~# apt-get update
Instale o HAProxy utilizando o APT; segue comando:
root@haproxy:~# apt-get install haproxy
Renomeie o arquivo de configuração default utilizando o comando a seguir:
root@haproxy:~# mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.ori
Crie um novo arquivo de configuração utilizando o editor nano:
root@haproxy:~# nano /etc/haproxy/haproxy.cfg
LAB: Balanceamento de carga com HAProxy v1.3
No caso vamos usar o algoritmo de balanceamento Round Robin; existem outras opções de configuração que você
pode definir de acordo com sua necessidade; com o arquivo haproxy.cfg aberto no nano, digite as linhas a seguir;
ATENÇÃO durante a digitação:
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 apache1 10.0.2.XXX:80 cookie app1inst1 check inter 2000 rise 2 fall 5
server apache2 10.0.2.XXX:80 cookie app1inst2 check inter 2000 rise 2 fall 5
Reinicie o serviço do HAProxy utilizando o comando abaixo:
root@haproxy:~# /etc/init.d/haproxy restart
Configuração da VM apache1 - Instalação e Configuração do Web Apache 1
Em primeiro lugar, verifique se hostname da VM denominada como “Debian_Cluster_Apache_1” está setado para
“apache1”; caso contrário altere o nome da máquina utilizando o comando abaixo:
root@apache1:~# nano /etc/hostname
Para efetivar a alteração, reinicie a máquina utilizando o comando init:
root@apache1:~# init 6
Feito isso, faça novo logon no shell e atualize o repositório do APT utilizando o comando abaixo:
root@apache1:~# apt-get update
LAB: Balanceamento de carga com HAProxy v1.3
Agora instale o pacote do Web Server Apache2 utilizando o comando abaixo:
root@apache1:~# apt-get install apache2
Adicione a informação abaixo na página de apresentação do Apache; assim podemos identificar qual o servidor WEB
que o client está conectado:
root@apache1:~# echo Servidor Apache1 >> /var/www/html/index.html
Reinicie o serviço do Apache2 utilizando o comando abaixo:
root@apache1:~# /etc/init.d/apache2 restart
Configuração da VM apache2 - Instalação e Configuração do Web Apache 2Em primeiro lugar, verifique se hostname da VM denominada como “Debian_Cluster_Apache_2” está setado para
“apache2”; caso contrário altere o nome da máquina utilizando o comando abaixo:
root@apache2:~# nano /etc/hostname
Para efetivar a alteração, reinicie a máquina utilizando o comando init:
root@apache2:~# init 6
Feito isso, faça novo logon no shell e atualize o repositório do APT utilizando o comando abaixo:
root@apache2:~# apt-get update
Agora instale o pacote do Web Server Apache2 utilizando o comando abaixo:
root@apache2:~# apt-get install apache2
Adicione a informação abaixo na página de apresentação do Apache; assim podemos identificar qual o servidor WEB
que o client está conectado:
root@apache2:~# echo Servidor Apache2 >> /var/www/html/index.html
Reinicie o serviço do Apache2 utilizando o comando abaixo:
root@apache2:~# /etc/init.d/apache2 restart
LAB: Balanceamento de carga com HAProxy v1.3
Testando a configuração do Load Balancer HAProxy
Para validar sua configuração, instale o módulo curl; esta ferramenta permite transferência de dados através de uma
série de protocolos de Internet como HTTP, FTP, Telnet, LDAP, IMAP, POP3, SMTP, e muito mais; na VM denominada
“Debian_Cluster_HAProxy” execute o donwload do módulo através do comando abaixo:
root@haproxy:~# apt-get install curl
Para validar seu ambiente de Alta Disponibilidade, utilize o comando curl da seguinte maneira:
root@haproxy:~# curl 10.0.2.XXX IP da VM HAProxy
Repetindo este comando algumas vezes, você deve constatar que cada refresh força a distribuição de carga
para um dos servidores Web Apache, somente repetindo o mesmo nó se um dos dois estiver fora de serviço.
Instale o curl em ambos os nós Apache e repita o mesmo teste conforme comando abaixo; assim validamos que a alta
disponibilidade atende a todos as maquinas que estão conectadas ao Sistema Distribuído.
root@apache1:~# curl 10.0.2.XXX IP da VM HAProxy
ou
root@apache2:~# curl 10.0.2.XXX IP da VM HAProxy
Desafio!
Aproveitando a infraestrutura construída neste LAB, adicione mais um nó ao cluster e apresente o comportamento
do HAProxy com 3 instâncias do Apache.