Назад | Перейти на главную страницу

Farm Deployer не работает в Tomcat Cluster

У меня настроена кластеризация apache-tomcat (сервер Ubuntu), и я использовал технику кластеризации, поддерживаемую tomcat, с mod_jk после ссылка на сайт. Я установил один балансировщик нагрузки и два веб-сервера.

Основная проблема заключается в развертывании файла WAR и на каком веб-сервере ?. Я узнал о Farmed Deployment, которое развертывает файл войны на другие серверы tomcat в кластере, но у меня он еще не работает. Я использовал средство развертывания фермы, как показано ниже, в элементе на двух веб-серверах.

Веб-сервер 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"/>

Веб-сервер 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"/>

Я поместил WAR в каталог просмотра на веб-сервере 1, но он не развертывается на другом сервере. У кого-нибудь это работает, что-то я делаю не так? Пожалуйста, дайте мне знать !.

Спасибо!

Обновление: 1

Я мог видеть следующую информацию на любой из машин в журналах 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!

Он даже не развертывается на webserver1, а также не на webserver2. Получение ошибки 404 при доступе к сайту. Еще помощь ...?. Еще одна вещь, я не устанавливал tomcat из репозитория apt, но я построил его из исходного кода, который отлично работает для наших приложений Java.

Первое, на что стоит обратить внимание, это 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 element - это IP-адрес узла 1. (в вашем случае - .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>

Всякий раз, когда вы копируете .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

Удачи!

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

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

Служба многоадресной рассылки будет транслировать 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