我们在 IIS 上有一个使用 DNN 构建的 ASP.NET 站点。目前,我们尝试为两台服务器配置网络负载平衡。服务托管提供商告诉我们这已经足够了,但我们似乎遇到了瓶颈:
- 网络负载平衡仅转发来自其公共 IP 的请求,它不会检查服务器的可用性
- 如果服务器出现故障,50% 的请求将看到“服务器不可用”,直到我们手动从负载平衡配置中删除该服务器
- 我找不到一种方法来配置两台服务器而不会出现这个问题
通过三向负载平衡(又称 Web Farm),单个系统会检查哪些服务器可用。如果某个服务器出现故障,它会将请求转发给其他服务器。
上述是否正确假设了网络负载平衡的局限性,从而导致经典的网络场成为唯一的解决方案,或者托管服务提供商是否可以配置某些东西来防止这种行为并让我们只坚持使用两个系统?
答案1
事实上,您已经遇到了 NLB 的一个经典限制。Windows NLB 群集只能检查节点本身是否可用,而无法检查实际应用程序是否仍在运行。最终,您需要的是某种类型的应用程序运行状况检查,这可以通过物理负载平衡器或软件负载平衡器(例如 Microsoft应用程序请求路由 (ARR)。
另一种比较新的替代方案是基于云的负载均衡器,例如Rackspace。这样您就可以享受物理负载均衡器的许多功能,而无需承担实施物理硬件的成本。
希望有所帮助。
编辑:NLB 确实有某种方式可以执行健康检查,但是它仍然需要相当于第三台服务器。System Center Operations Manager 有一个可以监控应用程序的管理包。有关详细信息,请参见这里。如果您不惜一切代价添加这样的功能,您不妨看看能够执行必要健康检查的实际负载均衡器的好处。
答案2
如果您有第三个系统(或两个),它可以根据后端主机的利用率分配负载,它可以检查更高级别(应用程序)的可用性,而不仅仅是网络。这也更容易,因为每个系统只有一个角色,负载平衡器只进行负载平衡,而不必在其上安装任何其他东西,因此出错的可能性更小。
答案3
第三方产品(例如 NetScaler)可以做到这一点,您可以为其添加绑定到 NetScaler 设备内配置的虚拟服务器的服务。设备可以在将负载平衡到服务器之前自动检查应用程序是否可用。无需手动干预。