2011-07-14 55 views
0

人們如何防止Tomcat在Amazon Web Services Elastic Load Balancer後面重新啓動時嘗試提供流量?Tomcat在AWS上重啓ELB

一旦新軟件部署到他們,我們的應用程序需要40秒才能重新啓動。對於ELB來說,這是一個太小的窗口,所以他們在等待他們的web應用程序初始化時,Tomcat實例不斷收到轉發的請求,導致用戶收到500個錯誤頁面。

是否有解決此問題的常用方法?

回答

1

您可以玩Health Check parameter: 在Target參數中設置一個特殊的html頁面,如/health-check.html。 當你想關閉一個實例時,刪除/重命名這個頁面,然後重啓你的tomcat,當它啓動並運行時,將頁面重命名爲/health-check.html。

+0

謝謝,這是一個很好的解決方案,但對我的用法來說太過於手動。也許部署新的.wars的工具可以控制這種行爲... –

2

弗蘭克是對的,你應該使用健康檢查機制。但是,您每6秒鐘就可以運行一次健康檢查。如果在同一時間重新啓動或重新部署應用程序,會發生這種情況嗎?不幸的是,ELB不知道這一點,並不斷向該實例發送流量。因此,在最糟糕的情況下,在(約)6秒鐘內,您的網站的訪問者將獲得錯誤消息或跟蹤轉儲。

我已經聯繫了亞馬遜,要求他們針對使用ELB註冊的每個實例的PAUSE按鈕,所以我們可以告訴ELB停止向該實例發送請求。有人在那裏喜歡這個主意,並且承諾將其升級到開發者。至少,這將是一個簡單的方法來避免獲取請求的準備工作尚未完成。

一個建議與ELB沒有直接關係,但對於Tomcat來說:Tomcat現在有一種方法可以上傳帶有版本的WAR。而不是上傳「root.war」文件,你可以上傳「root ## 2012-04-30.war」文件(例如),Tomcat將部署相同WAR的新版本。新版本不會中斷正在回答請求的當前版本,只要新版本準備就緒,它就會開始接收流量,而不是舊版本。這樣,你的實例永遠不會停止迴應請求,所以ELB不需要停止在那裏發送請求。