免責事項: この記事には、サードパーティ製品に関する情報が含まれている場合があります。 そのような情報は参照だけのためです。 Alibaba Cloudは、明示または黙示を問わず、サードパーティ製品のパフォーマンスと信頼性、および製品に対する操作の潜在的な影響に関して、いかなる保証も行いません。
質問
TCPリスナーのヘルスチェックを有効にすると、[ピアによる接続リセット]
などのネットワーク接続エラーがバックエンドサーバーのサービスログに頻繁に記録されます。 ネットワークパケットキャプチャの結果は、要求がSLBインスタンスから送信され、SLBインスタンスがRSTパケットをバックエンドサーバーに送信して接続を終了することを示しています。 業務ログのエラー情報は次のとおりです。
原因
この問題は、SLBのヘルスチェックメカニズムに関連しています。 TCPプロトコルは上位層サービスの状態を認識せず、ヘルスチェックコストとバックエンドサービスへの影響を減らすことに加えて、サーバーロードバランサーは、TCPリスニングのヘルスチェックのために単純なTCP 3ウェイハンドシェイクのみを実行し、RSTデータパケットを直接送信してTCP接続を終了します。 上位層アプリケーションは、Java接続プールなどの接続が異常であると見なします。 したがって、アプリケーションは [Connection reset by peer]
例外をスローします。 詳細なデータ対話プロセスは次のとおりです。
サーバーロードバランサーインスタンスは、バックエンドサービスポートにSYNリクエストパケットを送信します。
ポートが正常な場合、バックエンドサーバーはSYNとACKで応答します。
SLBインスタンスがバックエンドポートから応答を正常に受信し、リスニングポートが正常であると判断した場合、ヘルスチェックが成功したと判断されます。
SLBインスタンスは、接続を閉じるためにRSTデータパケットをバックエンドポートに送信します。 ヘルスチェックが終了し、バックエンドサーバーからデータが送信されません。
回答
以下の点にご注意ください。
インスタンス設定やデータの変更など、リスクを引き起こす可能性のある操作を実行する前に、データのセキュリティを確保するために、インスタンスのディザスタリカバリ機能とフォールトトレランス機能を確認することを推奨します。
インスタンス (ECS や RDS など) の設定およびデータを変更する場合は、スナップショットを作成するか、RDS ログバックアップを有効にすることを推奨します。
Alibaba Cloud管理コンソールでログインアカウントやパスワードなどの機密情報を承認または送信した場合は、そのような情報をタイムリーに変更することを推奨します。
この問題を解決するには、ビジネス要件または実際の状況に基づいて、次のいずれかのソリューションを選択することをお勧めします。
解決策1: リスナータイプを変更するSLBインスタンスのTCPリスナーをHTTPリスナーまたはHTTPSリスナーに変更します。 詳細については、「HTTPリスナーの追加」および「HTTPSリスナーの追加」をご参照ください。
解決策2: ログフィルタリングビジネスレベルの上位層で、SLBヘルスチェックのIPアドレスセグメントは、関連するエラー情報を無視するようにフィルタリングされる。
説明注: SLBのヘルスチェックCIDRブロックは100.64.0.0/10です。
適用範囲
SLB