仮想環境におけるネットワークで特に重要なのが、冗長化をはじめとした耐障害性を高める構成である。見かけは1台のサーバーでも、仮想環境を導入している場合は、その上で多数の仮想サーバーが動作している。つまり、その分、障害などの影響を受ける範囲が大きくなるということになる。

 ネットワーク周りで冗長化の対象となる個所は二つ。一つは物理サーバーとスイッチをつなぐリンク。もう一つは、そうしたリンクを束ねて上位ネットワークと接続するスイッチである。それぞれに実現手段はいくつかある。ただ、独立して見えるが、実はリンクの冗長化とスイッチの冗長化は組み合わせられるパターンが決まっている。

方式はNICとスイッチをセットで選ぶ

 まずリンクの冗長化については、NICを二つ搭載し、リンクを2重にするのが一般的な手法である。こうすると、リンクの一方が切れても、もう一方で通信を継続できる。

 第1回でも触れたように、NIC(ポート)は各用途ごとに2枚ずつ搭載する必要がある。例えば、4種類の用途ごとにNICを用意する場合、すべてを2重化すればその2倍の8枚のNICが必要となる。ただし、単にNICを2枚用意しただけでは冗長化にはならない。それらを束ねてあたかも1本のリンクとして運用するための仕組みが必要となる。そうした仕組みはチーミングと呼ばれている。

 仮想環境で2枚の物理NICを束ねるチーミングは、(1)ハイパーバイザーの機能を利用する方法、(2)イーサネットの標準機能である「リンクアグリゲーション」を利用する方法---の二つに大きく分けられる。(1)はVMware独自の機能で、VMwareのハイパーバイザー(ESX)が「NICチーミング」と呼ぶ機能を提供する。(2)のリンクアグリゲーション機能はNICベンダーのドライバーで提供される。Hyper-VとXenServerの仕様では、チーミングとして(2)の方法しか利用できない。Hyper-Vを採用しているアステラス製薬やXenServerを採用しているフーズネクストは、(2)のリンクアグリゲーションを使って冗長化を実現している。一方、VMwareのチーミング方法は、(1)と(2)のどちらかを選択することになる。

 LANスイッチの冗長化も、NICと同様に考える。つまり、2台のLANスイッチを用意し、片方に障害が発生しても、もう一方で通信を継続できるようにするのである。冗長化したLANスイッチの構成方法には、(A)2台のLANスイッチを独立させたままにする、(B)2台のLANスイッチをスタックさせて1台として運用する---という二つの方法がある(図1)。

図1●LAN構成に応じたスイッチ冗長化と注意点
図1●LAN構成に応じたスイッチ冗長化と注意点
物理サーバーを直接収容するアクセススイッチを分離するパターン(A)と、1台のスイッチとして運用するパターン(B)がある。(A)では、リンクステートトラッキングを適用するとよい。(B)では、障害時のSTPの再構成で通信が数十秒中断する恐れがあるため、サーバーを収容するポートは通信を継続させる「ポートファスト」機能を適用する。
[画像のクリックで拡大表示]

 前述のように、NICの冗長化とLANスイッチの冗長化はセットとして考える必要がある。(1)のNICチーミングを利用する場合は、(A)の2台のLANスイッチを独立させる方法が適している。一方、(2)のリンクアグリゲーションは、(B)のスイッチをスタックさせる方法と組み合わせるしかない。つまり、(1)―(A)と(2)―(B)という組み合わせになる。

 ではどちらのセットを選んだらよいのか。その基準となるのが、チーミングを利用する際の負荷分散方式である。VMwareでは、負荷分散方式として、(a)送信元仮想ポートID方式、(b)送信元MACハッシュ方式、(c)送信元・あて先IPアドレスハッシュ方式---の3種類がある。(a)と(b)は、(1)のチーミング方式で利用できる。また(c)は、(2)で利用できる。

 VMwareのユーザーはどの負荷分散方式が自社の環境に合っているのかを考えればよい。逆に、既存のLAN環境を利用する場合は、先にLANスイッチの冗長化手法の(A)か(B)を選び、それに合わせてチーミングの負荷分散方式を選択するというケースが考えられる。

大抵の環境ではデフォルトを選べばよい

 (a)の仮想ポートIDは、VMwareの仮想マシンの仮想NICに割り当てるポート固有のIDである。デフォルトの設定では、この(a)を利用するようになっている。「この方式はCPUへの負荷が最も少なく、ほとんどのケースでそつなく負荷分散できる」(ヴイエムウェアの齋藤康成・ストラテジックアライアンス テクニカル アライアンス マネージャ)。大抵の環境では、この方式を使うべきである。

 (b)の仮想MACアドレスは、仮想マシンに割り当てたMACアドレスのことで、そのハッシュ値を計算し、それに基づいて転送に使うNICを割り当てる。基本的には、(a)も(b)も仮想マシンの仮想NICを指定するものなので、負荷分散の効果は同じになる。この方式はハッシュ値の計算処理でCPUに負担がかかるため、通常は(a)を選ぶ。ただ、ユーザーの環境によってはまれに(a)ではうまく負荷分散できないケースがある。そうした例外的な場合は、この(b)を使うとよい。

 (c)の方式では、送信元IPアドレスとあて先IPアドレスの両方を使って、フレーム送信に利用するNICを決める。このため、同じ送信元でもあて先が異なる通信が多い場合は、負荷分散効果が高くなる。例えば、不特定多数のクライアントが利用するWebやストリーミングなどのサーバーにはこの方法が有効だ。また、第3回で説明するiSCSIでの「マルチパス」(冗長化手法の一つ)にはこの方式を利用するのが効果的だ。