Linux

Tomcat 7.0 集群 FarmWarDeployer 不工作

  • March 31, 2015

我目前正在開發一個用於問答的 Tomcat 集群,但不幸的是,跨該集群自動部署戰爭似乎根本不起作用。

我知道集群執行良好,因為每台伺服器都正確接收多播通信,並且立即知道任何失去的主機。

這裡的問題來自 FarmWarDeployer 似乎不起作用的功能。

實際上,當我在集群的 node1 上使用 tomcat 管理器或簡單的 SFTPd 推送上傳戰爭時,戰爭被解包並由 node1 使用,但是,它沒有發送到我的節點 2。相反,我的 node1是說:

警告:經理

$$ localhost#/APPTest##1.0.0 $$:沒有上下文管理器在 12 年 9 月 14 日下午 5:21 發送,在 103 毫秒內收到。

我的node2聲稱:

警告:上下文管理器不存在:localhost#/APPTest##1.0.0

好吧,如果我在 node2 上手動推送應用程序,我的 APPTest 已正確設置標籤,並且集群正在正確接收會話。

所以,關於我,問題來自我的 FarmWarDeployer 設置,它們是:

103     <Engine name="Catalina" defaultHost="localhost">
104
105
106
107         <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
108                  channelSendOptions="8">
109
110           <Manager className="org.apache.catalina.ha.session.DeltaManager"
111                    expireSessionsOnShutdown="false"
112                    notifyListenersOnReplication="true"/>
113
114           <Channel className="org.apache.catalina.tribes.group.GroupChannel">
115             <Membership className="org.apache.catalina.tribes.membership.McastService"
116                         address="224.0.0.1"
117                         port="45564"
118                         frequency="500"
119                         dropTime="3000"/>
120             <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
121                       address="auto"
122                       port="4000"
123                       autoBind="100"
124                       selectorTimeout="5000"
125                       maxThreads="6"/>
126
127             <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
128               <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
129             </Sender>
130             <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
131             <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
132           </Channel>
133
134           <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
135                  filter=""/>
136           <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
137
138           <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
139                     tempDir="/opt/tomcat/temp/"
140                     deployDir="/opt/tomcat/webapps/"
141                     watchDir="/opt/tomcat/webapps/"
142                     watchEnabled="enable"/>
143
144           <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
145           <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
146         </Cluster>
147
148       <Realm className="org.apache.catalina.realm.LockOutRealm">
149         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
150                resourceName="UserDatabase"/>
151       </Realm>
152
153       <Host name="localhost"  appBase="webapps"
154             unpackWARs="true" autoDeploy="true">
155       </Host>
156     </Engine>

關於我,測試集群沒有什麼太奇怪的地方,但我絕對不是 tomcat 專家。

所以,如果有什麼問題或遺漏,請告訴我 ;-)

FarmWarDeployer 只能在主機級集群進行配置。集群設置移入<Host>...</Host>. 它對我有用。

https://tomcat.apache.org/tomcat-7.0-doc/config/cluster-deployer.html

您的 watchDir 和 deployDir 不應位於同一位置。當 tomcat 看到更改時,它會嘗試下載它,並且會有一個不完整的流,因為沒有什麼是即時的。這將導致您在戰爭部署中看到的錯誤。如果您嘗試將戰爭直接發送到部署目錄,則可以複製相同的場景。您首先需要在伺服器上進行暫存,然後再進行部署。

嘗試為 watchDir 參數添加另一個目錄,然後嘗試部署到該目錄,所有節點都應該選擇它。

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