最近まで、MicrosoftNLBはアプリケーションレベルではなくOS /マシンレベルで機能すると想定していました。つまり、NLBはマシンのハートビートを監視して、マシンが稼働しているかどうかを確認し、特定のノードがダウンしている場合はオフにします。
しかし、私はこれを見つけました コメント 異なる主張をするサーバー障害の質問で。コメントによると
NLBは、開いているTCPポートに接続をルーティングするだけです。アプリケーションがポートを閉じると、ポートが再び開かれるまで、NLBは接続をそのポートにルーティングしなくなります。
それはNLBがどのように機能するかではありません。 NLBポートルールは、NLBホスト間で負荷分散されるポートを決定します。 NLBポートルールに「バインド」されていないトラフィックは、NLBホスト間で負荷分散されません。 NLB しませんポートルールに関連付けられたポート/ポートを監視し、その/それらのポート/ポートのクローズまたはその/それらでサービスを提供するアプリケーションのクラッシュ時にそのホストへのNLBクラスタートラフィックを無効にします特定のホスト上のポート/ポート。 NLBは、レイヤー2の「ハートビート」を使用して、クラスター内のホストの可用性を判別します。ホストがハートビートメカニズムに失敗した場合、他のすべてのホストが「収束」(または再収束)して、応答しないホストをクラスターから削除し、クラスタートラフィック(ポートルールに基づく)が非応答ホストに送信されないようにします。応答するホスト。 NLBは、厳密にはレイヤー3(ネットワークレイヤー)の負荷分散メカニズムです。これは、レイヤー7(アプリケーションレイヤー)の負荷分散メカニズムではありません。
NLBポートルールで定義されたNLBホスト(HTTPやRDPなど)でハングしたアプリケーションが、アプリケーションがそのトラフィックを受け入れることができない場合でも、引き続きNLBトラフィックを受信することは完全に正常です。これは、NLBがレイヤー3より上の層を認識していないためです。