Tomcat 7.0 Clustering FarmWarDeployer 不起作用

Tomcat 7.0 Clustering FarmWarDeployer 不起作用

我目前正在为 Q&A 开发一个 Tomcat 集群,但不幸的是,似乎这个集群中的战争自动部署根本不起作用。

我知道集群运行正常,因为每台服务器都正确接收多播通信,并能立即意识到任何丢失的主机。

这里的问题来自 FarmWarDeployer 函数,它似乎不起作用。

确实,当我使用 tomcat 管理器或简单的 SFTPd 推送在集群的 node1 上上传 war 时,war 会被 node1 解压并使用,但不会发送到我的 node 2。相反,我的 node1 说:

警告:管理器 [localhost#/APPTest##1.0.0]:未在 2012 年 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 专家。

因此,如果有什么错误或遗漏,请告诉我 ;-)

答案1

FarmWarDeployer 只能在主机级集群上配置。集群设置移至<Host>...</Host>。它对我有用。

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

答案2

您的 watchDir 和 deployDir 不应位于同一位置。当 tomcat 发现更改时,它将尝试下载此更改,并且由于没有即时内容,因此流将不完整。这将导致您在 war 部署中看到的错误。如果您尝试将 war 直接 scp 到 deploy 目录,可能会复制相同的场景。您首先需要在服务器上进行暂存,然后进行部署。

尝试为 watchDir 参数添加另一个目录,然后尝试部署到该目录,所有节点都应选择该目录。

相关内容