是否可以在不停止应用程序的情况下部署新的.war应用程序?

Tho*_*ody 5 grails tomcat war

嘿,我是Grails的新手,我想知道部署.将.war部署到生产环境后,如何在不停机的情况下更新应用程序?

Ste*_*ter 7

你可能会和一个Apache创建了两个Tomcat实例mod_proxy_balancer在它的前面,如所描述这里.对于应用程序的重新部署,可能会应用"滚动升级"策略(假设app1和app2是您的两个tomcat实例):

  1. 在Apache的balancer-manager中禁用tomcat @ app1
  2. 将应用程序重新部署到tomcat @ app1
  3. 用app1做一些测试,看看是否一切正常
  4. 在balancer-manager中启用tomcat @ app1
  5. 在balancer-manager中禁用tomcat @ app2
  6. 将应用程序重新部署到tomcat @ app2
  7. 在balancer-manager中启用tomcat @ app2

而且你已经完成了.您不需要多台物理或虚拟机器 - 它也可以在一个盒子上使用.如果应用程序升级意味着数据库更改,请小心.以上内容可以封装在例如gant脚本中,因此简单的"grails cluster-redeploy"可以完成您需要的所有操作.这样的脚本目前在我的列表中,但我不知道何时完成.


lee*_*tts 2

即使您热部署 WAR 文件(通过不重新启动服务器),在上下文重新加载时仍然会出现一些停机时间。这本身并不是 Grails 的事情,而是 J2EE/servlet 的事情。

正如dogbert所说,最好建立一个维护页面(在Tomcat前面使用Apache是​​一个好主意)并关闭应用程序服务器,上传新的WAR然后再次启动服务器。