Windows Server 2003 の時からあまり機能変化がないNLBですが、最近気が付いたことがあります。
今まで、NLBにおいては強い推奨としてネットワークカードは2枚にしましょうということでした。その理由はNLBの実装にありました。
Windows Server 2003 の時からあまり機能変化がないNLBですが、最近気が付いたことがあります。
今まで、NLBにおいては強い推奨としてネットワークカードは2枚にしましょうということでした。その理由はNLBの実装にありました。
NLBを構築した際に、ハートビートを解析するにはネットワークモニターを使用することになります。
マイクロソフトが提供しているネットワークモニターとしては2011年3月現在最新バージョンは3.4になります。
Microsoft Network Monitor 3.4
http://www.microsoft.com/en-us/download/details.aspx?id=4865
日本語化
http://d.hatena.ne.jp/wwwcfe/20100627/networkmonitor
まずはNLBを構築します。
NLBを構築する際には注意しなくてはいけないことがあります。それはHyper-Vで構築しようが、物理サーバーで構築しようが同じです。
今回は結論から書きますが、Hyper-VでNLBを設定するサーバーに対してはVLANを使用して専用セグメントを作ることがベストだと考えます。NBLの条件としてはユニキャストモードで構築するとします。
さて、ここでなぜVLANを使用するのか?
ここで考えなくてはいけないのが、NLB(ユニキャストモード)における動作になります。
NLBを構築すると、NLBに参加しているホストのMACアドレスはNLBのMACアドレスに置き換わります。ここで問題なのはスイッチとの関係になります。スイッチはポートごとにMACを登録しますが、この状態だと複数のポートに同じMACアドレスがあることになります。となると、スイッチではMACアドレスが適切に登録されないという事態が発生するのです。そこで、NLBに参加しているホストはフェイクのMACアドレスを送信するようになります。
この図で解説すると、本来のMACアドレス02-bf-a-a-a-aが02-01-a-a-a-aとして送信されることになります。ただし、ARPデータは本来のMACアドレスである02-bf-a-a-a-aをさすんです。よって、クライアント側ではIPとMACアドレスの対応は正常に行われることになります。
ではクライアントからNLBにアクセスする際の動作としては、NLBのMACアドレスはスイッチに登録されていないので、全てのポートにフラッディングされることになります。そうすると、NLBに参加している全てのサーバーにデータは届きます。
ここでNLBのアルゴリズムである、統計的完全分散フィルタリングアルゴリズムによって適切なサーバーでデータが処理されることになります。
ここで問題です
NLBに参加していないPCやServerたちにも、NLB宛てのデータが届いてしまうのです!しかし、自分宛のパケットではないのでドロップ処理を行い受け付けません。要するに同じセグメントに参加しているコンピュータには不要なパケットがバンバン届くんですね。
よって、NLBを構築する際には専用セグメントを作成して、その中だけでNLBパケットを完結させる必要があるんです。
そのためには、Hyper-V環境ではVLANを使用するのが最も効率が良い方法だと考えるからになります。
TechED2009ではHyper-V2.0においての設計についての話が結構ありました。そこで検証作業を行いました。
Hyper-V2.0でも1.0と同様の設定が必要になると思っていましたが違う点がありましたので注意する必要があります。
それは、Hyper-V1.0のときはNLBを設定する際にはゲストOSのネットワークのMACアドレスを静的にし、NLBを構成した際に配布されるMACアドレスに書き換える必要がありました。
参考:
http://support.microsoft.com/kb/953828/ja
そこで、Hyper-V2.0でも同じことをしなくてはいけないと思いいざ構成してみると・・・・
ここでNLBのMACアドレスをメモ・・・「02-bf-ac-10-0a-96」
あらかじめゲストOSのネットワークアダプタには「MACアドレスのスプーフィングを有効にする」にチェックを入れておきます
あれれ、静的MACアドレスにしなくても収束してしまった
確認のためにゲストOSのMACアドレスを調べると・・・NLBのMACアドレスになっている!!
まとめ
ということになりますね。いや~、知らなかった(汗)