web-dev-qa-db-ja.com

Elastic Load Balancingが「Out of Service」を報告するのはなぜですか?

AWSで Elastic Load Balancing(ELB) をセットアップして、複数のインスタンス間でリクエストを分割しようとしています。同じAMIに基づいてWebサーバーのイメージをいくつか作成しました。それぞれに個別にsshを実行し、個別のパブリックDNSを介してサイトにアクセスできます。

各インスタンスをロードバランサーに追加しましたが、それらはすべてStatus: Out of Serviceヘルスチェックに失敗したため。パブリックDNSから各インスタンスにアクセスできるため、ほとんど混乱していますが、ロードバランサーのDNS名にアクセスするたびにタイムアウトが発生します。

私はすべてのドキュメントを読んでグーグルで検索しようとしましたが、行き詰っています。正しい方向へのポインタまたはリンクは大歓迎です。

39
jkeesh

この同じ問題についてAWSサポートに問い合わせました。どうやら彼らのシステムは、ELBの背後にあるすべてのインスタンスが長時間停止しているケースを処理する方法を知りません。 AWSサポートは、ステータスをすぐに更新する必要がある場合、手動でステータスを更新できます。

提案された修正により、ec2インスタンスを単に停止するのではなくELBから登録解除し、再起動時に再登録します。

20
batman 74

ヘルスチェックは(デフォルトで)ロードバランサーに組み込まれた各インスタンスのindex.htmlにアクセスすることにより行われます。インスタンスのドキュメントルートにindex.htmlがない場合、デフォルトのヘルスチェックは失敗します。エラスティックロードバランサーを作成するときに、ヘルスチェック用のカスタムプロトコル、ポート、およびパスを設定できます。

16
ivankoni

最後に、私はこれを機能させました。問題はAmazon Security Groupsにありました。これは、ポート80へのアクセスを開発エリアの少数のマシンに制限し、ロードバランサーがインスタンスのApacheサーバーにアクセスできなかったためです。ロードバランサーがインスタンスにアクセスすると、In Serviceになります。

インスタンスでtail -f /var/log/Apache2/access.logを使用してチェックし、ロードバランサーがサーバーにアクセスしようとしているかどうかを確認し、サーバーがロードバランサーに与えている回答を確認しました。

お役に立てれば。

9
Parmaia

Webサーバーが正常に動作している場合、ヘルスチェックは200を返さないURLで実行されます。

私のために働くトリック:インスタンスに行き、curl localhost:80/pathofyourhealthcheckurlと入力してください

ヘルスチェックのURLを変更して、常に200の応答が返されるようにした後。

2
user1384132

私の場合、インスタンスとロードバランサーに割り当てられたセキュリティグループのルールは、トラフィックが2つの間を通過することを許可していませんでした。これにより、ヘルスチェックが失敗しました。

1
bitstream

同じ問題に直面するために、Pingプロトコルをhttpsからsslに変更しました。 動いた !

ヘルスチェックに移動->ヘルスチェックの編集をクリック-> PingプロトコルをHTTPSからSSLに変更
 PingターゲットSSL:443 
タイムアウト5秒
間隔30秒
異常なしきい値5 
正常なしきい値10 
1
Giri

これを理解しようとして何時間も費やしたので、これを追加します...

ヘルスチェックエンドポイントを設定したが、それでもOut of Service、サーバーがリクエストをリダイレクトしている(つまり、301または302応答)。

たとえば、エンドポイントが/app/health/ただし、入力するのは/app/health(末尾のスラッシュなし)をELBのヘルスチェックエンドポイントフィールドに入力すると、200応答が返されないため、ヘルスチェックは失敗します。

0
Nick Yap

私は同じエラーを受け取りました。私の場合、特定のhtmlファイルをs3バケットから「/ var/www/html」の場所にコピーする必要がありました。ロードバランサーのパスで参照される同じhtml。

HTMLファイルをコピーした後、問題は解決しました。

0
SuperSA

同様の問題がありました。この問題は、HTTPヘルスチェックを使用し、サイトをパスワードで保護するために.htaccessを使用したために発生したようです。

0

これがリストされていないため、このスレッドを見る他の人には:

ヘルスチェックが、応答サーバーがリッスンしているポートをチェックしていることを確認してください。

例えば。ポート3000で実行されているnode.js->ヘルスチェックをポート3000にポイントします。

ポート80または443ではありません。これらは、ALBが使用するものです。

私はこれに朝を費やしました。はい。

0
user1429671

ウェブアプリのホスティングに関するAWSチュートリアルに取り組んでいたときに、この問題に遭遇しました。 ステップ7b は次のように述べています:

「Ping Pathを/に設定します。これにより、index.htmlまたは他の名前が付けられているかどうかにかかわらず、クエリがデフォルトページに送信されます。」

この「/」のように引用符にスラッシュを入れることもできます。この「/」ではなく、ヘルスチェックで確認してください。 。

0
Scott123180

この問題を解決する一般的な方法を提供したいと思います。 ApacheやnginxなどのWebサーバーをセットアップしたら、アクセスログファイルを読み取って何が起こったかを確認してください。私の機会に、それは401 error nginxに基本認証を追加したため。もちろん、@ ivankoniが思い出すように、チェックするドキュメントが存在しないためかもしれません。

0
JackXu