「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
サービスの「負荷分散・拡張性」・「冗長性・可用性」の向上を図るためのサービス
- ステートレス・システムの負荷分散が可能。
- 負荷分散装置等のフロントのアプライアンスが不要。
特徴 †
- 各構成ノードは、仮想的なネットワークカードを持つ。
- 各ノードのネットワークカードは、NLBグループ毎に同一のMACアドレスを持ち、クライアントはNLBの各ノードを区別できない。
- 仮想ネットワークカードは、受信したTCP/IPネットワーク・トラフィックを均等に分散させたり、重み付けして分散させたりすることができる。
- リクエストを自ノードで処理するべきと判断した場合、NLBはデータ・パケットを上位層へ送る。
- NLBは、各構成ノードを常に監視しており、
- 障害を起こしたサーバは自動的にNLBから離脱する。
- また、サーバが復帰した時は自動的にNLBに復帰する。
- この作業はクラスタよりも迅速に動作する。
適合するシステム †
- ステートレスなシステム
- データの更新があまり発生しないシステム(コンテンツの手動更新のレベル)
方式 †
要約していうと、
- 複数のサーバに共通の仮想IP・MACアドレスを持たせクラスタを構成する。
- クライアントからは単一のIPアドレスとコンピュータ名を持つシステムに見える。
処理の振り分け方式は、
- (後述の)分散処理方式によりパケットをWebファームのNICに重複して着信させ、
- (後述の)ハッシュ関数で着信したパケットをフィルタする
という方式である。
((後述の)ハッシュ関数の再構築による)フェイル・オーバーも可能になっている。
IPアドレス †
「仮想サーバ」を構成するNICには、
の設定が必要。
専用IPアドレス †
「物理サーバ」のデータ送受信に利用される。
仮想IPアドレス †
「仮想サーバ」のデータ送受信に利用される。
分散処理方式 †
パケットをWebファームのNICに重複して着信させる分散処理の方式に以下の2つがある。
ハッシュ関数(パーシステンスの種類) †
NLBのハッシュ関数は、パーシステンスの種類として、
以下のサイトで説明されている、
- ロードバランサ - パーシステンスの種類
http://www.infraexpert.com/study/loadbalancer5.html
- Source address affinity persistence
- Cookie persistence
- SSL persistence
- Destination address affinity persistence
- Hash persistence
- SIP persistence
- Universal persistence
- Microsoft Remote Desktop Protocol persistence
Source address affinity persistence
を採用している。
プロトコル †
がある。
分散処理方式 †
分散処理方式に
が存在する。
ユニキャスト・モード †
ユニキャスト・モードの分散処理方式
- サーバの物理ノードに同じIPアドレス(MACアドレス)を付与し、
- 全ての物理ノードでパケットを受信。
- 次いで、ハッシュ関数を使用して要求フィルタする。
マルチキャスト・モード †
マルチキャスト・モードの分散処理方式
- サーバの物理ノードに異なるIPアドレスを付与し、
- マルチ・キャストを使用して全ての物理ノードでパケットを受信。
- 次いで、ハッシュ関数を使用して要求フィルタする。
ハッシュ関数(パーシステンスの種類) †
アフィニティ †
Source address affinity persistenceのaffinityとして、
が存在する。
単一モード †
ハッシュ関数は、クライアントのIPアドレスから物理ノードが選択する。
- クライアントは、常に同じノードに振り分けられる。
- プロキシサーバーを経由すると、偏りが発生することがある。
なしモード †
ハッシュ関数は、クライアントのIPアドレス+ポートから物理ノードが選択する。
∴ クライアントのTCP/IP接続が異なると、異なるノードに振り分けられる。
フェイルオーバー †
「仮想サーバ」を構成するNICは、互いの動作を調整するためにクラスタ内で定期的に「ハート ビート」を交換している。
- 「仮想サーバ」を構成する「物理サーバ」で障害が発生したり、
「物理サーバ」が追加・削除されたりして、「ハート ビート」に変化が生じた場合、
NLBはクラスタ構成の変更を検出し「収束」と呼ばれるプロセスを開始する。
- 「収束」プロセスでは、「仮想サーバ」を構成する「物理サーバ」間でメッセージが交換され、
入力トラフィックをフィルタするハッシュ テーブルを再生成し、「物理サーバ」間に展開・共有する。
- これにより「仮想サーバ」が再構築され、クライアント要求は「物理サーバ」に再分散される。
操作モードとNIC枚数 †
ユニキャスト・モード †
NIC1枚 †
- 短所
- 負荷によっては、2枚目のNICが必要
- クラスタ ホスト間の通信は不可能
※ ユニキャスト・モードでは、「仮想サーバ」を構成する全てのNICに同じMACアドレスを割り当てるため、これらNIC間での通信ができない。
NIC2枚以上 †
- 長所
- 全てのルータで機能する
- クラスタ ホスト間の通信が可能
- トラフィックの分離により、全体的な性能が向上する
- フロントエンド、バックエンドとの通信の分離
- 管理操作の分離
マルチキャスト・モード †
NIC1枚 †
- 長所
- 1枚のNICでも動作する
- クラスタ ホスト間の通信が可能
- 短所
- 負荷によっては、2枚目のNICが必要
- ルータによっては特別な設定が必要
NIC2枚以上 †
- 長所
- クラスタ ホスト間の通信が可能
- トラフィックの分離により、全体的な性能が向上する
- フロントエンド、バックエンドとの通信の分離
- 管理操作の分離
- 短所
- 2枚以上のNICが必要
- ルータによっては特別な設定が必要
その他 †
ASP.NETでは、SessionState?を使用するステートフルなアプリケーションでも、
ステートサーバやSQL Serverに状態を一時退避する事で、以下を可能にしている。
- [なしモード]での負荷分散([単一モード]なら不要)
- [単一モード]でフェイル・オーバした後の業務続行(不可能なら不要)
- ただし、ステートサーバやSQL Serverはシングル・ポイントになり得る。
参考 †
Tags: :Windows, :冗長化