web-dev-qa-db-ja.com

FarmDeployerがTomcatクラスターで機能しない

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アプリで完全に機能するソースから構築しました。

2
user53864

最初に確認する必要がある場所は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はクラスターメッセージをリッスンしていますノード2
  • Member'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

幸運を!

5
quanta

マルチキャストアドレスは、/ 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
1
Said Ali Samed