Pular para o conteúdo

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.
ADRIEL LUCAS DA SILVA VIANA adriell
Hits: 31.886 Categoria: Linux Subcategoria: Configuração
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Cluster de Tomcat

Um cluster de Tomcat são dois um mais Tomcats em que são hospedadas a mesma aplicação Java. A principal função do cluster de Tomcat é realizar replicação de sessões abertas em cada Tomcat do cluster, assim cada Tomcat conterá suas sessões e seus atributos, assim como os atributos e sessões dos demais Tomcats. Cada Tomcat do cluster é chamado de nó.

Com o cluster de Tomcat é possível obter a alta disponibilidade, de modo que se um nó do cluster falhar, as requisições vindas para este nó serão desviadas para outro nó ativo. Tudo isso sem que o usuário perceba, pois sua sessão estará ativa nos outros nós do cluster.

A figura abaixo mostra a arquitetura do cluster de Tomcat:

Configuração do cluster de Tomcat

Levarei em consideração que você já tenha duas instâncias do Tomcat, o Apache e o Java instalados no seu servidor. Segue abaixo a descrição do ambiente que será utilizado nesse pequeno projeto, vale lembrar que é apenas um projeto de teste:
  • Duas instâncias de máquinas virtuais no virtualbox;
  • Cada VM com 512MB de RAM e 8GB de HD;
  • Cada VM com o sistema Operacional CentOS 5.7 (Final).

Obs.: Essa configuração poderá ser realizada em qualquer servidor Linux.

Requisitos:

Para realizar a replicação de sessões entre os nós do cluster alguns pontos devem ser verificados:
  • Todos os atributos de sessão devem implementar java.io.Serializable;
  • Ter no arquivo web.xml da aplicação o atributo <distributable/> ou definir um propriedade na configuração do contexto da aplicação no arquivo server.xml;
  • Configurar o balanceador de carga com a opção sticky session ativa, para manter as requisições de um mesmo usuário do sistema indo para um mesmo nó do cluster, exceto quando falhar este nó.

Iniciando a configuração:

A configuração dos Tomcats para o cluster é realizada a partir da edição do arquivo server.xml, localizado na pasta conf (<diretório do tomcat>/conf/server.xml) de cada Tomcat.

O que deve ser feito é descomentar toda a tag cluster e acrescentar a configuração adequando os parâmetros ao ambiente de hospedagem. Logo abaixo a configuração do cluster:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"> <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6"/> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> </Sender> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/> <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Em cada Tomcat temos a mesma tag cluster com uma pequena diferença na configuração:
Agora temos que identificar cada nó no mesmo arquivo "server.xml". No Tomcat A e no Tomcat B será preciso fazer algumas alterações para os nós poderem se comunicar:
Obs.: As alterações estão destacadas em negrito, porém essas alterações são um exemplo de configuração, não necessariamente terá que utilizar estes mesmo valores, pode ser feito com outros valores.

Depois de fazer essas configurações, basta iniciar os Tomcats que os mesmos começarão a replicar suas sessões, ou seja, começarão a trabalhar em cluster.

Para iniciar os Tomcats basta entrar no diretório Bin/ dentro de cada Tomcat e executar o seguinte comando:

# sh startup.sh

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. Cluster de Tomcat
   2. Balanceamento de carga
Nenhum artigo encontrado.

Instalação do Asterisk no Debian Lenny

OpenVPN para clientes Windows no Debian Squeeze

Instalação da placa TRENDnet TEW-421PC Wireless com ndiswrapper Debian

Recuperando e/ou adaptando o GRUB do Sabayon Linux

Slackware + Gentoo - Dual-boot sem live-CD/USB

#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

Entre na sua conta para comentar.