Configurando um Cluster de Tomcat com Balanceamento de Carga

Neste artigo irei mostrar como configurar um cluster de Tomcat com balanceamento de carga para prover alta disponibilidade de sistemas web.

[ Hits: 28.756 ]

Por: ADRIEL LUCAS DA SILVA VIANA em 17/10/2011


Balanceamento de carga



É um serviço capaz de encaminhar requisições para vários servidores dentro de um cluster, de modo que cada nó do cluster não fique sobrecarregado, garantindo assim a utilização nivelada de todos os recursos computacionais dentro do cluster.

Neste projeto o Apache será o responsável pelo balanceamento da carga entre dois Tomcats. O Apache irá receber as requisições vindas dos clientes e de acordo com a quantidade de requisições enviadas a cada Tomcat, o mesmo irá transferir para cada um deles.

A figura abaixo mostra a arquitetura do cluster de Tomcat com balanceamento de carga:

Configurando o balanceador de carga

Como foi falado nos posts anteriores, o responsável pelo balanceamento de carga será o Apache. 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.

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. O Sistema é jBroca.

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

Insira este trecho no final do arquivo httpd.conf:

<VirtualHost 192.168.56.101:80>
ServerName 192.168.56.101
ProxyRequests Off

<Proxy 192.168.56:80>
Order deny,allow
Allow from all
</Proxy>

ProxyPass /teste balancer://balancer lbmethod=byrequests stickysession=JSESSIONID nofailover=off
ProxyPassReverse /teste http://192.168.56.101:8080/jbroca
ProxyPassReverse /teste http://192.168.56.101:8081/jbroca

<Proxy balancer://balancer>

BalancerMember http://192.168.56.101:8080/jbroca route=node01 loadfactor=1
BalancerMember http://192.168.56.101:8081/jbroca route=node02 loadfactor=1

</Proxy>

<Location /balancer-manager>

setHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from 192.168.56.101

</Location>

</VirtualHost>

Neste trecho temos a configuração de um virtualhost 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/jbroca.
  • 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 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/jbroca
ProxyPassReverse /jbroca http://192.168.56.101:8081/jbroca

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

<Proxy balancer://balancer>
BalancerMember http://192.168.56.101:8080/jbroca route=node01 loadfactor=1
BalancerMember http://192.168.56.101:8081/jbroca route=node02 loadfactor=1
</Proxy>

A última 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

<Location /balancer-manager>
setHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from 192.168.56.101
</Location>

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 Tomcats 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/jbroca

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

http://192.168.56.101/jbroca/autenticarUsuario.do;jsessionid=9225E01A70F0A90B2283244B2CF554D3.node01
http://192.168.56.101/jbroca/autenticarUsuario.do;jsessionid=4B2BF75B6B2F99EAB791D512E52AC626.node02

O endereço retornado mostra as requisições divididas nos dois Tomcats 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. A aplicação não será disponibilizada por ser 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 ajudá-los, muito obrigado a todos.

Página anterior    

Páginas do artigo
   1. Cluster de Tomcat
   2. Balanceamento de carga
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Instalando o Linuxlogo no título do console TTY do Debian

Slackware Current redondo com XFCE

Como instalar o driver da placa de vídeo SiS 771/671 no Ubuntu 18.04

Pós-instalação do Ubuntu Gnome 13.04

Personalizando o servidor centralizador de logs com rotate, script e crontab

  
Comentários
[1] Comentário enviado por andrecostall em 19/10/2011 - 22:37h

Cara, parabéns !!
Muito bom seu artigo.
Abs

[2] Comentário enviado por diegomsc em 08/10/2012 - 09:58h

Caso um servidor Tomcat caia, o serviço de balanceamento cai? ou todo o trafego é direcionado para o servidor que ainda esta on-line?

[3] Comentário enviado por adriell em 09/10/2012 - 10:10h

Diego,


Dentro do cluster se um tomcat cair, o balanceamento não cair ele apenas redireciona as requisições para os demais tomcats do cluster onde em cada tomcat as sessões estarão sendo replicadas ok?

[4] Comentário enviado por alexepires em 10/12/2012 - 08:39h

Olá Adriel parabéns pelo artigo.
Mas tenho uma dúvida, neste caso você utilizou uma das máquinas virtuais para ser o balanceador de carga e outra com as duas instâncias do tomcat?

Abs

[5] Comentário enviado por saitam em 24/05/2013 - 09:07h

Configurei o Cluster com duas instâncias do Tomcat na mesma máquina com Apache2 utilizando proxy.conf e proxy_balancer.conf no Debian com base desse artigo, mas não funcionou 100%.
Veja a situação:
Com dois Tomcats ativos quando uma requisição é feita pelo Firefox e outra com Chrome aparece a mesma mensagem que fiz uma pequena aplicação de testes (dominio1.war deploy no tomcat1 e dominio2.war deploy no tomcat2) exibindo "servidor 1" e "servidor 2" respectivamente, mas apenas exibe "servidor 1".

Se paro o tomcat1 e tento carregar acusa que o serviço não esta disponível (tomcat), mas o tomcat2 esta ativo.

Conclui então que esta fazendo conexão persistente.

Segue os arquivos de configuração que fiz com base desse artigo para quem quiser testar para melhor entender, se conseguir fazer funcionar de forma correta, favor posta como solucionou ok.

http://www.4shared.com/zip/KDA3nZv9/cluster.html


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts