33

我们正在研究使用 EC2 自动缩放来处理负载峰值。在我们的例子中,我们希望根据 SQS 队列大小扩大实例,然后随着队列大小缩小规模,重新得到控制。每条 SQS 消息都定义了一个可能长时间运行的作业(有时每条消息最长 20 分钟),该作业必须在实例终止之前完成。

我们的软件会优雅地处理关闭过程,因此发布sudo service ourapp stop将等待应用程序完成后再返回。

我的问题; 当自动缩放开始缩小时它会发出终止(显然就像按下电源按钮),它会等待我们的应用程序在实例“关闭”之前完全退出吗?

https://forums.aws.amazon.com/message.jspa?messageID=180674 <- 我发现的其他事情似乎表明它没有

4

3 回答 3

26

在大多数较新的 AMI 上,机器被赋予相当于“停止”(或“关闭 -h now”命令,以便服务正常关闭。只要您的程序与启动/关闭脚本很好地配合,您应该没关系——但是,如果您的程序需要超过 20 秒才能终止,您可能会遇到亚马逊将完全杀死该实例。

亚马逊关于其自动缩放的文档没有指定终止过程,但是,AWS 的ec2文档通常确实包含了终止过程中发生的情况——给机器一个“关闭”命令,以及默认的关闭时间在大多数系统上是 30 秒。

于 2012-06-28T02:26:11.767 回答
25

2014 年年中,AWS 引入了“生命周期挂钩”,允许完全控制终止过程。

我们的高级缩小规模流程是:

  • Auto Scaling 向具有实例 ID 的 SQS 队列发送消息
  • 控制器应用程序接收消息
  • 控制器应用程序发出“停止实例”请求
  • 控制器应用程序在实例停止时重新排队 SQS 消息
  • 控制器应用程序再次获取消息,检查实例是否已停止(或重新排队消息以稍后重试)
  • 控制器应用程序在终止时通知 Auto Scaling“继续”
  • 控制器应用程序从 SQS 队列中删除消息

更多详细信息: http: //docs.aws.amazon.com/autoscaling/latest/userguide/lifecycle-hooks.html

于 2015-03-06T06:41:51.197 回答
3

在自动缩放中使用 replaceunhealthy 选项。

参考: http ://alestic.com/2011/11/ec2-schedule-instance

特别看这个评论

于 2012-10-15T15:05:06.833 回答