Compartir a través de

应用程序网关运行状况探测概述

Azure 应用程序网关监视其后端池中所有服务器的运行状况,并自动停止向其认为运行不正常的任何服务器发送流量。 探测继续监视此类运行不正常的服务器,只要探测检测到流量正常,网关就会再次将流量路由到该服务器。

默认探测使用关联后端设置的端口号和其他预设配置。 可以使用自定义探测按照自己的方式来配置。

探测行为

源 IP 地址

探测的源 IP 地址取决于后端服务器类型:

  • 如果后端池中的服务器是公共终结点,则源地址是应用程序网关的前端公共 IP 地址。
  • 如果后端池中的服务器是专用终结点,则源 IP 地址来自应用程序网关子网的地址空间。

探测操作

在配置规则后,网关立即启动探测,方法是将规则与后端设置和后端池(当然还有侦听器)相关联。 下图显示网关独立探测所有后端池服务器。 开始到达的传入请求仅发送到运行正常的服务器。 默认情况下,后端服务器标记为运行不正常,直到收到成功的探测响应。

此图显示应用程序网关启动对后端池中各个后端目标的运行状况探测

所需的探测是根据后端服务器和后端设置的唯一组合确定的。 例如,假设网关有一个带有两个服务器和两个后端设置的后端池,这些服务器和后端设置具有不同的端口号。 当这些不同的后端设置使用各自的规则与同一后端池相关联时,网关会为每个服务器和后端设置的组合创建探测。 可以在后端运行状况页上查看此信息。

显示“后端运行状况”页上的运行状况探测报告的示意图

此外,应用程序网关的所有实例探测相互独立的后端服务器。

探测间隔

相同的探测配置适用于应用程序网关的每个实例。 例如,如果应用程序网关有两个实例,并且探测间隔设置为 20 秒,则这两个实例将每隔 20 秒发送一次运行状况探测。

探测检测到失败的响应后,“不正常阈值”计数器会关闭,如果连续失败计数与配置的阈值匹配,则将服务器标记为运行不正常。 因此,如果将此运行不正常阈值设置为 2,则下一次探测将首次检测到此失败。 然后,应用程序网关将在连续 2 个失败的探测后将服务器标记为运行不正常 [第一次检测 20 秒 +(连续 2 个失败的探测 * 20 秒)]。

注意

后端运行状况报告根据相应的探测的刷新间隔进行更新,不依赖于用户的请求。

默认的运行状况探测

如果未设置任何自定义探测配置,应用程序网关自动配置默认运行状况探测。 监视行为的工作方式是向在后端池中配置的 IP 地址或 FQDN 发出 HTTP GET 请求。 对于默认探测,如果后端 http 设置是针对 HTTPS 配置的,则探测会使用 HTTPS 测试后端服务器的运行状况。

例如:将应用程序网关配置为使用 A、B 和 C 后端服务器来接收端口 80 上的 HTTP 网络流量。 默认运行状况监视每隔 30 秒对三台服务器进行测试,以获取每个请求 30 秒超时的正常 HTTP 响应。 正常的 HTTP 响应具有 200 到 399 的状态代码。 在这种情况下,运行状况探测的 HTTP GET 请求类似于 http://127.0.0.1/。 另请参阅应用程序网关中的 HTTP 响应代码

如果服务器 A 的默认探测检查失败,应用程序网关将停止将请求转发到此服务器。 默认探测仍继续每隔 30 秒检查服务器 A。 当服务器 A 成功响应默认运行状况探测发出的请求时,应用程序网关会开始再次将请求转发到此服务器。

默认的运行状况探测设置

探测属性 说明
探测 URL <协议>://127.0.0.1:<端口>/ 协议和端口继承自探测与之关联的后端 HTTP 设置
时间间隔 30 发送下一个运行状况探测前需要等待的时间(以秒为单位)。
超时 30 将探测标记为不正常前,应用程序网关等待探测响应的时间(以秒为单位)。 如果探测返回为正常,则相应的后端立即被标记为正常。
不正常阈值 3 控制在定期运行状况探测出现故障的情况下要发送的探测数。 在 v1 SKU 中,快速连续发送这些额外的运行状况探测,以快速确定后端的运行状况,并且无需等待探测时间间隔。 对于 v2 SKU,运行状况探测会等待一段时间间隔。 连续探测失败计数达到不正常阈值后,将后端服务器标记为故障。

默认探测只查看 <协议>://127.0.0.1:<端口> 来判断运行状况。 如果需要配置运行状况探测以使其转到自定义 URL 或修改任何其他设置,必须使用自定义探测。 有关 HTTPS 探测的详细信息,请参阅应用程序网关的 TLS 终止和端到端 TLS 概述

自定义的运行状况探测

使用自定义探测可以更精细地控制运行状况监视。 使用自定义探测时,可以配置自定义主机名、URL 路径、探测间隔,以及在将后端池实例标记为不正常之前可接受的失败响应次数等。

自定义的运行状况探测设置

下表提供自定义运行状况探测的属性的定义。

探测属性 说明
名称 探测的名称。 此名称用于在后端 HTTP 设置中标识和引用探测。
协议 用于发送探测的协议。 这必须与它关联到的后端 HTTP 设置中定义的协议匹配
主机 发送探测时使用的主机名。 在 v1 SKU 中,此值仅用作探测请求的主机头。 在 v2 SKU 中,此值用作主机头和 SNI
路径 探测的相对路径。 有效路径以“/”开头
端口 如果已定义,它将用作目标端口。 否则,它会使用与其关联的 HTTP 设置相同的端口。 此属性仅在 v2 SKU 中可用
时间间隔 探测间隔(秒)。 此值是每两次连续探测之间的时间间隔
超时 探测超时(秒)。 如果在此超时期间内未收到有效响应,探测将被标记为失败
不正常阈值 探测重试计数。 连续探测失败计数达到不正常阈值后,将后端服务器标记为故障

探测匹配

默认情况下,状态代码为 200 到 399 的 HTTP(S) 响应被视为正常。 自定义运行状况探测额外支持两个匹配条件。 可根据需要使用条件匹配来修改构成正常响应的因素的默认解释。

下面是匹配条件:

  • HTTP 响应状态代码匹配 - 接受用户指定的 http 响应代码或响应代码范围的探测匹配条件。 支持逗号分隔的单个响应状态代码,或一系列状态代码。
  • HTTP 响应正文匹配 - 查找 HTTP 响应正文并匹配用户指定字符串的探测匹配条件。 该匹配操作只会在响应正文中确定是否存在用户指定的字符串,而不执行完整正则表达式匹配。 指定的匹配项不得超过 4090 个字符。

可以使用 New-AzApplicationGatewayProbeHealthResponseMatch cmdlet 指定匹配条件。

例如:

$match = New-AzApplicationGatewayProbeHealthResponseMatch -StatusCode 200-399
$match = New-AzApplicationGatewayProbeHealthResponseMatch -Body "Healthy"

可以在 PowerShell 中使用 -Match 运算符将匹配条件附加到探测配置。

自定义探测的一些用例

  • 如果后端服务器仅允许经过身份验证的用户访问,则应用程序网关探测将收到 403 响应代码而不是 200。 由于客户端(用户)必须针对实时流量自行进行身份验证,因此可以将探测流量配置为接受 403 作为预期响应。
  • 当后端服务器安装了通配符证书 (*.contoso.com) 来为不同的子域提供服务时,可以使用具有接受的特定主机名(SNI 必需)的自定义探测来建立成功的 TLS 探测,并将该服务器报告为运行正常。 将后端设置中的“替代主机名”设置为“否”时,不同的传入主机名(子域)将按原样传递到后端。

NSG 注意事项

公共预览版中可以通过 NSG 规则对应用程序网关子网进行精细控制。

对于当前功能,存在一些限制:

对于应用程序网关 v1 SKU,必须允许 TCP 端口 65503-65534 上的传入 Internet 流量;对于 v2 SKU,必须允许 TCP 端口 65200-65535 上的传入 Internet 流量,并将目标子网设置为“任何”,将源设置为“GatewayManager”服务标记。 此端口范围是进行 Azure 基础结构通信所必需的。

此外,不能阻止出站 Internet 连接,并且必须允许来自 AzureLoadBalancer 标记的入站流量。

有关详细信息,请参阅应用程序网关配置概述

后续步骤

了解应用程序网关的运行状况监视后,可以在 Azure 门户中配置自定义运行状况探测,或使用 PowerShell 和 Azure Resource Manager 部署模型配置自定义运行状况探测