当AWS AutoScaling终止EC2实例时,如何在Tomcat上完成长时间运行的任务?

时间:2017-06-21 10:30:40

标签: amazon-web-services amazon-ec2 autoscaling aws-ebs

我有一个部署到Tomcat 8的应用程序,该应用程序托管在ElasticBeanstalk环境中,并启用了自动扩展功能。在应用程序中,我有长时间运行的作业必须完成,所有更改必须提交到数据库。

问题是AWS可能会在规模扩张期间终止任何EC2实例,然后某些作业可能无法按预期完成。默认情况下,AWS只等待30秒,然后终止Tomcat进程。

我已经更改了/etc/tomcat8/tomcat8.conf文件:将参数SHUTDOWN_WAIT设置为3600(默认情况下为60)。但它没有解决问题 - 整个实例在20-25分钟后被杀死。

然后我尝试通过.ebextensions文件配置生命周期挂钩(因为它解释了here)。但我无法批准生命周期钩子真的推迟了实例的终止(仍在等待AWS支持人员对此的回答)。

所以问题是:你知道吗" legal"当自动缩放组扩展到?

时推迟或取消实例终止的方法

我希望有类似的东西:

  • AWS开始在自动扩展组中扩展
  • autoscaling group将关闭信号发送到EC2实例
  • EC2实例开始停止所有活动进程
  • Tomcat进程收到要关闭的信号,但等待活动作业完成
  • 应用程序提交作业结果(可能需要60分钟)
  • Tomcat进程终止
  • 已终止的EC2实例

1 个答案:

答案 0 :(得分:0)

Elastic Beanstalk由两部分组成--API和Worker。 API是自动缩放的,因此可能会下降。工人运行的时间更长。您可以使用SQS在它们之间进行通信。这就是他们设计的方式。

您肯定可以调整系统。这是平台即服务,因此您可以通过将最小实例设置为最大值来强制自动缩放组不会出现故障。你也可以关闭健康检查 - 这也可以杀死实例......但这是黑客攻击,后者可以踢。