web-dev-qa-db-ja.com

NLBはIIS-7Webサービスとどのように連携しますか?

2つのIIS7WebサーバーをNLBに結合し、同じWebサービスを公開します(同じWebサービスの2つのインスタンスをWebサーバーごとに1つ)。

  • NLBが私のWebサービスで機能し、Web要求を1つまたは別のインスタンスに委任することを正しく理解していますか?
  • Webサービスインスタンスの1つが使用できなくなった場合(つまり、SOAP例外またはHTTPエラー)をスローし始めた場合)、NLBはどのように機能しますか?
  • NLBは、処理をデリケートするWebサービスインスタンスを決定するために、平均Webサービス応答時間を考慮に入れますか?

前もって感謝します!

5
Andrew Florko

短い:NLBは気にしません。

NLBはあなたのアプリケーションについてネズミのロバを与えません。ユーザーモードの問題はsoユーザーモードです。

ネットワークスタックがNLBブロードキャスト(またはマルチキャスト!)を送受信できる限り、NLBはトラフィックを受け入れ続けます。

長い:NLB本当には気にしません。

NLBはレイヤー2NDISフィルターとして実行され、すべての着信トラフィックに対してハッシュアルゴリズムを実行し、ポートルールに一致するビットを受け入れます。

すべてのノードはすべての着信トラフィック(スイッチによるマルチキャスト/ブロードキャスト)を確認する必要があり、すべてのノードはハッシュ基準を満たさないパケットをドロップします。

NLBは、統計ロードバランサーです。思いやりのあるものではありません。

  • アプリが500をスローしていることは重要ではありません。
  • ユーザーモードのリスナープロセスがクラッシュしたことに気づいていません。
  • アプリの実行速度が遅いことに気づいていません。

それちょうどしませんケア

NLBのベストケースの失敗は、次の(1つ)に対するものです。

  • 停電で完全に死ぬ箱
  • 切断またはプラグを抜くネットワークケーブル
    • (おそらく掃除機による)
    • (またはNIC火花のシャワーで爆発する)
    • (または通りすがりの泥棒に盗まれる)
    • (または任意の形式の物理ネットワーク中断)
  • ブルースクリーンへのボックス

これらはいずれも、ネットワークスタックが着信パケットを処理したり、 "I'm alive!"ブロードキャストメッセージを他のNLBノードに送信したりするのを停止します。これにより、クラスターはすべての内省を取得します。少しの間(秒)、どのノードがまだ存在しているかを把握し、再収束します。

次に、残りのノードがノードの数を明確にすると、ハッシュを再開し、関心のない新しいパケットをすべてドロップします。

必要な場合

  • ヘルスモニタリング、
  • 十分に活用されていないサーバーへの負荷の慎重な適用、
  • および応答時間ベースのインテリジェントな意思決定

NLBはあなたのための解決策ではありません。アプリがそれで問題ない場合、またはアプリ層で問題が発生したときにNLB STOPを実行するのに十分なNLBについて知っている場合は、おそらく問題ありません。しかし、それを行うアプリはほとんどありません(ISA/TMGが思い浮かびます)。

少し前に書いたようです ここ

他の場所を探す低コストの(読み取り:無料)Windowsベースのソリューションを探している場合は、IIS 7 +-探しているように聞こえるヘルスモニタリング機能のほとんどを備えています。

ただし、通常はアプリケーションと同じボックスで実行することはありません。可用性を確保するために、通常はARRの下でNLBを実行して、ロードバランサーのネットワークレベルの可用性とアプリ層のスマートさを組み合わせます。レベル。

5
TristanK
  • 私の答えは、MicrosoftのNLBサービスではなく、一般的なネットワーク負荷分散に適用されると編集されました。

答えは、ロードバランサーがどれだけ洗練されているかによって異なります。最も簡単な設定は、ロードバランサーがラウンドロビンベースで1つのWebサーバーに別のWebサーバーに要求を送信し、pingを使用してホストが稼働しているかどうかを判断することです。

負荷分散サーバーが負荷分散プールに配置される前に合格する必要がある、より複雑なヘルスチェックを使用できます。

ヘルスチェックを実行するには、通常、Webサーバーの動作のすべての側面に依存するWebサーバー上のページを構成します。おそらく、データベースで何かを検索し、すべてが機能した場合は画面に「OK」と書き込むphpがあります。次に、このページを見て「OK」と表示されるようにロードバランサーのヘルスチェックを構成します

ヘルスチェックが失敗した場合、失敗したサーバーはプールから削除され、トラフィックはプールに送信されません。すべてのサーバーに障害が発生した場合、通常、ロードバランサーに保留ページを提供させることができます。

ここでも、ロードバランサーの洗練度に応じて、さまざまなロードバランシングメカニズムを使用できます。実際、サーバーの負荷、サーバーへの接続数に基づいて負荷分散を行うことができます。一部のサーバーに他のサーバーよりも多くの負荷を受信させることができます。「スティッキー」セッションを使用すると、同じクライアントが常に同じWebサーバーに送信されます。可能性はたくさんあります。

2
paulos