Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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

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

7.7.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 ボンディングインターフェイスファイルを正しく作成した場合は、root ip 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: enp1s0: <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: enp2s0: <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 で 1 秒間隔で MII 監視を有効にするには、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: アクティブなアグリゲーターは、ポートの最大数で選択されます。上記の 帯域幅 設定については、再選択が行われます。
帯域幅カウント 選択ポリシーにより、アクティブなアグリゲーターの部分的な障害が発生した場合に 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_ip_target=ip_address[,ip_address_2,…ip_address_16]
arp_interval パラメーターが有効な場合に ARP 要求のターゲット IP アドレスを指定します。最大 16 の IP アドレスはコンマ区切りリストで指定できます。
arp_validate=value
ARP プローブのソース/ディストリビューションを検証します。デフォルトは none です。その他の有効な値は、activebackup、および all です。
downdelay=time_in_milliseconds
リンクを無効にする前に、リンクの失敗後に待機する時間を指定します (ミリ秒単位)。値は、miimon パラメーターで指定された値の倍数である必要があります。デフォルトでは、値は 0 に設定され、無効にされます。
fail_over_mac=value
アクティブ-バックアップモードが、割り当て時にすべてのポートを同一 MAC アドレスに設定する (従来の動作) か、有効な場合は、選択されたポリシーに従って、ボンドの MAC アドレスの特別な処理を実行するかを指定します。可能な値は次のとおりです。
  • none または 0 - デフォルト設定。この設定により fail_over_mac が無効になり、割り当て時にボンディングがアクティブ-バックアップボンドのすべてのポートを同じ MAC アドレスに設定します。
  • active または 1 - active fail_over_mac ポリシーは、ボンドの MAC アドレスは常に現在アクティブなポートの MAC アドレスである必要があることを示します。ポートの MAC アドレスは変更されませんが、代わりにフェイルオーバー中にボンドの MAC アドレスが変更されます。
    このポリシーは、MAC アドレスを変更できないデバイスや、(ARP 監視を妨害する) 自身のソース MAC を持つ着信ブロードキャストを拒否するデバイスに便利なものです。このポリシーのマイナス面は、ネットワーク上のすべてのデバイスが余計な ARP によって更新される必要があるという点です。通常の方法では、スイッチが着信トラフィックを嗅ぎ付けて ARP テーブルを更新します。余計な ARP が失われると、通信が中断される可能性があります。
    このポリシーを MII モニターと合わせて使用すると、実際に送受信可能になる前にリンクを有効にするデバイスが特に余計な ARP を失いやすくなります。また、適切な updelay 設定が必要になる可能性があります。
  • follow または 2 - follow 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 を、ボンドインターフェイスではなく、enp1s0 などのデバイスインターフェイスの名前に置き換えます。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 - 送信は、選択したハッシュポリシーに基づきます。デフォルトでは、送信元と宛先の MAC アドレスの XOR にポートインターフェイス数のモジュロを掛けてハッシュを導出します。このモードでは、宛先が特定のピアになっているトラフィックは常に同一インターフェイスで送信されます。宛先は MAC アドレスで決められるので、この方法は同一リンクまたはローカルネットワーク上にあるピアが宛先のトラフィックに最適なものです。トラフィックが単一ルーターを通過する必要がある場合は、このトラフィックバランスのモードは最適ではなくなります。
  • broadcast または 3 - 耐障害性を確保するためにブロードキャストポリシーを設定します。すべての送信は、すべてのポートインターフェイスで行われます。
  • 802.3ad または 4 - IEEE 802.3ad 動的リンクアグリゲーションポリシーを設定します。同一の速度とデュプレックス設定を共有するアグリゲーショングループを作成します。アクティブなアグリゲーターのすべてのポートで送受信を行います。802.3ad に対応するスイッチが必要です。
  • balance-tlb または 5 - 耐障害性と負荷分散のために TLB (Transmit Load Balancing)ポリシーを設定します。発信トラフィックは、各ポートインターフェイスの現在の負荷に従って分散されます。受信トラフィックは、現在のポートにより受信されます。受信ポートに障害が発生すると、障害が発生したポートの MAC アドレスを別のポートが引き継ぎます。このモードは、カーネルボンディングモジュールが認識しているローカルアドレスにのみ、適したものになります。このため、仮想マシンのブリッジの背後では使用できません。
  • balance-alb または 6 - 耐障害性と負荷分散のための Adaptive Load Balancing (ALB)ポリシーを設定します。IPv4 トラフィック用の送受信負荷分散が含まれます。ARP ネゴシエーションにより、受信負荷分散を実現します。このモードは、カーネルボンディングモジュールが認識しているローカルアドレスにのみ、適したものになります。このため、仮想マシンのブリッジの背後では使用できません。
アップストリームスイッチで必要な設定の詳細は、「スイッチにおけるボンディングモードおよび必要な設定の概要」を参照してください。
primary=interface_name
プライマリーデバイスのインターフェイス名(例: enp1s0 )を指定します。プライマリー デバイスは、最初に使用されるボンディングインターフェイスであり、失敗しない限り破棄されません。この設定が特に役立つのは、ボンディングインターフェイスの NIC の 1 つが高速なため、大規模な負荷に対応できる場合です。
この設定は、ボンディングインターフェイスが active-backup モードである場合にのみ有効です。詳細は、https://www.kernel.org/doc/Documentation/networking/bonding.txt を参照してください。
primary_reselect=value
プライマリーポートに対して再選択ポリシーを指定します。これは、アクティブなポートの障害やプライマリーポートの回復が発生した場合に、どのようにプライマリーポートが選択されてアクティブなポートになるかという点に影響します。このパラメーターは、プライマリポートと他のポートとの間で何度も切り替えが発生しないようにするためのものです。可能な値は次のとおりです。
  • always または 0 (デフォルト): プライマリーポートは、復旧するたびにアクティブなポートになります。
  • better または 1 - プライマリーポートの速度とデュプレックスが、現在のアクティブなポートの速度とデュプレックスよりも良い場合、プライマリーポートは有効になるとアクティブなポートになります。
  • failure または 2 - 現在のアクティブなポートが失敗し、プライマリーポートが稼働している場合に限り、プライマリーポートはアクティブなポートになります。
primary_reselect 設定は無視されます。
  • アクティブなポートがない場合は、回復する最初のポートがアクティブなポートになります。
  • プライマリーポートがボンドに初めて割り当てられると、そのポートが必ずアクティブなポートになります。
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 に対応しています。