对 Amazon EC2 Auto Scaling 中运行不正常的实例进行故障排除 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

对 Amazon EC2 Auto Scaling 中运行不正常的实例进行故障排除

以下是 Amazon EC2 Auto Scaling 返回的错误消息、潜在原因以及您可以采取的解决问题的步骤。

要检索错误消息,请参阅查看运行状况检查失败原因

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

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

原因 1:如果存在问题导致 Amazon EC2 认为您的 Auto Scaling 组中的实例受损,Amazon EC2 Auto Scaling 将在运行状况检查中自动替换这些实例。

解决方案 1:当实例状态检查失败时,您通常必须通过更改实例配置来自行解决问题,直到您的应用程序不再出现任何问题。要解决该问题,请完成以下步骤:

  1. 手动创建不是 Auto Scaling 组一部分的 Amazon EC2 实例并调查问题。有关调查受损实例的一般帮助,请参阅 Amazon EC2 用户指南中的状态检查失败的实例疑难解答和 Amaz on EC2 用户指南中的 Windows 实例疑难解答。

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

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

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

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

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

解决方案 1:如果您需要停止或重启 Auto Scaling 组中的实例,我们建议您先将这些实例置于备用状态。有关更多信息,请参阅 临时从 Auto Scaling 组中移除实例

原因 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 分钟完成。有关更多信息,请参阅 Capacity Blocks用于机器学习工作负载

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

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

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

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

  • 验证目标组的运行状况检查设置是否已正确配置。您定义每个目标组的负载均衡器的运行状况检查设置。有关更多信息,请参阅 为目标配置运行状况检查

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

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

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

解决方案 2:更新 Auto Scaling 组以禁用 Elastic Load Balancing 运行状况检查。有关如何禁用这些运行状况检查的说明,请参阅将 Elastic Load Balancing 负载均衡器附加到您的 Auto Scaling 组

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

解决方案 3:编辑 Auto Scaling 组的运行状况检查宽限期。将宽限期设置为足够长的时间段,以支持 Elastic Load Balancing 认为新启动的实例运行状况正常之前所需的连续成功运行状况检查次数。有关更多信息,请参阅 设置自动扩缩组的运行状况检查宽限期

其他 资源

如果您遇到其他问题,请参阅以下 Amazon Web Services re:Post 文章以获取更多疑难解答帮助: