2012年11月27日火曜日

Windows Server 2012のNICチーミング

今回も、保留していたお客様からの質問に対する回答です。

Windows Server 2012には、OSネイティブのNICチーミング機能が含まれます。これは、複数のNIC(同一速度のイーサネットに限られます)をまとめた仮想的なNICを作ることで、可用性と性能を向上させる機能です。

NICチーミングには、スイッチングハブ(スイッチ)の構成を必要とする「スイッチ依存モード」と、スイッチングハブの設定が不要な「スイッチ非依存モード」があります。スイッチ非依存モードは、同じスイッチでも別々のスイッチでも構成できます。

スイッチには、MACアドレステーブルが構成されますが、複数のポートに同じMACアドレスがあることは想定されていません。「スイッチ依存モード」はこの問題を解決するために、IEEE 802標準の規約を利用します。

一方のスイッチ非依存モードは、スイッチ側の設定が一切不要です。これは、以下の原理で動作しているためです。

まず、インバウンドデータ(チーミングNICへの着信)は、チーミングNIC構成時に自動的に選択された「プライマリNIC」のみが処理します。チーミングNICのMACアドレスはプライマリNICのMACアドレスになります。ARP要求に対する応答は単一NICのみが応答するため、スイッチは混乱しません。負荷分散モードでもプライマリNICは1枚に限定されます。

2枚のNICを使ったアクティブ・スタンバイ構成の場合、常にプライマリNICのMACアドレスが使われます。アクティブなNICのリンクがダウンした場合は、プライマリNICのMACアドレスがスタンバイ側で使われるため、チーミングNICのMACアドレスは(およびもちろんIPアドレスも)変化しません。同時には1枚のNICしか使わないので、アウトバウンド(チーミングNICからの発信)でも不都合は生じません。

負荷分散をしている場合のアウトバウンド接続(発信)は、指定のアルゴリズムによって負荷分散されます。この時、イーサネットフレームにはNICハードウェア固有のMACアドレスが使われ、スイッチのMACアドレステーブルにはこれが登録されます。単一IPアドレスに複数MACアドレスが対応してしまいますが、これで問題は起きないようです(理由は後述)。

NIC-Team

図は、スイッチ非依存モード、アドレスによるハッシュでチーミングNICを構成し、負荷分散した状態で、ネットワークデータをキャプチャしたものです。送信元MACアドレスが2つあるので、赤と青で色分けしました。接続ごとに負荷分散されていることが分かります。

L2スイッチ内部では、MACアドレスとポートが紐付きますが、IPアドレスとは無関係です。ARPに対する応答はプライマリNICのみが行うため、IPアドレスとMACアドレスの対応も問題ありません。既存のARPテーブルと矛盾を起こす可能性はありますが、IPアドレスとMACアドレスの対応は、もともと変化する可能性があるものなので(たとえばフェールオーバークラスター)、こちらも問題にはならないはずです。

以上のことから分かるように、スイッチ非依存モードでは着信の負荷分散ができません。そのため、効果的に利用できるのは以下の場合に限られます。

  • アクティブ/スタンバイモード…2枚のNICのうち、一方のみを使い、障害発生時に自動切り替え
  • サーバーからの発信データが多い場合(たとえばWebサーバー)

以上です。見落としている条件があるかもしれませんので、お気づきの点があればブログにコメントをいただくか、メールアドレスをご存じの方はメールでお問い合わせください。

回答が遅くなって申し訳ありませんでした。

【参考】 http://www.aidanfinn.com/?p=12924 (英語)