我们有一个在 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 应用程序上传文件。
- 在我们当地的办事处安装一个可以处理 20 个客户端的网络服务器?(我们实际上不想进行服务器维护。)
- 将每个客户端连接到 WAN,以便每个客户端都有自己的 IP 地址?(对于 IPv4 来说不安全且不可行,对于 IPv6 来说可能可行。)
- 看看我们的网络主机是否可以配置负载均衡器以使用基于 DNS 的负载平衡?(这能解决我们的问题吗?DNS 缓存将驻留在哪里?)
- 看看我们的网络主机是否可以配置负载均衡器以使用 HTTP cookie 进行负载平衡?(如果节点具有静态 IP 地址,这可能是最好的解决方案。)
- 另一个解决方案是……
答案1
选项 4 是“最简单的”,因为它意味着 (1) 不需要新服务器,且 (2) 网络上不需要重新配置 IP。
DNS 可以工作(您说的是 DNS 循环,对吧?)但可能比基于 cookie 的负载平衡工作量更大。我会与您的主机讨论一下。
另一种方法是在防火墙上设置多 NAT,以便内部客户端分布在几个外部 IP 上。从概念上讲,您可以将其视为反向负载平衡器。
但是,您的客户数量准确吗?20 个客户会让您的 Web 应用程序超负荷吗?也许您应该解决您的应用程序无法处理那么多客户的问题。如果您对您的应用程序一无所知,那么 20 个客户似乎太少了。但我可能错了。:)
第三种选择:您的应用是否需要粘性?如果您的客户端可以毫无问题地从一个 Web 服务器跳转到另一个 Web 服务器,那么请忘记每个 IP 的负载平衡,并执行每个连接的循环或每个连接的最少连接。