NLB 如何与 IIS-7 Web 服务协同工作?

NLB 如何与 IIS-7 Web 服务协同工作?

我们将把 2 个 IIS7 Web 服务器加入到 NLB 中,并发布相同的 Web 服务(每个 Web 服务器一个相同 Web 服务的 2 个实例)。

  • 我是否理解正确,NLB 将适用于我的 Web 服务,将 Web 请求委托给一个或另一个实例?
  • 如果某个 Web 服务实例不可用(即开始抛出 SOAP 异常或 HTTP 错误),NLB 将如何工作?
  • NLB 是否会考虑平均 Web 服务响应时间来决定要委派处理的 Web 服务实例?

先感谢您!

答案1

短的: NLB 并不关心

NLB 依赖于所有节点查看所有传入流量,然后每个节点丢弃它不感兴趣的任何流量。这是在应用程序看到流量之前 - 它不是基于应用程序的健康状况,不是基于响应时间,不是基于公平性或排队。

NLB 不给予鼠驴应用程序的问题。用户模式问题包括所以用户模式!

只要网络堆栈能够发送和接收 NLB 广播(或多播!),NLB 就会持续接受流量。

更长:国家法律顾问委员会真的不在乎。

NLB 作为第 2 层 NDIS 过滤器运行,并简单地对所有传入流量运行其哈希算法,并接受与其端口规则匹配的位。

每个节点必须看到全部传入流量(由交换机进行多播/广播),每个节点都会丢弃不符合其哈希标准的数据包。

NLB 是一种统计负载均衡器。不是一个关心他人的。

  • 您的应用程序抛出 500 次错误对它来说并不重要。
  • 它没有意识到你的用户模式监听器进程已经崩溃了。
  • 它没有意识到你的应用程序运行得很慢。

只是没有关心

最佳情况NLB 失败的原因如下(其中之一):

  • 盒子因断电而彻底失效
  • 网线被剪断或拔掉
  • (可能是由吸尘器产生的)
  • (或者 NIC 在火花四溅中爆炸)
  • (或被路过的小偷偷走)
  • (或任何形式的身体的网络中断)
  • 蓝屏

任何这些情况都会阻止网络堆栈处理传入的数据包,并阻止发送“我还活着!”向其他 NLB 节点广播消息,这会导致集群在一小段时间(几秒)内进行内省,找出哪些节点仍然存在,然后重新收敛。

然后,当剩余节点清楚有多少个节点时,它们将再次开始散列,并丢弃任何它们不感兴趣的新数据包。

如果你需要

  • 健康监测,
  • 谨慎地将负载应用于未充分利用的服务器,
  • 和基于响应时间的智能决策

NLB 不是您的解决方案。如果您的应用程序对此没有异议,或者对 NLB 有足够的了解,可以在应用程序层出现问题时运行 NLB STOP,那么可能就没问题了。但很少有应用程序会这样做(ISA/TMG 就是一个例子)。

好像我之前写过这篇文章这里

另眼相看 如果您正在寻找低成本(阅读:免费)的基于 Windows 的解决方案,请考虑使用 IIS 7+ 的应用程序请求路由 - 它具有您正在寻找的大多数健康监控功能。

不过,一般来说,您不会在与应用程序相同的盒子上运行它,并且为了实现可用性,您通常希望在 ARR 下运行 NLB,以将负载均衡器的网络级可用性与该级别的应用层智能相结合。

答案2

  • 编辑后我的答案适用于通用网络负载平衡,而不是微软的 NLB 服务!

答案实际上取决于您的负载均衡器有多复杂。最简单的设置是负载均衡器以循环方式将请求发送到另一个 Web 服务器,并使用 ping 来确定主机是处于启动状态还是关闭状态。

您可以使用更复杂的健康检查,您的负载平衡服务器在放入负载平衡池之前需要通过这些检查。

要执行健康检查,您通常会在 Web 服务器上配置一个页面,该页面依赖于 Web 服务器运行的所有方面。也许一些 php 会在数据库中查找某些内容,然后如果一切正常,则会在屏幕上显示“OK”。然后,您将配置负载均衡器健康检查以查看此页面并确保它显示“OK”

如果健康检查失败,则检查失败的服务器将从池中移除,并且不会向其发送任何流量。如果所有服务器都失败,通常可以让负载均衡器提供暂存页面。

同样,根据负载平衡器的复杂程度,您可以使用各种负载平衡机制。您确实可以根据服务器负载、与服务器的连接数进行负载平衡,您可以让某些服务器比其他服务器接收更多的负载,您可以拥有“粘性”会话,即同一个客户端始终被发送到同一个 Web 服务器。有很多可能性。

相关内容