【问题标题】:Deploy webapps tomcat 7 cluster with FarmWarDeployer使用 FarmWarDeployer 部署 webapps tomcat 7 集群
【发布时间】:2014-08-12 15:18:14
【问题描述】:
我构建了一个有 2 个节点的 tomcat 集群。我将集群部署程序 FarmWarDeployer 配置为监视目录中的战争文件。
如果启动 2 个节点,一切正常:在节点 1 中的监视目录上部署战争会将战争文件发送到节点 2。
但是如果在 node2 宕机的情况下完成 watch 目录中的 war 文件的复制,node2 就不会收到新的 war 文件。
是否有任何配置让节点检查新的war文件并在它启动时接收它?
【问题讨论】:
标签:
java
tomcat
cluster-computing
【解决方案1】:
我不相信这是可能的。据我了解,FarmWarDeployer 会侦听在找到新 WAR 文件或需要取消部署 WAR 时发送的集群消息。如果您的集群中的一个节点出现故障,它将丢失这些消息。
我想你可以在宕机的节点重新启动后运行touch <your-war-file> 并触发另一个部署。或者,由于您有一个小型集群,您可以在重新启动之前手动将 WAR 文件复制到停机节点。然后该节点将在重新启动时保持最新状态。
除此之外,我建议您考虑另一种部署 WAR 文件的方式。一些适用于小型集群的快速建议:
将 WAR 文件复制到共享存储(即安装到两个节点)。向监控共享存储挂载的每个节点添加一个 cron 作业或小型后台任务,当找到新文件时,将其部署(即复制到 webapps 目录)。 不要直接从共享存储部署,那样会自找麻烦。
使用 scp 或类似工具将 WAR 文件复制到您的节点。使用类似的 cron 作业或后台任务来获取上传的文件并进行部署。
对于较大的安装,您可以考虑使用 Puppet、Chef、Ansible 等部署工具或其他类似技术。你真的可以用这些来做一个更小的安装,只是可能有点过分了
【解决方案2】:
我使用下面的配置,rem 嵌套在里面..
(你的集群必须先工作,我使用单播集群)。
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/var/tmp/war-tmp/" deployDir="/usr/local/tomcat8053/webapps/" watchDir="/var/tmp/war-watch/" watchEnabled="true" processDeployFrequency="1" />
为集群中的每个其他节点重复配置,但设置 watchEnabled="false"
然后刷新,即使是重新复制,watchDir中的war文件。给主机节点一些时间,它将部署然后部署到其他节点。
对于 prod,可能需要设置 processDeployFrequency="2" 以减少观看频率。
希望这对某人有所帮助。