我正在研究 tomcat 的高可用性。
我读到你可以在 Tomcat 中进行集群,作为负载均衡器,你可以使用 Apache http。
我无法理解以下内容:
应该是负载平衡模块的 Apache http 是否应该安装在与 Tomcat 服务器不同的机器上?
例如,如果我有 3 个 tomcat 服务器作为一个集群,应该在所有 3 个服务器中都安装 http 吗?还是在其他服务器?
另外,如果我使用 Linux 工具来实现高可用性,有什么区别?
2 回答
一般来说,没有这样的限制,即 Apache 应该在单独的机器上实现。在实践中,您可能想要这样做。
Apache 可以用作负载均衡器,这样所有的请求都会到达 apache,它会根据策略将查询分派给某个 tomcat(决定何时分派给哪个 tomcat 的算法,例如轮询)。
应该安装一个 apache,它可以与 3 个 tomcat(任意数量的 tomcat)通信。
顺便说一句,它不需要像 Apache 这样的基于软件的负载均衡器,而是您可以使用硬件负载均衡器。
Apache = httpd 它是一个可以接受 http 请求并(除其他外)将它们发送到 tomcat 的 Web 服务器。
Tomcat 也是一个用 Java 编写的 Web 服务器,旨在运行 Java Web 应用程序。
所以整体架构应该如下:
client --> Apache (host a) ________ tomcat1 (host b)
|________ tomcat2 (host c)
|________ tomcat3 (host d)
至于硬件负载均衡器 - 这些是各种制造商的盒子,如 Sisco、F5 等。
希望这可以帮助
要拥有 HA,用户需要始终从他们发出请求的 DNS 名称/IP 地址中获得响应。
有多种方法可以实现这一点,有些甚至不是相互排斥的。
可以说,框中的第一个工具是 DNS 循环。
这是您的 DNS 条目没有单个 IP 地址的地方,而是一个 IP 地址列表。您的 DNS 记录的每个查询都会以不同的顺序返回列表。支持 DNS 循环的客户端浏览器将尝试第一个条目并按顺序回退到其他条目。不支持 DNS 循环的客户端浏览器只会尝试第一个条目。这充当了一种负载平衡器……对于具有 DNS 循环意识的客户端应用程序,您可以获得一种自动故障转移的形式。
框中的下一个工具是负载均衡器,例如 Apache HTTPD 或 Nginix。这些充当客户端看到的前端。它们是状态感知的(希望您将它们配置为),因此它们知道您的哪些 Tomcat 服务器已启动,哪些已关闭,并将客户端请求路由到具有容量且已启动的服务器。
所以如果你想要HA。您首先对 Tomcat 服务器进行集群...这很可能需要集群的会话存储...所以您使用数据库来保存会话存储...然后您将该数据库集群以防故障转移...然后您的但在 Tomcat 实例前面的负载均衡器...然后您添加第二个负载均衡器以防负载均衡器发生故障...然后您使用 DNS 循环在负载均衡器之间进行平衡...
您可以使用 ARP 广播 IP 地址接管来快速替换负载平衡器来代替 DNS 循环,或者除了 DNS 循环...
然后你开始考虑地理冗余......所以你去药房买了一瓶阿司匹林!
在我忘记之前,没有什么说你不能在同一个硬件上做到这一切......只是你冒着进程窃取 CPU/内存/磁盘的风险以及硬件故障的风险。
您可以获得的最基本的弹性 HA 是两台机器,它们都运行数据库集群,都运行 Tomcat 集群,都运行负载均衡器,并且都配置为应用程序 DNS 名称的 DNS 循环条目