在重新部署期间自动将Web应用程序请求重定向到不同的JBoss实例

时间:2013-03-01 21:37:26

标签: java-ee web-applications deployment jboss failover

我想解决的一般问题是: “如何重新部署Web应用程序,而无需用户在升级到新版本时停止使用该应用程序”。 我想出了解决方案的假设情景:

  1. Web应用程序的生产环境具有已配置的Web服务器 (IIS或者Apache)并且将运行2相同的配置 JBoss实例。

  2. 首先,Web Server将所有请求重定向到一个 JBoss实例,运行我们的Web应用程序的当前版本。

  3. 新版本的网络应用已准备好部署到制作中。

  4. 我们将新版本部署到第二个JBoss实例(第一个实例 仍在运行旧版web应用程序)

  5. 然后,我们以某种方式配置Web服务器以将所有新HTTP会话重定向到第二个 带有新版web应用程序的JBoss实例。

  6. 当前活动会话仍会重定向到“旧”JBoss实例,直到用户注销或会话过期。

  7. 对于另一个版本重新部署,我们遵循相同的过程(但在保留第二个运行旧版本的同时部署到第一个实例)。

  8. 目前我不知道这种情况是否有意义,我在Google主题上的搜索总是以JBoss群集配置结束,在我看来,由于我们对群集HA的需求不高,我认为这是一个过冲解决方案(至少现在),编写应用程序时没有任何集群支持,这可能是一个真正的问题。

    请给我一些关于这个主题的提示。如果有人解决了类似的问题,我也会非常感激。关于我是否遗漏了本说明书中的内容的任何建议也是可取的。

1 个答案:

答案 0 :(得分:2)

首先,您要求的是高可用性方案 - 应用程序升级期间的高可用性。您提供的步骤实际上看起来不错。看来你已经对它进行了大量的思考。但关键是如何做第5步和第6步。

我不知道是否有任何Web服务器能够按照您的要求执行操作,但是F5等负载均衡器应该可以解决问题。在负载均衡器中,您可以配置服务器池。让我们说一开始,池中只有一台服务器(服务器1)服务于请求。然后将服务器2添加到池中。应使用升级应用程序部署服务器2。然后,您指示负载均衡器不向服务器1发送新请求,但保持与所有现有用户的连接。所有新请求都转到服务器2.在服务器1上完成所有旧会话后,您将其从池中取出。