Menu Close
Settings Close

Language and Page Formatting Options

Red Hat Training

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

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

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

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

ボンディングインターフェイス設定ファイルの BONDING_OPTS="bonding parameters" ディレクティブに追加する前に、ボンディングインターフェイス用にどのチャンネルボンディングモジュールパラメーターが最適かをテストすることが推奨されます (例: ifcfg-bond0)。ボンディングされたインターフェイスのパラメーターは、sysfs ファイルシステム内のファイルを操作することで、ボンディングモジュールをアンロード (およびリロード) することなく設定できます。
sysfs は、カーネルオブジェクトをディレクトリー、ファイル、シンボリックリンクとして表す仮想ファイルシステムです。sysfs を使用すると、カーネルオブジェクトに関する情報のクエリーや、通常のファイルシステムコマンドを使用することでこれらのオブジェクトを操作することもできます。sysfs 仮想ファイルシステムは、/sys/ ディレクトリー下にマウントされます。ボンディングインターフェイスはすべて、/sys/class/net/ ディレクトリー下にあるファイルと対話したり、これらを操作することで動的に設定できます。
使用中のボンディングインターフェイスに最適なパラメーターを決定するには、「チャンネルボンディングインターフェイスの作成」にある手順に従って ifcfg-bond0 などのチャンネルボンディングインターフェイスのファイルを作成します。bond0 にボンディングされる各インターフェイスの設定ファイルに SLAVE=yesMASTER=bond0 ディレクティブを挿入します。これが完了すると、パラメーターの確認に進むことができます。
まず、ボンディング ifup bondNroot として実行して、作成したボンディングを開きます。
~]# 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 の 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: アクティブなアグリゲーターは、ポートの最大数で選択されます。上記の 帯域幅 設定については、再選択が行われます。
帯域幅カウント 選択ポリシーにより、アクティブなアグリゲーターの部分的な障害が発生した場合に 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 です。他の有効な値は、activebackup、および all です。
downdelay=time_in_milliseconds
リンクを無効にする前に、リンクの失敗後に待機する時間を指定します (ミリ秒単位)。値は、miimon パラメーターで指定される値の倍数でなければなりません。デフォルトでは値は 0 に設定されており、ARP 監視を無効にします。
fail_over_mac=value
active-backup モードが、割り当てポイント(従来の動作)ですべてのポートを同じ MAC アドレスに設定するか、有効にすると、選択したポリシーに従ってボンドの MAC アドレスの特別な処理を実行するかどうかを指定します。以下の値が使用できます。
  • none または 0: デフォルト設定。この設定により fail_over_mac が無効になり、ボンディングにより、割り当て時点で、アクティブバックアップボンディングの全ポートを同じ MAC アドレスに設定します。
  • active または 1: アクティブな 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: パートナーが LACPDU を 1 秒ごとに送信するように指定します。
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: 送受信は選択されたハッシュポリシーに基づいて行われます。デフォルトでは、ハッシュをソースの XOR で導き、宛先 MAC アドレスをポートインターフェイス数の modulo で乗算します。このモードでは、宛先が特定のピアになっているトラフィックは常に同一インターフェイスで送信されます。宛先は 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
enp1s0 のようなプライマリーデバイスのインターフェイス名を指定します。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 つの場合では無視されます。
  • アクティブポートがない場合、回復する最初のポートはアクティブなポートになります。
  • 最初にボンディングに割り当てられている場合、プライマリーポートは常にアクティブなポートになります。
sysfsprimary_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 に設定されており、ARP 監視を無効にします。
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: 上位レイヤープロトコルの情報を (利用可能な場合は) 使用して、ハッシュを生成します。これにより、特定のネットワークピアへのトラフィックが複数のポートにまたがることができますが、1 つの接続は複数のポートにまたがることはありません。
    断片化された 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 に対応しています。