![TCP リクエストが Google クラウド ロードバランサでドロップされる](https://rvso.com/image/717759/TCP%20%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%81%8C%20Google%20%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%20%E3%83%AD%E3%83%BC%E3%83%89%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B5%E3%81%A7%E3%83%89%E3%83%AD%E3%83%83%E3%83%97%E3%81%95%E3%82%8C%E3%82%8B.png)
当社では、サービスの 1 つに TCP Google Cloud Loadbalancer を使用しています。
アーキテクチャは次のとおりです。フロントエンドでさまざまなポートが許可されている TCP ロード バランサがあり、そのバックエンド インスタンスが接続され、インスタンス サービスは LB で開いている同じポートで実行されています。
たとえば、LB IP -1.1.1.1:(100-200)
ポートの範囲が開いています。現在、バックエンドでは 3 つのインスタンスが実行されており、それらのポート 100、101、103 でサービスが実行されています。
ユーザーがポート 100 で実行されているサービスにアクセスする場合は、LB IP:100 を使用してサービスにアクセスする必要があります。しかし、ここ数日、リクエストがドロップされるようになりました。ただし、インスタンス IP:100 に直接接続しようとすると、サービスは正常に機能します。そのため、正確な原因を突き止めることができません。リクエストも TCP ベースであるため、LB がドロップする理由がわかりません。
いくつかの入力を提案してください。注: GCloud またはコンソールから LB ログを確認する方法はありますか?
答え1
可視性を高めるために OP 自身の回答を投稿します。
私の問題は LB によるものではありませんでした。
私の LB はラウンドロビン アルゴリズムを使用しており、バックエンド サーバーのステータスを確認せずにリクエストを渡すだけでした。サーバーのうち 1 つだけが稼働していたため、リクエストの半分がドロップされていました。
同じ LB の下にもう 1 つのインスタンスを構成しただけで、問題は解決しました。
この種のソリューションは最も「粗雑」であり、フェイルセーフ機能を提供しません。いずれかのサーバーがダウンすると、一部のリクエストがドロップされ、サービスがダウングレードされます。
それを避ける最も簡単な解決策は、マネージドインスタンスグループ使用してヘルスチェックすべてのVMが稼働しているかどうかを確認し、ロードバランサー。