検索
連載

第3回 Hyper-Vネットワーク設計のベストプラクティスWindows Server 2012 R2時代のHyper-Vサーバ設計術(3/3 ページ)

Hyper-Vの性能を最大限に引き出すためには最適なネットワーク設計が欠かせない。仮想マシンの通信用ネットワークのほかに、ホスト・アクセス用やクラスタ用、IPストレージ用など、多数のネットワーク系統も必要だ。これらをどう配置し、実際のサーバ上でどう管理するべきか。Hyper-Vのネットワーク設計のベストプラクティスを解説。10GbEの最新トレンドも解説。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

 10GbEと1GbEを比較すると、性能は10倍なのに対し、コストは数倍程度で済む。となれば、1GbEを10本近く用意するよりも10GbEを採用してしまった方が安価で構成もシンプルだ。

 これを踏まえ、10GbEをベースにしてHyper-Vのネットワーク設計を実践してみよう。ちなみに、冒頭で紹介した米マイクロソフトPFEチームも10GbEの利用を例に挙げている。

10GbE×2ポートでHyper-Vネットワークを構成する(OS標準機能を利用する)

 表1「中規模クラスのHyper-V本番サーバで必要となるネットワーク」を思い出してほしい。1サーバあたりに用意したい帯域は最低8Gbps、IPストレージを利用する場合で13Gbpsと解説した。帯域的には前ページの図7「2013年より出荷が開始された10GBase-T製品」のような2ポート10GbE NICが1枚あれば十分だが、これではもう1つの要件である系統数を達成できない。

 この課題をOS(ソフトウェア)側で対応するには、仮想マシン用ネットワークの分離にも利用する「VLAN」を使う。実際にどのように設定するか、一般的な構成例をベースに解説しよう。

 次のような構成のVLANを想定する。

■接続先:仮想マシン
・仮想マシン用ネットワーク: VLAN ID=100〜200

■接続先:親パーティション
・ホスト・アクセス用ネットワーク: VLAN ID=10
・WSFCハートビート+CSV通信: VLAN ID=20
・ライブ・マイグレーション用: VLAN ID=30


 当然ながら、回線障害に備えてNICチーミングも必要だ。Windows Server 2012以降ではOS標準の「LBFO(負荷分散とフェイルオーバ)」機能でNICチーミングを行う。またLBFOはNICチーミングだけでなく、VLAN分割の際も利用する。上記例での設定手順を「素直に」考えると、次のようになるだろう。

  1. LBFOで2つの10GbEにNICチーミングを行い、LBFOチームを作成する。
  2. LBFOのVLANメンバーシップ機能を用いて、親パーティションに接続する各VLANに対応したLBFOセカンダリ・インターフェイスを設定する。
  3. 残った既定のLBFOプライマリ・インターフェイスをHyper-V仮想スイッチへマップする。
  4. 仮想マシンにVLAN IDを設定する。
図9「LBFOによるNICチーミングとVLANの併用」
図9「LBFOによるNICチーミングとVLANの併用」
図9「LBFOによるNICチーミングとVLANの併用」
LBFOでは、作成したNICチームに対して「LBFOセカンダリ インターフェイス」を作成することでVLAN分離が可能になる。
  (1)VLAN IDの指定。
  (2)NICチーミングとVLANの併用例。

 しかしながら、実はこの設計は不正解だ。例外はあるものの、大半のHyper-V環境では動作しないだろう。なぜなら、VLAN IDが10、20、30であるかどうかを識別するために、LBFOを通過するすべてのパケットからVLANタグ(VLAN ID)を剥がしてしまうためだ。パケットに付いていたVLAN IDがセカンダリ・インターフェイスにない場合は、既定のルート(プライマリ・インターフェイス)を通じて仮想スイッチに届くものの、VLANタグはすでに剥がされてしまっているために、仮想スイッチ上でVLAN IDの識別ができず、あて先の仮想マシンと通信できない。

図10「Hyper-VではLBFOのVLANメンバーシップ機能を使用できない」
図10「Hyper-VではLBFOのVLANメンバーシップ機能を使用できない」
LBFOでセカンダリ・インターフェイスを設定すると、その識別のためにLBFO上でVLANタグ(VLAN ID)が剥がされてしまう。このため、パケットが仮想スイッチに届いてもVLAN IDを識別できず、あて先仮想マシンと通信できない。

 VLAN設定を行った仮想マシンと正しく通信させるには、その識別を担う仮想スイッチまでVLAN IDが残されていなければならない。冒頭の米マイクロソフトのベスト・プラクティスにも記述されているが、LBFO環境でこれを行うにはセカンダリ・インターフェイスを作成せず、既定のプライマリ・インターフェイスだけで、すべてのパケットを仮想スイッチに転送するように構成しておく必要がある。VLAN IDの識別を多段で行うことはできない。

 具体的には、WSFCハートビートやiSCSIといった親パーティションあてパケットについてもいったん仮想スイッチに送り、仮想スイッチのVLAN ID識別機能を利用する必要がある。ただし図11「Hyper-Vマネージャによる親パーティションへのスイッチ・ポート作成」のように、GUI(Hyper-Vマネージャ)では親パーティション向けの仮想スイッチ・ポートは1個しか作成できないが、PowerShellを使えば複数作成することが可能だ。

図11「Hyper-Vマネージャによる親パーティションへのスイッチ・ポート作成」
図11「Hyper-Vマネージャによる親パーティションへのスイッチ・ポート作成」
Hyper-Vマネージャの仮想スイッチ・マネージャを使うと、特定の仮想スイッチに対してVLAN IDを設定できるが、このGUI画面では、仮想スイッチあたり1ポートに限定されている。複数のVLAN IDを設定したい場合はPowerShellを利用する。
  (1)これをオンにすると仮想スイッチ上で親パーティション向けのポートが作成される。
  (2)VLANを利用するために、これをオンにする。
  (3)このポートのVLAN IDを設定する。

 PowerShellコマンドで、仮想スイッチに親パーティション向けポートを作成するには次のようにする。

Add-VMNetworkAdapter -ManagementOS -Name <識別名> -SwitchName <仮想スイッチ名>


 作成したポートにVLAN IDを設定するには次のようにする。

Set-VMNetworkAdapterVlan ManagementOS -VMNetworkAdapterName <識別名> -Access -VlanId <VLAN ID>


 正しい手順をまとめると次のようになる。

  1. LBFOで2つの10GbEにNICチーミングを行い、LBFOチームを作成する。
  2. LBFOのVLANメンバーシップ機能は使わずに、既定のLBFOプライマリ・インターフェイスのみとし、これをHyper-V仮想スイッチへマップする。
  3. PowerShellを使用して仮想スイッチに親パーティション向けポートを複数作成し、それぞれに対応するVLAN IDを設定する。
  4. 仮想マシンにVLAN IDを設定する。
図12「10GbE×2ポートによるHyper-Vのネットワーク設計(OS標準機能を使う方法)」
図12「10GbE×2ポートによるHyper-Vのネットワーク設計(OS標準機能を使う方法)」
このように構成することで、物理NIC×2ポートだけで本格的なHyper-Vネットワークを設計できる。iSCSIやSMBといったIPストレージを利用する場合は、VLAN ID=40のようにして、さらに親パーティションのVLANポートを増設すればよい。

 ただし、この構成を使う場合は次の2つの点に注意しなければならない。

●注意点1―帯域の共有

 第1の注意点は、「帯域を共有する」という点だ。例えば、ライブ・マイグレーションを実行すると、その処理にかなりの帯域を奪われてしまい、ほかのネットワークに影響が生じるもしれない。IPストレージを使うとなれば、日常的に帯域を奪われてしまうリスクもある。

 1ページ目の図1「Hyper-Vの帯域幅管理機能」で紹介した仮想マシンの帯域幅管理機能と同様に、仮想スイッチに作成した親パーティションポートに対しても、PowerShellから帯域をコントロールすることができる。ただし、各パラメータの意味をきちんと理解してから設定しよう。この設定は意外とシビアであり、設定不足や設定ミスが大きなネットワーク・トラブルを引き起こすリスクがある。詳しくは以下のページを参照していただきたい。

●注意点2―CPUの負荷

 もう1つの注意点はCPU負荷である。専用のASICを搭載したスイッチ機器と違い、ソフトウェアでスイッチング処理を行う仮想スイッチは、転送量が増えるにつれてCPUに負担がかかる。Hyper-Vの仮想スイッチはこのスイッチング負荷が比較的高く、10Gbpsクラスのスループットを仮想スイッチで処理すると結構なCPUリソースを奪われてしまうだろう。このため、米インテルを中心としたNICベンダが、これを抜本的に解決する「SR-IOV(Single Root I/O Virtualization)」という技術の普及を進めている。

 米マイクロソフトのベスト・プラクティスをベースにした今回のネットワーク構成では、親パーティションあてのI/Oはいったんすべて仮想スイッチに送っている。つまり、このI/OもCPUベースのソフトウェア・スイッチングの対象となり、それなりのCPU負荷が予想される。こういった意味でも、iSCSIやSMBといったIPストレージの採用はよく考えて判断しなければならない。

10GbE×2ポートでHyper-Vネットワークを構成する(NICパーティショニングを利用する)

 OS標準機能(仮想スイッチ+VLAN)には細かい点で懸念があるし、1GbEでは大量のポートが必要となり、費用がかさんで物理スペース的にも厳しくなる。では、やはりHyper-Vは小規模向きで本格採用できないのかというと、そうとも限らない。ベンダ各社が“仮想化向け”と位置付けているサーバの多くは「NICパーティショニング」という技術を備えており、これを用いることで帯域共有やCPU負荷の問題を解決できる(図13)。

図13「NICパーティショニング」
図13「NICパーティショニング」
NICパーティショニングとは、ハードウェア・レベルでポートを分割したり、帯域配分したりする機能である。BIOSのレベルで分割することができ、OSからはあたかも“独立した物理ポート”であるかのように取り扱える。このため、すべてのパケットをいったん仮想スイッチに送る必要もなく、CPUにも優しい。サーバNICと対向スイッチが連動して実現する技術であるため、両者が1つの筐体(シャーシ)内で内部配線されるブレード・サーバで実装されていることが多い。この画面は、HP社のサーバ上で、2つの物理NICを8つの仮想的なNICに分割設定しているところ。

 実際のNICパーティショニング技術については、各ベンダの資料などを参照していただきたい。

 NICパーティションニング機能を使ったHyper-Vネットワーク設計の例を次に示す。この例では2ポートの10GbEを8つの仮想的なNICに分割し、それぞれの用途に最適な帯域を割り当てている。VLANの設定といった面倒な作業は不要である。

図14「10GbE×2ポートによるHyper-Vのネットワーク設計(NICパーティショニング)」
図14「10GbE×2ポートとNICパーティショニングを使ったHyper-Vのネットワーク設計例」
ハードウェア・レベルでのNICパーティショニング機能と組み合わせると、親パーティションへのVLAN設定といった面倒な操作は不要になるし、CPUに余計な負荷もかからない。

 確かに現在のHyper-Vだけでは限界がある。しかし、すべてをHyper-Vのレイヤで実現する必要はない。ハードウェアとソフトウェアが互いの強みを活かして補完しあうと、「可用性」「性能」「コスト」を両立する優れたシステムを実現可能だ。少ない予算でよりよいシステムを実現するために、このような“エコシステム”な設計を心掛けていこう。


 今回は10GbEなどを中心に、コストを意識したHyper-Vネットワーク設計のベスト・プラクティスを解説した。次回は連載の最後として、今回触れることのできなかったInfiniBandや、Hyper-Vシステム全体の最適設計方法についてまとめる。


「Windows Server 2012 R2時代のHyper-Vサーバ設計術」のインデックス

Windows Server 2012 R2時代のHyper-Vサーバ設計術

Copyright© Digital Advantage Corp. All Rights Reserved.

前のページへ |       
ページトップに戻る