我为我的 webrole 定义了一个自定义 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”响应(服务器不可用)。我可以从负载均衡器中看到自定义 HTTP 标头X-MS-LB-MonitorStatus Down
。
当我使用 Curl 请求访问负载均衡的 url 时,它总是返回正确的结果(如果我将实例设置为返回 503 而不是 200,它不会出现在响应结果中)。
但是,当我使用浏览器(在本例中为 Chrome)时,我仍然可以从应该关闭的实例返回结果(即实例可用,我禁用它,然后对负载平衡 url 的其他调用仍然解析为“禁用”实例)。
我可以使用 trace.axd 信息确认解决每个请求的实际实例
我很难相信天蓝色在这里正确地进行了负载平衡。
- 为什么浏览器继续能够访问一个应该不旋转的实例?
- 为什么 curl “总是做对了”?