使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

为什么 Amazon EC2 Auto Scaling 没有终止运行状况不佳的实例?

2 分钟阅读
0

我已经设置了一个 Amazon Elastic Compute Cloud(Amazon EC2)自动扩缩组,但它不会终止运行状况不佳的 Amazon EC2 实例。

简短描述

Amazon EC2 Auto Scaling 能够自动使用 Amazon EC2 状态检查和弹性负载平衡(ELB)运行状况检查来确定实例的运行状况。Amazon EC2 自动扩缩组的所有扩缩操作都记录在 Amazon EC2 控制台的活动历史记录中。有时,仅从活动历史记录无法确定 Amazon EC2 Auto Scaling 为何没有终止运行状况不佳的实例。

您可以在 Amazon EC2 控制台中找到有关运行状况不佳的实例状态以及如何终止该实例的更多详细信息。检查以下设置:

  • 运行状况检查宽限期
  • 已暂停的进程
  • EC2 控制台中的实例状态
  • 自动扩缩组中的实例状态
  • ELB 运行状况检查

解决方法

首先,记下 Amazon EC2 Auto Scaling 中实例的状态:

  1. 登录 Amazon EC2 控制台。在导航窗格的自动扩缩下,选择自动扩缩组,然后选择实例所在的组。
  2. 选择实例视图,然后记下实例的运行状况。

运行状况检查宽限期

运行状况检查宽限期到期之前,Amazon EC2 Auto Scaling 不会基于 EC2 状态检查和 ELB 运行状况检查终止已投入服务的实例。要查看宽限期的时长,请执行以下操作:

  1. Amazon EC2 控制台导航窗格的自动扩缩下,选择自动扩缩组,然后选择实例所在的组。
  2. 选择详细信息视图,然后记下运行状况检查宽限期的时长。

已暂停的进程

暂停的进程,例如 HealthCheck、ReplaceUnhealthy 或 Terminate,会影响 Amazon EC2 Auto Scaling 检测、替换或终止运行状况不佳的实例的能力:

  1. Amazon EC2 控制台导航窗格的自动扩缩下,选择自动扩缩组,然后选择实例所在的组。
  2. 选择详细信息选项卡。
  3. 选择编辑,然后从已暂停的进程中删除任何下方列出的进程(如果存在): HealthCheckReplaceUnhealthyTerminate
  4. 选择保存以恢复这些进程。

Amazon EC2 控制台中的实例状态

Amazon EC2 Auto Scaling 不会立即终止状态为“受损”的实例。相反,Amazon EC2 Auto Scaling 会等待几分钟让实例恢复。要检查实例是否受损,请执行以下操作:

  1. Amazon EC2 控制台导航窗格的实例下,选择实例,然后选择相关的实例。
  2. 选择状态检查视图,然后记下实例的状态是否为受损

Amazon EC2 Auto Scaling 还可能会延迟终止或不终止未能报告状态检查数据的实例。当 Amazon CloudWatch 中的状态检查指标没有接收到足够数据时,通常会发生这种情况。要手动终止这些实例,请执行以下操作:

  1. Amazon EC2 控制台导航窗格的实例下,选择实例,然后选择相关的实例。
  2. 选择监控视图,然后记下实例的状态。
  3. 如果状态为数据不足,请再次选择该实例,选择操作菜单,选择实例状态,然后选择终止

自动扩缩组中的实例状态

对于处于“备用”状态的实例,Amazon EC2 Auto Scaling 不会执行运行状况检查。要将“备用”实例设置回“正在使用”状态,请执行以下操作:

  1. Amazon EC2 控制台导航窗格的自动扩缩组下,选择实例所在的组,然后选择实例视图。
  2. 从筛选器菜单中选择任何生命周期状态,然后选择备用
  3. 要恢复运行状况检查,请打开实例的上下文(右键单击)菜单,然后选择设置为正在使用,这将退出备用状态

如果某个实例正在等待生命周期挂钩完成,那么 Amazon EC2 Auto Scaling 会等待该操作完成后再终止此实例。要查找实例的生命周期状态并完成生命周期挂钩,请执行以下操作:

  1. Amazon EC2 控制台导航窗格的自动扩缩下,选择自动扩缩组,然后选择实例所在的组。
  2. 选择实例视图,然后记下实例的生命周期状态。
  3. 如果状态为正在终止:等待,则可以检查心跳超时,然后运行 completing-lifecycle-action 来完成生命周期挂钩。

如果 Amazon EC2 Auto Scaling 正在等待 ELB 连接耗尽期结束,它将等待连接耗尽结束后再终止实例:

  1. Amazon EC2 控制台导航窗格的自动扩缩下,选择自动扩缩组,然后选择实例所在的组。
  2. 选择实例视图并确认实例的生命周期正在终止
  3. 选择活动历史记录视图。
  4. 筛选器中,选择正在等待 ELB 连接耗尽,以确认该组是否正在等待终止此实例。

ELB 运行状况检查

ELB 设置可能会影响运行状况检查和实例替换。查看 ELB 控制台,记下实例的状态:

  1. Amazon EC2 控制台导航窗格的负载均衡下,选择负载均衡器,然后选择该实例注册的负载均衡器。
  2. 选择实例视图,然后记下实例的状态和描述。

当组的运行状况检查配置设置为 EC2 时,Amazon EC2 Auto Scaling 不会使用 ELB 运行状况检查的结果来确定实例的运行状况。因此,Amazon EC2 Auto Scaling 不会终止未通过 ELB 运行状况检查的实例。如果实例在 ELB 控制台上的状态为“停止服务”,但该实例在 Amazon EC2 Auto Scaling 控制台上的状态为“正常”,请确认运行状况检查类型是否设置为 ELB:

  1. Amazon EC2 控制台导航窗格的自动扩缩下,选择自动扩缩组,然后选择实例所在的组。
  2. 选择详细信息视图,然后记下运行状况检查类型
  3. 选择编辑,为运行状况检查类型选择 ELB,然后选择保存

如果该组的运行状况检查类型已经是 ELB,并且该实例在 ELB 控制台上的状态为“停止服务”,则使用您之前记下的状态描述来确定接下来的操作:

  • 实例注册仍在进行中:等待负载均衡器完成该实例的注册并等待实例进入正在使用状态。
  • 实例位于 Amazon EC2 可用区中,但其负载均衡器未配置为将流量路由到该可用区编辑自动扩缩组或负载均衡器的子网,确保它们与实例的子网相同。
  • 实例尚未连续通过配置的 HealthyThreshold 运行状况检查次数:等待 ELB 完成运行状况检查,等待实例进入正在使用状态。

相关信息

通过故障状态检查来排查实例问题

为什么 Amazon EC2 Auto Scaling 终止了实例?

AWS 官方
AWS 官方已更新 2 年前