Azure 负载均衡器运行状况探测器

Azure 负载均衡器运行状况探测是一项检测应用程序实例的运行状况的功能。 它向实例发送请求,检查它们是否可用并对请求做出响应。 运行状况探测可配置为使用不同的协议,例如 TCP、HTTP 或 HTTPS。 这是一项重要功能,因为它有助于检测应用程序故障、管理负载和计划故障时间。

Azure 负载均衡器规则需要使用运行状况探测来检测终结点的状态。 运行状况探测和探测响应的配置决定了哪些后端池实例将接收新连接。 使用运行状况探测来检测应用程序是否失败。 为健康探测生成自定义响应。 将运行状况探测用于流控制,以管理负载或计划的停机时间。 如果运行状况探测失败,负载均衡器将会停止向相应的运行不正常实例发送新连接。 出站连接不受影响,仅入站连接受影响。

探测协议

健康探测支持多种协议。 可用的具体运行状况探测协议因负载均衡器 SKU 而异。 此外,服务的行为也因负载均衡器 SKU 而异,如下表所述:

SKU 探测协议 探测器停机行为
标准 TCP、HTTP、HTTPS 所有探针均已停止,所有 TCP 流继续传输。
基本 TCP、HTTP 所有探测停止,所有 TCP 流过期。

探测属性

运行状况探测具有以下属性:

运行状况探测属性名称 详细信息
名称 运行状况探测的名称。 这是你为运行状况探测定义的名称
协议 健康探测协议 这是运行状况探测器要使用的协议类型。 选项包括:TCP、HTTP、HTTPS
端口 健康探测端口。 运行状况探测连接到虚拟机以检查其运行状况时要使用的目标端口
间隔(秒) 运行状况探测的间隔时间。 对虚拟机进行两次连续运行状况检查时,不同探测之间的时间间隔(以秒为单位)
阈值 运行状况探测的阈值。 健康探针需要成功或失败的次数,以允许或拒绝将流量传输到虚拟机。
使用者 使用此运行状况探测的负载均衡器规则列表。 应至少有一个使用运行状况探测的规则才能生效

探测配置

运行状况探测配置由以下元素组成:

运行状况探测配置 详细信息
协议 运行状况探测协议。 这是运行状况探测器要使用的协议类型。 可用选项包括:TCP、HTTP、HTTPS
端口 运行状况探测的端口。 运行状况探测连接到虚拟机以检查虚拟机的运行状况时你希望运行状况探测使用的目标端口。 必须确保虚拟机也在侦听此端口(即端口打开)。
时间间隔 运行状况探测的间隔时间。 连续对虚拟机尝试进行运行状况检查的间隔时间(以秒为单位)

探测协议

可将运行状况探测使用的协议配置为以下选项之一:TCP、HTTP、HTTPS。

场景 TCP 探测器 HTTP/HTTPS 探针
概述 TCP 探测通过使用定义的端口执行三方开放式 TCP 握手来初始化连接。 TCP 探测使用四向闭合式 TCP 握手来终止连接。 HTTP 和 HTTPS 会针对指定路径发出 HTTP GET 请求。 这两个探测都支持 HTTP GET 的相对路径。 与 HTTP 探测一样,HTTPS 探测中也添加了传输层安全性 (TLS)。 如果探测端口也是服务的侦听器,可以使用 HTTP/HTTPS 探测来实现你自己的逻辑,以便从负载均衡器中删除实例。
探测失败时的行为 如果出现以下情况,TCP 探测将会失败:
1。 实例上的 TCP 侦听器在超时期限内根本未做出响应。 是否将探测标记为故障,取决于超时的探测请求数量;这些请求被配置为在将探测标记为故障之前可不收到响应。
2。 探测从实例接收 TCP 重置。
如果出现以下情况,HTTP/HTTPS 探测将会失败:
1。 探测终结点返回非 200 的 HTTP 响应代码(例如,403、404 或 500)。
2。 探测终结点在最小探测间隔和 30 秒超时时间内根本不响应。 在探测被标记为未运行之前,多个探测请求都可能得不到响应,直到所有超时间隔的总和耗尽。
3. 探测终结点通过 TCP 重置关闭连接。
探测行为 在以下情况下,会将 TCP 运行状况探测视为正常,并将后端终结点标记为正常:
1。 VM 启动后,运行状况探测成功。
2。 处于正常状态的任何后端终结点都符合接收新流的条件。
如果实例在超时时间内返回 HTTP 200 状态码,则将该运行状况探测标记为正常。 在以下情况下,会将 HTTP/HTTPS 运行状况探测视为正常,并将后端终结点标记为正常:
1。 VM 启动后,运行状况探测成功。
2。 处于正常状态的任何后端终结点都符合接收新流的条件。

注意

HTTPS 探测要求使用在整个链中的最小签名哈希为 SHA256 的证书。

探测停止行为

场景 TCP 连接 UDP 数据报
单个实例向下探测 新的 TCP 连接会成功连接到其余正常的后端终结点。 到此后端终结点的已建立 TCP 连接将继续保持。 现有 UDP 流会迁移到后端池中另一个运行正常的实例。
所有实例向下探测 不会将新的流量发送到后端池。 如果后端池具有多个后端实例,标准负载均衡器将允许已建立的 TCP 流继续运行。 基本负载均衡器会终止发往后端池的所有现有 TCP 流。 所有现有 UDP 流终止。

探测间隔和超时

间隔值决定了运行状况探测检查后端池实例是否作出响应的频率。 如果健康探测失败,负载均衡器会立即标记你的后端池实例为不健康。 如果健康探针在下一次检查中成功,Azure 负载均衡器 会将你的后端池实例标记为健康状态。 默认情况下,健康探针会在Azure门户中每5秒尝试检查一次配置好的健康探针端口,但你可以明确设置这个值。 当你用ARM或Bicep模板、REST或Terraform配置探测器时,默认intervalInSeconds值是15秒(至少5秒)。

为了确保能够及时收到响应,HTTP/S 健康探测内置了超时机制。 以下是 TCP 和 HTTP/S 探测的超时时间:

  • TCP 探测超时时长:不适用(超过已配置的探测间隔时长并发送下一个探测后,探测将失败)
  • HTTP/S 探测超时时间:30 秒

对于 HTTP/S 探测,如果配置的间隔时间超过上述超时期限,则运行状况探测将超时,如果在超时期间未收到响应,则运行状况探测将失败。 例如,如果 HTTP 运行状况探测配置为探测间隔为 120 秒(每 2 分钟)一次,并且前 30 秒内未收到探测响应,则探测将达到其超时期限并失败。 当配置的间隔短于上述超时时段时,如果在配置的间隔时段完成之前未收到任何响应,则运行状况探测会失败,会立即发送下一探测。

探测阈值

探测阈值是指健康探测必须连续成功或失败的次数,以便探测将后端实例分别标记为健康或不健康。

对于 TCP 探测,如果探测阈值配置为 2,探测将需要在后端实例开始接收流量之前接收 2 个连续响应。 同样,如果后端实例被视为正常状态,那么需要连续发生 2 次失败或超时,实例才会被视为不正常,并停止接收新的流量。

对于 HTTP 探测,显式响应会立即基于 200 响应将探测标记为开启,而对非 200 响应则标记为关闭,并有效地重置阈值。 这意味着,如果探测因无响应而超时,则阈值仅适用于 HTTP 探测。

设计指南

  • 为应用程序设计运行状况模型时,探测后端终结点上可以反映该实例以及应用程序服务的运行状况的端口。 应用程序端口和探测端口不必相同。 在某些情况下,探测端口可以不同于应用程序使用的端口,但通常建议探测使用相同的端口。

  • 有效的方案是让应用程序生成运行状况探测响应,并向负载均衡器发出信号,表明实例是否应接收新连接。 可以通过使运行状况探测发生故障来操控探测响应,以便限制向某个实例传送新连接。 您可以为应用程序维护做好准备,并开始排空到应用程序的连接。 在标准负载均衡器中,在空闲超时或连接关闭之前,探测关闭信号会始终允许 TCP 流继续运行。

  • 对于 UDP 负载均衡的应用程序,从后端终结点生成自定义运行状况探测信号。 对于与相应的侦听器匹配的运行状况探测,使用 TCP、HTTP 或 HTTPS。

  • HA 端口负载均衡规则,使用 标准负载均衡器。 所有端口都进行负载均衡,单个运行状况探测响应必须反映整个实例的状态。

  • 不要通过接收运行状况探测的实例,将该探测转换或代理到虚拟网络中的另一个实例。 此配置可能导致方案中出现故障。 例如:在负载均衡器后端池中部署一组第三方设备,以便为设备提供可伸缩性和冗余。 运行状况探测被配置为探测一个端口,该端口由第三方设备代理或转换到该设备后面的其他虚拟机。 如果探测的是用于将请求转发或代理到该设备后端其他虚拟机的同一端口,那么只要收到来自任意单个虚拟机的探测响应,就会将该设备标记为不可用。 此配置可能导致应用程序出现级联故障。 触发因素可能是间歇性的探测失败,导致负载均衡器将该设备实例标记为不可用。 此操作可能会禁用应用程序。 探查设备本身的运行状况。 选择用于确定运行状况信号的探测是网络虚拟设备 (NVA) 方案的重要考虑因素。 请咨询应用程序供应商,确认在此类场景中应使用哪种运行状况信号。

  • 如果您的虚拟机配置了多个网络接口,请确保在接收探测请求的同一接口上对该探测请求作出响应。 可能需要根据每个接口,对 VM 中的此地址进行源网络地址转换。

  • 使用 Azure PowerShell、Azure CLI、模板或 API 时,不强制使用或检查探测定义。 仅在使用 Azure 门户时才进行探测验证测试。

  • 如果运行状况探测出现波动,负载均衡器会等待更长时间,然后将后端终结点重新置于正常状态。 这段额外的等待时间可保护用户和基础结构,是在策略中有意指定的。

  • 确保虚拟机实例正在运行。 对于后端池中每个正在运行的实例,运行状况探测会检查可用性。 如果某个实例已停止,则只有重启该实例才会对其进行探测。

  • 不要为虚拟网络配置 Azure 拥有的包含 168.63.129.16 的 IP 地址范围。 该配置与运行状况探测的 IP 地址发生冲突,并且可能导致方案失败。

  • 若要测试运行状况探测失败,或将单个实例标记为不可用,请使用网络安全组显式阻止运行状况探测流量。 创建 NSG 规则以阻止目标端口或源 IP,以模拟探测故障。

  • 与负载均衡规则不同,入站 NAT 规则不需要附加运行状况探测。

  • 不建议使用 NSG 规则阻止 Azure 负载均衡器运行状况探测 IP 或端口。 这是一种不受支持的情况,并且可能导致 NSG 规则延迟生效,从而使运行状况探测无法准确反映后端实例的可用性。

监控

标准负载均衡器通过 Azure Monitor 公开每个终结点和后端终结点的运行状况探测状态。 其他 Azure 服务或合作伙伴应用程序可以使用这些指标。 基本负载均衡器不支持 Azure Monitor 日志。

探测源 IP 地址

要使 Azure 负载均衡器的运行状况探测将您的实例标记为正常,您必须在所有 Azure 网络安全组和本地防火墙策略中允许 IP 地址 168.63.129.16。 AzureLoadBalancer 服务标记用于在网络安全组中标识此源 IP 地址,并默认允许健康探测流量。 可在此处了解此 IP 的相关详细信息。

如果在防火墙策略中不允许使用探测的源 IP,运行状况探测将会失败,因为它无法访问实例。 反过来,由于运行状况探测失败,Azure 负载均衡器会将实例标记为 -down-。 这种错误的配置可能导致负载均衡的应用程序方案失败。 所有 IPv4 负载均衡器运行状况探测源自 IP 地址 168.63.129.16(源)。 IPv6 探测使用链路本地地址 (fe80::1234:5678:9abc) 作为其源地址。 对于双堆栈 Azure 负载均衡器,必须为 IPv6 运行状况探测配置网络安全组才能正常运行。

限制

  • HTTPS 探测不支持使用客户端证书进行相互身份验证。

  • HTTP 探测不支持对探测后端使用主机名。

  • 启用 TCP 时间戳可能会导致节流或其他性能问题,进而导致健康探测超时。

  • 虚拟机规模集不支持基本 SKU 负载均衡器运行状况探测。

  • 出于安全考虑,HTTP 探测不支持探测以下端口:19、21、25、70、110、119、143、220、993。

后续步骤