导出 (0) 打印
全部展开

LoadBalancerProbe 架构

更新时间: 2014年2月

负载平衡器探测是客户对 UDP 终结点和角色实例中的终结点定义的运行状况探测。LoadBalancerProbe 不是一个独立的元素;它与服务定义文件中的 Web 角色或辅助角色相结合。一个 LoadBalancerProbe 可供多个角色使用。

服务定义文件的默认扩展名为 .csdef。

Azure 负载平衡器负责将传入流量路由到你的角色实例。负载平衡器通过定期探测每个实例,确定哪些实例可收到流量,从而确定该实例的运行状况。负载平衡器每分钟多次探测每个实例。有两个不同的方法可向负载平衡器提供实例运行状况 - 默认负载平衡器探测或通过在 .csdef 文件中定义 LoadBalancerProbe 而实现的自定义负载平衡器探测。

默认负载平衡器探测利用虚拟机内的来宾代理进行侦听,并仅在实例处于“就绪”状态(即实例不处于“繁忙”、“正在回收”、“正在停止”等状态)时响应 HTTP 200(正常)。如果来宾代理未能响应 HTTP 200(正常),则 Azure 负载平衡器将实例标为无响应,并停止向该实例发送流量。Azure 负载平衡器将继续 ping 实例,如果来宾代理响应 HTTP 200,则 Azure 负载平衡器将再次向该实例发送流量。当使用 Web 角色时,你的网站代码通常在 w3wp.exe 中运行,而 Azure 构造或来宾代理不监视该文件,这意味着将不向来宾代理报告 w3wp.exe 中的故障(例如,HTTP 500 响应),并且负载平衡器将不知道要让该实例脱离轮换。

自定义负载平衡器探测替代默认来宾代理探测,并使你可创建自己的自定义逻辑以确定角色实例的运行状况。负载平衡器将定期探测终结点(默认情况下每 15 秒一次),如果实例在超时期(默认为 31 秒)以内响应 TCP ACK 或 HTTP 200,则将考虑让该实例进入轮换。这样可帮助实现你自己的逻辑以从负载平衡器轮换中删除实例,例如,如果实例的 CPU 使用率高于 90%,则返回非 200 状态。对于使用 w3wp.exe 的 Web 角色,这还意味着将自动监视你的网站,因为网站代码中的故障将向负载平衡器探测返回非 200 状态。如果未在 .csdef 文件中定义 LoadBalancerProbe,则将使用上述的默认负载平衡器行为。

如果使用自定义负载平衡器探测,则需要确保你的逻辑将 RoleEnvironment.OnStop 方法考虑在内。当使用默认负载平衡器探测时,将先使实例脱离轮换,然后再调用 OnStop,但自定义负载平衡器探测可继续在发生 OnStop 事件期间返回 200(正常)。如果使用 OnStop 事件清除缓存、停止服务或以其他方式做出可影响服务运行时行为的更改,则需要确保你的自定义负载平衡器探测逻辑将从轮换中删除实例。

包含负载平衡器探测的服务定义文件的基本格式如下所示。

<ServiceDefinition …>
   <LoadBalancerProbes>
      <LoadBalancerProbe name="<load-balancer-probe-name>" protocol="[http|tcp]" path="<uri-for-checking-health-status-of-vm>" port=”<port-number>” intervalInSeconds="<interval-in-seconds>" timeoutInSeconds="<timeout-in-seconds>"/> 
   </LoadBalancerProbes>
</ServiceDefinition>

服务定义文件的 LoadBalancerProbes 元素包括以下元素:

LoadBalancerProbes 元素描述负载平衡器探测的集合。此元素是 LoadBalancerProbe 元素 的父元素。

LoadBalancerProbe 元素定义模型的运行状况探测。可定义多个负载平衡器探测。

下表介绍 LoadBalancerProbe 元素的特性:

 

属性 Type 说明

name

string

必需。负载平衡器探测的名称。该名称必须是唯一的。

protocol

string

必需。指定终结点的协议。可能的值为 httptcp。如果指定 tcp,则需要收到 ACK 才表示探测成功。如果指定了 http,则指定的 URI 中必须响应 200(正常)才表示探测成功。

path

string

用于从 VM 请求运行状况状态的 URI。如果将 path 设置为 protocol,则需要 http。否则,不允许使用此项。

没有默认值。

port

integer

可选。与探测通信的端口。此项对于任何终结点均为可选,因为随后将同一端口用于探测。也可配置其他端口用于其探测。可取值的范围是 1 到 65535(含二者)。

由终结点设置默认值。

intervalInSeconds

integer

可选。探测终结点运行状况状态的频繁程度的间隔,以秒为单位。通常,该间隔略小于所分配的超时期限的一半(以秒为单位),这样可在使实例脱离轮换之前完成两次完整的探测。

默认值为 15,最小值为 5。

timeoutInSeconds

integer

可选。应用于探测的超时期限(以秒为单位),在此期间没有任何响应将导致停止将后续流量传送到终结点。通过此值,可使终结点比 Azure 中使用的典型时间(即默认值)更快或更慢地脱离轮换。

默认值为 31,最小值为 11。

显示:
© 2015 Microsoft