簡體   English   中英

當AWS AutoScaling終止EC2實例時,如何在Tomcat上完成長期運行的任務?

[英]How to finish long-running task on Tomcat when AWS AutoScaling is terminating the EC2 instance?

我有一個部署到Tomcat 8的應用程序,該應用程序在啟用了自動縮放的ElasticBeanstalk環境中托管。 在應用程序中,我有長期運行的作業,必須完成這些作業,並且所有更改都必須提交給數據庫。

問題在於,AWS可能會在擴展過程中終止任何EC2實例,然后某些作業可能無法按預期完成。 默認情況下,AWS僅等待30秒,然后終止Tomcat進程。

我已經更改了/etc/tomcat8/tomcat8.conf文件:將參數SHUTDOWN_WAIT設置為3600 (默認為60 )。 但這並不能解決問題-20-25分鍾后整個實例將被殺死。

然后我試圖通過配置生命周期掛鈎.ebextensions文件(因為它的解釋這里 )。 但是我無法批准生命周期掛鈎確實推遲了實例的終止(仍在等待有關此問題的AWS支持)。

所以問題是: 當自動擴展組擴展時,您是否知道任何“合法”方法來延遲或取消實例終止?

我想要這樣的東西:

  • AWS開始在自動擴展組中進行擴展
  • 自動擴展組將關閉信號發送到EC2實例
  • EC2實例開始停止所有活動進程
  • Tomcat進程收到關閉信號,但要等到活動作業完成
  • 應用程序提交作業結果(甚至可能需要60分鍾)
  • Tomcat進程終止
  • EC2實例已終止

Elastic Beanstalk由兩部分組成-API和Worker。 API是自動縮放的,因此可能會下降。 工人是更長久的東西。 您可以使用SQS在它們之間進行通信。 那就是他們設計的方式。

當然,您可以調整系統。 那是平台即服務,因此您可以通過將min實例設置為max來強制自動伸縮組不降低。 另外,您可以關閉運行狀況檢查-這也可以殺死實例...但是那是黑客入侵,后者可以踢人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM