我们在 NLB 群集中的多个节点上运行 IIS7。NLB 节点设置为 Affinity:None,以便新连接分布在它们之间。我们希望启用 KeepAlive,以便获得更好的性能,但我们发现,当群集中的一个节点消失时,其所有流量都会转移到其他节点,但永远不会返回。虽然我们正在运行 Web 服务,但只有少数客户端执行 CPU 密集型任务,因此我们发现一台服务器将受到严重影响,而另一台服务器则无所事事!
我们希望使用类似 Apache 的 MaxKeepAliveRequests 之类的功能来限制给定连接上的请求数量,以便 IIS 定期强制客户端重新连接,从而平衡集群。
这是 IIS7 支持的功能吗?这是“普通”人会做的事情吗?
答案1
如果它是一个真正的无状态会话,您可以使用以下方法在 IIS7 中完全禁用 KeepAlive:
appcmd set config /section:httpProtocol /allowKeepAlive:false
如果大部分工作仅由少数客户端完成,则这不会增加大量开销。不过,请务必先进行测试。
答案2
我找不到合适的解决方案,所以自己写了个解决方案。我记录了 IIS 和 NLB 中的配置设置。本文提供了实现 MaxKeepAliveRequests 设置所需的 HTTP 模块代码,以确保没有客户端一直粘在 NLB 群集中的同一个节点上。
使用 IIS 和 MaxKeepAliveRequests 在 NLB 之间实现连接平衡