Amazon EC2 Auto Scaling 问题排查:运行状况检查 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon EC2 Auto Scaling 问题排查:运行状况检查

此页面提供有关由于运行状况检查而终止的 EC2 实例信息。它描述潜在原因以及可用于解决问题的步骤。

要检索错误消息,请参阅检索来自扩缩活动的错误消息

注意

当 Amazon EC2 Auto Scaling 终止 Auto Scaling 组中的实例时,包括实例终止的原因不是由于扩展活动而导致的情况下,您会收到通知。有关更多信息,请参阅 亚马逊 EC2 Auto Scaling 的亚马逊 SNS 通知选项

以下各节介绍了最常见的运行状况检查错误和您将遇到的原因。如果您有其他问题,请参阅以下 Amazon 知识中心文章以获取其他故障排查帮助:

实例因 EC2 实例状态检查失败而停止使用

问题:Auto Scaling 实例未通过 Amazon EC2 状态检查。

原因 1:如果存在导致 Amazon EC2 考虑您的 Auto Scaling 组中的实例受损的问题,Amazon EC2 Auto Scaling 会自动替换受损的实例,作为其运行状况检查的一部分。状态检查是内置到 Amazon EC2 中的,所以不能禁用或删除。当实例状态检查失败时,通常必须通过更改实例配置来自行解决问题直到应用程序不再出现任何问题。

解决方案 1:要解决该问题,请按照以下步骤操作:

  1. 手动创建不是 Auto Scaling 组一部分的 Amazon EC2 实例并调查问题。有关调查受损实例的一般帮助,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的通过故障状态检查来排查实例问题适用于 Windows 实例的 Amazon EC2 用户指南中的对 Windows 实例进行故障排查

  2. 在确认实例已成功启动且运行状况良好后,请将新的、无错误的实例配置部署到 Auto Scaling 组。

  3. 删除您创建的实例以免对 Amazon 账户继续产生费用。

原因 2:运行状况检查宽限期与实例启动时间不匹配。

解决方案 2:将您的 Auto Scaling 组的运行状况检查宽限期编辑为适合您的应用程序的适当时间段。在 Auto Scaling 组中启动的实例需要足够的预热时间(宽限期),以防因运行状况检查替换而提前终止。有关更多信息,请参阅 设置自动扩缩组的运行状况检查宽限期

实例因 EC2 计划重新启动而停止使用

问题:当计划事件指示实例存在问题时,Auto Scaling 实例被替换。

原因:Amazon EC2 Auto Scaling 将利用未来的计划维护或停用事件替换实例。

解决方案:这些事件不会频繁发生。如果您需要在正在终止的实例上或正在启动的实例上执行某些操作,则可以使用生命周期钩子。这些挂钩允许您在 Amazon EC2 Auto Scaling 启动或终止实例时执行自定义操作。有关更多信息,请参阅 Amazon EC2 Auto Scaling 生命周期钩子

如果您不想因计划事件而替换实例,可以暂停 Auto Scaling 组的运行状况检查流程。有关更多信息,请参阅 暂停和恢复 Amazon EC2 Auto Scaling 流程

实例因 EC2 运行状况检查而停止服务指示它已终止或停止

问题:已停止、重新启动或终止的 Auto Scaling 实例将被替换。

原因 1:用户已手动停止、重新启动或终止实例。

解决方案 1:如果运行状况检查因用户手动停止、重新启动或终止实例而失败,则这是由于 Amazon EC2 Auto Scaling 运行状况检查的工作原理造成的。实例必须运行正常且可访问。如果您需要重启 Auto Scaling 组中的实例,我们建议您首先将实例置于备用状态。有关更多信息,请参阅 临时从 Auto Scaling 组中移除实例

请注意,当您手动终止实例时,必须在实际终止实例之前完成终止生命周期挂钩和 Elastic Load Balancing 取消注册(以及连接耗尽)。

原因 2:Amazon EC2 Auto Scaling 尝试在 Amazon EC2 竞价服务中断实例后替换竞价型实例,因为 Spot 价格上涨超过您的最高价或容量不再可用。

解决方案 2:无法保证在任何给定时间点存在竞价型实例来满足请求。但是,您可以尝试以下操作:

  • 使用更高的 Spot 最高价(可能是按需价格)。通过设置更高的最高价,Amazon EC2 竞价服务可以更好地启动和保持您所需的容量。

  • 通过在多个可用区中运行多个实例类型,增加您可以从中启动实例的不同容量池的数量。有关更多信息,请参阅 Auto Scaling 组具有多个实例类型和购买选项

  • 如果您使用多个实例类型,请考虑启用容量再平衡功能。如果您希望 Amazon EC2 竞价服务在运行实例终止之前尝试启动新的竞价型实例,这将非常有用。有关更多信息,请参阅 使用容量重新平衡来处理 Amazon EC2 竞价型实例中断

原因 3:对于容量块,Amazon EC2 会在容量块结束前 30 分钟终止所有仍在运行的实例。这种突然终止会导致您的 Auto Scaling 组尝试启动新实例以保持其所需容量,即使容量块即将结束。

解决方案 3:要解决此问题,请尝试以下方法:

  • 减少 Auto Scaling 组的所需容量,以防止其尝试启动新实例。有关更多信息,请参阅 Amazon EC2 Auto Scaling 的手动扩缩

  • 确保在容量区块结束前 30 分钟在 Auto Scaling 组中进行扩展,这样就不会经常遇到此错误。确保所有生命周期挂钩在容量区块结束前 30 分钟完成。有关更多信息,请参阅 使用容量块处理机器学习工作负载

实例因 ELB 系统运行状况检查失败而停止服务

问题:Auto Scaling 实例可能会通过 EC2 状态检查。但是,它们可能无法对已注册 Auto Scaling 组的目标组或经典负载均衡器进行 Elastic Load Balancing 运行状况检查。

原因:如果您的 Auto Scaling 组依赖于 Elastic Load Balancing 提供的运行状况检查,Amazon EC2 Auto Scaling 通过检查 EC2 状态检查和 Elastic Load Balancing 运行状况检查的结果来确定实例的运行状况。负载均衡器通过向每个实例发送请求并等待正确响应或与实例建立连接来执行运行状况检查。实例未能通过 Elastic Load Balancing 运行状况检查,可能是因为实例中运行的应用程序发生问题,导致负载均衡器将实例视为停止服务。有关更多信息,请参阅 向 Auto Scaling 组添加 Elastic Load Balancing 运行状况检查

解决方案 1:要通过 Elastic Load Balancing 运行状况检查,请执行以下操作:

  • 记住负载均衡器所需的成功代码,并且验证应用程序已正确配置为在成功时返回这些代码。

  • 验证负载均衡器和 Auto Scaling 组的安全组是否已正确配置。

  • 验证目标组的运行状况检查设置是否已正确配置。您定义每个目标组的负载均衡器的运行状况检查设置。

  • 考虑向 Auto Scaling 组添加启动生命周期挂钩,以确保实例上的应用程序在生命周期挂钩结束时准备好接受流量。

  • 将 Auto Scaling 组的运行状况检查宽限期设置为足够长的时间段,以支持 Elastic Load Balancing 认为新启动的实例正常运行状况检查所需的连续成功次数。

  • 验证负载均衡器是否配置在与 Auto Scaling 组相同的可用区中。

有关更多信息,请参阅以下主题:

解决方案 2:更新 Auto Scaling 组以禁用 Elastic Load Balancing 运行状况检查。