

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

# 自动扩缩组的实例维护策略
<a name="instance-maintenance-policy-overview-and-considerations"></a>

本主题概述了可用选项，并介绍了创建实例维护策略时需要考虑的内容。

**Topics**
+ [概述](#instance-maintenance-policy-overview)
+ [核心概念](#instance-maintenance-policy-core-concepts)
+ [实例预热](#instance-maintenance-policy-instance-warm-up)
+ [运行状况检查宽限期](#instance-maintenance-policy-health-check-grace-period)
+ [扩展您的自动扩缩组](#instance-maintenance-policy-scaling-limits)
+ [应用场景示例](#instance-maintenance-policy-scenarios)

## 概述
<a name="instance-maintenance-policy-overview"></a>

当您为自动扩缩组创建实例维护策略时，该策略会影响导致实例被替换的 Amazon EC2 Auto Scaling 事件。这样可以在同一自动扩缩组中实现更一致的替换行为。它还允许您根据需要优化群组的可用性或成本。

在控制台中，有以下配置选项可用：
+ **终止前启动** – 必须先配置新实例，然后才能终止现有实例。对于偏向于可用性而不是成本节约的应用程序来说，这种方法是一个不错的选择。
+ **终止并启动** – 在终止现有实例的同时配置新实例。对于偏向于节省成本而不是可用性的应用程序来说，这种方法是一个不错的选择。对于启动容量不应超过当前可用容量的应用程序来说，这也是一个不错的选择，即使在替换实例时也是如此。
+ **自定义策略** – 此选项允许您在替换实例时使用自定义的最小和最大容量范围来设置策略。这种方法可以帮助您在成本和可用性之间取得适当的平衡。

自动扩缩组的默认设置是没有实例维护策略，这会使它以默认行为响应实例维护事件。下表描述了默认行为。


**实例维护事件默认行为**  

|  事件  |  说明  |  默认 行为  | 
| --- | --- | --- | 
|  运行状况检查失败  |  当实例未通过运行状况检查时自动发生。Amazon EC2 Auto Scaling 替换运行状况检查失败的实例。有关运行状况检查失败的原因，请参阅 [自动扩缩组中实例的运行状况检查](ec2-auto-scaling-health-checks.md)。  |  终止并启动。  | 
|  实例刷新  |  在启动实例刷新时发生。根据您的配置，实例刷新可以一次替换一个实例，一次替换多个实例，也可以一次替换全部实例。有关更多信息，请参阅 [使用实例刷新更新自动扩缩组中的实例](asg-instance-refresh.md)。  |  终止并启动。  | 
|  最大实例生命周期  |  当实例达到您为自动扩缩组指定的最大实例生命周期时，会自动发生。Amazon EC2 Auto Scaling 替代已达到实例最大使用寿命的实例。有关更多信息，请参阅 [基于最大实例生命周期替换 Auto Scaling 实例](asg-max-instance-lifetime.md)。  |  终止并启动。  | 
|  再平衡  |  如果存在导致组不平衡的潜在变化，则会自动发生。Amazon EC2 Auto Scaling 在以下情况下重新平衡该组： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/autoscaling/ec2/userguide/instance-maintenance-policy-overview-and-considerations.html)  |  在终止之前启动。 Amazon EC2 Auto Scaling 最多可超出组的规模限制，最高可超过其*最大容量*的 10%。但是，如果您使用容量再平衡，则最多只能超过*所需容量*的 10%。  | 

在以下情况下，Amazon EC2 Auto Scaling 将继续默认终止并启动。因此，当其中一种情况发生时，您的组容量可能会低于您的实例维护策略的下限阈值。
+ 当实例意外终止时，例如由于人为行为。Amazon EC2 Auto Scaling 会立即替换不再运行的实例。有关更多信息，请参阅 [Amazon EC2 运行状况检查](health-checks-overview.md#instance-health-detection)。
+ 当 Amazon EC2 作为计划事件的一部分重启、停止或停用实例时，Amazon EC2 Auto Scaling 可以启动替代实例。有关这些事件的更多信息，请参阅《Amazon EC2 用户指南》**中的[实例的计划事件](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html)。
+ 当 Amazon EC2 竞价服务启动竞价型实例时会中断，竞价型实例随后被强制终止。

对于竞价型实例，如果您在自动扩缩组上启用了容量再平衡，则该实例可能已经有一个来自我们在启动竞价中断之前启动的不同竞价池中的待处理实例。有关容量重新平衡的工作方式的详细信息，请参阅 [Auto Scaling 进行容量再平衡以替换存在风险的竞价型实例](ec2-auto-scaling-capacity-rebalancing.md)。

但是，由于不能保证竞价型实例保持可用状态，并且可以在两分钟内发出竞价型实例中断通知后终止，因此，如果实例在新实例启动之前中断，则可能会超过您的实例维护政策的下限阈值。

## 核心概念
<a name="instance-maintenance-policy-core-concepts"></a>

在您开始之前，请熟悉以下核心概念和术语：

**所需容量**  
*所需容量*是自动扩缩组在创建时的容量。这也是该组在没有附加任何扩展条件时尝试保持的容量。

**实例维护政策**  
*实例维护策略*控制是否在因实例维护事件而终止现有实例之前先配置实例。它还决定了您的自动扩缩组可能在多大程度上低于或超过所需容量才能同时替换多个实例。

**最高运行正常百分比**  
*最高运行正常百分比*是替换实例时您的自动扩缩组可以增加到的所需容量的百分比。它表示组中可以处于运行状态且运行状况良好或待处理以支持您的工作负载的最大百分比。在控制台中，使用**终止前启动**选项或**自定义策略**选项时，您可以设置最高运行正常百分比。有效值为 100–200%。

**最低运行正常百分比**  
*最低运行正常百分比*是在替换实例时保持正常运行、运行良好且随时可用于支持您的工作负载的所需容量的百分比。成功完成首次运行状况检查并且经过指定的预热时间后，该实例被视为运行状况良好，可以随时使用。在控制台中，使用**终止并启动**选项或**自定义策略**选项时，您可以设置最低运行正常百分比。有效值为 0–100%。  
要更快地替换实例，您可以指定较低的最低运行正常百分比。但是，如果运行正常的实例不足，则可用性可能会降低。我们建议选择一个合理的值，以便在需要替换多个实例的情况下保持可用性。

## 实例预热
<a name="instance-maintenance-policy-instance-warm-up"></a>

如果您的实例在进入`InService`状态后需要时间进行初始化，请为您的自动扩缩组启用默认实例预热。使用默认实例预热，您可以防止实例在准备就绪之前计入最低运行正常百分比。这可以确保 Amazon EC2 Auto Scaling 在终止现有实例之前考虑需要多长时间才能有足够的容量来支持工作负载。

此外，启用默认实例预热功能后，您可以改进用于动态扩展的 Amazon CloudWatch 指标。如果您的 Auto Scaling 组有任何扩展策略，则当该组向外扩展时，它将使用相同的默认预热期，以防止在实例完成初始化之前将其计入 CloudWatch 指标。

有关更多信息，请参阅 [为 Auto Scaling 组设置原定设置实例预热](ec2-auto-scaling-default-instance-warmup.md)。

## 运行状况检查宽限期
<a name="instance-maintenance-policy-health-check-grace-period"></a>

Amazon EC2 Auto Scaling 会根据您的自动扩缩组所使用的运行状况检查的状态来确定实例是否运行正常。有关更多信息，请参阅 [自动扩缩组中实例的运行状况检查](ec2-auto-scaling-health-checks.md)。

为确保这些运行状况检查尽快开始，请勿将组的运行状况检查宽限期设置得过高，而应设置得足够高，以便 Elastic Load Balancing 运行状况检查确定目标是否可用于处理请求。有关更多信息，请参阅 [设置自动扩缩组的运行状况检查宽限期](health-check-grace-period.md)。

## 扩展您的自动扩缩组
<a name="instance-maintenance-policy-scaling-limits"></a>

实例维护策略仅适用于实例维护事件，并不阻止手动或自动扩缩组。

当您的自动扩缩组中附加了扩展策略或计划操作时，它们可以在实例维护事件发生时并行运行。在这种情况下，他们可以增加或减少组的所需容量，但只能在您定义的扩展限制范围内。有关这些限制的更多信息，请参阅[为自动扩缩组设置扩缩限制](asg-capacity-limits.md)。

## 应用场景示例
<a name="instance-maintenance-policy-scenarios"></a>

在典型情况下，您的实例维护策略和所需容量可能如下所示：
+ 最低运行正常百分比 = 90%
+ 最高运行正常百分比 = 120%
+ 所需容量 = 100

在任何实例维护事件中，您的自动扩缩组可能少则有 90 个实例，而多则有 120 个实例。事件发生后，该组恢复到拥有 100 个实例的状态。

当您对具有暖池的自动扩缩组使用实例维护策略时，最低和最高运行正常百分比将分别应用于自动扩缩组和暖池。

例如，假设这是您的配置：
+ 最低运行正常百分比 = 90%
+ 最高运行正常百分比 = 120%
+ 所需容量 = 100
+ 暖池大小 = 10

如果您启动实例刷新以回收该组的实例，Amazon EC2 Auto Scaling 会先替换自动扩缩组中的实例，然后替换温池中的实例。虽然 Amazon EC2 Auto Scaling 仍在努力替换自动扩缩组中的实例，但该组可能少则有 90 个实例，而多则有 120 个实例 完成组的操作后，Amazon EC2 Auto Scaling 可以替换暖池中的实例。发生这种情况时，温暖池可能少则有 9 个实例，而多则有 12 个实例。