特集
» 2014年02月06日 17時40分 UPDATE

運用:Windows Server 2012 R2のNICチーミング機能(LBFO)をマスターする (2/3)

[小川大地(Microsoft MVP for Virtual Machine),日本ヒューレット・パッカード]

 次はチーム構成時に必要となる動作モードとアルゴリズムについて解説する。

チーミングモード

 チーミングモードとは、チームを組んだ複数のアダプター間で通信の負荷分散(ロードバランス)をするかしないか、また負荷分散する場合はサーバーからの送信パケットのみか、送信・受信とも負荷分散させるかを決めるパラメーターである。

 言葉だけ聞けば、「送信のみ負荷分散」より「送受信とも負荷分散」を選びたくなるところだろう。しかし受信パケットに対する負荷分散はLBFOといったサーバー側のチーミングユーティリティでは対応できない。なぜなら、チームによって束ねられたケーブルのうち、どれを使ってパケットを送るかは送信元(相手側)が選ぶからだ。すでにケーブルを伝って送られてきた受信パケットについて、別のアダプターが受け取ることは物理的にも不可能である(図4)。

図4「チーミング構成におけるパケット送受信と負荷分散の原則」 図4「チーミング構成におけるパケット送受信と負荷分散の原則」
サーバーから見て送信パケットはLBFOが通信に使うケーブル(アダプター)を決定し、受信パケットはスイッチ側がケーブル(ポート)を決定する。LBFOは送信パケットでのみ有効であり、スイッチ側が送ってしまった受信パケットに対して自身の負荷分散アルゴリズムを適用することはできない。なお、スイッチからの受信パケットを負荷分散させるためには、スイッチにもチーミング機能「リンクアグリゲーション」(シスコ社製スイッチではEtherChannelと呼ばれる)が必要である。
  (1)複数のアダプターがある場合、送信に使用するアダプターを何らかの負荷分散アルゴリズムに基づいて選択する。
  (2)どのアダプターを使って受信するかは受信側では決定できない。これを決めるのは相手側(スイッチ側)である。受信側も負荷分散したければ、対向側と協調して動作する必要がある。

 つまり、「送受信とも負荷分散」を実現するためには、対向のスイッチについてもチーミングのような機能が必要となることに注意してほしい。なお、スイッチの世界ではチーミングとは呼ばず、「集約」の意味を持つ「リンクアグリゲーション」や「ポートトランキング」といった言葉が利用される。

 チーミングモードには次の3つがある。

■「スイッチに依存しない(既定)」モード
 負荷分散を行わずに冗長化のみを行うActive-Standby構成や、Active-Active構成において、サーバーから送信されるデータのみ負荷分散を行う動作モードである。対向スイッチ側でリンクアグリゲーションを構成しない(できない)場合はこのモードを選択しよう。
 なお、Active-ActiveかActive-Standbyかについては後述の「スタンバイアダプター」で指定する。

■「静的チーミング」モード
 一般的に「静的リンクアグリゲーション」と呼ばれる、対向スイッチにリンクアグリゲーション機能を必要とするモードだ。スイッチ側で「LAG(リンクアグリゲーショングループ)」を設定しながらも、後述のネゴシエーションプロトコルである「LACP(Link Aggregation Control Protocol)」に対応していない場合はこちらを選択することになる。
 こちらのモードはスイッチ側でもチーミング(集約)を設定するため、送受信ともパケットを負荷分散できる。シスコ社製スイッチにおける「mode=on」相当であるが、LAGに対応しながらもLACPに対応しないといったスイッチ機器は滅多に存在しないため、このモードが用いられることはほとんどない。

■「LACP」モード
 一般的に「動的リンクアグリゲーション」と呼ばれるモードであり、こちらも対向スイッチにリンクアグリゲーション機能を必要とする。静的チーミングの上位互換であり、対向スイッチがLAGとLACPの両方に対応している場合はこちらを選択しよう。
 こちらのモードでは、LAGで束ねたリンクにLACPによる調停を加えることで、一部のリンク(アダプターやポート、ケーブルなど)に障害が発生した場合の切り離しや復旧処理を自動化できる。また、対向スイッチに対して自らLACPネゴシエーションを要求することで、対向ポートのLAGが未構成の場合に自動構成を促すことも可能だ(LACP active機能)。なお、LBFOがサポートするネゴシエーションプロトコルはLACPのみであり、シスコ社独自のPAgPには対応しない。

 以上3つの動作モードを決定するには、スイッチにLAGやLACPなどの機能が搭載されているかを確認することになるだろう。しかしながら、同じ意味でありながらメーカーによって異なる用語が利用されているのが現実だ。加えて、IEEEによる標準化がドラフトと正式制定で仕様変更されたために、輪を掛けて誤解しやすくなっている(表1)。

用語 別称 意味
リンクアグリゲーション ポートトランキング
EtherChannel
スイッチ上で複数のポートを束ねること(NICにおけるチーミングとほぼ同義)
リンクアグリゲーショングループ(LAG) トランクグループ
チャネルグループ
リンクアグリゲーションによって束ねられたポートグループ
静的リンクアグリゲーション
LBFOにおける「静的チーミング」
IEEE 802.3ad draft v1
IEEE 802.3ad Static
ネゴシエーションプロトコル無しでLAGを運用すること
動的リンクアグリゲーション
LBFOにおける「LACP」
IEEE 802.3ad
IEEE 802.3ad+LACP
IEEE 802.3ad Dynamic
IEEE 802.1ax
IEEE 802.1ax-2008
ネゴシエーションプロトコルとしてLACPを用いてLAGを運用すること
表1「誤解しやすいリンクアグリゲーション用語」
リンクアグリゲーションとLACPは同義だと誤解されていることが多いが、リンクアグリゲーションはチーミングに近い意味であり、LACPを使うもの(動的)と、使わないもの(静的)が存在する。また「IEEE 802.3ad」の正しい意味は“LACPを用いたLAG運用”のことであるが、ドラフト段階ではLACPを使わない仕様であったため、リンクアグリゲーション自体をIEEE 802.3adを呼ぶメーカーも存在する。このような背景もあり、後に「IEEE 802.1ax-2008」としてあらためて規格化された。
LAG:Link Aggregation Group
LACP:Link Aggregation Control Protocol

負荷分散モード

 負荷分散モードとは、アクティブなアダプターが複数ある場合に、どのアダプターからデータ送信を行うかを決める「ロードバランスアルゴリズム」のことだ(図5)。

図5「負荷分散モード」 図5「負荷分散モード」
負荷分散モードとは、アクティブなアダプターが複数ある場合に、どのアダプターからデータ送信を行うかを決める「ロードバランスアルゴリズム」のことである。ここまでの解説の通り、LBFOで制御できるのは送信パケットのみであり、受信パケットのロードバランスはスイッチ側のアルゴリズムで決定される。

 Windows Server 2012 R2では、負荷分散モードとして次の3つのアルゴリズムモードを選択できる。

■「アドレスのハッシュ」モード
 こちらは送信元や宛先のMACアドレスやIPアドレス/ポート番号をベースにハッシュ計算を行い、使用するアダプターを決定するアルゴリズムモードである。つまり、これらのアドレス情報が同じ通信については常に同じアダプターが使用される。
 判定に用いられるアドレス情報は次の3パターンだ。上から順に自動選択される。pingコマンドで利用されるICMPといったように、ポート番号の存在しないTCPやUDP以外のプロトコルや、IPSecなどで隠蔽されている場合はIPアドレスをベースに決定される。また、IP通信でなかったり、レイヤー2で判定させた方が良いとされるケースはMACアドレスをベースに決定される。インテリジェントなアルゴリズムであるため、この判定順序は自動に任せるべきであるが、リスクを承知の上でどうしても手動調整したい場合はPowerShellから変更可能だ。

  • 送信元および送信先IPアドレスおよびポート番号
  • 送信元および送信先IPアドレス
  • 送信元および送信先MACアドレス

■「Hyper-Vポート」モード
 こちらは、LBFOチームアダプターをHyper-V仮想スイッチのアップリンクとして接続する場合にのみ有効なアルゴリズムモードである。Hyper-V仮想スイッチは内部で各ポートにIDが割り振られており、そのポートIDをベースに使用するアダプターを決定する。つまり、同じ仮想マシンからの送信データは常に同じアダプターが使用される。

■「動的(既定)」モード
 これはWindows Server 2012 R2から追加された新しいアルゴリズムモードである。アドレス情報などのパケットの中身は見ず、物理アダプターの負荷を見て、負荷が平等になるように送信アダプターを適宜変えていく。パケットの内容を見ないため処理が高速なほか、非常に効率的に分散されることもあり、Windows Server 2012 R2ではHyper-Vやリンクアグリゲーションの有無に関係なく、このモードの利用が推奨されている。

 このように、Windows Server 2012 R2では新しいアルゴリズムモードである「動的」が追加され、こちらの利用が推奨されている。既定値もこちらであり、以前のバージョンのようにネットワーク環境に合わせるのに悩む必要もなくなったのは嬉しい。

 なお、アルゴリズムの解説で気付かれた方もいるかもしれないが、「チーミングを構成しても単一スループットが倍増しない」ことに注意しよう。「1GbpsのNICを2枚束ねればファイルコピーは2倍の2Gbpsになる」といった誤解だ。確かにチームアダプターのリンク速度は2Gbpsと表示されているし、総帯域としては2Gbpsといえるかもしれない。しかし、これは合計で2Gbpsの転送が行えるだけであり、単一セッションの転送スループットは最大1Gbpsのままだ。詳細については次のColumn「チーミングを行っても単一スループットは倍増しない?」を参照していただきたい。

Column「チーミングを行っても単一スループットは倍増しない?」

 チーミングについては広く誤解されていることがあるのでここで補足しておこう。「1GbpsのNICを2枚束ねればファイルコピーは2倍の2Gbpsになる」と思っていないだろうか。これは誤解で、チーミングを構成しても単一のスループットは倍増しないのだ。確かにチームアダプターのリンク速度は2Gbpsと表示されているし、総帯域としては2Gbpsといえるかもしれない。しかし、これは合計で2Gbpsの転送が行えるだけであり、1つ1つのスループットは最大1Gbpsのままである。

 ここについてもう少し詳しく説明しよう。先ほど解説した負荷分散モードのアルゴリズムを思い出してほしい。例えば「アドレスのハッシュ」の場合、どのアダプターを使って送信するかは、送信元や宛先のIPアドレスやポート番号などを用いて決定される。逆に言えば、IPアドレスやポート番号といったアドレス情報が変わらない場合、チーム内の他のアダプターは用いられず、同じアダプターでデータを送信し続けることになる。そのアダプターが1Gbps規格であれば、1Gbpsを超えるスループットは物理的にも不可能なのだ。

 もちろん、複数のホストに同時転送する場合は宛先IPアドレスが変わるために複数のアダプターで並列転送することができる。また、利用するアプリが異なれば、宛先ホストが同じであっても通信に利用するポート番号が変わるために、複数のアダプターを用いた並列転送が行われるだろう。このように、チーミングは単一の転送スループットとしては倍増しない。しかし、同時に複数のアプリケーションから通信を行っていたり、複数の宛先へデータ転送を行っていたりすれば「総帯域」として倍増することになる(図a)。

図a「チーミングを行っても単一スループットは倍増しない」 図a「チーミングを行っても単一スループットは倍増しない」
イメージしやすいように負荷分散モードを「アドレスのハッシュ」に設定した場合の例。
図上側チームを構成しても、送信元や宛先IPアドレス・ポート番号といったアドレス情報が変わらない限り、常に同じアダプターから送信されるため、そのアダプターの物理規格を超えたスループットで転送することはできない。
図下側アドレス情報の異なる転送処理が同時に行われている場合は、双方で異なるアダプターが選択される可能性があり、単一スループットとしては倍増しないものの、「総帯域」としては倍増することになる。

 これは、CPUにおいて2GHzのプロセッサーを2つ搭載しても、4GHzの速度で処理できるわけではないのと同じことといえるだろう。単一のデータ転送で1Gbps以上のスループットを出したい場合は10Gbpsイーサネットが必要であり、チーミングではスループットに対して限界があることを覚えておこう。

 実際の転送速度の測定例を次に示す。単一セッションの場合は、個別のセッションはNIC 1つ分を超えることはないが、複数のセッションがあれば、単一のNICよりも速くなっている。

図b「NTttcpを利用したチーミング環境でのスループットテスト」
図b「NTttcpを利用したチーミング環境でのスループットテスト」 図b「NTttcpを利用したチーミング環境でのスループットテスト」
こちらは、マイクロソフトが配布しているネットワーク性能測定ツール「NTttcp」のテスト結果である。
上の画面チーミングによってリンク速度は4Gbpsとなっているものの((1))、単一データ転送のスループットは1Gbpsイーサネットの実効値である928Mbpsにとどまっている((2)(3))。
下の画面引き続き、同じ4Gbpsのチーム環境において((4))、2つの宛先に対して同時にデータ転送を行った結果。それぞれのセッションは926Mbpsと746Mbpsであり((5)(6))、どちらも1Gbpsは超えていないものの、両方の合計値をみると2Gbpsに近く、単一セッションに比べて倍増していることが分かる((7))。

 なお、負荷分散モードを「動的」に設定した場合も、宛先に届くデータの順序保証の観点から、基本的にデータ転送中に送信アダプターを突然変えるということはない。このため、動的モードの場合も単一スループットが倍増することはない。

 測定で使用したNTttcpツールについては、以下の情報を参照していただきたい。

スタンバイアダプター

 NICチームにおいては、すべてのアダプターを効率的に利用でき、同時に冗長化も実現できるActive-Active構成が一般的だ。しかし、自動的に負荷分散されるのは不安だ、通信する物理アダプターやMACアドレスを固定化しておきたいといったケースではActive-Standby構成を取ることもある。

 Active-Standby構成の場合に、フェールオーバー用の待機系アダプターを指定するのが「スタンバイアダプター」の設定だ。RAIDにおける「ホットスペア」をイメージすると分かりやすいだろう。なお、チーミングモードがLACP(動的リンクアグリゲーション)の場合は、スタンバイアダプターは設定できない(図6)。

図6「スタンバイアダプター」 図6「スタンバイアダプター」
スタンバイアダプターはRAIDにおける「ホットスペア」をイメージすると分かりやすいだろう。チーム化した複数のアダプターのうち、1つをスタンバイに設定することができる。
  (1)ここでスタンバイアダプターとして使用するアダプターを選択する。

LBFOのチーミングモードと他製品とのマッピング

 ここまでの通り、LBFOには「チーミングモード」「負荷分散モード」「スタンバイアダプター」と大きく3つのパラメーターがある。負荷分散モードはWindows Server 2012 R2からは「動的」にしておけばほぼ間違いは無いし、スタンバイアダプターは“ホットスペア”が必要かどうかで判断すれば良い。

 悩みどころは「チーミングモード」だろう。しかし、冒頭でNICチーミングはもはや当たり前と述べた通り、ほとんどの管理者はLBFO以外のチーミングユーティリティを利用したことがあるのではないだろうか。そこで、表2にLBFOと各社の用語をマッピングさせてみた。これまで他社ツールで正常稼働してした設定内容を踏襲すれば、深く悩まずに済むはずだ。

  スイッチ側の
LAG設定
Windows Server 2012 R2 LBFO Intel
PROSet
HP
NCU
VMware
vSS
Active-Standby なし スイッチに依存しない AFT NFT 明示的順序
Active-Active
(送信のみ)
ALB TLB Port ID/
MAC Hash
Active-Active
(送信/受信)
LAGのみ 静的チーミング SLA SLB IP Hash
LAG + LACP LACP DLA 802.3ad
Dynamic
(なし*
表2「LBFOのチーミングモードと他製品とのマッピング」
NICチーミングの動作モードを間違えると、そのサーバーだけでなく対向スイッチにまで影響を及ぼしかねないために、慎重な選択が必要だ。しかしながら、用語こそ違えど動作内容は従来のツールとほぼ同じである。既存環境での設定内容を踏襲する場合などに参考にしていただきたい。
*VMware vSphere環境でLACPによる動的リンクアグリゲーションを構成するにはvDS(分散仮想スイッチ)が必要。
LAG:Link Aggregation Group
LACP:Link Aggregation Control Protocol

 各社のツールについては、以下のサイトを参照していただきたい。

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。