Azure LoadBalancerProbe Responses being ignored



我已经为我的网络角色定义了一个自定义的LoadBalancerProbe,如下所示

<?xml version="1.0" encoding="utf-8"?> <ServiceDefinition name="CloudService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2013-03.2.0"> <LoadBalancerProbes> <LoadBalancerProbe name="MyProbe" protocol="http" intervalInSeconds="15" path="/api/ping" port="80" timeoutInSeconds="30" /> </LoadBalancerProbes> <WebRole name="TestApp" vmsize="Small"> <Sites> <Site name="Web"> <Bindings> <Binding name="Endpoint1" endpointName="Endpoint1" /> </Bindings> </Site> </Sites> <Endpoints> <InputEndpoint name="Endpoint1" protocol="http" port="80" localPort="80" loadBalancerProbe="MyProbe"/> </Endpoints> <Imports> <Import moduleName="Diagnostics" /> <Import moduleName="RemoteAccess" /> <Import moduleName="RemoteForwarder" /> </Imports> </WebRole> </ServiceDefinition>

在 Azure 中时,我有 2 个实例。我已经启用了trace.axd,可以看到负载均衡器调用ping方法,所以这肯定会发生。

当我希望我的实例显示为关闭时,我还可以在测试应用程序中看到我的"503"响应(服务器不可用)(我更改了实例上的配置设置)。我可以从负载均衡器X-MS-LB-MonitorStatus Down中看到自定义 HTTP 标头。

当我使用 Curl 请求访问负载均衡的 url 时,它总是返回正确的结果(如果我将实例设置为返回 503 而不是 200,它不会出现在响应结果中)。

但是,当我使用浏览器(在本例中为 Chrome)时,我仍然可以从应该关闭的实例中获取结果(即实例可用,我禁用它,然后对负载平衡 url 的其他调用仍然解析为"禁用"实例)。

我可以使用 trace.axd 信息确认解决每个请求的实际实例

我很难相信 azure 在这里正确地进行了负载平衡。

  1. 为什么浏览器继续能够访问据称不轮换的实例?
  2. 为什么卷发"总是做对"?
Azure 负载均衡器

是第 3 层负载均衡器,仅对新的传入 TCP 连接进行负载均衡。 它对HTTP流量一无所知。

通常,浏览器将建立 TCP 连接,并将保持活动状态设置为 true,并将该 TCP 连接保持打开状态一段时间,并且对网站的任何后续请求都将只是通过现有 TCP 连接的 HTTP 流量。 curl 等应用程序通常会在每次请求后关闭 TCP 连接。

因此,在你的情况下,Azure 负载均衡器的行为正常,但你的浏览器已与未轮换的实例建立了 TCP 连接,因此将来的 HTTP 请求仍将转到相同的非轮换实例。

要验证这是正在发生的事情,您可以在客户端或服务器端使用 netmon/wireshark。

要解决此问题,您有以下几种选择:

    空闲
  1. 4 分钟后,连接将终止您的浏览器应该建立一个新的 TCP 连接并获得路由到轮换的实例。
  2. 关闭所有浏览器窗口并重新打开浏览器应建立新的TCP连接。
  3. 在服务器端,可以将保持活动状态设置为 false,这将终止 Azure 实例上的 TCP 连接。

有关更多信息,请参阅 http://blogs.msdn.com/b/kwill/archive/2013/02/28/heartbeats-recovery-and-the-load-balancer.aspx 的第三次问答。

根据这篇博客文章(2014 年),Azure 使用第 4 层负载均衡器:http://azure.microsoft.com/blog/2014/04/08/microsoft-azure-load-balancing-services/

因此,它可以响应和监视 HTTP 200 和 503。

相关内容

  • 没有找到相关文章

最新更新