扩缩实例

您可以扩缩 AlloyDB 实例,以调整集群的容量和性能,从而满足不断变化的工作负载需求。扩缩有助于管理费用,并便于处理流量高峰。

您可以通过多种方式扩缩 AlloyDB 实例,具体如下所示。

扩缩类型 方法 自动化 主实例 读取池实例
纵向 更改机器类型 手动 支持 支持
横向 更改节点数 手动和自动 不支持 支持

准备工作

  • 您使用的 Google Cloud 项目必须已启用才能访问 AlloyDB
  • 您必须在所使用的 Google Cloud 项目中拥有以下 IAM 角色之一:
    • roles/alloydb.admin(AlloyDB Admin 预定义 IAM 角色)
    • roles/owner(Owner 基本 IAM 角色)
    • roles/editor(Editor 基本 IAM 角色)

    如果您不拥有上述任何角色,请与组织管理员联系以申请访问权限。

手动扩缩

本部分介绍了手动扩缩 AlloyDB 实例的方法。例如,您可以通过更改实例的机器类型来纵向扩缩实例,也可以通过更改读取池实例的节点数来横向扩缩读取池实例。

扩缩实例的机器类型

您可以通过更改实例的机器类型来纵向扩缩主实例和读取池实例,这会修改其 vCPU 和 RAM。

控制台

  1. 在 Google Cloud 控制台中,前往集群页面。

    转到集群

  2. 资源名称列中点击相应集群。

  3. 概览页面中,前往集群中的实例部分,然后点击修改主实例修改读取池

  4. 选择以下机器系列之一:

    • C4A:基于 Google Axion 的机器系列,以预览版形式提供。
    • N2:默认的基于 x86 的机器系列。
  5. 选择机器类型。

    • C4A 支持 1、4、8、16、32、48、64 和 72 种机器类型或形式。
    • N2 支持 2、4、8、16、32、64、96 和 128 种机器类型或形式。

      如需详细了解如何使用基于 C4A Axion 的机器系列(包括 1 vCPU 机器类型),请参阅使用基于 C4A Axion 的机器系列时的注意事项

  6. 点击更新实例更新读取池

gcloud

如需使用 gcloud CLI,您可以安装并初始化 Google Cloud CLI,也可以使用 Cloud Shell

使用 gcloud alloydb instances update 命令可更改主实例的机器类型。

gcloud alloydb instances update INSTANCE_ID \
--cpu-count=CPU_COUNT \
--machine-type=MACHINE_TYPE \
--region=REGION_ID \
--cluster=CLUSTER_ID \
--project=PROJECT_ID

替换以下内容:

  • INSTANCE_ID:要更新的实例的 ID。

  • CPU_COUNT:您希望实例拥有的 N2 vCPU 数量。默认值为 N2。有效值包括:

    • 2:2 个 vCPU,16 GB RAM
    • 4:4 个 vCPU,32 GB RAM
    • 8:8 个 vCPU,64 GB RAM
    • 16:16 个 vCPU,128 GB RAM
    • 32:32 个 vCPU,256 GB RAM
    • 64:64 个 vCPU,512 GB RAM
    • 96:96 个 vCPU,768 GB RAM
    • 128:128 个 vCPU,864 GB RAM

  • MACHINE_TYPE:在部署 N2 机器时,此参数是可选的。如需部署基于 C4A Axion 的机器系列(预览版),或者在 C4A 机器与 N2 机器之间迁移,请选择此参数并设置以下值。

    MACHINE_TYPECPU_COUNT 结合使用时,CPU_COUNTMACHINE_TYPE 中的值必须匹配,否则会出现错误。

    对于基于 C4A Axion 的机器系列,请选择具有以下值的机器类型:

    • c4a-highmem-1
    • c4a-highmem-4-lssd
    • c4a-highmem-8-lssd
    • c4a-highmem-16-lssd
    • c4a-highmem-32-lssd
    • c4a-highmem-48-lssd
    • c4a-highmem-64-lssd
    • c4a-highmem-72-lssd

    如需部署具有 4 个 vCPU 及以上的 C4A,请使用后缀 lssd 以启用超快缓存。

    如需详细了解如何使用基于 C4A Axion 的机器系列(包括 1 个 vCPU 机器类型),请参阅使用基于 C4A Axion 的机器系列时的注意事项

    对于基于 x86 的 N2 机器系列,请使用以下值:

    • N2-highmem-2
    • N2-highmem-4
    • N2-highmem-8
    • N2-highmem-16
    • N2-highmem-32
    • N2-highmem-64
    • N2-highmem-96
    • N2-highmem-128
  • REGION_ID:实例所在的区域。

  • CLUSTER_ID:实例所在集群的 ID。

  • PROJECT_ID:集群所在项目的 ID。

如果该命令返回包含 invalid cluster state MAINTENANCE 字词的错误消息,则表示集群正在进行日常维护。这会暂时禁止实例重新配置。 在集群恢复为 READY 状态后,再次运行该命令。如需查看集群状态,请参阅查看集群详情

加快机器类型更新速度

如需更快地更新机器类型,可以将 FORCE_APPLY 选项与 gcloud beta alloydb instances update 命令搭配使用。

 gcloud beta alloydb instances update INSTANCE_ID \
  --cpu-count=CPU_COUNT \
  --machine-type=MACHINE_TYPE \
  --region=REGION_ID \
  --cluster=CLUSTER_ID \
  --project=PROJECT_ID
  --update-mode=FORCE_APPLY
  • 实例会有大约 1 分钟的停机时间。

  • 对实例机器类型的更改会在 10 到 15 分钟后生效。

扩缩读取池实例的节点数

AlloyDB 允许您在实例级层扩缩读取池实例中的节点数量,而不会造成任何停机。增加节点数量时,客户端连接不会受到影响。

减少节点数量时,之前连接到正在关停的节点的任何客户端都可以使用实例端点重新连接到其他节点。

控制台

  1. 在 Google Cloud 控制台中,前往集群页面。

    转到集群

  2. 资源名称列中点击相应集群。

  3. 概览页面中,前往集群中的实例部分,然后点击修改读取池

  4. 节点数字段中,输入节点数。

  5. 点击更新读取池

gcloud

如需使用 gcloud CLI,您可以安装并初始化 Google Cloud CLI,也可以使用 Cloud Shell

使用 gcloud alloydb instances update 命令可更改读取池实例中的节点数量。

gcloud alloydb instances update INSTANCE_ID \
    --read-pool-node-count=NODE_COUNT \
    --region=REGION_ID \
    --cluster=CLUSTER_ID \
    --project=PROJECT_ID
  • INSTANCE_ID:读取池实例的 ID。

  • NODE_COUNT:读取池实例中的节点数量。指定 120(含)之间的数字。请注意,一个集群中的所有读取池实例最多可以有 20 个节点。

  • REGION_ID:实例所在的区域。

  • CLUSTER_ID:实例所在项目的 ID。

  • PROJECT_ID:集群所在项目的 ID。

如果该命令返回包含 invalid cluster state MAINTENANCE 字词的错误消息,则表示集群正在进行日常维护。这会暂时禁止实例重新配置。 在集群恢复为 READY 状态后,再次运行该命令。如需查看集群状态,请参阅查看集群详情

自动扩缩读取池实例

借助 AlloyDB 读取池自动扩缩功能,您可以根据实时资源使用情况自动且自适应地更改读取节点数量。这有助于您应对使用情况变化并减少支出。

您可以使用以下政策配置自动扩缩:

  • 基于 CPU 利用率:根据目标 CPU 利用率扩缩节点数。
  • 基于时间表的扩缩:在指定的时间窗口内将节点数扩缩到最低数量。

您可以同时使用这些政策。当多个政策处于有效状态时,自动扩缩器会选择建议节点数量最多的政策。

限制

读取池自动扩缩器存在以下限制:

  • 长时间运行的连接的负载分配:为了实现均匀的流量分配并充分利用自动扩缩带来的新增容量,我们建议您创建新的客户端连接。自动扩缩器在添加新节点时不会终止现有的长期连接,因此来自这些连接的流量不会路由到新添加的节点。
  • 新节点的缓存预热:自动扩缩器添加新节点后,这些节点可能需要几分钟时间才能预热其缓存并达到最佳查询性能。
  • 大型查询的行为:在执行非常大的读取查询期间,自动扩缩调整可能会延迟。

在新读取池实例上启用自动扩缩功能

您可以使用基于 CPU 的政策、基于时间表的政策或同时使用这两种政策来创建读取池实例,并启用和配置自动扩缩功能。

创建具有基于 CPU 的政策的读取池实例

如需创建具有基于目标 CPU 利用率的自动扩缩政策的读取池实例,请运行以下命令:

gcloud alloydb instances create INSTANCE_ID \
    --instance-type=READ_POOL \
    --read-pool-node-count=NODE_COUNT \
    --region=REGION_ID \
    --cluster=CLUSTER_ID \
    --project=PROJECT_ID \
    --enable-autoscaler \
    --autoscaler-max-node-count=MAX_NODE_COUNT \
    --autoscaler-target-cpu-usage=TARGET_CPU_USAGE

替换以下内容:

  • INSTANCE_ID:读取池实例的 ID。

  • READ_POOL:指定实例类型。

  • NODE_COUNT:读取池实例中的节点数量。指定 120(含)之间的数字。请注意,一个集群中的所有读取池实例最多可以有 20 个节点。

  • REGION_ID::实例所在的区域。

  • CLUSTER_ID:实例所在集群的 ID。

  • PROJECT_ID:集群所在项目的 ID。

  • MAX_NODE_COUNT:自动扩缩器可在读取池实例中创建的节点数上限。单个集群中所有读取池实例的节点总数不得超过 20 个。

  • TARGET_CPU_USAGE:读取池实例的目标 CPU 利用率,以介于 0.0 到 1.0 之间的小数值表示。例如,0.7 表示 70%。

创建具有基于时间表的政策的读取池实例

如需创建具有基于时间表的自动扩缩政策的读取池实例,该政策可为特定时间窗口定义最少节点数,请运行以下命令:

gcloud alloydb instances create INSTANCE_ID \
    --instance-type=READ_POOL \
    --read-pool-node-count=NODE_COUNT \
    --region=REGION_ID \
    --cluster=CLUSTER_ID \
    --project=PROJECT_ID \
    --enable-autoscaler \
    --autoscaler-max-node-count=MAX_NODE_COUNT \
    --autoscaler-set-schedule=SCHEDULE_NAME \
    --autoscaler-schedule-cron-exp=CRON_EXPRESSION \
    --autoscaler-schedule-duration-seconds=DURATION_SECONDS \
    --autoscaler-schedule-time-zone=TIME_ZONE \
    --autoscaler-schedule-min-node-count=MIN_NODE_COUNT \
    --autoscaler-schedule-description="DESCRIPTION"

替换以下内容:

  • MAX_NODE_COUNT:自动扩缩器可在读取池实例中创建的节点数上限。单个集群中所有读取池实例的节点总数不得超过 20 个。

  • SCHEDULE_NAME:扩缩时间表的唯一名称。

  • CRON_EXPRESSION:以 cron 格式表示的时间表,用于指定扩缩事件的开始时间。

  • DURATION_SECONDS:时间表在开始后保持有效状态的时长(以秒为单位)。在此期限过后,实例会缩减到由其他政策或其原始配置确定的节点数量。

  • TIME_ZONE:时间表的可选时区。例如 America/Los_Angeles

  • MIN_NODE_COUNT:在时间表处于有效状态时,自动扩缩器将读取池实例扩缩到的最小节点数。

  • DESCRIPTION:时间表的可选文本说明。

创建具有 CPU 和基于时间表的政策的读取池实例

如需创建同时具有基于 CPU 和基于时间表的自动扩缩政策的读取池实例,请运行以下命令:

gcloud alloydb instances create INSTANCE_ID \
    --instance-type=READ_POOL \
    --read-pool-node-count=NODE_COUNT \
    --region=REGION_ID \
    --cluster=CLUSTER_ID \
    --project=PROJECT_ID \
    --enable-autoscaler \
    --autoscaler-max-node-count=MAX_NODE_COUNT \
    --autoscaler-target-cpu-usage=TARGET_CPU_USAGE \
    --autoscaler-set-schedule=SCHEDULE_NAME \
    --autoscaler-schedule-cron-exp=CRON_EXPRESSION \
    --autoscaler-schedule-duration-seconds=DURATION_SECONDS \
    --autoscaler-schedule-time-zone=TIME_ZONE \
    --autoscaler-schedule-min-node-count=MIN_NODE_COUNT \
    --autoscaler-schedule-description="DESCRIPTION"

TARGET_CPU_USAGE 替换为读取池实例的目标 CPU 利用率,以介于 0.0 和 1.0 之间的十进制值表示。

如需了解此命令中使用的占位符,请参阅创建采用基于 CPU 的政策的读取池实例创建采用基于调度的政策的读取池实例政策。

在现有读取池实例上启用或更新自动扩缩功能

您可以为现有读取池实例启用、停用或修改自动扩缩设置。

如需在现有实例上首次启用自动扩缩功能,或更新现有政策,请使用 gcloud alloydb instances update 命令。例如,如需更新目标 CPU 利用率,请运行以下命令:

gcloud alloydb instances update INSTANCE_ID \
    --region=REGION_ID \
    --cluster=CLUSTER_ID \
    --project=PROJECT_ID \
    --autoscaler-target-cpu-usage=NEW_TARGET_CPU_USAGE

NEW_TARGET_CPU_USAGE 替换为您要为读取池实例设置的新目标 CPU 利用率,以介于 0.0 到 1.0 之间的十进制值表示。

如需向现有配置添加第二个时间表,请运行带有新时间表名称的更新命令。如果时间表名称已存在,该命令会更新现有时间表。否则,系统会创建新日程。

gcloud alloydb instances update INSTANCE_ID \
    --region=REGION_ID \
    --cluster=CLUSTER_ID \
    --project=PROJECT_ID \
    --autoscaler-set-schedule=NEW_SCHEDULE_NAME \
    --autoscaler-schedule-cron-exp=CRON_EXPRESSION \
    --autoscaler-schedule-duration-seconds=DURATION_SECONDS \
    --autoscaler-schedule-min-node-count=MIN_NODE_COUNT

NEW_SCHEDULE_NAME 替换为新的或更新后的扩缩时间表的唯一名称。如果提供的名称与现有时间表匹配,该命令会更新相应时间表的设置。如果该名称不存在,则该命令会使用此名称创建新调度。

自动扩缩政策的评估方式

当多项自动扩缩政策处于有效状态时,自动扩缩器会评估每项政策,并选择建议节点数量最高的政策。

例如,假设某配置包含以下两项政策:

  • 以 CPU 为基础的政策,目标利用率为 60%。
  • 一种基于时间表的政策,要求在工作日上午 8 点到下午 5 点之间至少有 3 个节点。

如果现在是工作日的中午,CPU 利用率为 80%,基于 CPU 的政策可能会建议扩缩到 4 个节点,而基于时间表的政策则建议扩缩到 3 个节点。自动扩缩器将实例扩缩为四个节点。

停用自动扩缩

如需停用自动扩缩,请使用 no-enable-autoscaler 标志。此命令会将读取池重置为启用自动扩缩功能之前的原始节点数。

gcloud alloydb instances update INSTANCE_ID \
    --region=REGION_ID \
    --cluster=CLUSTER_ID \
    --project=PROJECT_ID \
    --no-enable-autoscaler