Устройство развертывания фермы, не работающее в Кластере Tomcat

Два других канала данных для малого бизнеса могут излишество. Задание конечных пользователей требует, чтобы они активно использовали сеть? Если не T1 довольно достаточен.

2
задан 15 August 2011 в 07:12
2 ответа

Первое местоположение, на которое необходимо смотреть, catalina.out, это скажет Вам, что могло бы быть неправильным.

Если Вы не можете сделать это работами с многоадресной передачей, просто попробуйте статическое членство (я думаю, что это будет более простой).

Ниже моя конфигурация:

Поместите <Cluster узел в <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>
  • address атрибут в <Receiver элемент является IP-адресом node1. (в Вашем случае.101),
  • port прислушивается к сообщениям о репликации на узле 1 (4000-4100)
  • Member's port в <Interceptor прислушивается к кластерным сообщениям на узле 2
  • Member's host IP-адрес узла 2 (.102)

server.xml на узле 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>

Удостоверьтесь, что Tomcat может записать в tempDir и watchDir папка:

chmod g+w tempDir watchDir
chgrp tomcat tempDir watchDir

Если Вы не сделаете этого, то Вы доберетесь ниже ошибки:

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

Не забудьте добавлять <distributable/> в 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>

Каждый раз, когда Вы копируете a .war файл в watchdir папка на узле 1, Вы будете видеть что-то как следующее в 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

и на узле 2:

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

Удачи!

5
ответ дан 3 December 2019 в 09:23

Многоадресный адрес работает, если ваш файл / etc / hosts содержит фактический IP-адрес сетевого адаптера, а не адрес обратной связи 127.0.0.1. Tomcat выбирает атрибут Receiver.address, который определяется службой:

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

Multicast будет транслировать IP-адрес, связанный с именем хоста сервера. Catalina.out должен показать, какой IP-адрес был получен при запуске. Если адрес обратной связи обнаружен, узлы кластера не смогут взаимодействовать друг с другом. Пример подбора ложного адреса в файле журнала catalina.out, который приводит к отсутствию связи между узлами:

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
1
ответ дан 3 December 2019 в 09:23

Теги

Похожие вопросы