Apache-Tomcatクラスタリング(Ubuntuサーバー)をセットアップし、 link に続いてmod_jkでTomcatがサポートするクラスタリング手法を使用しました。 1つのロードバランサーと2つのWebサーバーを使用してセットアップしました。
主な問題は、WARファイルとどのWebサーバーにデプロイするかです。クラスター内の他のTomcatサーバーにwarファイルをデプロイするFarmedDeploymentについて知りましたが、まだ機能していません。 2つのWebサーバーの要素で、以下の方法でファームデプロイヤーを使用しました。
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"/>
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"/>
WARをWebサーバー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エラーが発生します。これ以上の助け...?もう1つ、aptリポジトリからTomcatをインストールしませんでしたが、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>
<Receiver
要素のaddress
属性は、node1のIPアドレスです。 (あなたの場合は.101です)port
はレプリケーションメッセージをリッスンしていますノード1(4000-4100)Member's port
の<Interceptor
はクラスターメッセージをリッスンしていますノード2Member's Host
はノード2(.102)のIPアドレスです。ノード2のserver.xml
:
<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
ファイルをノード1のwatchdir
フォルダーにコピーすると、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ファイルに実際のNIC 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