使用 Spot 和按需实例进行 EC2 Auto-Scaling?

pla*_*rms 12 amazon-ec2 amazon-web-services autoscaling

我希望通过让它们启动 Spot 实例而不是按需实例来优化我们的自动扩展 EC2 组的成本。

我真正想要的是能够在组中保留一些服务器作为按需实例,而不管现货实例定价市场发生什么变化。然后,我希望组中的任何其他服务器(高于我配置的最小值)成为 Spot 实例。我通常对通过现场请求添加服务器的延迟感到满意。

我似乎找不到任何方法来做到这一点,我试图搜索 AWS 文档。似乎 ASG 可以是按需的也可以是现货的,但不能是混合的。

我可能会手动将按需实例添加到分配给自动缩放组的弹性负载均衡器,但是该服务器的负载不会被计入自动缩放测量和触发器。

我想我可以输入一个高得离谱的出价,以确保我总能得到我需要的服务器,但随后我查看了定价历史,偶尔会看到大幅上涨。

AWS 文档自相矛盾,因为在一个地方它说如果您输入服务器最小值,则“确保”该数字存在。但是,当您阅读有关 Spot 实例的信息时,就无法保证了。现货的价格差异令人信服,所以我想尽可能多地利用它,同时仍然保持始终在线的基线。这可能吗?

小智 15

上面讨论的方法会有点混乱,而且不太灵活。更典型的做法是只创建助理秘书长2(一个点,一个用于点播),然后注册它们具有相同ELB讨论(这里)。这使您能够独立控制每个,而不是试图在单个 ASG 中使用 LC 交换。


Ste*_*pel 6

不幸的是,这种混合 Auto Scaling方法似乎并不是开箱即用的。

但是,您可能可以按如下方式解决此限制(未经测试,只是我已经玩了一段时间的系统设计):

潜在的解决方法

使用 Auto Scaling 启动 Spot 实例中所述,现货价格出价是正在使用的启动配置的参数。正如您所指出的,没有可用的混合启动配置,它必须是按需或现货,这意味着用例需要两种不同的启动配置。

这似乎没有立即帮助,因为您一次只能将一个启动配置附加到 Auto Scaling 组,具有以下(部分过时的)约束(请参阅启动配置):

当您将新的或更新的启动配置附加到 Auto Scaling 组时,任何新实例都将使用新的配置参数启动。现有实例不受影响。当 Auto Scaling 需要缩减时,它首先终止具有较旧启动配置的实例[强调我的]

不过,强调的部分是关键,前者涵盖了在从各自的初始按需启动配置更改为附加点启动配置后保持按需实例运行的要求,而后者不一定是这种情况,因为最近引入的Auto Scaling 终止策略(对于更改,通常没有通过随附的 AWS 博客文章大肆宣传),记录在您的 Auto Scaling 组的实例终止策略中

在 Auto Scaling 选择要终止的实例之前,它首先确定实例数量多于该组使用的其他可用区的可用区。如果所有可用区具有相同数量的实例,则它标识一个随机可用区。在确定的可用区中,Auto Scaling 使用终止策略来选择要终止的实例[强调我的]

终止策略的工作原理中所述,您现在可以指定NewestInstance如果您希望终止最后启动的实例,这将是最近启动的现货实例之一:

Auto Scaling 使用实例启动时间来识别上次启动的实例。

显然,这可能还有更多内容,例如,您可以将任何一个策略指定为独立策略,也可以在有序列表中列出多个策略,但这种方法应确保所有实例的负载都被考虑到自动缩放测量和触发器;一个警告仍然存在:

警告

如果负载均衡器因任何其他原因终止其中一个按需实例(例如,因为它本身变得不健康),它不会自动被按需实例替换。因此,您需要单独监视和说明此事件,例如,通过再次临时激活按需启动配置。

祝你好运!

  • 这是有道理的——伟大的侦探工作。仍然存在中断风险,但您似乎已经发现了几种降低这种风险的新方法。希望有一天我们会为 ASG 设置一个简单的复选框,“等于或低于服务器最小值的实例是按需实例”。谢谢! (2认同)

ALe*_*hha 1

目前,您可以在单个 ASG 中混合使用按需实例和现货实例

Amazon EC2 Auto Scaling 现在允许您在单个 Auto Scaling 组 (ASG) 中跨购买选项、可用区 (AZ) 和实例系列预置和自动扩展实例,以优化规模、性能和成本。现在,您可以将具有按需实例的 Spot 实例和 RI 包含在单个 ASG 中,以节省高达 90% 的计算费用。