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

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

实例刷新的工作原理

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

工作方式

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

要执行实例刷新,请执行以下操作:

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

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

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

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

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

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

      • 跳过匹配 — 将旧实例与新配置进行比较,只替换不匹配的实例。当您从控制台启动实例刷新时,跳过匹配功能默认处于启用状态。

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

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

  • 根据最小和最大健康百分比分批替换实例。

  • 如果最低运行状况百分比设置为 100%,则应先启动新实例,然后再终止旧实例。这样可以确保您所需的容量始终保持不变。

  • 在替换更多实例之前,请检查实例的运行状况,让它们有时间进行预热。

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

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

  • 在温池中的InService实例之前替换实例。

以下流程图说明了将最低健康百分比设置为 100% 时终止前启动的行为。

该图显示了当最低运行状况百分比设置为 100% 时实例刷新的工作原理。
注意

只有在您尚未设置实例维护策略或需要覆盖现有策略的情况下,才需要指定实例刷新的最小和最大运行状况百分比。有关更多信息,请参阅 实例维护策略

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

核心概念

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

最低运行正常百分比

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

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

最高运行正常百分比

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

实例预热

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

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

所需配置

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

跳过匹配

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

检查点

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

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

运行状况检查宽限期

Amazon EC2 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

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

限制

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

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

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

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

  • 更新限制:如果您在具有所需配置的实例刷新处于活动状态时尝试更新 Auto 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.