我目前正在为 Q&A 开发 Tomcat 集群,但不幸的是,似乎在该集群中自动部署 war 根本不起作用。
我知道集群运行良好,因为每台服务器都正确接收多播通信,并立即意识到任何丢失的主机。
这里的问题来自 FarmWarDeployer 函数,它似乎不起作用。
实际上,当我使用 tomcat 管理器或简单的 SFTPd 推送在我的集群的节点 1 上上传战争时,战争被节点 1 解压缩并使用,但是,它没有发送到我的节点 2。相反,我的节点 1是说:
警告:管理器 [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 专家。
所以,如果有什么问题或遗漏,请告诉我 ;-)
您的 watchDir 和 deployDir 不应位于同一位置。当 tomcat 看到更改时,它会尝试下载此更改,但由于没有任何内容是即时的,因此会有一个不完整的流。这将导致您在战争部署中看到的错误。如果您尝试直接将 war scp 到部署目录,则可以复制相同的场景。您首先需要在服务器上暂存而不是部署。
尝试为 watchDir 参数添加另一个目录,然后尝试部署到该目录,所有节点都应该选择它。
FarmWarDeployer 只能在主机级别集群配置。集群设置移动到
<Host>...</Host>
. 它对我有用。https://tomcat.apache.org/tomcat-7.0-doc/config/cluster-deployer.html