在分布式服务器上部署 Java Web 应用程序

在分布式服务器上部署 Java Web 应用程序

我必须将我的应用程序部署到三台服务器上,很快会是四台。这变得越来越麻烦,我希望能够实现自动化。我本来打算编写脚本,但这是一个常见的问题,而且有很多工具(Puppet、Chef、Pallet、MCollective),所以我想有人可能已经制定了现成的策略并愿意分享。

我们有 3 台 Web 服务器(很快会有 4 台)。以下是我目前部署的步骤:

登录生产 Web 服务器 1

> service httpd stop
> service tomcat5 stop

登录 QA 服务器

> scp ROOT.war [email protected]:/usr/share/tomcat5/webapps/

但有时它更复杂,我可能需要复制以下任何内容:/etc/httpd/conf.d/mod_jk.conf /etc/tomcat5/context.xml

但是我不能仅仅从 QA 复制 context.xml,因为 QA 和生产中的连接字符串是不同的。

重新启动一切(ROOT.war 转移后)

> service tomcat5 start
> service httpd start

通常,我会部署到服务器 1,进行测试,然后部署到服务器 2 和服务器 3。我喜欢等到服务器 2 准备就绪后再开始部署到服务器 3 - Puppet 可以做到这一点吗(检查 / 的 HTTP 状态)?

那么,我可以让 Puppet 部署服务器 1,然后让它部署并等待服务器 2、服务器 3,以及即将部署的服务器 4 吗?

分阶段推出和轻松回滚可能是我正在寻找的功能。

答案1

我和他们都合作过哈德森卡皮斯特拉诺之前 - 它们都是非常有用的工具,值得研究。Capistrano 可以配置为在部署之前使用 rake 脚本来更新任何连接字符串/路径,这真的很好,我相信 Hudson 会允许您基于正则表达式执行相同的操作。

两者都是为部署过程而设计的,并且非常有用,它们都应该非常具有自我文档化功能:)

答案2

我使用 rake 编写了一个部署脚本,它基本上可以完成您想要的功能。它编写起来非常简单,而且跨平台。Ant 是此类简单部署脚本的另一种选择。但是,如果我可以选择,我会使用 rake。

呼呼!

汤姆·普尔

相关内容