(1) ロードシェアリング とはなにか
PortChannl(LAG) や ECMP(equal-cost multipath) を使うと宛先まで複数のリンクを使ってトラフィックをロードバランスさせることができます。
前者は対向機器に直結する複数のL2/L3リンクを一本に束ね、後者は同コストで宛先まで複数経路で L3 Routing 出来る場合に複数の経路を使います。
ロードシェアリングでは1パケットごとに異なるパスを選択することもありますが、一般的にはフロー毎に同一のリンクやパスを使用します。
これは前者だと同一のフロー内でパケットの順序が入れ替わってしまうためです。
(2) Hash の仕組み
ロードシェアリングを行う際、どのフローがどのリンクやパスを使うかを決定する必要があります。
これには Hash と呼ばれる仕組みを使っています(Hash自体は一般的な概念ですのでここでは割愛します)。
コマンド等でパケットのヘッダーのどのフィールドを Hash の対象にするかを決め、それに基いて Hash 値を算出します。
一般的には L2-L4 の Source, Dest のアドレスや Port 番号あたりが Hash の対象です。
同一フローのパケット群ではこれらのフィールドは完全に同じになりますので、パケットごとに同一の Hash 値が毎回得られます。
そのため、同一フローは同一リンクやパスを使うことになります。
なお、Hash で得られる値のレンジを bucket と呼び、M1/M2 Card は 6bit(64パターン), F2 は 8bit(256パターン)あります。
この bucket のどこにパケットが入るかにより、そのパケットがどのリンクやパスに使うかが決まっています。
(3) ロードシェアリングの考慮事項
流れるフローのフィールドを意識しないと有効にトラフィックをロードバランスできません。
例えばパケットの中継機器ですとL2フィールドが全く同じものになる可能性があります。その場合、L2 ヘッダのみを Hash の対象にすると同一の Hash 値が毎回生成されるため、効率よくロードバランスされない場合があります。
全てのNexusで使える保証はありませんが、以下のコマンドを使うとチャネルのロードバランスの状態を確認できます。
# show port-channel traffic
機器によっては時間ではなく累積値で算出している場合があるので、確認の際は適時カウンタをクリアして下さい。
ロードバランスの設定手法については各機器の configuration guide を参照願います。