Amazon EC2通过正常关机自动缩小?

时间:2012-06-26 13:52:26

标签: amazon-ec2 terminate autoscaling

我们正在考虑使用EC2自动缩放来处理负载峰值。在我们的示例中,我们希望根据SQS队列大小扩展实例,然后缩小规模,并使队列大小恢复控制。每个SQS消息都定义了一个可能长时间运行的作业(有时消息最多可达20分钟),必须在终止实例之前完成。

我们的软件可以优雅地处理关机过程,因此在返回之前发出sudo service ourapp stop将等待应用完成。

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

https://forums.aws.amazon.com/message.jspa?messageID=180674< - 我发现的那些东西似乎暗示它没有

3 个答案:

答案 0 :(得分:24)

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

亚马逊关于其自动扩展的documentation没有指定终止过程,但是,AWS的documentation通常包含关于终止过程中发生的事情 - 机器已经给出'shutdown'命令,大多数系统的默认关机时间为30秒。

答案 1 :(得分:22)

2014年中期,AWS推出了“生命周期挂钩”,可以完全控制终止流程。

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

  • Auto Scaling将消息发送到具有实例ID
  • 的SQS队列
  • Controller app接收消息
  • Controller app发出'停止实例'请求
  • 控制器应用程序在实例停止时重新排队SQS消息
  • Controller app再次接收消息,检查实例是否已停止(或重新排队消息以便稍后再试)
  • 控制器应用程序通过终止
  • 将Auto Scaling通知为“PROCEED”
  • Controller app删除SQS队列中的消息

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

答案 2 :(得分:3)

在autoscaling中使用replaceunhealty选项。

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

特别参见this comment