自动扩缩组中实例刷新的工作原理 - Amazon A EC2 uto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

自动扩缩组中实例刷新的工作原理

本主题描述了实例刷新的工作原理,并介绍有效使用该功能需要了解的主要概念。

工作方式

要刷新自动扩缩组中的实例,您可以定义一个新配置,其中包含应用程序的最新版本以及您要进行的任何其他更新。然后,启动实例刷新,以根据该配置将现有实例替换为新实例。

执行实例刷新:

  1. 创建新的启动模板或使用所需配置更改(例如,新的亚马逊机器映像(AMI))更新现有模板。有关更多信息,请参阅 为 Auto Scaling 组创建启动模板

  2. 使用 Amazon A EC2 uto Scaling 控制台或软件开发工具包开始刷新实例: Amazon CLI

    • 指定新启动模板或您创建的启动模板版本。这将用于启动新实例。

    • 设置首选的最小和最大运行正常百分比。这可以控制同时替换多少个实例,以及是否在终止旧实例之前启动新实例。

    • 配置任何可选设置,例如:

      • 检查点:在完成一定比例的替换后暂停实例刷新以验证进度。

      • 烘焙时间-在实例刷新结束时暂停以验证实例运行状况,然后才认为实例刷新已完成。

      • 跳过匹配:将旧实例与新配置进行比较,仅替换不匹配的实例。当您从控制台开始实例刷新时,默认情况下会开启跳过匹配。

      • 多个实例类型:作为所需配置的一部分,应用新的或更新的混合实例策略

实例刷新开始后,Amazon A EC2 uto Scaling 将:

  • 根据最小和最大运行正常百分比分批替换实例。

  • 如果最小运行正常百分比设置为 100%,则应先启动新实例,然后再终止旧实例。这可确保始终保持所需容量。

  • 检查实例的运行状况,让它们有时间进行预热,然后再替换更多实例。

  • 终止并替换被发现运行状况不佳的实例。

  • 实例刷新成功后,使用新的配置更改自动更新自动扩缩组设置。

  • 先替换 InService 实例,然后再替换暖池中的实例。

以下流程图说明了将最小运行正常百分比设置为 100% 时终止前启动的行为。

该图显示当最小运行正常百分比设置为 100% 时实例刷新如何工作。
注意

仅当您尚未设置实例维护策略或需要覆盖实例维护策略时,才需要指定实例刷新的最小和最大运行正常百分比。有关更多信息,请参阅 实例维护策略

同样,仅当您尚未启用默认预热或需要覆盖默认预热时,才需要为实例刷新指定实例预热期。有关更多信息,请参阅 为 Auto Scaling 组设置原定设置实例预热

核心概念

在您开始之前,请熟悉以下实例刷新核心概念:

最低运行正常百分比

最小运行正常百分比是实例刷新期间保持可用、运行正常且随时可用的所需容量的百分比。例如,如果最低运行正常百分比为 90%,最高运行正常百分比为 100%,那么一次将替换的容量百分比为 10%。如果新实例未通过运行状况检查,Amazon A EC2 uto Scaling 将终止并替换它们。如果实例刷新无法启动任何运行正常的实例,则它最终将失败,使组中其他的 90% 保持不变。如果新实例保持健康状态并完成预热期,Amazon A EC2 uto Scaling 可以继续替换其他实例。

实例刷新可以一次替换一个实例,一次替换多个实例,也可以一次替换全部实例。要一次替换一个实例,请将最低和最高运行正常百分比均设置为 100%。这会将实例刷新的行为更改为在终止之前启动,从而防止组的容量降至其所需容量的 100% 以下。要一次替换全部实例,将最低运行正常百分比设置为 0%。

最高运行正常百分比

最高运行正常百分比是替换实例时您的自动扩缩组可以增加到的所需容量的百分比。最小值和最大值之间的差值不能大于 100。范围越大,可以同时替换的实例的数量就会增加。

实例预热

实例预热是从新实例的状态变为 InService 之时起到其被视为已完成初始化之时止需要经过的时间段。在实例刷新期间,如果实例通过了运行状况检查,Amazon A EC2 uto Scaling 在确定新启动的实例运行状况良好后,不会立即开始替换下一个实例。它会等待预热期结束,然后继续替换下一个实例。如果应用程序在响应请求之前仍需要一些初始化时间,此功能可能很有用。

实例预热与默认实例预热的工作方式相同。因此,同样的扩缩注意事项也适用。有关更多信息,请参阅 为 Auto Scaling 组设置原定设置实例预热

所需配置

所需的配置是您希望 Amazon A EC2 uto Scaling 在您的 Auto Scaling 组中部署的新配置。例如,您可以为实例指定新的启动模板和新的实例类型。在实例刷新期间,Amazon A EC2 uto Scaling 会将 Auto Scaling 组更新为所需的配置。如果在实例刷新期间发生扩展事件,Amazon A EC2 uto Scaling 会启动具有所需配置而不是组当前设置的新实例。实例刷新成功后,Amazon A EC2 uto Scaling 会更新 Auto Scaling 组设置,以反映您在实例刷新过程中指定的新的所需配置。

跳过匹配

跳过匹配会让 Amazon A EC2 uto Scaling 忽略已经有最新更新的实例。这样,您就无需替换超过所需数量的实例。当您希望确保自动扩缩组使用特定版本的启动模板,并且只替换那些使用其他版本的实例时,这是很有用的。

检查点

检查点是实例刷新在指定时间内暂停的时间点。实例刷新可以包含多个检查点。Amazon A EC2 uto Scaling 会为每个检查点发出事件。因此,您可以添加一条 EventBridge 规则,将事件发送到目标(例如 Amazon SNS),以便在到达检查点时收到通知。达到某个检查点后,您将有机会验证您的部署。如果发现任何问题,您可以取消实例刷新,或回滚实例。分阶段部署更新的能力是检查点的一个关键优势。如果不使用检查点,则会持续执行滚动替换。

要详细了解在开始实例刷新时可以配置的所有默认设置,请参阅 了解实例刷新的默认值

运行状况检查宽限期

Amazon A EC2 uto Scaling 根据您的 Auto Scaling 组使用的运行状况检查的状态来确定实例是否运行正常。有关更多信息,请参阅 自动扩缩组中实例的运行状况检查

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

实例类型兼容性

在更改实例类型之前,最好验证它是否适用于您的启动模板。这确认了与您指定的 AMI 的兼容性。例如,如果您从半虚拟化(PV)AMI 启动了原始实例,但希望更改为仅受硬件虚拟机(HVM)AMI 支持的最新一代实例类型。在这种情况下,您必须在启动模板中使用 HVM AMI。

要在不启动实例的情况下确认实例类型的兼容性,请使用带 --dry-run 选项的 run-instances 命令,如以下示例所示。

aws ec2 run-instances --launch-template LaunchTemplateName=my-template,Version='1' --dry-run

有关如何确定兼容性的信息,请参阅 Amazon EC2 用户指南更改实例类型的兼容性。

限制

  • 总持续时间:实例刷新可继续主动替换实例的最长时间为 14 天。

  • 加权组特有的行为差异:如果混合实例组配置的实例权重大于或等于该组的所需容量,则 Amazon A EC2 uto Scaling 可能会同时替换所有InService实例。为避免这种情况,请遵循 配置自动扩缩组以使用实例权重 主题中的建议。指定所需容量,该容量大于在自动扩缩组中使用权重时的最大权重。

  • 一小时超时:当实例刷新由于等待替换处于待机状态的实例或受保护而无法继续进行替换,或者新实例未通过运行状况检查时,Amazon A EC2 uto Scaling 会继续重试一个小时。它还将提供状态消息以帮助您解决问题。如果问题在一小时后仍然存在,则操作失败。这样做的目的是在出现临时问题时给它时间恢复。

  • 通过用户数据部署代码:跳过匹配不会检查通过用户数据脚本部署的代码更改。如果您使用用户数据提取新代码并在新实例上安装这些更新,则建议您关闭跳过匹配功能,以确保所有实例都能收到您的最新代码,即使没有启动模板版本更新也是如此。

  • 更新限制:如果您在具有所需配置的实例刷新处于活动状态时,尝试更新自动扩缩组的启动模板、启动配置或混合实例策略,则请求将失败,并显示以下验证错误:An active instance refresh with a desired configuration exists. All configuration options derived from the desired configuration are not available for update while the instance refresh is active.