Red Hat Training

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

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

Red Hat Enterprise Linux では、管理者はカーネルモジュールである bondingチャンネルボンディングインターフェース と呼ばれる特殊なネットワークインターフェースを使用して、複数の NIC を単一のチャンネルにバインドすることが可能です。チャンネルボンディングにより、2 つもしくはそれ以上のネットワークインターフェースが 1 つとして機能できると同時に、帯域幅が増加し冗長性を実現します。
複数のネットワークインターフェースのチャンネルボンディングを行うには、管理者は以下の手順を実行する必要があります。
  1. root として /etc/modprobe.d/ ディレクトリ内に <bonding>.conf と呼ばれる新しいファイルを作成します。最後に .conf の拡張子が付く限りはどのような名前でも構いません。この新しいファイルに以下の行を挿入します:
    alias bond<N> bonding
    <N>0 などのインターフェースの番号に置き換えます。設定済みの各チャンネルボンディングインターフェースについては、新しい /etc/modprobe.d/<bonding>.conf ファイルに対応するエントリがなければなりません。
  2. 「チャンネルボンディングインターフェース」 で説明のとおりに、チャンネルボンディングインターフェースを設定します。
  3. パフォーマンスを強化するには、利用可能なモジュールオプションを調節して、最適な組み合わせを確認します。特に、miimon パラメーター、あるいは arp_interval 及び arp_ip_target パラメーターに注意して下さい。利用可能なオプションの一覧と使用しているボンディングされたインターフェースに最適なオプションを迅速に決定する方法については、「bonding モジュールの指示文」 を参照して下さい。

25.7.2.1. bonding モジュールの指示文

使用しているボンディングインターフェース設定ファイル (例えば ifcfg-bond0) の BONDING_OPTS="<bonding parameters>" 指示文にチャンネルボンディングのモジュールパラメーターを追加する前に、使用しているボンディングされたインターフェースにどれが最適かを検証することは好ましい方法です。ボンディングされたインターフェースのパラメーターは、sysfs ファイルシステム内のファイルを操作することで、bonding モジュールをアンロード (及び再ロード) することなく設定できます。
sysfs は仮想ファイルシステムであり、カーネルオブジェクトをディレクトリ、ファイル、シンボリックリンクとして表示します。sysfs を使用すると、カーネルオブジェクトの情報をクエリでき、通常のファイルシステムのコマンドを使用することでそうしたオブジェクトを操作することも可能です。/etc/fstab には、sysfs 仮想ファイルシステムの行が 1 行あり、/sys/ ディレクトリ下にマウントされます。/sys/class/net/ ディレクトリ下にあるファイルをやりとり、操作することですべてのボンディングインターフェースを動的に設定することができます。
使用しているボンディングインターフェースに最適なパラメーターを決定するためには、「チャンネルボンディングインターフェース」 にある手順に従って ifcfg-bond0 などのチャンネルボンディングインターフェースのファイルを作成します。bond0 にボンディングされている各インターフェースの設定ファイルに SLAVE=yes 及び MASTER=bond0 指示文を挿入します。これが完了すると、パラメーターの確認に進むことができます。
最初に root で ifconfig bond<N> up を実行して、作成した bond を有効にします:
~]# ifconfig bond0 up
ifcfg-bond0 のボンディングインターフェースのファイルが正しく作成されたら、ifconfig (オプションなし) を実行した出力に bond0 が表示されていることを確認できます:
~]# ifconfig
bond0     Link encap:Ethernet HWaddr 00:00:00:00:00:00
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
eth0      Link encap:Ethernet  HWaddr 52:54:00:26:9E:F1
          inet addr:192.168.122.251  Bcast:192.168.122.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fe26:9ef1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:207 errors:0 dropped:0 overruns:0 frame:0
          TX packets:205 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:70374 (68.7 KiB)  TX bytes:25298 (24.7 KiB)
[出力は省略されています]
無効の bond も含めてすべての既存の bond を表示するには、以下を実行します:
~]# cat /sys/class/net/bonding_masters
bond0
それぞれの bond を個々に設定するには、/sys/class/net/bond<N>/bonding/ ディレクトリにあるファイルを操作します。まずは、設定する bond を停止しなければなりません:
~]# ifconfig bond0 down
例として、bond0 の MII 監視を 1 秒間隔で有効にするには、(root で) 以下を実行します:
~]# echo 1000 > /sys/class/net/bond0/bonding/miimon
balance-alb モードに bond0 を設定するには、以下のいずれかを実行します:
~]# echo 6 > /sys/class/net/bond0/bonding/mode
あるいは、モードの名前を使用します:
~]# echo balance-alb > /sys/class/net/bond0/bonding/mode
bond にオプションを設定後、ifconfig bond<N> up を実行することで、bond を有効にしてテストします。オプションを変更する場合は、インターフェースを停止して、sysfs を使用してそのパラメーターを修正後、有効に戻して再確認します。
使用している bond に最適なパラメーターのセットを決定したら、設定しているボンディングインターフェースの /etc/sysconfig/network-scripts/ifcfg-bond<N> ファイルの BONDING_OPTS= 指示文に空白で区切った一覧としてそれらのパラメーターを追加します。bond が有効な場合 (例えば、ONBOOT=yes 指示文が設定された場合にブートシーケンス中にシステムにより bond が有効な場合) はいつでも、BONDING_OPTS で指定されるボンディングオプションはその bond に対して有効となります。ボンディングインターフェース (及び BONDING_OPTS) の設定についての詳細は、「チャンネルボンディングインターフェース」 を参照して下さい。
以下の一覧には、一般的な多くのチャンネルボンディングパラメーターの名前が、それらの機能の詳細と併せて記載されています。詳細については、modinfo bonding 出力の各 parm の簡単な説明、または kernel-doc パッケージの bonding.txt ファイルにある包括的な説明を参照して下さい (「その他のリソース」 を参照)。

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

arp_interval=<time_in_milliseconds>
ARP 監視が発生する頻度を指定します (ミリ秒単位)。

重要

arp_interval 及び arp_ip_target の両パラメーター、あるいは miimon パラメーターを指定する必要があります。そうしないと、リンクが失敗した場合にネットワークパフォーマンスが低下する恐れがあります。
mode=0 または mode=1 (2 つの負荷分散モード) でこの設定を使用する場合、ネットワークスイッチは NIC 全体に均等にパケットを分散するよう設定する必要があります。この方法の詳細については、/usr/share/doc/kernel-doc-<kernel_version>/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 です。
debug=<number>
デバッグメッセージを有効にします。指定可能な値は、以下のとおりです。
  • 0 — デバッグメッセージは無効です。これがデフォルトです。
  • 1 — デバッグメッセージは有効です。
downdelay=<time_in_milliseconds>
リンクを無効にする前に、リンクの失敗後に待機する時間を指定します (ミリ秒単位)。値は、miimon パラメーターで指定される値の倍数でなければなりません。デフォルトでは 0 に設定されており、待機時間を無効にします。
lacp_rate=<value>
リンクパートナーが 802.3ad モードで LACPDU パケットを送信するレートを指定します。指定可能な値は、以下のとおりです。
  • slow または 0 — デフォルト設定です。パートナーが 30 秒ごとに LACPDU を送信するよう指定します。
  • fast または 1 — パートナーが 1 秒ごとに LACPDU を送信するよう指定します。
miimon=<time_in_milliseconds>
MII リンク監視が発生する頻度を指定します (ミリ秒単位)。MII は NIC がアクティブであることを検証するために使用されるため、これは高可用性が必要な場合に役立ちます。root で以下のコマンドを入力して、特定の NIC のドライバーが MII ツールに対応していることを確認します:
~]# ethtool <interface_name> | grep "Link detected:"
このコマンドで、bond インターフェースではなく eth0 のように <interface_name> をデバイスインターフェースの名前に置換します。MII が対応している場合は、コマンドは以下を返します:
Link detected: yes
高可用性のためにボンディングされたインターフェースを使用する場合、各 NIC のモジュールは MII に対応していなければなりません。値を 0 (デフォルト) に設定すると、この機能はオフになります。この設定を行う場合、このパラメーターの適切な開始ポイントは 100 です。

重要

arp_interval 及び arp_ip_target の両パラメーター、あるいは miimon パラメーターを指定する必要があります。そうしないと、リンクが失敗した場合にネットワークパフォーマンスが低下する恐れがあります。
mode=<value>
ボンディングポリシーを指定できます。<value> は以下のいずれかになります。
  • balance-rr または 0 — 耐障害性とロードバランシングのためラウンドロビンポリシーを設定します。利用可能な第 1 のインターフェースからそれぞれのボンディングされたスレーブインターフェースで送受信が順次行われます。
  • active-backup または 1 — 耐障害性のためアクティブなバックアップポリシーを設定します。利用可能な第 1 のボンディングされたスレーブインターフェースにより送受信が行われます。別のボンディングされたスレーブインターフェースは、アクティブなボンディングされたスレーブインターフェースが失敗した場合にのみ使用されます。
  • balance-xor または 2 — 耐障害性とロードバランシングのため XOR (排他的論理和) ポリシーを設定します。この方法を使用すると、インターフェースによって受信要求の MAC アドレスとスレーブ NIC の 1 つの MAC アドレスが一致します。このリンクが確立すると、利用可能な第 1 のインターフェースから送信が順次行われます。
  • broadcast または 3 — 耐障害性のためブロードキャストポリシーを設定します。すべての送信は、すべてのスレーブインターフェースで行われます。
  • 802.3ad または 4 — IEEE 802.3ad 動的リンクアグリゲーションのポリシーを設定します。同一の速度とデュプレックス設定を共有するアグリゲーショングループを作成します。アクティブなアグリゲーターのすべてのスレーブで送受信を行います。802.3ad に対応するスイッチが必要です。
  • balance-tlb または 5 — 耐障害性とロードバランシングのため送信ロードバランシング (TLB) ポリシーを設定します。発信トラフィックは、各スレーブインターフェースの現在の負荷に従って分散されます。受信トラフィックは、現在のスレーブにより受信されます。受信しているスレーブが失敗すると、別のスレーブが失敗したスレーブの MAC アドレスを引き継ぎます。
  • balance-alb または 6 — 耐障害性とロードバランシングのためアクティブロードバランシング (ALB) ポリシーを設定します。IPV4 トラフィック用の送受信ロードバランシングが含まれます。ARP ネゴシエーションにより、受信ロードバランシングが可能です。
num_unsol_na=<number>
フェイルオーバーイベント後に発行される未承諾の IPv6 近隣通知の数を指定します。1 つの未承諾 NA がフェイルオーバーの直後に発行されます。
有効な範囲は 0 - 255 です。デフォルト値は 1 です。このパラメーターは、アクティブなバックアップモードのみに適用します。
primary=<interface_name>
eth0 のようなプライマリデバイスのインターフェース名を指定します。primary デバイスは、使用される最初のボンディングインターフェースであり、失敗しない限りは破棄されません。この設定が特に役立つのは、ボンディングインターフェースの NIC の 1 つが高速なため、大規模な負荷に対応できる場合です。
この設定は、ボンディングインターフェースが active-backup モードの場合にのみ有効です。詳細については、 /usr/share/doc/kernel-doc-<kernel-version>/Documentation/networking/bonding.txt を参照して下さい。
primary_reselect=<value>
プライマリスレーブに対して再選択ポリシーを指定します。これは、アクティブなスレーブの失敗やプライマリスレーブの回復が発生した場合に、どのようにプライマリスレーブが選択されてアクティブなスレーブになるかという点に影響します。このパラメーターは、プライマリスレーブと他のスレーブ間でのフリップフロップを防ぐように設計されています。指定可能な値は、以下のとおりです。
  • always または 0 (デフォルト) — プライマリスレーブは有効になるといつでもアクティブなスレーブになります。
  • better または 1 — プライマリスレーブの速度とデュプレックスが、現在のアクティブなスレーブの速度とデュプレックスと比べて良い場合は、プライマリスレーブは有効になるとアクティブなスレーブになります。
  • failure または 2 — 現在のアクティブなスレーブが失敗してプライマリスレーブが有効になる場合のみ、プライマリスレーブはアクティブなスレーブになります。
primary_reselect の設定は、以下の 2 つの場合では無視されます。
  • アクティブなスレーブがない場合は、回復する最初のスレーブがアクティブなスレーブになります。
  • 初めにプライマリスレーブがスレーブにされた場合は、それは常にアクティブなスレーブになります。
sysfs により primary_reselect ポリシーを変更すると、新しいポリシーに従って直ちに最良のアクティブなスレーブを選択するようになります。これにより、状況によってはアクティブなスレーブに変更が生じる場合があります。
updelay=<time_in_milliseconds>
リンクを有効にする前の待機時間を指定します (ミリ秒単位)。値は、miimon パラメーターで指定される値の倍数でなければなりません。デフォルトでは、値は 0 に設定されており、待機時間を無効にします。
use_carrier=<number>
リンク状態を決定するために miimon が MII/ETHTOOL ioctls または netif_carrier_ok() を使用するかどうか指定します。netif_carrier_ok() 機能は、デバイスドライバーを使用して netif_carrier_on/off によりその状態を維持します。大半のデバイスドライバーはこの機能に対応しています。
MII/ETHROOL 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 に対応しています。