VIFでのロードバランシングはどのように機能しますか。
環境
Data ONTAP 7
Data ONTAP 8
回答
VIF / ifgrp タイプの概要
NetApp によるトランキングの実装は、VIFと呼ばれます。その背後にある理論は、設定するVIFのタイプによって異なります。 次の3種類のVIF(Data ONTAP 8以降ではifgrpと呼ばれます)があります。
- シングルモード-ロードバランシングなし、厳密にフェイルオーバー
- マルチモード-ロードバランシング
- LACP -ロードバランシング、低レベルの接続検証
標準のシングルモードVIF / ifgrp
あるインターフェイスで物理リンクが切断された場合、ネットワークセッションは維持され、VIF内の別のインターフェイスにフェイルオーバーされます(VIFには最大16個のインターフェイスを含めることができます)。
スイッチを設定しないため、これは最もシンプルなVIF実装です。
注:単一のVIFは特定のスイッチ構成を必要としないため、異なるスイッチに分散することができます。ただし、マルチ VIFのすべてのポートを1つのスイッチに接続する必要があります。これがサポートされるかどうかはスイッチによって異なりますが、ほとんどのスイッチでは、異なるスイッチに接続するマルチVIFはサポートされません。
標準マルチモードVIF / ifgrp
マルチモード VIF / ifgrpでは、すべてのメンバーインターフェイスをトラフィックに使用できます。 このモードでは、フェイルオーバーが可能になるだけでなく、複数の接続ホストまたはTCP ストリームで使用可能な総帯域幅が増加します。
しかし、よくある誤解の1つは、利用可能なすべての「ロードバランシング」アルゴリズムによって、特定のホストが集約された総帯域幅を利用できるということです。
言い換えると 、4つの1Gbpsメンバーインターフェイスを含むマルチモードまたはLACPのVIF / ifgrpを作成した場合、4Gbpsを利用できるホスト(1Gbpsネットワークインターフェイスカードが取り付けられている可能性があります)は、4メンバーのvif / ifgrpと通信するときに最大4Gbpsを達成できると想定されることがあります。 実際には、各ホスト( 「-b port」の場合はTCP/UDPストリーム)は1つのメンバーインターフェイスしか利用できません。 この例では、特定のホストまたはTCP/UDP ストリームで使用できる最大帯域幅は1Gbpsになります。 ただし、別のホストまたはストリームでは別のメンバーインターフェイスを使用できるため、ポートの使用率と競合が軽減されます。
したがって、VIF / ifgrpでは、複数のホストまたはストリームがこのストレージコントローラと最大4Gbpsで送受信できますが、各ホストまたはストリームで実現できるのは1Gbpsに限られます。
この動作はNetAppに固有のものではなく、最新のスイッチで使用される802.3adリンクアグリゲーションの基本原則です。
LACP VIF / ifgrp
LACP vif / ifgrpは、1つの例外を除き、マルチモードVIF / ifgrpと機能は同じです。 LACPは、Link Aggregation Control Protocol(LACP)を使用して802.3adリンク障害検出を追加します。 LACPは負荷分散の機能を変更せず、障害検出レイヤをVIF / ifgrpに追加するだけ
LACPを使用すると、 VIF / ifrgrpの物理インターフェイスメンバー(物理ポートなど)は、VIF / ifrgrpが 直接接続されているスイッチポートとLow Level Protocol Data Unit(PDU;低レベルプロトコルデータユニット)を交換できるかどうかを検証します。 これらのPDUを交換できない場合、メンバーインターフェイスはVIF / ifgrpから削除されます。 LACPは 、物理インターフェイス(物理ポート) とスイッチ上のポートの間でしかPDUを交換できないため、第1レベルのVIF / ifgrpにのみ設定できます。
ロードバランシングアルゴリズム
マルチモードおよびLACPのvif / ifgrpには、次の4種類のロードバランシングがあります。
IPアドレス
トラフィックの分散は、送信元のIPアドレスに基づいて行われます。これがデフォルトであり、各ホストがVIF / ifgrp内の最大1つのメンバーインターフェイスを使用できます。
MACアドレス
トラフィックの分散は、送信元のMACアドレス(通常、ルーティングされた環境(ルータ)では毎回同じ)に基づいて行われ、各ホストはVIF / ifgrp内の最大1つのメンバーインターフェイスを使用できます。
ラウンドロビン
イーサネットパケットが通過する発信インターフェイスは事前に決定できません。送信された応答は、ラウンドロビン方式でメンバーインターフェイスを使用します。 これは、不適切に分散されたIPアドレスやMACアドレスを持つ単一または複数のトップトーキングホストのような悪条件の下で、真のロードバランシングを保証する唯一の方法です。
注:Data ONTAP 7.3.1では、ラウンドロビンはサポートされなくなりました。
注:ラウンド ロビンロードバランシングでは、配信パスの微細な差異が原因でパケット配信の順序が乱れてしまうことがあります。 これにより、TCP 重複ACKおよび再送信が増加する可能性があります。 そのため、一部のプロトコルおよびアプリケーションは、Round Robinロードバランシングと組み合わせて使用すると、適切に動作しません。
ポート
送信元IPアドレスと宛先IPアドレス、およびトランスポートレイヤのポート番号に基づいてトラフィックを分散します。IP+ポートとも呼ばれます。Data ONTAPバージョン7.3.1D3および7.3.2以降で使用できます。 この方法を選択すると、TCP / UDPポート番号が計算に追加されるため、1つのホスト からストレージコントローラへの複数のTCPストリームを持ち、各ストリームがVIF / ifgrp内の異なるメンバーインターフェイスを使用することができます。 これにより、単一のメンバーインターフェイスで可能なスループットよりも高い帯域幅の使用が可能になります。
ONTAP ロードバランシング実装
IPおよびMACベースのロードバランシングの動作には混乱があります。 マルチモードまたはLACPの vif / ifgrpでメンバーインターフェイス間でトラフィックを分散するために使用されるアルゴリズムは、Data ONTAP 7.3.2で変更されました。
7.3.2以降のData ONTAPリリース(および7.3.2以降も含む):
Data ONTAP 7.3.2以降では、マルチモードまたはLACP ifgrp/vifで「SuperFastHash」の実装が使用されています。SuperFastHashは、送信元 と宛先の IPアドレスの最後の16ビット( -b ip)、送信元と宛先のMACアドレスの最後の16ビット(-b mac)、または送信元と宛先のIPアドレスの最後の16ビット(-b port)を使用します。
アルゴリズムの出力により、 7.3.2より前のバージョンのData ONTAPで使用されていたアルゴリズムよりも、はるかに動的でバランスの取れた分布が得られます。 ただし、結果は同じですが、各TCP ストリームは1つのインターフェイスにのみ関連付けられ、TCPストリームごとに1つのポートに相当する帯域幅しか使用できません。
7.3.2より前のData ONTAPリリース:
7.3.2より前のドキュメントでは、次の式が記載されています。
((source_address XOR destination_address)%number_of_links)
上記の式の例:
filerA:
VIFのIPアドレス:10.10.7.31
VIFのインターフェイス数:4(0、1、2、3)
バランシングタイプ:IP
テストマシン:
IPアドレス:10.10.5.6
テストマシンからネットワーク要求が送信されると、Filerは送信元の最後のオクテットを調べ、最後の4ビットでXORを実行して、トラフィックがバックアウトするインターフェイスを決定します。
ソースの最後のオクテットは、00000110
宛先の最後のオクテット00001111
XOR equiv:00001001であり、これは9(最後の4ビット)
9を4で割った値が2であり、剰余(モジュラス)は1である。これは、リターントラフィックが番号1のインターフェイスから戻ってくることを意味します。
これがテストです。セットアップは次のとおりです。
filerA:VIFのIPアドレス:10.60.192.181
VIFのインターフェイス数:2(0と1の番号が付けられたインターフェイス)
バランシングタイプ:IP
テストマシン:
IPアドレス:10.60.192.205
テストマシンIから:
- NFSでマウントされたファイルシステム
- mkfileを使用して10Mファイルを作成
処理中のvif statは次のようになります。
f840-rtp2> vif stat mvif1 1
Virtual interface (trunk) mvif1
e3b e3a
Pkts In Pkts Out Pkts In Pkts Out
42822 19395 42040 20131
1 0 1 0
1 0 1 0
0 0 0 0
2 0 2 0
2 0 2 0
4 0 4 0
0 0 0 0
3 0 3 0
2 0 2 0
3 0 3 0
0 0 7372 3849
0 0 1 0
1 0 1 0
1 0 1 0
2 0 2 0
計算方法は次のとおりです。
ソースの最後のオクテットは: 10110101
宛先の最後のオクテット: 11001101
XOR equiv: 01111000これは8 (最後の4ビット) 8を2で割ったものは
4で、剰余(モジュラス)は0です。これは、リターントラフィックが番号0インターフェイス(e3a)から戻ってくることを意味します。
VIFテストのセットアップ
- Filerにマルチモードvifを作成します(インターフェイスに注釈を付けます)。
vif create multi VIF_name interface_1 interface_2 - スイッチ上で、Filerが接続されているスイッチポートのEtherChannelグループを作成します。
set port channel Blade/Interface_list mode desirable - ポートチャネルが設定されていることを確認します。
show port channel - vifにIPアドレスを割り当てます。
ifconfig VIF_name IP_address netmask XXX.XXX.XXX.XXX up - FilerがNFS経由でファイル・システムをエクスポートしていることを確認します。
- UNIXテスト・クライアントからFilerのVIFにpingを実行します。
- VIFのIPアドレスを使用して、Filerから派生したファイルシステムをマウントします。
- FilerへのTelnetウィンドウを開き、「vif stat VIF_name 1」を実行します。
- ディレクトリをマウントポイントに変更します。
- テスト・マシンとFilerの最後のオクテットを取得し、XORを実行します。最後の4ビットを加算します。その値に注釈を付けます。
- 前の値をインターフェイスの数で割ると、残りはトラフィックが送信されるインターフェイスの数になります。
- 「mkfile 10m testfile」を実行し、telnetウィンドウを監視して、入出力トラフィックがあるインターフェイスを監視します。
追加情報