4.5. チャンネルボンディングの使用

パフォーマンスを強化するには、利用可能なモジュールオプションを調節して、最適な組み合わせを確認します。特に miimonarp_intervalarp_ip_target パラメーターに注意してください。利用可能なオプション一覧と使用しているボンディングされたインターフェースに最適なオプションを迅速に決定する方法については、「ボンディングモジュールのディレクティブ」 を参照してください。

4.5.1. ボンディングモジュールのディレクティブ

チャンネルボンディングのモジュールパラメーターをボンディングインターフェース設定ファイル (たとえば ifcfg-bond0) の BONDING_OPTS="bonding parameters" ディレクティブに追加する前に、どれがボンディングされたインターフェースに最適かをテストするとよいでしょう。ボンディングされたインターフェースのパラメーターは、sysfs ファイルシステム内のファイルを操作することで、ボンディングモジュールをアンロード (およびリロード) することなく設定できます。
sysfs は仮想ファイルシステムであり、カーネルオブジェクトをディレクトリー、ファイル、シンボリックリンクとして表示します。sysfs を使用すると、カーネルオブジェクトの情報をクエリーすることが可能で、通常のファイルシステムのコマンドを使用してそれらのオブジェクトの操作もできます。sysfs 仮想ファイルシステムは、/sys/ ディレクトリー下にマウントされます。ボンディングインターフェースはすべて、/sys/class/net/ ディレクトリー下にあるファイルと対話したり、これらを操作することで動的に設定することができます。
使用中のボンディングインターフェースに最適なパラメーターを決定するには、「チャンネルボンディングインターフェースの作成」 にある手順にしたがって ifcfg-bond0 などのチャンネルボンディングインターフェースのファイルを作成します。bond0 にボンディングされている各インターフェースの設定ファイルに SLAVE=yes および MASTER=bond0 のディレクティブを挿入します。これが完了すると、パラメーターの確認に進むことができます。
まず rootifup bondN を実行して作成したボンドをアップにします。
~]# ifup bond0
ifcfg-bond0 のボンディングインターフェースのファイルを正常に作成していれば、rootip link show を実行した際の出力に bond0 が表示されます。
~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:e9:ce:d2 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:38:a6:4c brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT
    link/ether 52:54:00:38:a6:4c brd ff:ff:ff:ff:ff:ff
アップになっていないボンドも含めてすべての既存のボンドを表示するには、以下を実行します。
~]$ cat /sys/class/net/bonding_masters
bond0
/sys/class/net/bondN/bonding/ ディレクトリーにあるファイルを操作すると、各ボンドを個別に設定することができます。まず、設定するボンドをダウンにします。
~]# ifdown bond0
たとえば、bond0 の MII 監視を 1 秒間隔で有効にするには、root で以下を実行します。
~]# echo 1000 > /sys/class/net/bond0/bonding/miimon
bond0 を balance-alb モードに設定するには、以下のいずれかを実行します。
~]# echo 6 > /sys/class/net/bond0/bonding/mode
またはモード名を使用します。
~]# echo balance-alb > /sys/class/net/bond0/bonding/mode
ボンドにオプションを設定後、ifup bondN を実行すると、そのボンドをアップにしてテストすることができます。オプションを変更する場合はインターフェースを停止して、sysfs を使用してそのパラメーターを修正後、有効に戻して再確認します。
ボンドに最適なパラメーターのセットを決定したら、設定しているボンディングインターフェースの /etc/sysconfig/network-scripts/ifcfg-bondN ファイルの BONDING_OPTS= ディレクティブにそれらのパラメーターを空白区切りのリストとして追加します。ボンドが有効な場合 (たとえば、ONBOOT=yes ディレクティブが設定されていて、ブートシーケンス中にシステムがボンドを有効にする場合) はいつでも、BONDING_OPTS で指定されているボンディングオプションはそのボンドに対して有効となります。
以下では、多くの一般的なチャンネルボンディングパラメーターの名前とそれらの機能の詳細を一覧表示しています。詳細については、modinfo bonding 出力の各 parm の簡単な説明、または https://www.kernel.org/doc/Documentation/networking/bonding.txt を参照してください。

ボンディングインターフェースパラメーター

ad_select=value
使用する 802.3ad アグリゲーションの選択論理を指定します。指定可能な値は、以下のとおりです。
  • stable または 0 — デフォルト設定です。アクティブなアグリゲーターは、最大のアグリゲーション帯域幅によって選択されます。アクティブなアグリゲーターの再選択は、すべてのスレーブがダウンとなるか、スレーブがなくなった時にのみ行われます。
  • bandwidth または 1 — アクティブなアグリゲーターは、最大のアグリゲーション帯域幅によって選択されます。アクティブなアグリゲーターの再選択は以下の場合に行われます。
    • ボンドにスレーブが追加される、またはボンドからスレーブが削除される。
    • スレーブのリンク状態が変更される。
    • スレーブの 802.3ad 関連状態が変更される。
    • ボンドの管理状態が有効になる。
  • count または 2 — アクティブなアグリゲーターは、スレーブの最大数によって選択されます。再選択は、上記の bandwidth 設定の場合に行われます。
bandwidth および count の選択ポリシーは、アクティブアグリゲーターが部分的に失敗した場合に、802.3ad アグリゲーションのフェイルオーバーを可能にします。これにより、常にアクティブな状態のアグリゲーターを帯域幅もしくはスレーブ数における最大の利用可能数で維持します。
arp_interval=time_in_milliseconds
ARP 監視が発生する頻度を指定します (ミリ秒単位)。

重要

arp_interval および arp_ip_target の両パラメーター、あるいは miimon パラメーターの指定は不可欠です。指定されないと、リンクが失敗した場合にネットワークパフォーマンスが低下する恐れがあります。
mode=0 または mode=2 (2 つの負荷分散モード) でこの設定を使用する場合、ネットワークスイッチは NIC 全体に均等にパケットを分散するよう設定する必要があります。この方法の詳細については、https://www.kernel.org/doc/Documentation/networking/bonding.txt を参照してください。
デフォルトでは値は 0 に設定されており、ARP 監視を無効にします。
arp_ip_target=ip_address[,ip_address_2,…ip_address_16]
arp_interval パラメーターが有効な場合の ARP 要求のターゲット IP アドレスを指定します。コンマ区切りのリストで最大 16 個の IP アドレスを指定できます。
arp_validate=value
ARP プローブのソース/ディストリビューションを検証します。デフォルトは none です。他の有効な値は、activebackupall です。
downdelay=time_in_milliseconds
リンクを無効にする前に、リンクの失敗後に待機する時間を指定します (ミリ秒単位)。値は、miimon パラメーターで指定される値の倍数でなければなりません。デフォルトでは 0 に設定されており、待機時間を無効にします。
fail_over_mac=value
アクティブ-バックアップモードが、スレーブ指定時にすべてのスレーブを同一 MAC アドレスに設定する (従来の動作) か、有効な場合は、選択されたポリシーにしたがって、MAC アドレスのボンドの特別な処理を実行するかを指定します。利用可能な値は以下のとおりです。
  • none または 0 — デフォルト設定です。この設定では fail_over_mac が無効になり、スレーブ指定時にボンディングがアクティブ-バックアップボンドのすべてのスレーブを同一 MAC アドレスに設定するようにします。
  • active または 1active fail_over_mac ポリシーでは、ボンドの MAC アドレスは常に現在アクティブなスレーブの MAC アドレスにすべきと指示しています。スレーブの MAC アドレスは変更されませんが、代わりにフェイルオーバー中にボンドの MAC アドレスが変更されます。
    このポリシーは MAC アドレスを変更できないデバイスや着信ブロードキャストを (ARP 監視を妨害する) 自身のソース MAC で拒否するデバイスに便利なものです。このポリシーのマイナス面は、ネットワーク上のすべてのデバイスが余計な ARP 経由で更新される必要があるという点です。通常の方法では、スイッチが着信トラフィックを嗅ぎ付けて ARP テーブルを更新します。余計な ARP が失われると、通信が中断される可能性があります。
    このポリシーを MII モニターと合わせて使用すると、実際に送受信可能になる前にリンクを有効にするデバイスが特に余計な ARP を失いやすくなります。また、適切な updelay 設定が必要になる可能性があります。
  • follow または 2follow fail_over_mac ポリシーでは、ボンドの MAC アドレスは通常どおり選択されます (通常、最初のスレーブの MAC アドレスがボンドに追加されます)。ただし、2 番目以降のスレーブはこの MAC アドレスに設定されず、バックアップの役割を果たします。つまり、スレーブはフェイルオーバー時にボンドの MAC アドレスでプログラミングされます (また、それまでアクティブだったスレーブが新たにアクティブになったスレーブの MAC アドレスを受け取ります)。
    このポリシーは、複数ポートが同一 MAC アドレスでプログラミングされる際に、混乱したりパフォーマンスペナルティーを受けるマルチポートデバイスに便利なものです。
lacp_rate=value
リンクパートナーが 802.3ad モードで LACPDU パケットを送信するレートを指定します。指定可能な値は、以下のとおりです。
  • slow または 0 — デフォルト設定です。パートナーが 30 秒ごとに LACPDU を送信するよう指定します。
  • fast または 1 — パートナーが 1 秒ごとに LACPDU を送信するよう指定します。
miimon=time_in_milliseconds
MII リンク監視が発生する頻度を指定します (ミリ秒単位)。MII は NIC がアクティブであることを検証するために使用されるため、これは高可用性が必要な場合に役立ちます。特定の NIC のドライバーが MII ツールに対応していることを確認するには、root で以下のコマンドを入力します。
~]# ethtool interface_name | grep "Link detected:"
このコマンドでは、interface_name をボンドインターフェースではなく eth0 のようなデバイスインターフェースの名前で置換します。MII が対応している場合は、コマンドは以下を返します。
Link detected: yes
高可用性のためにボンディングされたインターフェースを使用する場合、各 NIC のモジュールは MII に対応していなければなりません。値を 0 (デフォルト) に設定すると、この機能はオフになります。この設定を行う場合、このパラメーターの適切な開始ポイントは 100 です。

重要

arp_interval および arp_ip_target の両パラメーター、あるいは miimon パラメーターの指定は不可欠です。指定されないと、リンクが失敗した場合にネットワークパフォーマンスが低下する恐れがあります。
mode=value
ボンディングポリシーの指定が可能になります。value は、以下のいずれかになります。
  • balance-rr または 0 — 耐障害性とロードバランシングのためのラウンドロビンポリシーを設定します。利用可能な最初のインターフェースからそれぞれのボンディングされたスレーブインターフェースで送受信が順次行われます。
  • active-backup または 1 — 耐障害性のためのアクティブなバックアップポリシーを設定します。利用可能な最初のボンディングされたスレーブインターフェースにより送受信が行われます。別のボンディングされたスレーブインターフェースは、アクティブなボンディングされたスレーブインターフェースが失敗した場合にのみ使用されます。
  • balance-xor または 2 — 送受信は選択されたハッシュポリシーに基づきます。デフォルトでは、ハッシュはソースの XOR とスレーブインターフェース数による剰余で宛先 MAC アドレスを掛けて導き出します。このモードでは、宛先が特定のピアになっているトラフィックは常に同一インターフェースで送信されます。宛先は MAC アドレスで決められるので、この方法は同一リンクまたはローカルネットワーク上にあるピアが宛先のトラフィックに最適なものです。トラフィックが単一ルーターを通過する必要がある場合は、このトラフィックバランスのモードは最適ではなくなります。
  • broadcast または 3 — 耐障害性のためのブロードキャストポリシーを設定します。すべての送信は、すべてのスレーブインターフェースで行われます。
  • 802.3ad または 4 — IEEE 802.3ad 動的リンクアグリゲーションのポリシーを設定します。同一の速度とデュプレックス設定を共有するアグリゲーショングループを作成します。アクティブなアグリゲーターのすべてのスレーブで送受信を行います。802.3ad に対応するスイッチが必要です。
  • balance-tlb または 5 — 耐障害性とロードバランシングのための送信ロードバランシング (TLB) ポリシーを設定します。発信トラフィックは、各スレーブインターフェースの現在の負荷にしたがって分散されます。受信トラフィックは、現在のスレーブにより受信されます。受信しているスレーブが失敗すると、別のスレーブが失敗したスレーブの MAC アドレスを引き継ぎます。このモードは、カーネルボンディングモジュールが認識しているローカルアドレスにのみ、適したものになります。このため、仮想マシンのブリッジの背後では使用できません。
  • balance-alb または 6 — 耐障害性とロードバランシングのためアダプティブロードバランシング (ALB) ポリシーを設定します。IPv4 トラフィック用の送受信ロードバランシングが含まれます。ARP ネゴシエーションにより、受信ロードバランシングが可能です。このモードは、カーネルボンディングモジュールが認識しているローカルアドレスにのみ、適したものになります。このため、仮想マシンのブリッジの背後では使用できません。
primary=interface_name
eth0 のようなプライマリーデバイスのインターフェース名を指定します。primary デバイスは、使用される最初のボンディングインターフェースであり、失敗しない限りは破棄されません。この設定が特に役立つのは、ボンディングインターフェースの NIC の 1 つが高速なため、大規模な負荷に対応できる場合です。
この設定は、ボンディングインターフェースが active-backup モードの場合にのみ有効です。詳細については、https://www.kernel.org/doc/Documentation/networking/bonding.txt を参照してください。
primary_reselect=value
プライマリースレーブに対して再選択ポリシーを指定します。これは、アクティブなスレーブの失敗やプライマリースレーブの回復が発生した場合に、どのようにプライマリースレーブが選択されてアクティブなスレーブになるかという点に影響します。このパラメーターは、プライマリースレーブと他のスレーブ間でのフリップフロップを防ぐように設計されています。指定可能な値は、以下のとおりです。
  • always または 0 (デフォルト) — プライマリースレーブは有効になるといつでもアクティブなスレーブになります。
  • better または 1 — プライマリースレーブの速度とデュプレックスが、現在のアクティブなスレーブの速度とデュプレックスと比べて良い場合は、プライマリースレーブは有効になるとアクティブなスレーブになります。
  • failure または 2 — 現在のアクティブなスレーブが失敗してプライマリースレーブが有効になる場合のみ、プライマリースレーブはアクティブなスレーブになります。
primary_reselect の設定は、以下の 2 つの場合では無視されます。
  • アクティブなスレーブがない場合は、回復する最初のスレーブがアクティブなスレーブになります。
  • 初めにプライマリースレーブがスレーブにされた場合は、それは常にアクティブなスレーブになります。
sysfs により primary_reselect ポリシーを変更すると、新しいポリシーにしたがって直ちに最良のアクティブなスレーブを選択するようになります。これにより、状況によってはアクティブなスレーブに変更が生じる場合があります。
resend_igmp=range
フェイルオーバーイベント後に発行される IGMP メンバーシップレポートの数を指定します。1 つのメンバーシップレポート がフェイルオーバーの直後に発行され、以降のパケットは 200ms (ミリ秒) の感覚で送信されます。
有効な範囲は 0 から 255 で、デフォルト値は 1 です。値が 0 だと、フェイルオーバーイベント時に IGMP メンバーシップレポートが発行されません。
このオプションは、フェイルオーバーで IGMP トラフィックをあるスレーブから別のスレーブに切り替えられる balance-rr (mode 0)、active-backup (mode 1)、balance-tlb (mode 5) および balance-alb (mode 6) のボンディングモードで便利なものです。このため、新たに発行される IGMP レポートは、スイッチが着信 IGMP トラフィックを新たに選択されたスレーブに転送させるようにする必要があります。
updelay=time_in_milliseconds
リンクを有効にする前の待機時間を指定します (ミリ秒単位)。値は、miimon パラメーターで指定される値の倍数でなければなりません。デフォルトでは、値は 0 に設定されており、待機時間を無効にします。
use_carrier=number
リンク状態を決定するために miimon が MII/ETHTOOL ioctls または netif_carrier_ok() を使用するかどうか指定します。netif_carrier_ok() 機能は、デバイスドライバーを使用して netif_carrier_on/off によりその状態を維持します。大半のデバイスドライバーはこの機能に対応しています。
MII/ETHTOOL ioctls ツールは、カーネル内の非推奨の呼び出しシーケンスを活用します。ただし、これは使用しているデバイスドライバーが netif_carrier_on/off に対応しない場合でも設定可能です。
有効な値は次のとおりです。
  • 1 — デフォルト設定です。netif_carrier_ok() の使用を有効にします。
  • 0 — MII/ETHTOOL ioctls の使用を有効にします。

注記

リンクがアップになっているべきでない時にアップであるとボンディングインターフェースが主張した場合、使用しているネットワークデバイスドライバーは netif_carrier_on/off に対応しない可能性があります。
xmit_hash_policy=value
balance-xor および 802.3ad モードで、スレーブを選択する時に使用する送信ハッシュポリシーを選択します。指定可能な値は、以下のとおりです。
  • 0 または layer2 — デフォルト設定です。このパラメーターは、ハードウェア MAC アドレスの XOR を使用してハッシュを生成します。使用する式は以下のとおりです。
    (source_MAC_address XOR destination_MAC) MODULO slave_count
    このアルゴリズムは、すべてのトラフィックを同じスレーブの特定のネットワークピアに割り振り、802.3ad に対応します。
  • 1 または layer3+4 — 上位レイヤープロトコルの情報を (利用可能な場合は) 使用して、ハッシュを生成します。これにより、特定のネットワークピアへのトラフィックが複数のスレーブに及ぶようにできますが、単一の接続では複数のスレーブに及びません。
    断片化された TCP および UDP パケットに使用される公式は、以下のとおりです:
    ((source_port XOR dest_port) XOR
      ((source_IP XOR dest_IP) AND 0xffff)
        MODULO slave_count
    断片化された TCP または UDP パケットと他のすべての IP プロトコルトラフィックについては、送信元および宛先ポート情報が省略されます。非 IP トラフィックに関しては、式は layer2 送信ハッシュポリシーと同じです。
    このポリシーの目的は、特に PFC2 付きの Cisco スイッチや Foundry および IBM 製品など一部のスイッチの動作を真似ることです。
    このポリシーで使用されるアルゴリズムは、802.3ad に対応していません。
  • 2 または layer2+3 — layer2 および layer3 プロトコル情報の組み合わせを使用して、ハッシュを生成します。
    ハードウェア MAC アドレスと IP アドレスの XOR を使用して、ハッシュを生成します。式は以下のとおりです。
    (((source_IP XOR dest_IP) AND 0xffff) XOR
      ( source_MAC XOR destination_MAC ))
        MODULO slave_count
    このアルゴリズムは、すべてのトラフィックを同じスレーブの特定のネットワークピアに割り振ります。非 IP トラフィックの場合、式は layer2 送信ハッシュポリシーと同一です。
    このポリシーの目的は、特に layer3 ゲートウェイデバイスが大半の宛先に到達する必要がある環境において、layer2 単独の場合より分散されたトラフィックを提供することです。
    このアルゴリズムは、802.3ad に対応しています。