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

2 分钟阅读
0

我的 Amazon Elastic Compute Cloud(Amazon EC2)自动扩缩组终止了一个实例。但是,我没有在 Amazon EC2 控制台中看到终止原因。

简短描述

Amazon EC2 Auto Scaling 依靠 Amazon EC2 或弹性负载均衡(ELB)运行状况检查来确定实例的运行状况。您可以在 Amazon EC2 控制台的活动历史记录中查看自动扩缩组的所有扩缩操作,包括运行状况检查替换。

解决方法

若要确定故障排除步骤,请在活动历史记录视图中使用实例的描述。

首先,找到实例终止的描述和原因:

  1. 打开 Amazon EC2 控制台
  2. 在导航窗格的 Auto Scaling 下,选择 Auto Scaling 组。然后,选择您的实例所在的组。
  3. 选择活动视图,然后在活动历史记录中搜索实例终止事件。
  4. 记下实例终止事件的描述原因

若要排查导致实例终止的原因,请参阅以下描述示例。

“一个实例因 EC2 运行状况检查发现其已终止或停止而停止服务”

Amazon EC2 Auto Scaling 会终止已停止和已重启的实例。若要确定用户是手动停止还是重启了实例,请查看 AWS CloudTrail 历史记录:

  1. 打开 AWS CloudTrail 控制台
  2. 在导航窗格中,选择事件历史记录
  3. 查看 TerminateInstancesStopInstancesRebootInstances API 调用的历史记录。

“一个实例因未通过 EC2 实例状态检查而停止服务”

使用 Amazon CloudWatch 指标查找实例或系统检查失败情况:

  1. 打开 Amazon CloudWatch 控制台
  2. 在导航窗格中,选择指标,然后选择所有指标视图。
  3. 在指标面板中选择 EC2,然后选择每个实例的指标
  4. 键入 instance-id,然后选择 StatusCheckFailed_InstanceStatusCheckFailed_SystemStatusCheckFailed 以查看指标图表。

“一个实例因未通过 ELB 系统运行状况检查而停止服务”

如果您为自动扩缩组启用了弹性负载均衡运行状况检查,则 Amazon EC2 Auto Scaling 会同时执行弹性负载均衡和 EC2 运行状况检查。然后,该服务会终止未通过任一运行状况检查的实例。确认您的自动扩缩组已激活弹性负载均衡运行状况检查:

  1. 打开 Amazon EC2 控制台
  2. 在导航窗格的 Auto Scaling 下,选择 Auto Scaling 组,然后选择实例所在的组。
  3. 选择详细信息视图,然后记下运行状况检查类型
  4. 如果运行状况检查类型为“EC2、ELB”,则表示自动扩缩组已启用弹性负载均衡运行状况检查。

有关更多信息,请参阅一个实例因弹性负载均衡系统运行状况检查失败而停止服务

在某些情况下,自动扩缩组具有多个附加的目标组或负载均衡器。在这种情况下,为了使 Amazon EC2 Auto Scaling 认为实例运行状况良好,所有目标组和负载均衡器都必须将其报告为运行状况良好。

  1. 在导航窗格的 Auto Scaling 下,选择 Auto Scaling 组
  2. 选择实例所在的组,然后选择详细信息视图。
  3. 请注意负载均衡器目标群组下是否附加了多个负载均衡器。
  4. 选择目标组负载均衡器
  5. 在导航窗格的负载均衡下,选择目标群组和您的目标组,然后选择监控
  6. 若要确认实例是否未通过运行状况检查,请检查运行状况良好和运行状况不佳的主机指标图表。

查看 CloudTrail 历史记录,确定暂停的进程是否将运行状况不佳实例的终止延迟到该进程恢复为止:

  1. 打开 AWS CloudTrail 控制台
  2. 在导航窗格中,选择事件历史记录
  3. 查看 SuspendProcessesResumeProcesses API 调用的历史记录。

“一个实例因 EC2 竞价型实例中断通知而停止服务。”

当发生以下任一情况时,Amazon EC2 Auto Scaling 会终止竞价型实例:

  • 容量不再可用。
  • 竞价价格超出您为该实例指定的最高价格。

活动历史记录可能会显示该实例因运行状况检查而停止服务。若要验证终止原因,请检查竞价请求状态:

  1. 打开 Amazon EC2 控制台
  2. 在导航窗格的实例下,选择竞价请求
  3. 依次选择竞价请求和描述视图,然后记下状态

“一个实例因用户请求而停止服务”

查看实例因任何 TerminateInstanceInAutoScalingGroup API 调用而停止服务期间的 CloudTrail 事件历史记录:

  1. 打开 AWS CloudTrail 控制台
  2. 在导航窗格中,选择事件历史记录
  3. 检查 TerminateInstanceInAutoScalingGroup API 调用的历史记录。

“用户请求将 AutoScalingGroup 约束更新为最小值: 0,最大值: 2,所需值: 1,将所需容量从 2 更改为 1”

您可以手动更改自动扩缩组的约束条件。例如,您可以减少其容量。当您更改约束条件时,Amazon EC2 Auto Scaling 可能会终止实例以匹配新设置。

“已启动多个实例以平衡 us-east-1a 区域与其他区域的实例”

默认情况下,Amazon EC2 Auto Scaling 会平衡所有可用区的实例。当您向自动扩缩组添加新的可用区时,Amazon EC2 Auto Scaling 会在该区域中启动一个新实例。任何重新平衡都可能终止其他区域中的实例。

“一个实例已停止服务,以平衡按需型实例容量和竞价型实例容量的分配。”

当按需型实例或竞价型实例的分配发生变化时,关联的自动扩缩组会重新平衡以匹配您所需的购买选项分配。因此,按需型实例或竞价型实例可能会终止,以便自动扩缩组可以替换它们以实现您所需的购买选项。

“处于 ALARM 状态的监视器警报 XXX-High-CPU-Utilization 触发了策略 AAA-scaledown,将所需容量从 2 更改为 1”

Amazon EC2 Auto Scaling 可以终止组中的实例以响应配置的 CloudWatch 警报。检查组策略和 CloudWatch 警报历史记录。

检查自动扩缩组策略:

  1. 打开 Amazon EC2 控制台
  2. 在导航窗格的 Auto Scaling 下,选择 Auto Scaling 组
  3. 选择实例所在的组。
  4. 若要查看和编辑策略,请选择自动扩缩窗格

查看 CloudWatch 警报历史记录:

  1. 打开 Amazon CloudWatch 控制台
  2. 在导航窗格中,选择警报
  3. 选择警报,然后选择历史记录视图。
  4. 查看历史记录,了解警报的任何状态更改或对警报配置的修改。

“一个实例因用户运行状况检查而停止服务”

您可以在 Amazon EC2 Auto Scaling 中定义自定义运行状况检查。当自定义运行状况检查确定实例运行状况不佳时,检查会手动启动 SetInstanceHealth。然后,它将实例的状态设置为运行状况不佳。Amazon EC2 Auto Scaling 会在下次运行时终止运行状况不佳的实例。

“计划操作将 AutoScalingGroup 约束更新为最小值: 1,最大值: 9,所需值: 1,将所需容量从 2 更改为 1”

您可以配置计划操作来更改自动扩缩组的最小容量、最大容量或所需容量。当计划操作减少所需容量时,Amazon EC2 Auto Scaling 会终止一个或多个实例以匹配新的所需容量。

相关信息

为什么我的自动扩缩组缩小了规模?

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

AWS 官方
AWS 官方已更新 10 个月前