【问题标题】:AWS autoscaling policy terminating busy instances instead of idleAWS 自动扩展策略终止繁忙实例而不是空闲实例
【发布时间】:2014-12-17 23:05:33
【问题描述】:

我有一个自动缩放策略,可以根据整个组 cpu 使用情况来缩放我的后端实例。 AWS 有一些不同的终止策略可供选择,例如 OldestInstance、OldestLaunchConfiguration、NewestInstance 和 ClosestToNextInstanceHour。

不幸的是,这些都不能解决我的问题。如果我的缩减策略触发器设置为该组的低 10%,它最终可能会删除仍然繁忙的实例,而不是选择一个 CPU 空闲的实例。

有没有人建议解决方法?我的后端实例也没有使用内部 ELB。

【问题讨论】:

  • 那么你的负载均衡策略是什么?一个实例的 CPU 利用率 > 10%,而另一个实例处于空闲状态,您怎么能做到这一点?
  • 嗨 Mike 这些后端实例是工作人员,因此不需要负载平衡。他们从队列中拉出作业并处理它们。您可以在没有负载均衡器的情况下创建 Auto Scaling 组,在这种情况下,不需要负载均衡器,因为工作人员彼此独立工作。我在 cloudwatch 警报中的比例设置为 cpu 平均 10%。我看不出有什么方法可以删除空闲实例,而不是让 AS 随机选择一个忙碌的实例。
  • 好的。这就说得通了。我认为您不会找到任何开箱即用的功能来做您正在寻找的事情。您可能必须轮询您的实例并通过某些过程触发实例自行关闭。
  • 我最近在尝试完成与您尝试做的事情基本相同的事情时发现了这个 API 调用:docs.aws.amazon.com/AutoScaling/latest/APIReference/…
  • 谢谢布拉德利,我会看看这个。

标签: amazon-web-services amazon-ec2 autoscaling amazon-vpc


【解决方案1】:

Scaling Policies 用于更改 Auto Scaling 组的所需容量。这些扩展策略可以通过 AWS CloudWatch 警报触发,也可以通过 API 调用触发。

一旦 Auto Scaling 决定终止实例以响应扩展策略,它会使用 Termination Policy 来确定要终止的实例。但是,Auto Scaling 无法通知实例即将终止。正如您所说,这可能会导致繁忙的实例被终止。

有几种方法可以解决这个问题:

  • 允许终止,但恢复丢失的工作
  • 使用 Auto Scaling 组生命周期挂钩
  • 自行控制实例终止
如果您的 Auto Scaling 组正在处理来自工作队列(例如 Amazon Simple Queue Service (SQS))的信息,

允许终止发生是完全可以接受的。在这种情况下,如果一个实例从 SQS 队列中拉取一条消息,该消息将在一段时间内被标记为不可见。如果实例在该时间段内没有专门删除该消息,则该消息将重新出现在队列中。因此,丢失的工作将被重新处理。

使用 Auto Scaling 组生命周期挂钩允许将标记为终止的实例移动到 Terminating:Wait 状态。然后通过 SNS 或 SQS 发送信号,Auto Scaling 在终止实例之前等待信号返回。见Auto Scaling Group Lifecycle

自行控制实例终止意味着您自己的代码将决定终止哪个实例。它可以通过在所选实例上向您的应用程序发送信号来以友好的方式执行此操作,有效地告诉它完成处理工作并在准备终止时返回信号。此功能没有标准 API - 您必须自己创建它,可能由 CloudWatch 警报和 SNS 通知触发。

您可以使用DetachInstances API 调用从 Auto Scaling 组中删除实例,之后您将完成作业然后终止该实例。

【讨论】:

  • 感谢 John,我们当前的设置基于使用工人 (SUM) =
  • 糟糕!我忘了提到生命周期钩子。已添加。
  • 我使用了一种基于我在这个问题中描述的生命周期钩子的技术:stackoverflow.com/questions/17526570/…
【解决方案2】:

您还可以保护特定实例免受缩减

https://aws.amazon.com/blogs/aws/new-instance-protection-for-auto-scaling/

博客文章已过期,但此功能仍然可用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-16
    • 2020-04-04
    • 1970-01-01
    • 2022-08-14
    • 2016-12-06
    • 2020-05-12
    • 1970-01-01
    • 2015-02-11
    相关资源
    最近更新 更多