动态缩放 Amazon EC2 Auto Scaling - Amazon EC2 Auto Scaling
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

动态缩放 Amazon EC2 Auto Scaling

当您配置动态扩展时,必须定义如何根据不断变化的需求扩展 Auto Scaling 组的容量。

例如,假设您有一个当前在两个实例上运行的 Web 应用程序,并希望在应用程序负载变化时将 Auto Scaling 组的 CPU 使用率保持在 50% 左右。这为您提供额外容量以处理流量高峰,而无需维护过多的空闲资源。

您可以配置 Auto Scaling 通过创建扩展策略来动态扩展组以满足这一需求。 Amazon EC2 Auto Scaling 然后,可以扩展您的组(添加更多实例),以处理高峰时间的高需求,以及在您的组中扩展(运行较少的实例),以降低在低利用率期间的成本。

扩展策略如何工作

扩展策略指示 Amazon EC2 Auto Scaling 追踪特定的 CloudWatch 度量标准,并且定义了在相关的 CloudWatch 警报处于警报状态。用于触发警报的指标是来自 Auto Scaling 组中所有实例的指标聚合。(例如,我们说你有 Auto Scaling 组中有两个实例,其中一个实例为60%CPU,另一个实例为40%CPU。平均情况下,它们的CPU为50%)。当政策有效时, Amazon EC2 Auto Scaling 触发警报时,可以向上或向下调整组的所需容量。

执行扩展策略时,如果容量计算生成的数字超出了组的最小和最大大小的范围,则 Amazon EC2 Auto Scaling 确保新容量永远不会超出最小和最大大小限制。容量以两种方式之一来衡量:使用您在实例中设置所需容量时选择的相同单位,或使用容量单位(如果 实例权重 已应用)。

  • 示例 #1 一个 Auto Scaling 组的最大容量为3,当前容量为2,并且扩展策略添加了3个实例。执行此扩展策略时,Amazon EC2 Auto Scaling 仅向组添加 1 个实例,以防止组超出其最大大小。

  • 示例 2 一个 Auto Scaling 组的最小容量为2、当前容量3以及删除2个实例的缩放策略。执行此扩展策略时,Amazon EC2 Auto Scaling 仅从组中删除 1 个实例,以防止组小于其最小大小。

当所需容量达到最大大小限制时,向外扩展停止。如果需求下降并且容量下降,则 Amazon EC2 Auto Scaling 会再次向外扩展。

但使用实例权重时例外。在这种情况下,Amazon EC2 Auto Scaling 可以向外扩展并超过最大大小限制,但上限为您的最大实例权重。其目的是尽可能接近新的所需容量,但仍然遵循为该组指定的分配战略。分配策略决定要启动的实例类型。权重根据实例类型确定每个实例向所需的组容量贡献的容量单位数。

  • 示例 3 一个 Auto Scaling 组的最大容量为12,当前容量为10,扩展策略为5个容量单位。向实例类型分配三个权重之一:1、4 或 6。执行扩展策略时,Amazon EC2 Auto Scaling 根据分配策略,选择启动权重为 6 的实例类型。此横向扩展事件的结果是得到所需容量为 12、当前容量为 16 的组。

扩展策略类型

Amazon EC2 Auto Scaling 支持以下类型的扩展策略:

  • 目标跟踪缩放—基于特定度量标准的目标值增加或减少组的当前容量。这类似于您的恒温器维持家温温度的方式—您选择一个温度并且恒温器会执行其余操作。

  • 步骤缩放—基于一组扩展调整来增加或减少组的当前容量,称为 步骤调整,根据警报违规的大小。

  • 简单缩放—基于单个缩放调整增加或减少组的当前容量。

如果您根据一个按 Auto Scaling 组中的实例数成比例增减的使用率指标进行扩展,我们建议您使用目标跟踪扩展策略。否则,我们建议您使用步进扩展策略。

多个扩展策略

在大多数情况下,目标跟踪扩展策略就足以将您的 Auto Scaling 组配置为自动横向扩展和缩减。目标跟踪扩展策略允许您选择所需结果,并让 Auto Scaling 组根据需要添加和删除实例以实现该结果。

对于高级扩展配置,您的 Auto Scaling 组可以有多个扩展策略。例如,您可以定义一个或多个目标跟踪扩展策略,一个或多个步进扩展策略,或者同时使用两种策略。这样可以更灵活地覆盖多种场景。

要说明多个扩展策略如何合作,请考虑使用 Auto Scaling 组和 Amazon SQS 将请求发送到单个EC2实例的队列。为了帮助确保应用程序性能达到最佳级别,有两个策略用于控制何时扩展 Auto Scaling 组。一个是使用自定义指标、根据队列中的 SQS 消息数增加和移除容量的目标跟踪策略。另一个是使用 Amazon CloudWatch CPUUtilization 当实例在指定的时间长度超过90%时添加容量的度量。

在同时实施多个策略时,各个策略可能会同时指示 Auto Scaling 组扩展(或缩减)。例如, CPUUtilization 度量标准峰值并触发 CloudWatch 与SQS自定义度量标准峰值同时发生警报,并触发自定义度量标准警报。

如果发生上述情况,Amazon EC2 Auto Scaling 会选择在扩展和缩减时都提供最大容量的策略。例如,假定 CPUUtilization 策略启动一个实例,而 SQS 队列的策略启动两个实例。如果同时满足两个策略的扩展条件,Amazon EC2 Auto Scaling 优先选择 SQS 队列策略。这会导致 Auto Scaling 组启动两个实例。

即使策略使用不同的扩展条件,使提供最大容量的策略具有优先级的方法也适用。例如,如果一个策略终止三个实例,另一个策略将实例数量减少 25%,且在扩展时组中有八个实例,则 Amazon EC2 Auto Scaling 会优先考虑为组提供最大数量实例的策略。这会导致 Auto Scaling 组终止两个实例(8 X 25% = 2)。目的是防止 Amazon EC2 Auto Scaling 删除过多实例。

不过,在将目标跟踪扩展策略与步进扩展策略结合使用时,我们建议您务必谨慎,因为这些策略之间的冲突可能会导致意外的行为。例如,如果步进扩展策略在目标跟踪策略准备执行缩减之前启动缩减活动,则不会阻止缩减活动。在缩减活动完成后,目标跟踪策略可能会指示组重新横向扩展。