Cluster Tomcat

Salve amigos gujavianos!
Preciso implementar um cluster de Tomcat, me baseei em alguns exemplos que encontrei na internet mas não obtive sucesso, será que alguém pode me ajudar? Tenho 20 máquinas rodando o tomcat 5 de ipx 192.168.1.10 à 192.168.1.40, o balanceamento está sendo feito via hardware sem problemas, mas não consigo fazer o cluster se atualizar, segue o trecho do arquivo server.xml:

    <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
             managerClassName="org.apache.catalina.cluster.session.DeltaManager"
             expireSessionsOnShutdown="false"
             name="NumseyCluster"
             useDirtyFlag="true">

        <Membership 
            className="org.apache.catalina.cluster.mcast.McastService"
            mcastAddr="228.0.0.4"
            mcastPort="45564"
            mcastFrequency="500"
            mcastDropTime="3000"/>

        <Receiver 
            className="org.apache.catalina.cluster.tcp.ReplicationListener"
            tcpListenAddress="auto"
            tcpListenPort="4001"
            tcpSelectorTimeout="100"
            tcpThreadCount="6"/>

        <Sender
            className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
            replicationMode="pooled"/>

        <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
               filter=".*.gif;.*.js;.*.jpg;.*.htm;.*.html;.*.txt;"/>
               
        <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
                  tempDir="/tmp/war-temp/"
                  deployDir="/tmp/war-deploy/"
                  watchDir="/tmp/war-listen/"
                  watchEnabled="false"/>
    </Cluster>

Grato pela ajuda!

Boa sorte…
Clustering no Tomcat é apenas pra brincar, ninguém poderia ser maluco o suficiente para usar em produção, ou com mais de 2 máquinas.

Quer dizer que o Tomcat não funcionar com Cluster, consequentemente o JBOSS também, pois implementa o Tomcat, terei que utilizar um servidor web proprietário que provavelmente encontrarei mais em conta da Microsoft?

Caaaaaaalma!

O cluster do JBoss é outro, é o cluster do EJB container e não do web container.

O que vc está procurando é uma solução de load balance para o tomcat, não é?

Procure por LVS no google, ou compre uma solução de hardware ($$$$).

Se quiser algo realmente foda, procure pelo session ring do Resin, que replica todas as sessões por todos os web servers. Pena que isso nunca funcionou pra mim e tb não conheço ninguém que está usando isso em produção com sucesso!

[quote=“saoj”]
Caaaaaaalma!

O cluster do JBoss é outro, é o cluster do EJB container e não do web container.

O que vc está procurando é uma solução de load balance para o tomcat, não é?

Procure por LVS no google, ou compre uma solução de hardware ($$$$).

Se quiser algo realmente foda, procure pelo session ring do Resin, que replica todas as sessões por todos os web servers. Pena que isso nunca funcionou pra mim… :([/quote]

Estou calmo, apenas fiquei impressionado com a afirmação do caro colega de que é uma idéia de maluco um cluster de Tomcat!
Na verdade o load balancer é feito por hardware, e funciona perfeitamente!
O problema está sendo a atualização do web container e dos sessions, que pelo o meu entendimento o Tomcat executa sem problemas, ou estou enganado?

Não sei se o Tomcat tem session ring (replicação de sessão). Deve ter. O resin tem mas não consegui fazer a coisa performar, nem gravando as sessões no mysql.

Achei no google:

http://www.onjava.com/pub/a/onjava/2002/07/17/tomcluster.html

A implementação de cluster do Tomcat usa tcp/ip para replicação de sessão e ate onde eu sei não é muito esperta no que diz respeito a session locking, resolução de conflitos e propagação de modificações.

Clustering do tomcat funciona é dizem ser estavel suficiente para uso em produção.

O porém é a escalabilidade. Tenho minhas dúvidas se você vai conseguir verificar algum ganho depois de umas 16 máquinas.

Talvez seu caso seja para usar uns SB, que são bem mais escalaveis que a sessão do web-tier.

Mas isso também depende se o objetivo é aumentar a performance ou a disponibilidade do sistema; Se for a primeira opção, verifique se o hardware suporta sticky sessions e desista de clusterizar o tomcat, caso contrario verifique a viabilidade de particionar o sistema e criar clusters menores de 2-4 nós apenas.

[quote=“louds”]A implementação de cluster do Tomcat usa tcp/ip para replicação de sessão e ate onde eu sei não é muito esperta no que diz respeito a session locking, resolução de conflitos e propagação de modificações.
[/quote]

A do resin tb !!! Aqui no ParPerfeito ficou uma carroça com 6 máquinas. Acho que a parada não funciona mesmo.

Aí o resin veio com uma solução alternativa de gravar todas as sessões de forma centralizada num mysql. Testamos aqui e tb não funcionou muito bem. As máquinas ficaram pesadas…

Taí um assunto interessante para pesquisas e projetos. 8)

Uma solução animal é usar isso aqui: www.tangosol.com, já brinquei um pouco com ele e a performance e a escalabilidade são impressionantes.
Talvez seja um pouco salgado pro seu bolso, e compense mais investir em tornar o sistema stateless ou com sessions minúsculas.

Por falar nisso, tuas sessions são 100% serializaveis e pequenas? Algo como 2-4k…

[quote=“louds”]
Por falar nisso, tuas sessions são 100% serializaveis e pequenas? Algo como 2-4k…[/quote]

100% serializáveis
20-50k de tamanho (sistema web, objeto Profile com um milhão de coisas na sessão!)

Vou dar uma olhada nesse tangosol !!!

saoj, 20k-50k na sessão?? Tua session precisa de 1 dieta bem legal em…
Eu trabalhei em uma aplicação onde usavamos server-side page state e não chegavamos aos 20k.

Não faça caching na sessão, ou se fizer, use variaveis transient.

O objeto profile é meio grande, pois tem um milhão de caracterísiticas do usuário.

Mas talvez vc tenha razão. Meto todos esses dados como transient e se houver uma mudança de web server eu recarrego tudo do banco. Acho que vale a pena, pois hoje não posso restartar o meu site durante o dia para não derrubar os usuários logados.

Mas mesmo que minha sessão seja pequena, ainda tenho que fazer a replicação dela. O que vc sugere? tangosol, tcp-ring, mysql ???

Isso vai de caso a caso. Se sessões persistentes não forem um requisito procure por algum servlet-engine que use multicast para replicação em memoria/disco. Fuga de tcp/ip a todo custo, simplesmente não é escalavel.

O tangosol é tcp não é?

O coherence usa multicast para a maioria das coisas.

Configurei o cluster do tomcat e reparei que está utilizando multicast pra tudo, o que aumentou em 15% meu tráfego de rede.

Voce tem o hardware adequado para isso? Routers e switches que suportem multicast devidamente configurados. Caso contrario multicast opera como broadcast.

Da documentação do Tomcat:

Ou seja, ele usa multicast somente p/ gerenciamento de membros.
Da uma lida na documentação do Tomcat sobre clustering e entenda pq usar 24 nós no mesmo cluster é maluquisse.

O tomcat não é tão barato quanto pensei, talvez para trabalhar com seis máquinas, mais que isto têm um custo médio de $1500 por máquina, a melhor solução para o meu caso é o coherence.