O Farm Deployer não está funcionando no Tomcat Cluster

2

Eu configurei o clustering apache-tomcat (Ubuntu Server) e usei a técnica de clustering suportada pelo tomcat com mod_jk seguindo o link . Eu configurei com o One Load Balancer e dois servidores da Web.

O maior problema é a implantação do arquivo WAR e para qual servidor web ?. Eu tenho que saber sobre Farmed Deployment, que implanta arquivos de guerra para outros servidores tomcat no cluster, mas eu não tenho que trabalhar ainda. Eu usei o implantador de farm na forma abaixo no elemento em dois dos servidores da Web.

Servidor da Web 1 (192.168.1.101)

<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/usr/share/tomcat/temp/"
                    deployDir="/usr/share/tomcat/webapps/"
                    watchDir="/usr/share/tomcat/watch/"
                    watchEnabled="true"/>

Servidor da Web 2 (192.168.1.102)

<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/usr/share/tomcat/temp/"
                    deployDir="/usr/share/tomcat/webapps/"
                    watchDir="/usr/share/tomcat/webapps/"
                    watchEnabled="false"/>

Coloquei o WAR no diretório watch no servidor web 1, mas ele não está sendo implantado em outro servidor. Alguém tem esse trabalho, Alguma coisa que eu estou fazendo errado ?, por favor me avise!.

Obrigado!

Atualização: 1

Eu pude ver as seguintes informações em qualquer uma das máquinas em logs catalina.out,

14 Aug, 2011 9:12:11 PM org.apache.catalina.ha.deploy.FarmWarDeployer start
SEVERE: FarmWarDeployer can only work as host cluster subelement!

Ele nem mesmo é implantado no servidor da web1 e também no servidor da web2. Obtendo erro 404 quando acessou o site. Mais alguma ajuda ...? Mais uma coisa, eu não instalei o tomcat do repositório apt, mas eu o construí a partir do código-fonte que está funcionando perfeitamente para os nossos aplicativos java.

    
por user53864 08.08.2011 / 16:58

2 respostas

5

O primeiro local em que você deve dar uma olhada é catalina.out , ele informará o que pode estar errado.

Se você não conseguir trabalhar com multicast, tente associação estática (acho que será mais simples) .

Abaixo está minha configuração:

Coloque o nó <Cluster dentro do elemento <Host :

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">         
  <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
        <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                  address="192.168.5.149"
                  port="4000"
                  selectorTimeout="100"
                  maxThreads="6"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
                <Member className="org.apache.catalina.tribes.membership.StaticMember"
                      port="4001"
                      securePort="-1"
                      host="192.168.5.199"
                      domain="staging-cluster"
                      uniqueId="{0,1,2,3,4,5,6,7,8,9}"/>
            </Interceptor>
        </Channel>
        <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
            tempDir="/usr/share/tomcat6/tempdir/"
            deployDir="/usr/share/tomcat6/webapps/"
            watchDir="/usr/share/tomcat6/watchdir/"
            watchEnabled="true"/>
    </Cluster>
  </Host>
</Engine>
  • O atributo address no elemento <Receiver é o IP do nó 1 endereço. (no seu caso é .101)
  • O port está atendendo a mensagens de replicação no nó 1 (4000-4100)
  • O Member's port em <Interceptor está escutando mensagens de cluster no nó 2
  • O Member's host é o endereço IP do nó 2 (.102)

server.xml no nó 2:

    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
        <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                  address="192.168.5.199"
                  port="4001"
                  selectorTimeout="100"
                  maxThreads="6"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
                <Member className="org.apache.catalina.tribes.membership.StaticMember"
                      port="4000"
                      securePort="-1"
                      host="192.168.5.149"
                      domain="staging-cluster"
                      uniqueId="{0,1,2,3,4,5,6,7,8,9}"/>
            </Interceptor>
        </Channel>
        <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
            tempDir="/usr/share/tomcat6/tempdir/"
            deployDir="/usr/share/tomcat6/webapps/"
            watchDir="/usr/share/tomcat6/watchdir/"
            watchEnabled="false"/>
    </Cluster>

Certifique-se de que o Tomcat possa gravar na pasta tempDir e watchDir :

chmod g+w tempDir watchDir
chgrp tomcat tempDir watchDir

Se você não fizer isso, receberá o erro abaixo:

Aug 13, 2011 10:28:33 PM org.apache.catalina.ha.deploy.FarmWarDeployer messageReceived
SEVERE: Unable to read farm deploy file message.
java.io.IOException: Permission denied

Lembre-se de adicionar <distributable/> em webapps/ROOT/WEB-INF/web.xml :

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  ...
  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>
  <distributable/>
</web-app>

Sempre que você copiar um arquivo .war para a pasta watchdir no nó 1, verá algo como o seguinte em catalina.out :

Aug 14, 2011 1:40:58 AM org.apache.catalina.ha.deploy.WarWatcher check
INFO: check cluster wars at /usr/share/tomcat6/watchdir
Aug 14, 2011 1:40:59 AM org.apache.catalina.ha.deploy.FarmWarDeployer fileModified
INFO: Installing webapp[/cas] from /usr/share/tomcat6/webapps/cas.war
Aug 14, 2011 1:40:59 AM org.apache.catalina.ha.deploy.FarmWarDeployer remove
INFO: Cluster wide remove of web app /cas
Aug 14, 2011 1:40:59 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive cas.war

e no nó 2:

Aug 14, 2011 1:40:59 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive cas.war

Boa sorte!

    
por 13.08.2011 / 20:47
1

O endereço multicast funciona se o seu arquivo / etc / hosts contiver o endereço IP da NIC real e não o endereço de loopback 127.0.0.1. O Tomcat seleciona o atributo Receiver.address, que é determinado pelo:

 <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"

O serviço multicast transmitirá o endereço IP associado ao nome do host do servidor. Catalina.out deve mostrar o endereço IP que ele pegou durante a inicialização. Se o endereço de loopback for detectado, os nós do cluster não poderão se comunicar entre si. Um exemplo de retirada de endereço falso no arquivo de log catalina.out que resulta em nenhuma comunicação entre os nós:

INFO: Cluster is about to start
09/08/2013 7:38:14 PM org.apache.catalina.tribes.transport.ReceiverBase bind
INFO: Receiver Server Socket bound to:/127.0.1.1:5000
    
por 09.08.2013 / 15:52