Ubuntu

Farm Deployer 在 Tomcat 集群中不工作

  • August 3, 2014

我已經設置了 apache-tomcat 集群(Ubuntu Server),並且我使用了 tomcat 支持的集群技術和 mod_jk 跟隨連結。我已經設置了一個負載均衡器和兩個 Web 伺服器。

主要問題是部署 WAR 文件以及部署到哪個 Web 伺服器?我了解了 Farmed Deployment,它將戰爭文件部署到集群中的其他 tomcat 伺服器,但我還沒有讓它工作。我以以下方式在兩個 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"/>

網路伺服器 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 錯誤。還有什麼幫助…?還有一件事,我沒有從 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>
  • element 中的address屬性<Receiver是node1 的IP 地址。(在你的情況下是 .101)
  • 正在偵聽節點 1 (4000-4100)上的port複制消息
  • Member's portin正在偵聽節點 2 上<Interceptor集群消息
  • Member's host是節點 2 的 IP 地址 (.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 可以寫入tempDirwatchDir文件夾:

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

祝你好運!

引用自:https://serverfault.com/questions/298886