У меня настроена кластеризация 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
слушает сообщения кластера на узле 2Member'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