根据负载平衡服务容量进行扩缩

本文档介绍如何根据外部 HTTP(S) 负载平衡器的服务容量扩缩托管实例组 (MIG)。也就是说,当负载平衡器指示实例组已达到其可配置的满载度时,自动扩缩功能会向该组添加虚拟机实例或从中移除虚拟机实例;其中,满载度通过后端实例组的选定平衡模式目标容量来定义。

您还可以根据 MIG 的 CPU 利用率Monitoring 指标进行扩缩。

准备工作

根据 HTTP(S) 负载平衡服务容量进行扩缩

Compute Engine 提供对实例组中的负载平衡的支持。您可以将自动扩缩与负载平衡结合使用,只需设置根据实例的负载进行扩缩的自动扩缩器即可。

外部 HTTP(S) 负载平衡器会根据其网址映射将请求分配到后端服务。该负载平衡器可以有一项或多项后端服务,每项服务都支持实例组或网络端点组 (NEG) 后端。当后端为实例组时,外部 HTTP(S) 负载平衡器提供两种平衡模式UTILIZATIONRATE。使用 UTILIZATION 时,您可以为实例组中实例的平均后端利用率指定一个最大目标。使用 RATE 时,您必须按实例或按组指定每秒的目标请求数。(只有区域实例组支持为整个组指定最大速率。(地区托管实例组不支持为每个组定义最大速率。)

平衡模式和您指定的目标容量决定了 Google Cloud 会在哪些条件下确定后端虚拟机已达到容量上限。Google Cloud 会尝试将流量发送到剩余容量足够多且运行状况良好的虚拟机。如果所有虚拟机均达到容量上限,则会超出目标利用率或速率。

将自动扩缩器挂接到外部 HTTP(S) 负载平衡器的实例组后端时,自动扩缩器会扩缩托管实例组,以保留一部分负载平衡服务容量。

例如,假设托管实例组的负载平衡服务容量定义为每个实例 100 RPS。如果您创建使用 HTTP(S) 负载平衡政策的自动扩缩程序,并对该自动扩缩程序进行设置,使其将目标利用率水平维持在 0.8(即 80%),则自动扩缩程序将在托管实例组中添加或移除实例以维持 80% 的服务容量(即每个实例 80 RPS)。

下图展示了自动扩缩程序如何与托管实例组和后端服务进行交互:

自动扩缩程序、托管实例组与负载平衡后端服务之间的关系。
自动扩缩程序会监控托管实例组的服务容量(已在后端服务中定义),并会根据目标利用率进行扩缩。在此示例中,服务容量以 maxRatePerInstance 值来衡量。

适用的负载平衡配置

您可以为负载平衡服务容量设置以下三个选项中的一个。首次创建后端时,您可以在后端利用率上限、每个实例每秒处理的请求数上限或整个组每秒处理的请求数上限中进行选择。自动扩缩仅支持后端利用率上限每个实例每秒处理的请求数上限,因为这些设置的值可以通过添加或移除实例来控制。例如,如果您将后端设置为每个实例每秒处理 10 个请求,而自动扩缩程序配置为维持在该速率的 80%,则当每个实例每秒处理的请求数发生变化时,自动扩缩程序可以添加或移除实例。

自动扩缩不支持每组的请求数上限,因为此设置与实例组中的实例数无关。无论实例组中有多少个实例,负载平衡器都会不断向实例组发送每组可以处理的最大数量的请求。

例如,如果您将后端设置为每组每秒最多处理 100 个请求,则负载平衡器将继续每秒向该组发送 100 个请求,无论该组是包含两个实例还是 100 个实例。由于此值无法调整,因此自动扩缩不支持使用每组每秒处理最大数量的请求的负载平衡配置。

根据负载平衡服务容量启用自动扩缩

控制台


  1. 转到 Google Cloud Console 中的实例组页面。

    转到实例组页面

  2. 如果您有实例组,请选择该实例组,然后点击修改。如果您没有实例组,请点击创建实例组
  3. 自动扩缩模式下,选择自动扩缩以启用自动扩缩。
  4. 自动扩缩政策部分中,点击添加新指标
  5. 指标类型设置为 HTTP 负载平衡利用率
  6. 输入目标负载平衡利用率。此值被视为百分比。例如,如果 HTTP 负载平衡利用率为 60%,请输入 60

  7. 您可以使用冷却期来告知自动扩缩器应用初始化所需的时间。指定准确的冷却期可以改进自动扩缩器的决策。例如,扩容时,自动扩缩器会忽略仍在初始化的虚拟机中的数据,因为这些虚拟机可能尚未代表应用的正常使用情况。默认冷却期为 60 秒。

  8. 指定您希望自动扩缩器在此组中创建的实例数量下限和上限。

  9. 保存更改。

gcloud


要启用根据服务容量进行扩缩的自动扩缩程序,请使用 set-autoscaling 子命令。例如,以下命令会创建一个自动扩缩程序,该自动扩缩程序可扩缩目标托管实例组以维持 60% 的服务容量。创建自动扩缩器时,不仅需要 --target-load-balancing-utilization 参数,还需要 --max-num-replicas 参数:

gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
    --max-num-replicas 20 \
    --target-load-balancing-utilization 0.6 \
    --cool-down-period 90

您可以使用 --cool-down-period 标志来告知自动扩缩器应用初始化所需的时间。指定准确的冷却期可以改进自动扩缩器的决策。例如,扩容时,自动扩缩器会忽略仍在初始化的虚拟机中的数据,因为这些虚拟机可能尚未代表应用的正常使用情况。默认冷却期为 60 秒。

您可以使用 describe 子命令验证是否已成功创建自动扩缩程序:

gcloud compute instance-groups managed describe example-managed-instance-group

如需查看可用的 gcloud 命令和标志,请参阅 gcloud 参考

API


注意:虽然自动扩缩是托管实例组的功能,但它是单独的 API 资源。针对自动扩缩构建 API 请求时请记住这一点。

在 API 中,向 autoscalers.insert 方法发出 POST 请求:

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/autoscalers/

请求正文必须包含 nametargetautoscalingPolicy 字段。autoscalingPolicy 必须定义 loadBalancingUtilization

您可以使用 coolDownPeriodSec 字段告知自动扩缩器应用初始化所需的时间。指定准确的冷却期可以改进自动扩缩器的决策。例如,扩容时,自动扩缩器会忽略仍在初始化的虚拟机中的数据,因为这些虚拟机可能尚未代表应用的正常使用情况。默认冷却期为 60 秒。

{

 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
    "maxNumReplicas": 20,
    "loadBalancingUtilization": {
       "utilizationTarget": 0.8
     },
    "coolDownPeriodSec": 90
  }
}

如需详细了解如何根据负载平衡服务容量启用自动扩缩,请完成在全球范围自动扩缩 Compute Engine 上的 Web 服务教程。

针对其他类型的负载平衡器进行扩缩

如需自动扩缩用作其他类型的 Google Cloud 负载平衡器的后端的托管实例组,请使用其他自动扩缩器政策

后续步骤