Overview
Linux の bonding(ボンディング) は、複数のネットワークインターフェースを一つの論理的なインターフェイスとして結合 (bond) する技術です。この結合により、ネットワークの冗長性や帯域幅の拡張を実現し、ロードバランシングやフォールトトレランスの実装が可能となります。
Linux の bonding の特徴として、複数のモードが存在し、それぞれ異なる動作や特性を持っています。各モードの詳細は、後述のセクションでを参照して下さい。
balance-rr (mode0)
- bonding されたインターフェイスを順番に使用してパケットを送信するラウンドロビンアルゴリズムを使用します。
- ロードバランシングを提供します。
- フォールトトレランスを提供します。
- 対向スイッチはリンクアグリゲーションに対応している必要があります。リンクアグリゲーションは、複数の物理イーサネットリンクを 1 つの論理イーサネットリンクにグループ化するテクノロジーです。
- 負荷が高いワークロードや、TCP スループット、順序付けられたパケット配信が必要な場合には適していません。
active-backup (mode1)
- 耐障害性(フォールトトレランス)のためのアクティブバックアップポリシーを設定します。
- ロードバランシングは提供しません。
- フォールトトレランスを提供します。
- 利用可能な最初の bonding されたインターフェイスで送受信が行われます。
- アクティブな bonding されたインターフェイスに障害が発生した場合、別のインターフェイスがアクティブになります。
- アクティブなインターフェイスが 1 つだけ存在し、それ以外のインターフェイスは待機状態です。
- 対向スイッチの特別な要件はありません。
- アクティブなポートに障害が発生すると、代替ポートがアクティブになり、GARP (Gratuitous Address Resolution Protocol) をネットワークに送信します。GARP により、ARP テーブルの更新が強制され、ホストの接続を維持する新しいパスが通知されます。
- primary オプションを使用して、bonding インターフェイスの優先ポートを定義します。
balance-xor (mode2)
- 送信は選択したハッシュポリシーに基づきます。
- ロードバランシングを提供します。
- フォールトトレランスを提供します。
- デフォルトでは、送信元と宛先の MAC アドレスの XOR にインターフェイス数のモジュロを掛けてハッシュを導出します。
- 宛先が特定のピアになっているトラフィックは常に同一インターフェイスで送信されます。
- MAC アドレスで宛先が決まるため、同一リンクやローカルネットワーク内のピアが宛先のトラフィックに適しています。
- トラフィックが単一ルーターを通過する必要がある場合、このモードは最適ではありません。
- 対向スイッチはリンクアグリゲーションに対応している必要があります。
- xmit_hash_policy オプションを使用して、パケット送信のバランスを調整します。
- インターフェイス上のトラフィックの送信元や宛先に応じて、追加の負荷分散設定が必要です。
broadcast (mode3)
- 耐障害性(フォールトトレランス)を確保するためのブロードキャストポリシーを設定します。
- ロードバランシングは提供しません。
- フォールトトレランスを提供します。
- すべてのインターフェイスですべてのパケットを送信します。
- 対向スイッチはリンクアグリゲーションに対応している必要があります。
- 負荷が高いワークロードや、TCP スループット、順序付けられたパケット配信が必要な場合には適していません。
802.3ad (mode4)
- IEEE 802.3ad 動的リンクアグリゲーションポリシーを設定します。
- ロードバランシングを提供します。
- フォールトトレランスを提供します。
- 同じ速度とデュプレックス設定を共有するアグリゲーショングループを作成します。
- アクティブなアグリゲーターのすべてのインターフェイスで送受信を行います。
- LACP (Link Aggregation Control Protocol, 802.3ad) に対応した対向スイッチが必要です。
- デフォルトでは、発信トラフィックのポート選択は送信ハッシュポリシーに依存します。
- 送信ハッシュポリシーの xmit_hash_policy オプションを使用して、インターフェイスの選択を変更し、送信を分散します。
- インターフェイス上のトラフィックの送信元や宛先に応じて、追加の負荷分散設定が必要です。
- 802.3ad と balance-rr, balance-xor の主な違いはコンプライアンスです。つまり、802.3ad は IEEE の規格に準拠している必要がありますが、balance-rr, balance-xor は、Linux の bonding ドライバ固有のモードであり、特定の標準には依存していません。
- 802.3ad ポリシーは、リンクアグリゲーショングループ間で LACP をネゴシエートします。
balance-tlb (mode5)
- 耐障害性(フォールトトレランス)と負荷分散(ロードバランシング)のための TLB (Transmit Load Balancing) ポリシーを使用します。
- ロードバランシングを提供します。
- フォールトトレランスを提供します。
- 発信トラフィックは各インターフェイスの負荷に基づいて分散されます。
- 発信トラフィックは、ハッシュ分散ポリシー (tlb_dynamic_lb=0) または負荷分散 (tlb_dynamic_lb=1) を使用して処理するインターフェイスを選択します。
- 受信トラフィックは現在のインターフェイスで受信されます。
- 受信インターフェイスに障害が発生すると、別のインターフェイスがそのインターフェイスの MAC アドレスを引き継ぎます。
- カーネル bonding モジュールが認識しているローカルアドレスにのみ適しています。
- 特別なスイッチサポートは必要ありません。
- 仮想マシンの bridge の背後では使用できません。
- xmit_hash_policy bonding オプションを使用して送信を分散します。
- primary オプションで bonding インターフェイスの優先ポートを定義します。
balance-alb (mode6)
- 耐障害性(フォールトトレランス)と負荷分散(ロードバランシング)のための ALB (Adaptive Load Balancing) ポリシーを使用します。
- ロードバランシングを提供します。
- フォールトトレランスを提供します。
- IPv4 および IPv6 トラフィックのロードバランシングを提供します。
- 送信ロードバランシング (balance-tlb) と受信ロードバランシングが含まれます。
- ARP ネゴシエーションを使用して受信負荷分散を実現します。
- bonding は、送信元の ARP 応答を傍受して bonding 内のポートの送信元ハードウェアアドレスを上書きします。
- 特別なスイッチサポートは必要ありません。
- カーネル bonding モジュールが認識しているローカルアドレスに適しています。
- 仮想マシンの bridge の背後では使用できません。
- primary オプションで bonding インターフェイスの優先ポートを定義します。
- tlb_dynamic_lb=0 bonding オプションを使用して、送信を分散します。
- xmit_hash_policy bonding オプションを使用して送信を分散します。
bonding モードの比較
各 bonding モードを簡易的に比較すると以下のようになります。ヘッダーは、LB: ロードバランシング、FT: フォールトトレランスとしています。
モード | 動作方式 | LB | FT | スイッチ要件 | 利用条件 | 設定オプション | 備考 |
---|---|---|---|---|---|---|---|
balance-rr (mode0) | ラウンドロビン | 提供 | 提供 | リンクアグリゲーション対応 | 負荷高いワークロードに非適合 | – | – |
active-backup (mode1) | アクティブバックアップ | 非提供 | 提供 | 特別要件なし | – | primary オプション | GARP 使用 |
balance-xor (mode2) | ハッシュポリシーに基づく | 提供 | 提供 | リンクアグリゲーション対応 | 単一ルーター環境で非最適 | xmit_hash_policy オプション | – |
broadcast (mode3) | ブロードキャスト | 非提供 | 提供 | リンクアグリゲーション対応 | 負荷高いワークロードに非適合 | – | – |
802.3ad (mode4) | LACP に基づく | 提供 | 提供 | LACP 対応 | – | xmit_hash_policy オプション | IEEE 準拠 |
balance-tlb (mode5) | TLB に基づく | 提供 | 提供 | 特別要件なし | 仮想マシン環境では非適合 | xmit_hash_policy, primary オプション | – |
balance-alb (mode6) | ARP ネゴシエーションに基づく ALB | 提供 | 提供 | 特別要件なし | 仮想マシン環境では非適合 | tlb_dynamic_lb=0, xmit_hash_policy, primary オプション | – |
現実的な選択肢
エンジニアとしての経験上、高い安定性を求められる環境では active-backup (mode1) が採用されるケースが多いです。ロードバランスを含めたい場合は 802.3ad (mode4) が採用されるケースが多いと思います。前述の比較の通り、その他のモードは最新の環境では扱いづらく、また、それらを採用する強いモチベーションもないことから、ほとんど使われないと思いますし、実際に使用されている環境に遭遇したこともありません。
参考資料
本稿は、以下の情報を参考に作成しています。
- https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/networking_guide/sec-using_channel_bonding
- https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/the-different-network-bonding-modes_configuring-network-bonding
LPIC bonding