Azure 云服务(经典)定义 LoadBalancerProbe 架构
重要
从 2024 年 9 月 1 日开始,已弃用所有客户的云服务(经典版)。 从 2024 年 10 月开始,Microsoft 将停止并关闭任何正在运行的现有部署,数据将永久性丢失。 新部署应使用基于 Azure 资源管理器的新型部署模型 Azure 云服务(外延支持)。
负载均衡器探测是由客户定义的,用于探测 UDP 终结点和角色实例中的终结点的运行状况。 LoadBalancerProbe
不是独立元素;它与服务定义文件中的 Web 角色或辅助角色结合使用。 有多个角色可以使用 LoadBalancerProbe
。
服务定义文件的默认扩展名为 .csdef。
负载均衡器探测的功能
Azure 负载均衡器负责将传入流量路由到角色实例。 负载均衡器通过定期探测每个实例来确定哪些实例可以接收流量,从而确定该实例的运行状况。 负载均衡器每分钟可以多次探测每个实例。 可通过两个不同的选项向负载均衡器提供实例运行状况 - 默认负载均衡器探测或自定义负载均衡器探测,这可通过在 .csdef 文件中定义 LoadBalancerProbe 来实现。
默认负载均衡器探测将利用虚拟机内的来宾代理进行侦听,并仅在实例处于“就绪”状态(比如实例不处于“繁忙”、“正在回收”和“正在停止”等状态)时提供 HTTP 200(正常)响应。 如果来宾代理无法使用“HTTP 200 正常”响应,则 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
元素的属性:
Attribute | 类型 | 说明 |
---|---|---|
name |
string |
必需。 负载均衡器探测的名称。 该名称必须是唯一的。 |
protocol |
string |
必需。 指定终结点的协议。 可能的值为 http 或 tcp 。 如果已指定 tcp ,则需要接收到的 ACK 才可完成进行探测。 如果已指定 http ,则需要来自指定 URI 的 200 正常响应才可成功完成探测。 |
path |
string |
用于从 VM 请求运行状况的 URI。 如果 protocol 设置为 http ,则需要 path 。 否则,将不允许使用该特性。没有默认值。 |
port |
integer |
可选。 用于传达探测的端口。 此特性对于任何终结点都是可选的,因为探测将使用同一端口。 还可为探测配置其他端口。 可能的值介于 1 和 65535(含)之间。 由终结点设置的默认值。 |
intervalInSeconds |
integer |
可选。 探测终结点的运行状况的间隔(以秒为单位)。 通常,该间隔略小于所分配超时期限(以秒为单位)的一半,以便在退出轮转前执行两次完整的探测。 默认值为 15。 最小值为 5。 |
timeoutInSeconds |
integer |
可选。 应用于探测的超时期限(以秒为单位),如果超过该期限还没有响应,就会停止向终结点传送后续流量。 该值允许终结点以比 Azure 中通常所用的时间(默认值)更短或更长的时间退出轮转。 默认值为 31。 最小值为 11。 |