在 Tomcat 中水平扩展 Web 应用程序(负载平衡/集群)

Bar*_*ler 4 cluster tomcat web-server load-balancing haproxy

我开发了一个简单的 REST 风格的 Web 应用程序,由 2 个基本模块组成。

模块#1:服务器暴露 REST Web 服务,无状态,部署在 Tomcat 中
模块#2:REST 客户端

有一个部署了 Module#1 的 Tomcat 实例。

我想水平扩展它并在第二台机器上运行第二个 Tomcat。在负载平衡/集群方面,我是一个完整的新手,这就是我需要帮助的原因。不需要会话复制和故障转移。

我应该如何处理它?

我做了一项研究,这些是我看到的可能的方法:

1.无集群,无第三方代理。

我在第二台机器上运行第二个 Tomcat。由于我可以控制客户端和服务器,我可以在客户端提供一个非常基本的算法并随机选择一个主机,这将在 API 调用之前选择。不需要配置集群,也不需要提供第三方代理。是否有任何潜在的陷阱?这是正确的方法吗?

2.Tomcat集群

说到Tomcat集群配置,是不是说有2个Tomcat在单独的机器上运行,并且他们的配置说它们是一个集群?我需要一个单独的库,工具吗?Tomcat 就够了吗?我会像第一种方法一样运行 2 个进程吗?

3.Tomcat负载均衡器

Tomcat集群和Tomcat负载均衡器有什么区别?再次,我需要一个单独的库,工具吗?Tomcat 就够了吗?

4. 第三方代理

我找到了一些关于 HAProxy 之类的信息。这是否意味着,所有调用都经过它,代理决定选择哪个主机?这是否意味着除了两个Tomcat进程之外还会有第三个单独运行?假设我在两台不同的机器上有 2 个 Tomcat,这个代理在哪台机器上运行?

我应该选择哪一个?我误解了什么吗?文章,答案表示赞赏。

Fed*_*rra 5

首先,您已经看到了负载平衡(无集群)和带有复制的集群这两个选项之间的差异。

聚类具有正式意义。集群是一组试图实现共同目标并相互了解的资源。集群通常涉及设置资源(通常是服务器)以在特定通道(端口)上交换详细信息并不断交换它们的状态,因此资源的状态也会在其他地方复制。它通常还包括负载均衡,其中,根据负载均衡策略将请求路由到集群中的资源之一。

集群架构用于解决以下一个或多个问题:

  • 单个服务器无法有效处理大量传入请求
  • 有状态应用程序需要一种在其服务器出现故障时保留会话数据的方法
  • 开发人员需要能够在不中断服务的情况下对其应用程序进行配置更改或部署更新。

集群架构使用负载平衡、多服务器处理平衡负载和会话复制的组合来解决这些问题。
在您的情况下不需要会话复制,为此我认为集群配置不是您需要的方法。

文档Apache Tomcat - 集群/会话复制 HOW-TO

当我们有多个具有相同设置但除此之外彼此不知道的独立服务器时,也可以在没有集群的情况下进行负载平衡。然后,我们可以使用负载均衡器将请求转发到一台服务器或另一台服务器,但一台服务器不使用另一台服务器的资源。此外,一种资源不与其他资源共享其状态。

负载均衡器的基本特性是能够根据调度算法将传入请求分发到集群中的多个后端服务器上。

在这两种架构上,您都需要实现负载均衡器的东西,为此,一种选择是使用Apache HTTP Server

tomcat负载均衡器

要在 Apache Http Server 中实现负载均衡器,您有一些选择:

  • 使用 JK native connector
  • 使用 Apache HTTP mod_proxy

参考: