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

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

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

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

要检索错误消息,请参阅从扩展活动中检索错误消息

注意

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

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

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

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

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

解决方案 1:要解决这一问题,请完成以下步骤:

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

  2. 确认一切工作正常后,请将新的无错误实例配置部署到 Auto Scaling 组。

  3. 删除您创建的实例,避免对您的Amazonaccount.

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

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

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

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

原因:Amazon EC2 Auto Scaling 将在计划时间之前使用未来的计划维护或停用事件替换实例。

解决方案:这些事件不会频繁发生。如果您不想由于计划事件而替换实例,可以暂停 Auto Scaling 组的运行状况检查流程。有关更多信息,请参阅 暂停和恢复 Auto Scaling 组的流程

或者,如果您需要在正在终止的实例上或正在启动的实例上发生某些事情,则可以使用生命周期挂钩。这些挂钩允许您在 Amazon EC2 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 竞价服务中断实例后替换竞价型实例,因为竞价价格上涨超过您的最高价格或容量不再可用。

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

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

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

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

实例因 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 组

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

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

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

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

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

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

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

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

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