EC2自动缩放与现货和按需实例?

我正在寻求优化我们的自动扩展EC2组的成本,让他们启动现货实例,而不是按需实例。

我真正想要的是能够将一些服务器作为按需实例保留在组中,而不pipe现货实例定价市场如何。 然后,我希望组中的任何其他服务器(高于configuration的最小值)成为现场实例。 我通常可以通过现场请求添加服务器。

我似乎无法find任何方法来做到这一点,我试图冲刷AWS文档。 看起来ASG既可以是点播也可以是点播,但不是混合。

我可以手动将按需实例添加到分配给自动缩放组的Elastic Load Balancer,但是不会将该服务器的负载包含在自动缩放测量和触发器中。

我想我可以input一个可笑的高出价,以确保我总能得到我需要的服务器,但是接下来我看看定价历史,偶尔会看到大的高峰。

AWS文档与自身的不一致,因为在一个地方它说,如果你input一个服务器的最小值,这个数字是“确保”在那里。 但是当你读到关于现货的例子时,没有保证。 现货的价格差异是令人信服的,所以我想尽可能地利用这一点,同时保持始终在线的基线。 这可能吗?

不幸的是,这种混合式 Auto Scaling方法似乎并没有真正可用。

不过,你可能能够解决这个限制如下(未经testing,只是一个我一直在玩的系统devise):

潜在的解决方法

如使用Auto Scaling启动竞价型实例所述,现货价格出价是使用的启动configuration的参数。 正如您所指出的那样,没有可用的混合启动configuration,而是必须是按需或现场的,这意味着用例需要两种不同的启动configuration。

这看起来没什么帮助,因为您一次只能将一个启动configuration附加到Auto Scaling组 ,具有以下(部分过时的)约束(请参阅启动configuration ):

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

强调的部分是关键的,前者覆盖了在从相应的初始按需启动configuration改变到附加的现场启动configuration之后保持按需实例运行的要求,并且后者不一定是由于最近推出的Auto Scaling终止策略 (对于通过随附的AWS博客文章进行的更改,通常没有这样的变化),logging在您的Auto Scaling组的实例终止策略中 :

在Auto Scalingselect一个要终止的实例之前,它首先标识具有比该组使用的其他可用区更多实例的可用区。 如果所有可用区域具有相同数量的实例,则标识随机可用区域。 在所识别的可用区域内,Auto Scaling使用终止策略来select终止的实例[强调我的]

如您的终止策略如何工作 ,您现在可以指定NewestInstance如果您想要最后启动的实例被终止 ,这将是最近启动的斑点实例之一:

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

很显然,这可能还有一点,比如你可以指定任何一个策略作为独立的策略,或者你可以在一个有序的列表中列出多个策略 ,但是这种方法应该确保所有实例的负载被分解到自动缩放测量和触发器 ; 一个警告仍然是:

警告

如果负载平衡器由于任何其他原因(例如,因为它本身变得不健康)而终止其中一个按需实例,则它不会被按需实例自动replace。 因此,您需要单独监视和解释此事件,例如,通过再次临时激活按需启动configuration。

祝你好运!

上面讨论的方法会有点混乱,不够灵活。 更规范的方法是创build2个ASG(一个用于点播,一个用于点播),然后用相同的ELB( 这里讨论)注册它们。 这使您能够独立控制每个独立的ASG,而不是试图搞乱LC交换。

我从这里的答案中得到灵感来拿出https://github.com/ashwanthkumar/matsya

它可以帮助你做到以下几点

  • 对于Hadoop / Mesos / YARN群集需求,您总是需要一大堆机器
  • 您希望通过使用Spot来节省资金,但同时也会回退到OD,因为您需要处理能力来满足您的SLA
  • 在OD处切换回Spot,再次省钱。

如果您只需要1个ASG和静态数量的按需实例,则以下内容应该可以工作:

  • 根据竞价型实例启动configuration创buildAuto Scaling组。

  • 在ASG上暂停Auto Scaling

  • 手动向ASG添加按需实例(静态基本负载),并为这些实例启用实例保护。

  • 在ASG上恢复自动调节

  • 现在,默认的自动扩展策略将忽略按需实例(由于保护),并终止与按需实例相同数量的实例实例,以实现所需的组数。 任何放大或缩小活动只会启动或终止现场实例。