web-dev-qa-db-ja.com

AWSロードバランサー502

EC2インスタンスで実行されているマイクロサービス(さまざまなプログラミング言語)があります。本番環境で、これらのサービスが相互にやり取りしようとすると、いくつかの502 Bad Gateway Errorが発生します。また、要求されたサービスのログには、API呼び出しがヒットしていることは表示されません

サンプルサービスAはサービスBを呼び出しますが、サービスBログには、サービスAからの呼び出しであることを示すものは何もありません。

AWSロードバランサーの問題ですか?任意の助けいただければ幸いです。前もって感謝します。

解決策を試した:各サービスでhttp/https接続エージェントを作成しようとしましたが、それでもこの問題が発生します。

更新:lbログでは、apiはログに記録されますが、ターゲット応答コードは「-」を示しますが、lb応答コードは502または504を示します。lbがトラフィックまたはアプリケーションを処理できないことを意味しますか?

また、可能な解決策は何ですか?

20
Root

同じ問題がありました。

このセットアップでは、AWSアプリケーションELBに4つのEC2インスタンスのターゲットグループがあります。各EC2インスタンスには、Tomcatに転送するApache2があります。

ELBには、60秒のデフォルト接続KeepAliveがあります。 Apache2のデフォルトの接続キープアライブは5秒です。 5秒が経過すると、Apache2は接続を閉じ、ELBとの接続をリセットします。ただし、リクエストが正確なタイミングで届いた場合、ELBはそれを受け入れ、転送先のホストを決定します。その時点で、Apacheは接続を閉じます。これは、上記の502エラーコードになります。

解決策は次のとおりです。カスケードプロキシ/ LBがある場合は、それらのキープアライブタイムアウトを調整するか、できれば、さらに下に行くほど少し長くすることもできます。

ELBタイムアウトを60秒に設定し、Apache2タイムアウトを120秒に設定しました。問題はなくなりました。

17
Jan Doerrenhaus