为 NAT 后面的客户端提供有效的负载平衡

为 NAT 后面的客户端提供有效的负载平衡

我们有一个在 Web 服务器云上运行的 Web 应用程序。晚上,我们主要在本地办公室使用该 Web 应用程序,该办公室使用 NAT 将多台机器连接到互联网。对 Web 应用程序的请求从客户端 PC 发出,通过 NAT,通过互联网,通过负载平衡器,然后到达云中的节点。负载平衡器使用源 IP 持久性。下面简单说明了我们的情况。

云 <--> 负载均衡器 <--> INTERNET <--> NAT <--> 20 个客户端

由于 LB 使用源 IP 持久性,因此所有客户端的所有 Web 请求都会到达云中的同一节点。这当然是由于 NAT 确保每个 TCP/IP 数据包都包含相同的源 IP。

由于所有请求都经常命中云中的同一个节点,因此该节点会产生 503 错误:http://www.checkupdown.com/status/E503.html,因为节点的连接数过多。

这个问题的最佳解决方案是什么?请注意,我们无法控制负载均衡器和云中的节点。我们只有 shell 访问权限才能为我们的 Web 应用程序上传文件。

  1. 在我们当地的办事处安装一个可以处理 20 个客户端的网络服务器?(我们实际上不想进行服务器维护。)
  2. 将每个客户端连接到 WAN,以便每个客户端都有自己的 IP 地址?(对于 IPv4 来说不安全且不可行,对于 IPv6 来说可能可行。)
  3. 看看我们的网络主机是否可以配置负载均衡器以使用基于 DNS 的负载平衡?(这能解决我们的问题吗?DNS 缓存将驻留在哪里?)
  4. 看看我们的网络主机是否可以配置负载均衡器以使用 HTTP cookie 进行负载平衡?(如果节点具有静态 IP 地址,这可能是最好的解决方案。)
  5. 另一个解决方案是……

答案1

选项 4 是“最简单的”,因为它意味着 (1) 不需要新服务器,且 (2) 网络上不需要重新配置 IP。

DNS 可以工作(您说的是 DNS 循环,对吧?)但可能比基于 cookie 的负载平衡工作量更大。我会与您的主机讨论一下。

另一种方法是在防火墙上设置多 NAT,以便内部客户端分布在几个外部 IP 上。从概念上讲,您可以将其视为反向负载平衡器。


但是,您的客户数量准确吗?20 个客户会让您的 Web 应用程序超负荷吗?也许您应该解决您的应用程序无法处理那么多客户的问题。如果您对您的应用程序一无所知,那么 20 个客户似乎太少了。但我可能错了。:)


第三种选择:您的应用是否需要粘性?如果您的客户端可以毫无问题地从一个 Web 服务器跳转到另一个 Web 服务器,那么请忘记每个 IP 的负载平衡,并执行每个连接的循环或每个连接的最少连接。

相关内容