2017-06-21 111 views
0

我有一個應用程序部署到託管在ElasticBeanstalk環境上並啓用自動縮放的Tomcat 8。在應用程序中,我必須完成長時間運行的作業,並且必須將所有更改都提交到數據庫。如何在AWS AutoScaling終止EC2實例時在Tomcat上完成長時間運行的任務?

問題是AWS可能會在縮放期間殺死任何EC2實例,然後可能會有一些作業沒有按預期完成。默認情況下,AWS僅等待30秒,然後終止Tomcat進程。

我已經更改/etc/tomcat8/tomcat8.conf文件:將參數SHUTDOWN_WAIT設置爲3600(默認爲60)。但它沒有解決問題 - 整個實例在20-25分鐘後死亡。

然後我試圖通過.ebextensions文件來配置生命週期掛鉤(因爲它的解釋here)。但我無法批准生命週期掛鉤確實推遲實例的終止(仍在等待AWS支持的答案)。

所以問題是:你知道任何「合法」的方式來推遲或取消實例終止時,自動調整組縮放嗎?

我想有這樣的事情:

  • AWS啓動自動縮放組縮放
  • 自動縮放羣發關機信號EC2實例
  • EC2實例啓動時停止所有活動進程
  • Tomcat進程收到關閉的信號,但一直等到活動作業完成
  • 應用程序提交作業結果(可能會採取甚至60分鐘)
  • Tomcat進程被終止
  • EC2實例在終止
+0

這可以是暫停:https://stackoverflow.com/questions/42348571/aws-scaling-in-termination-protection-for-ec2-container-service/42351705#42351705 – Mahdi

回答

0

彈性豆莖由兩個部分組成 - API,和工人。 API是自動縮放的,所以它可以下降。工人的運轉時間更長。您可以使用SQS與他們進行通信。這就是他們設計的方式。

當然,你可以調整系統。這就是平臺即服務,因此您可以強制自動縮放組不要關閉 - 通過將最小實例設置爲最大。你也可以關閉健康檢查 - 也可以殺死實例...但這是黑客攻擊,後者可以踢。