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
ディレクティブを挿入します。これが完了すると、パラメーターの確認に進むことができます。
まず、
root
で ifup 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
です。その他の有効な値は、active
、backup
、および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 に対応しています。