0

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

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

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

然后我尝试通过.ebextensions文件配置生命周期钩子(如这里解释的那样)。但我不同意生命周期钩子真的推迟了实例的终止(仍在等待 AWS 支持人员对此的答复)。

所以问题是:当自动缩放组扩展时,您是否知道任何“合法”的方式来推迟或取消实例终止?

我想要这样的东西:

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

1 回答 1

0

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

当然,您可以调整系统。那是平台即服务,因此您可以强制 Auto Scaling 组不要关闭 - 通过将最小实例设置为最大。你也可以关闭健康检查 - 这也可以杀死实例......但那是黑客攻击,后者可以踢。

于 2017-07-31T21:39:47.113 回答