我们有一个在 Tomcat 6(WS2K3 上)上运行的 Web 应用程序,该应用程序每周都会更新一次新版本。目前,我们有一个非常简单的批处理脚本,它每晚都会检查服务器上一个文件夹的内容,如果存在 war 文件,它会关闭 Tomcat 服务,删除旧的应用程序目录和 war 文件,然后我们将新的 war 文件放入其中并再次使服务上线。
虽然这可以正常工作,并且每次部署时我们遇到的停机时间都少于 5 分钟,但不断增长的业务需求迫使我们寻找其他解决方案。
我能想到的最佳解决方案是在 Web 服务器前面放置一个负载均衡器/代理,添加另一个 Web 服务器用于暂存和负载平衡,并在部署期间在负载均衡器配置中禁用其中一个主机,进行部署,然后将所有流量重定向到使用新版本的 Web 服务器等等。
问题:我对这些类型的解决方案没有经验,并且对这些主题了解甚少,如果有人可以在解决方案方面为我指明正确的方向(这是否是实现接近零停机时间和灵活部署的好方法?)或软件名称(免费是最好的,但专有的也可以),我将非常感激。
答案1
首先,您可以使用标准 Tomcat 管理器应用程序从 WAR 重新部署应用程序,而无需停止 Tomcat 本身。停机时间只是部署单个应用程序所需的时间。
但是,为了实现接近零停机时间,您确实需要一个负载平衡器和多个 Tomcat 服务器。带有 mod_proxy/mod_proxy_balancer 或 mod_jk 的 Apache HTTP 服务器是实现此目的的一个很好的免费解决方案。但是,您可以选择如何处理会话 - 您可以在从一台服务器切换到另一台服务器时丢失它们,也可以在服务器之间复制它们(这相当容易配置)。集群和负载平衡的大部分复杂性都围绕着会话处理。