我的数据中心有以下设置。
全局 LB --> HA 代理(通过 VRRP 在不同的服务器上部署 2 个实例,执行 HTTPS 终止,充当反向代理)---> Nginx(不同服务器上部署 2 个实例,通过 HA 代理以循环方式进行负载平衡,充当反向代理并在 tomcat 之间进行负载平衡)---> tomcat(2 个实例,由每个 Nginx 进行负载平衡)
场景如下:
全局负载均衡器每秒接收 100 个 HTTPS 请求。它将这 100 个请求转发到 HA 代理。HA 代理执行 HTTPS 终止并将每秒 50 个 http 请求负载平衡到每个 nginx。每个 Nginx 每秒将 25 个请求转发到两个 tomcat 实例。
我的问题涉及机上请求的三个部分:
- Nginx 故障恢复:在上述场景中,nginx 充当反向代理,将请求负载均衡到两个 tomcat 服务器上。假设 nginx 所在的机器宕机了,是否会导致 50 个请求失败?因为两个 tomcat 服务器只能将响应转发给 nginx,但那个 nginx 宕机了。
- 从 HAProxy 故障中恢复:已终止 100 个 https 连接的 HAProxy 死亡。被动 HAProxy 将变为主动 HAProxy,但 https 连接不会迁移到新的主动 HAProxy。在这种情况下会发生什么?这会导致所有 100 个请求丢失吗
- 从 tomcat 故障中恢复:如果 tomcat 每秒有 25 个请求失败,那么这 25 个请求是否会转移到第二个 tomcat 实例?
有没有办法配置堆栈,以便 pts 1 和 pts 2 中的故障不会导致请求失败?
答案1
最明智的方法是让您的应用程序了解堆栈并让它处理任何故障。
答案2
在所有情况下,超时期间平衡的连接将会丢失(请注意,丢失的连接数将根据检查期间内故障实际发生的时间点而有所不同)
浏览器(或您的客户端应用程序)需要重新建立 https 和/或重试断开的连接。(请不要忘记,客户端和服务器之间的任何一点都可能中断连接,甚至用户关闭浏览器/ PC 时也可能中断连接)
总体而言,这对用户来说应该是透明的,但当重新请求给定的 URL 时,Web 服务器应用程序应避免重复相同的事务,这很简单,例如通过传递唯一的事务 ID。无论如何,这都是很好的做法。