负载平衡 IIS 服务器始终保持 60 秒

负载平衡 IIS 服务器始终保持 60 秒

我设置了一个负载均衡器,它后面有两个服务器场,一个有 3 个 Linux 上的 Apache 服务器,另一个有 2 个 IIS 服务器。我在负载均衡器上配置了 2 个相同的虚拟服务,一个指向每个服务器场,并设置为进行无持久性的循环平衡。Apache 服务器按预期工作,但 IIS 服务器将会话保留 60 秒,然后再将下一个请求发送到下一个服务器。

为了演示这一点,我简单地创建了一个显示服务器名称的 HTML 页面。当我转到负载平衡器提供的虚拟地址时,我在 Apache 服务器上按刷新时会看到服务器 1、2、3、1、2、3 等。但是,当我转到指向 IIS 服务器的虚拟地址时,按刷新时我仍然在同一台服务器上。如果我等待 60 秒然后刷新,我会被定向到另一台 IIS 服务器。

我目前使用的负载均衡器来自 Kemp Technologies。但是,在设置 Kemp 之前,我看到使用 HAproxy 时出现完全相同的行为。因此,这似乎是后端服务器上的 Windows 问题,而不是负载均衡器问题。但是我不太明白这是怎么回事,因为应该是负载均衡器决定哪个后端服务器将为请求提供服务。

还有人见过这种行为吗?我可以修改什么来让我的 Windows 服务器以真正的循环方式实现平衡?

编辑 -

IIS 系统上的测试页面运行服务器端 ASP 脚本,使用简单的 ASP 脚本 <%=now()%> 插入当前日期/时间。这使我能够看到这些页面未被缓存,并且在每个请求时都会动态重新生成。这些页面还包含 IIS 主机名,因此我可以知道哪个 IIS 服务器实际生成了呈现的页面。

答案1

是的,您的直觉是正确的——IIS 不可能导致此问题,因为这些设备无法控制请求的路由位置。

您是否确定您的浏览器不是简单地缓存页面,而下一个请求会正确发送到其他服务器并得到304(未修改的)响应?

换句话说 - 您是否使用除浏览器显示的方法之外的方法来验证请求的去向?

答案2

比较网络追踪是证明/反驳这一点并提出原因理论的最佳选择。

最简单的想法:IIS 可能启用了保持活动而 Apache 没有(或者每次都只是关闭连接,无论采用什么机制)...

相关内容