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


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

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

限制

您可以根据外部应用负载均衡器内部应用负载均衡器的服务容量自动扩缩代管式实例组。不支持其他类型的负载均衡器。

准备工作

  • 查看自动扩缩器限制
  • 了解自动扩缩器基础知识
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

根据 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 控制台中的实例组页面。

    转到“实例组”

  2. 如果您有实例组,请选择该实例组,然后点击修改。如果您没有实例组,请点击创建实例组
  3. 自动扩缩模式下,选择开启:在实例组中添加和移除实例以启用自动扩缩功能。
  4. 指定您希望自动扩缩器在此组中创建的实例数量下限和上限。
  5. 自动扩缩指标部分中,点击添加指标
  6. 指标类型设置为 HTTP 负载均衡利用率
  7. 输入目标 HTTP 负载均衡利用率。此值被视为百分比。例如,如果 HTTP 负载均衡利用率为 60%,请输入 60

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

  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 秒。

您可以使用 instance-groups managed describe 子命令验证是否已成功创建自动扩缩器:

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

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

REST

如需创建自动扩缩器,请使用 autoscalers.insert 方法(针对可用区级 MIG)或 regionAutoscalers.insert 方法(针对区域级 MIG)。

以下示例将为可用区级 MIG 创建自动扩缩器:

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 服务教程。

后续步骤