只能用tomcat做负载均衡器(不带Apache Http Server)
Posted
技术标签:
【中文标题】只能用tomcat做负载均衡器(不带Apache Http Server)【英文标题】:Can only tomcat be used as a load balancer(without Apache Http Server) 【发布时间】:2012-08-01 07:55:30 【问题描述】:背景:在我的应用程序中,我使用 ServiceMix 实例来处理 HTTP 请求。为了对这些进行负载平衡,我们发现(根据某些要求)我们需要使用 Tomcat。
问题:我觉得应该说tomcat内置了自己的http服务器,可以用Tomcat和mod_jk(没有Apache Http Server)做负载均衡吗?
我的阅读材料:我阅读了一些 Tomcat 文档,例如 Tomcat Clustering doc , Tomcat JK load balancer(这不是很有帮助)
所以我想知道是否可以仅使用 Tomcat 和 mod_jk 来实现负载平衡!!
感谢任何帮助。
【问题讨论】:
【参考方案1】:要对您的应用程序进行负载平衡,您需要使用同一个应用程序运行两个或多个 Tomcat 实例。您可以在同一台机器上的不同端口(例如 www.myapp.com:8080 和 www.myapp.com:9090)上或在同一端口上的不同机器上运行两个实例(例如 www1.myapp.com:8080 和 www2. myapp.com:8080)。通常这些实例共享相同的后端数据存储。每个 Tomcat 都有自己的网络服务器,因此您将运行多个网络服务器。
因为您现在有两个相同的实例,所以用户可以使用这两个实例中的任何一个。如果他们当前使用的机器出现问题,他们也可以从一个切换到另一个。但是您不希望您的用户必须手动选择机器或交换。这就是负载均衡器的用武之地。
负载平衡器接收来自用户的请求并将其动态路由到您的负载平衡实例之一。负载均衡器也是一个 Web 服务器。它可以是像 BIG-IP F5 这样的硬件负载均衡器,也可以是像 Apache、nginx 甚至另一个 Tomcat 服务器这样的软件。
如果您使用 Apache Web 服务器进行负载平衡,您需要一个 Apache 模块将请求传递到您的 Tomcat 服务器之一。通常这是 mod_jk 或 mod_proxy。
所以简短的回答是,如果您使用 Apache 作为负载均衡器,那么您必须使用 mod_jk(或 mod_proxy)。如果您使用其他负载均衡器,则不能使用 mod_jk。
另请参阅Tomcat load balancer solutions
【讨论】:
感谢大家的回复。引用@leonm 的回答:它可以是像 BIG-IP F5 这样的硬件负载均衡器,也可以是像 Apache、nginx 甚至另一个 Tomcat 服务器这样的软件。我正在寻找您建议的第三个软件选项(另一个 Tomcat 服务器)。想知道这怎么可能。【参考方案2】:mod_jk 在 apache httpd 服务器或其他一些用本机代码编写的服务器中运行,这里有一些可以使用的配置。
-
带有 mod_jk 负载的 Apache httpd 或 IIS 平衡对 tomcat 服务器的请求
可以使用具有反向代理支持和负载平衡功能的 Web 服务器
可以使用专用的负载均衡器产品
对于负载平衡,您需要确定天气是否需要粘性会话路由。
此外,您无需配置 tomcat 集群会话管理器即可配置和使用负载平衡。
我相当肯定 tomcat 本身的 java 部分没有附带内置的负载均衡器,它希望用户使用上述选项之一。
【讨论】:
以上是关于只能用tomcat做负载均衡器(不带Apache Http Server)的主要内容,如果未能解决你的问题,请参考以下文章