web-dev-qa-db-ja.com

Amazon ELB自動ヘルスチェックは何をし、何を期待していますか?

ここに事があります:

  1. C++ RESTful APIサーバーを実装しました。組み込みのHTTPパーサーがあり、Apacheなどの標準的なHTTPサーバーはありません。
  2. これは、Amazon構造で数か月間使用されており、プレーン通信とSSL通信の両方を使用しており、Amazonインフラストラクチャに関連する問題は確認されていません
  3. Amazon ELBを使用して最初のバックエンドをデプロイしています
  4. Amazon ELBには、カスタマイズ可能なヘルスチェックシステムがありますが、前述のように自動チェックシステムもあります こちら
  5. ヘルスチェックシステムから送信されるデータに関するドキュメントは見つかりませんでした
  6. 単純なバックエンドがソケット読み取り命令でハングし、最終的に接続が閉じられる

ELBヘルスチェックシステムによって送信されているメッセージの種類が誰かにわかっている場合でも、バックエンドは標準のWebサーバーに基づいていないため、問題の解決策を探していません。これに関するドキュメントが見つからないためです。 、どこでも。

ヘルプは大歓迎です。ありがとうございました。

20
nazgul

Amazon ELBには、カスタマイズ可能なヘルスチェックシステムがありますが、 こちら にあるように、自動チェックシステムもあります。

customizableを使用すると、おそらくAWSマネジメントコンソール( ヘルスチェック設定の構成 を参照)またはAPI( ConfigureHealthCheck )。

このように構成されたヘルスチェックに合格するための要件は、 HealthCheck データ型ドキュメントのフィールドTargetで概説されています。

チェックするインスタンスを指定します。プロトコルは、TCP、HTTP、HTTPS、またはSSLのいずれかです。有効なポートの範囲は1〜65535です。

  • TCPがデフォルトであり、TCP:ポートのペアとして指定されます(例: "TCP:5000")。この場合、ヘルスチェックは、指定されたポートのインスタンスへのTCP接続を開こうとするだけです。構成されたタイムアウト内に接続に失敗すると、異常と見なされます。

  • SSLは、SSL:ポートペアとしても指定されます(例:SSL:5000)。

  • HTTPまたはHTTPSプロトコルの場合、状況は異なります。pingパスを文字列に含める必要があります。 HTTPは、HTTP:port; /; PathToPing;として指定されます。グループ化、たとえば「HTTP:80/weather/us/wa/seattle」。この場合、HTTP GETリクエストは、指定されたポートとパスのインスタンスに発行されます。 タイムアウト期間内の「200 OK」以外の回答は異常と見なされます。

  • HTTP pingターゲットの全長は、1024個の16ビットUnicode文字以下にする必要があります。

[強調鉱山]

automaticでは、おそらく段落で説明されているヘルスチェックを参照していますCause内ヘルスチェックURLがAPIおよびコンソールに表示されるURLと異なるのはなぜですか?

ロードバランサー用に構成したヘルスチェックに加えて、インスタンスによって引き起こされる潜在的な副作用から保護するために、サービスによって2番目のヘルスチェックが実行されます登録解除されることなく終了されます。このチェックを実行するために、ロードバランサーは、ヘルスチェックが使用するように構成されているのと同じポートでTCP接続を開き、ヘルスチェックの完了後に接続を閉じます。[強調鉱山]

段落Solutionは、ここではペイロードがゼロであることを明確にします。つまり、上記の構成可能なヘルスチェックについて説明した非HTTP/HTTPSメソッドに似ています。

この追加のヘルスチェックは、バックエンドインスタンスにデータを送信しないため、アプリケーションのパフォーマンスに影響を与えません。このヘルスチェックを無効にしたりオフにしたりすることはできません。

まとめ/解決策

組み込みHTTPパーサーを備えたRESTful APIサーバーが実際にHTTPのみを提供すると想定されている場合、2つのヘルスチェックを処理する必要があります。

  1. 最初に自分で設定したものHTTP:port; /; PathToPingとして-HTTP GETリクエストし、200 OK指定されたタイムアウト期間内に正常と見なされます。
  2. 2番目のサービスはサービスによって自動的に構成されます-上記で構成されたHTTPポートでTCP接続を開き、データを送信せず、ヘルスチェックの完了後に接続を閉じます。

結論として、サーバーはすでに完全に正常に動作している可能性があり、2番目のヘルスチェックの動作に苛立ちを感じているようです-ELBは実際にサーバーが異常であると見なしていますか?

33
Steffen Opel

私が知る限り、それは200 OK HTTP応答を探す単なるHTTP GETリクエストです。

1
Doobi