Configurando um Cluster de Tomcat com Balanceamento de Carga – Parte 3
Autor: Adriel Lucas | Publicado: 2011-10-15T13:42:00-07:00





Balanceador de Carga



Como foi falado
nos posts anteriores, o responsável pelo balanceamento de carga será o
apache.&nbsp; Para isso o apache utiliza o
mod_proxy e o mod_proxy_balancer. Com o mod_proxy o apache trabalha como um
proxy FTP, http e ssl. Já o mod_proxy_balancer provê um serviço de
balanceamento de carga para protocolos HTTP, FTP e AJP13. O mod_proxy_balancer
depende do uso do mod_proxy.

Atualmente
existem dois métodos de balanceamento de carga:

- Por
quantidades de requisições onde cada nó do cluster irá receber uma requisição
por vez de modo em que nenhum dos nós fique sobrecarregado. 

- Por tráfego,
onde o balanceador dedica um nó do cluster para a requisição que for trafegar
maior quantidade de informações enquanto que as demais requisições serão
enviadas para os outros servidores.



Iniciando a configuração



O cenário onde
será feito a configuração do cluster será descrito logo abaixo:

- Ip do
Servidor= 192.168.56.101

- Aplicação que
será utilizada neste exemplo será um sistema para pedir almoço que foi
desenvolvido na empresa que eu trabalho.&nbsp;
O Sistema é jAlmoco

A configuração
do balanceador de carga será feita no arquivo de configuração do Apache
“httpd.conf”. No CentOS arquivo de configuração do apache fica dentro do
diretório “/etc/httpd/conf/httpd.conf”.

Dentro do
arquivo httpd.conf insira este trecho no final do arquivo:

&lt;VirtualHost
192.168.56.101:80&gt;

ServerName 192.168.56.101

ProxyRequests Off



&lt;Proxy 192.168.56:80&gt;

Order deny,allow

Allow from all

&lt;/Proxy&gt;

ProxyPass /teste balancer://balancer
lbmethod=byrequests stickysession=JSESSIONID nofailover=off

ProxyPassReverse /teste http://192.168.56.101:8080/jAlmoco

ProxyPassReverse /teste http://192.168.56.101:8081/jAlmoco



&lt;Proxy balancer://balancer&gt;

BalancerMember http://192.168.56.101:8080/jAlmoco


&nbsp; &nbsp; &nbsp;route=node01 loadfactor=1

BalancerMember http://192.168.56.101:8081//jAlmoco


&nbsp; &nbsp; &nbsp; route=node02 loadfactor=1

&lt;/Proxy&gt;

&lt;Location /balancer-manager&gt;

setHandler balancer-manager

Order Deny,Allow

Deny from all

Allow from 192.168.56.101

&lt;/Location&gt;

&lt;/VirtualHost&gt;

Neste trecho
temos a configuração de um virtual host que será responsável pelo recebimento
das requisições destinadas a url 192.168.56.101/jbroca. Segue abaixo a
descrição de cada item desta configuração:

- ServerName:
determina o nome do virtual host, neste caso o 192.168.56.101/jAlmoco




-ProxyRequest
off: determina que o apache não será utilizado como um servidor Proxy ou um
reverse Proxy.

- ProxyPass
/teste balancer://balancer lbmethod=byrequests stickysession=JSESSIONID
nofailover=off: qualquer requisição destinada ao context /teste será utilizado
o balanceador de carga balancer para
atender as requisições.

- lbmethod=byrequests:
é onde define o tipo de balanceamento de carga, onde neste caso o balanceamento
de carga é por requisição.

- stickysession=JSESSIONID
: define que o apache irá direcionar os pedidos de uma mesma seção para o mesmo
servidor.

- nofailover=off:
define que todos os servidores dentro cluster serão capazes de superar a falha
algum servidor do cluster que se tornar inativo, o apache desviará as
requisições deste servidor &nbsp;para outro
servidor.

As opções abaixo
são configurações utilizadas para corrigir as respostas vindas dos servidores
no cluster que são balanceados, baseando na requisição vinda do cliente:

ProxyPassReverse
/jbroca http://192.168.56.101:8080/jAlmoco




ProxyPassReverse
/jbroca http://192.168.56.101:8081/jAlmoco




Agora é onde
declaramos ao balanceador de carga os membros do cluster com suas respectivas
características: 

&lt;Proxy balancer://balancer&gt;

BalancerMember http://192.168.56.101:8080/jAlmoco


&nbsp; &nbsp; &nbsp; &nbsp;route=node01 loadfactor=1

BalancerMember http://192.168.56.101:8081/jAlmoco


&nbsp; &nbsp; &nbsp; &nbsp;route=node02 loadfactor=1

&lt;/Proxy&gt;

A ultima opção
habilita o gerenciamento do balanceador de carga para os navegadores do
domínio: 192.168.56.101. Para visualizar o balancer-manager no navegador basta
digitar:http://192.168.56.101/balancer-manager

&lt;Location /balancer-manager&gt;

setHandler balancer-manager

Order Deny,Allow

Deny from all

Allow from 192.168.56.101

&lt;/Location&gt;

Com isto, o
apache está configurado para realizar o balanceamento de carga, encaminhando as
requisições para os dois servidores dentro do cluster.



Para testar se
toda configuração está correta, inicie os tomcat’s e inicie o apache se iniciar
corretamente os servidores seu cluster está funcionando e basta acessar no
navegador para verificar se o balanceador está funcionando corretamente. No exemplo
citado basta acessar: http://192.168.56.101/jAlmoco




Acesse em diferentes
navegadores e verifique se realmente o balanceador está direcionando as requisições
para cada servidor. Neste exemplo que foi utilizado será na barra de endereço
mostra que as requisições estão sendo balanceadas:

http://192.168.56.101


/jAlmoco

/autenticarUsuario.do;jsessionid=9225E01A70F0A90B2283244B2CF554D3.node01 

http://192.168.56.101/jAlmoco/autenticarUsuario.do;jsessionid=4B2BF75B6B2F99EAB791D512E52AC626.node02

O endereço
retornado mostra as requisições divididas nos dois tomcat’s do cluster. O
balancer-manager também mostra se as requisições estão sendo balanceadas. 



Finalizamos
aqui, espero que todos tenham conseguido compreender o que eu tinha para passar
para vocês. A aplicação não será disponibilizada por ser uma aplicação utilizada
somente na empresa que eu trabalho, então desenvolvam a aplicação de vocês e
testem as aplicações rodando em cluster. Qualquer dúvida é só entrar em contato
que eu estarei disponível para a ajuda-los, muito obrigado a todos.