【図解】リンクアグリゲーションの仕組み〜負荷分散、LACPとStaticの違いやメリットデメリット、条件等〜

リンクアグリゲーションとは、複数の Ethernet ポートを論理的に 1 つに見せる、スパニングツリーに替わる L2 冗長化技術です。

スパニングツリーより優れている点は、通常時において冗長化だけでなく負荷分散も可能であり、利用できる帯域が増えることです。最大 8 ポートまで同時に通信できるようになります。

元は cisco が独自に策定した "EtherChannel(イーサチャネル)" がベースで、IEEE 委員会が規格化しました。ポートチャネルとも言われますが同じ機能です。

リンクアグリゲーションに関する誤解集

Q. 1 つのパケットを 2 つの ethernet に並列で出すの?

A. いいえ、パケット単位で経路の負荷分散をします。

Q. 規格は IEEE802.3ad だよね?

A. いいえ、昔はそうでしたが今はIEEE802.1AX-2008です。

Q. 規格って LACP を規定してるだけじゃないの?

A. いいえ、IEEE802.1AX では Static Link Aggregation (cisco で言う mode on) と Dynamic Link Aggregation (LACP) の両方が規定されています

リンクアグリゲーションの条件

複数のポートで LAG (Link Aggregation Group) というグループを組みます。1 つの LAG で動作する Ethernet ポートは 8 本までです。Static で使う場合は 1 つの LAG に 8 本まで設定できます。LACP を使う場合は 16 本まで設定できますが、8 本が Active で、残りは Standby (通信利用不可) になります。Active の線が 1 本不通になった場合、Standby のうち 1 本が Active になります。

また、LAG 内では Ethernet 規格は揃っている必要があります。例えば{1000Base-T と 1000Base-LX}、{1000Base-T と 100Base-TX}といった組み合わせはできません。

リンクアグリゲーションの動作

送受信の動作は以下のようになります。

送信

Static の場合は LAG のうちリンクアップしているポートの中から、Dynamic (LACP) の場合は LAG のうち LACP で疎通が取れているポートの中から送信します。

どのポートを使うかは送信側の負荷分散方式のみに従います受信側は関係ありません)。取り得る負荷分散方式の種類は以下の組み合わせパターン全てで、サポートされる種類、デフォルト値はメーカによって異なります。

{送信元 MAC アドレス , 宛先 MAC アドレス , 送信元 IP アドレス , 宛先 IP アドレス , 送信元ポート , 宛先ポート}

上記のうち 1 つだけ見る方式もありますし、2~6 個の組み合わせを見る方式もあります。見るときはハッシュを計算し、そのハッシュ値に応じてどの Ethernet ポートを使うかを決めます。

受信

受信はどのポートに来ても同じように扱います相手の負荷分散方式にはこだわりません)。

論理的には 1 つのポートの扱いになりますので、リンクアグリゲーショングループ内の他のポートへのブロードキャストやフラッディングはされません。また、同じ MAC アドレスからのフレームを毎回違うポートから受信しても、MAC アドレステーブルの更新は行われません。(1 つの論理ポートで受信するため)

LACPを使うメリット

LACP を使うメリットは以下 2 つです。

  1. 9 本以上で接続し、予備を持たせることができます。
  2. リンクダウンを伴わない障害を正しく検知し、適切なフレーム転送ができます。

2 つ目については例えば、メディアコンバータを介してStatic Link Aggregation を組む場合、メディアコンバータの光ケーブル側だけ障害が起きた場合はスイッチとしてはリンクアップしたままで、利用できる経路と判断されるため、障害の経路にもフレームを投げ、そのフレームがメディアコンバータで破棄される、というケースが考えられます。

しかし LACP を遣えばそのようなケースでも経路上で LACP が通信できないことを把握し、障害と認識し、その経路を使わないようにすることができます

LACPを使うデメリット

具体的に予想しうるデメリットはありませんが、バグなどの予期せぬ動作により NW 不具合を引き起こす例はあります。実際、RedHat では過去に何度か LACP による不具合が発生しています。

※ Linux 系では LinkAggregation ではなく Bonding (ボンディング)と呼びます。ちなみに、Windows 系では Teaming (チーミング)と呼びます。

https://access.redhat.com/solutions/160283#

https://bugzilla.redhat.com/show_bug.cgi?id=619070