你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 云服务(扩展支持)定义的 LoadBalancerProbe 架构

重要

自 2025 年 3 月 31 日起,云服务(外延支持)被弃用,将于 2027 年 3 月 31 日完全停用。 详细了解此弃用以及如何迁移

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

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

负载均衡器探测的功能

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

仅当实例处于就绪状态时(就像实例未处于“繁忙”、“正在回收”或“正在停止”等状态时),默认负载均衡器探测才利用虚拟机内部的来宾代理进行侦听,并以“HTTP 200 正常”作为响应。 如果 Guest Agent 没有以 HTTP 200 OK 响应,Azure 负载均衡器会将该实例标记为无响应,并停止将流量发送到该实例。 Azure 负载均衡器继续 ping 实例,并且如果来宾代理使用 HTTP 200 响应,Azure 负载均衡器会再次向该实例发送流量。 使用 Web 角色时,网站代码通常在不受 Azure 结构或来宾代理监视的 w3wp.exe 中运行。这意味着,系统不会向来宾代理报告 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 元素

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

LoadBalancerProbe 元素

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

下表描述 LoadBalancerProbe 元素的属性:

属性 类型 说明
name string 必需。 负载均衡器探测的名称。 该名称必须是唯一的。
protocol string 必需。 指定终结点的协议。 可能的值为 httptcp。 如果已指定 tcp,则需要接收到 ACK 才能成功进行探测。 如果指定了http,则需要从指定的 URI 收到 200 OK 响应,探测才算成功。
path string 用于从 VM 请求运行状况的 URI。 如果将 path 设置为 protocol,则需要 http。 否则,将不允许使用该特性。

没有默认值。
port integer 可选。 用于传达探测的端口。 此特性对于任何终结点都是可选的,因为探测将使用同一端口。 还可为探测配置其他端口。 可能的值介于 1 和 65535(含)之间。

由终结点设置的默认值。
intervalInSeconds integer 可选。 探测终结点的运行状况的间隔(以秒为单位)。 通常,该间隔略小于所分配超时期限(以秒为单位)的一半,以便在退出轮转前执行两次完整的探测。

默认值为 15。 最小值为 5。
timeoutInSeconds integer 可选。 应用于探测的超时期限(以秒为单位),如果超过该期限还没有响应,就会停止向终结点传送后续流量。 该值允许终结点以比 Azure 中通常所用的时间(默认值)更短或更长的时间退出轮转。

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

另请参阅

云服务(外延支持)定义架构