2011-07-14 33 views
0

TomcatがAmazon Web Services Elastic Load Balancerの後ろで再起動したときにトラフィックを処理しようとしないようにするにはどうすればよいですか?AWS ELBでTomcatが再起動されます

新しいソフトウェアを導入すると、アプリケーションの再起動に最大40秒かかります。これは、ELBが気づくウィンドウが小さすぎるため、Webアプリケーションが初期化されるのを待っている間にTomcatインスタンスが転送要求を受け取り続けるため、ユーザーに500エラーページが表示されます。

この問題を回避する共通の方法はありますか?

答えて

1

Health Check parameterでプレーすることができます。 ターゲットパラメータに/health-check.htmlのような特殊なhtmlページを設定します。 インスタンスをシャットダウンする場合は、このページを削除/名前を変更してからtomcatを再起動し、起動時にページの名前を/health-check.htmlに変更します。

+0

これは良い解決策ですが、私の用法ではあまりにもマニュアルです。おそらく新しい.warsを展開するツールは、この動作を制御できます... –

2

フランクが正しく、ヘルスチェックメカニズムを使用する必要があります。ただし、そのヘルスチェックを実行する頻度が最も高いのは6秒ごとです。これは、あなたのアプリが再起動または再展開されたときに起こりますか?残念ながら、ELBはそのことを知らず、そのインスタンスにトラフィックを送信し続けます。したがって、最悪の場合、(約)6秒間、そのインスタンスがサービスを受けるサイトの訪問者には、エラーメッセージまたはトレースダンプが発生します。

ELBに登録されているインスタンスごとにPAUSEボタンを要求しているので、ELBにそのインスタンスへのリクエストの送信を停止するように指示できます。誰かがこのアイデアを気に入っており、開発者にそれをエスカレートさせることを約束しました。少なくとも、それは準備ができていないという要求を得ることを避けるための簡単な方法でしょう。

ELBに直接関係しないアドバイスが1つありますが、Tomcatにはバージョン付きのWARをアップロードする方法があります。 "root.war"ファイルをアップロードするのではなく、 "root ## 2012-04-30.war"ファイルをアップロードすると、Tomcatは同じWARの新しいバージョンを展開します。その新しいバージョンは、要求に応答している現在のバージョンを中断することはなく、新しいバージョンが準備ができたらすぐに、古いバージョンではなくトラフィックの取得を開始します。そうすれば、インスタンスは決してリクエストに応答しなくなるので、ELBはリクエストをそこで送るのを止める必要はありません。

関連する問題