【发布时间】:2013-01-07 05:16:16
【问题描述】:
我正在尝试使用 主动/被动 方法使我的应用程序具有高可用性。我目前将应用程序部署在 Tomcat 服务器上,该服务器可以托管在 Windows 或 Linux 平台上。
所以,现在我将它部署在两台 Tomcat 服务器上。每台服务器都在单独的机器上运行。我通过 Tomcat 配置将 Tomcat 配置为同一个集群,这给了我会话复制(存储在数据库中)。我使用一些网络服务器/负载平衡器来重定向请求(尚未决定)。
问题在于应用程序不能同时在两个 Tomcat 上运行,因为它当前是有状态的(而且使它成为无状态的成本太高)。我实际上只需要 一个 Tomcat 将同时启动。或者,至少,Tomcat 上只会启动一个应用程序。
综上所述,我需要一款能够:
- 通过 HTTP 请求识别应用程序的无效状态(机器/Tomcat 已关闭或应用程序无响应);
- 当其他应用程序被识别为无效时,在 Tomcat 上启动 Tomcat 实例或应用程序;
- 当 Tomcat 实例或应用程序被识别为无效时,停止 Tomcat 实例或应用程序。
- 同时支持 Linux 和 Windows 平台...
这个产品可以是在我们的 JVM 上使用的库,它可以是单独的监控进程,驻留在 Tomcat 机器上并相互通信并与 Tomcat 通信,它可以使用我们的数据库。它可能使用网络服务器机器...
我搜索了现成的产品 (Pacemaker/CoroSync/keepalived),它们都不支持 Windows(据我了解)。
【问题讨论】:
-
在stackoverflow.com/questions/11465714/tomcat-webapp-failover 上查看我的答案 - 可能会解决您的问题
-
可能是查看可集群应用程序服务器的一个很好的理由,其中节点相互了解。 Glassfish 3.1.2 可能在开源版本中可供您使用。
-
@ThorbjørnRavnAndersen 希望您没有在这里阅读我自己的答案 :)(那里有很多字)。无论如何,有趣的是,Glassfish 支持集群,但更换我们的服务器是不可接受的。谢谢。
-
我做到了。为了让 Tomcat 做一些它原本不打算做的事情,做了大量工作。
-
@ThorbjørnRavnAndersen 和我哭了。但是,如果我们的服务是无状态的,我们只需将其全部激活并快乐地睡觉。