

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用基于负载的自动扩展
<a name="workinginstances-autoscaling-loadbased"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

基于负载的实例允许您快速启动或停止实例，以响应传入流量的变化。 OpsWorks Stacks 使用 [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/) 数据计算每个层的以下指标，这些指标表示该层所有实例的平均值：
+ CPU：平均 CPU 消耗，如 80%
+ 内存：平均内存消耗，如 60%
+ 负载：一个系统在一分钟内的平均计算工作。

您可以为这些指标中的任何一个或全部定义*规模升级* 和*规模降级* 阈值。您也可以使用自定义 CloudWatch 警报作为阈值。

超出阈值会触发*扩展事件*。通过指定以下值来确定 OpsWorks Stacks 如何响应扩展事件：
+ 启动或停止多少个实例。
+  OpsWorks 堆栈在超过阈值后应等待多长时间才能启动或删除实例。例如，CPU 利用率必须超过阈值至少 15 分钟。该值允许您忽略短暂的流量波动。
+  OpsWorks Stacks 在启动或停止实例后应等待多长时间才能再次监控指标。通常，需要留有足够的时间来让启动的实例上线，或让停止的实例关闭，然后再评估层是否仍超出阈值。

发生扩展事件时， OpsWorks Stacks 仅启动或停止基于负载的实例。而不启动或停止全天候实例或基于时间的实例。

**注意**  
基于负载的自动扩展不创建新实例；它仅启动和停止那些已创建的实例。因此，您必须提前配置足够的基于负载的实例来处理预期的最大负载。

**创建基于负载的实例**

1. 在**实例**页面上，选择**\$1实例**添加一个实例。选择**高级**，然后选择**基于负载**。  
![\[“Add instance (添加实例)”页面上基于负载的扩展选项\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/load_based_instances.png)

1. 配置实例，然后选择**添加实例**将实例添加到层。

重复此步骤，直到创建了足够数量的实例。稍后，您可以根据需要添加或移除实例。

将基于负载的实例添加到层后，必须启用基于负载的扩展并指定配置。基于负载的扩展配置是一种层属性，而非实例属性，它指定一个层什么时候应启动或停止其基于负载的实例。必须为每个使用基于负载的实例的层单独指定该属性。

**启用和配置基于负载的自动扩展**

1. 在导航窗格中，单击**实例**下的**基于负载**，并针对相应的层单击**编辑**。  
![\[实例层上的编辑操作\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/load_based.png)

1. 将**启用基于负载的自动扩缩**设置为**开启**。然后，设置阈值和扩展参数来定义如何以及何时添加或删除实例。  
![\[基于负载的扩展的阈值\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/load_based_config.png)  
**层-平均阈值**  
您可以基于以下值设置扩展阈值，这些值为层所有实例的平均值。  
   + **平均 CPU**：层的平均 CPU 使用率，用占总量的百分比表示。
   + **平均内存**：层的平均内存使用率，用占总量的百分比表示。
   + **平均负载**：层的平均负载。

     有关负载计算方法的更多信息，请参阅维基百科的[负载（计算）](http://en.wikipedia.org/wiki/Load_(computing))。
超过阈值会导致扩展事件，如果需要更多实例，则会扩大规模，如果需要更少的实例，则会缩小规模。 OpsWorks 然后，堆栈会根据扩展参数添加或删除实例。  
**自定义 CloudWatch 警报**  
您最多可以使用五个自定义 CloudWatch 警报作为扩大或缩小阈值。这些警报必须和堆栈在同一个区域。有关如何创建自定义警报的更多信息，请参阅创[建 Amazon CloudWatch 警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/AlarmThatSendsEmail.html)。  
要使用自定义警报，必须更新您的服务角色以允许 `cloudwatch:DescribeAlarms`。你可以让 OpsWorks Stacks 在你第一次使用此功能时为你更新角色，也可以手动编辑角色。有关更多信息，请参阅 [允许 OpsWorks Stacks 代表你行事](opsworks-security-servicerole.md)。  
当为基于负载的配置配置了多个警报时，如果警报处于 `INSUFFICIENT_DATA` 指标警报状态，则即使另一个警报处于 `ALARM` 状态，也无法进行基于负载的实例扩展。只有当所有警报都处于 `OK` 或 `ALARM` 状态时，才能继续进行自动扩缩。有关使用亚马逊 CloudWatch 警报的更多信息，请参阅[亚马逊* CloudWatch 用户指南中的使用亚马逊 CloudWatch *警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。  
**扩展参数**  
以下参数控制 OpsWorks 堆栈管理扩展事件的方式。  
   + **批量启动的服务器数**：当发生扩展事件时要添加或移除的实例数量。
   + **如果超过阈值** — 在 OpsWorks 堆栈触发扩展事件之前，负载必须保持在升级阈值或缩减阈值之下的时间（以分钟为单位）。
   + **缩放后，忽略指标** — 扩展事件发生后， OpsWorks 堆栈应忽略指标并抑制其他扩展事件的时间（以分钟为单位）。

     例如， OpsWorks Stacks 在发生升级事件后会添加新实例，但这些实例在启动和配置后才会开始减少负载。引发更多的扩展事件直到新的实例在线并处理请求，这样的做法没有意义，实例在线和处理请求通常需要花费几分钟的时间。该设置允许您指示 OpsWorks Stacks 抑制扩展事件足够长的时间以便让新的实例在线。

     您可以提高此设置，防止当**平均 CPU**、**平均内存**或**平均负载**等层平均值临时偏离时扩展突然波动。

     例如，如果 CPU 利用率超出限制并且内存使用率接近规模降级，则实例规模升级事件发生之后会紧接着发生内存规模降级事件。为防止这种情况发生，您可以增加**扩展之后，忽略指标**设置中的分钟数。在这个例子中，虽然会发生 CPU 扩展，但不会发生内存规模降级事件。

1. 要添加额外的基于负载的实例，请单击**\$1实例**，配置设置，然后单击**添加实例**。重复此步骤，直到您有足够的基于负载的实例来处理您的预期最高负载。然后选择**保存**。

**注意**  
您也可以向层中添加新的基于负载的实例，方法是打开**基于负载**页面，单击**添加基于负载的实例** (如果您尚未向层中添加任何基于负载的实例) 或 **\$1实例** (如果该层已有一个或多个基于负载的实例)。然后，如本节前面所述配置实例。

**向层中添加基于负载的现有实例**

1. 在导航窗格中，选择**实例**下的**基于负载**。

1. 如果您已为层启用了基于负载的自动扩展，则单击 **\$1实例**。否则，选择**添加基于负载的实例**。选择 “**现有**” 选项卡。  
![\[向层中添加基于负载的现有实例\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/load_based_instances_existing.png)

1. 在**现有**选项卡上，选择一个实例。该列表仅显示基于负载的实例。
**注意**  
如果您改变了主意，不想使用现有实例，可在**新建**选项卡按照上一步骤所述创建一个新实例。

1. 选择**添加实例**将实例添加到层。

您可以随时修改基于负载的自动扩展的配置或将其禁用。

**禁用基于负载的自动扩展**

1. 在导航窗格中，单击**实例**下的**基于负载**，并针对相应的层单击**编辑**。

1. 将**启用基于负载的自动扩缩**切换为**否**。