概要
Bondingを設定します。Bondingは複数のネットワークアダプタを束ねて論理的に1つのネットワークアダプタを作ります。Bondingに含まれる複数のネットワークアダプタは、Active/Active、Active/Standby、LACP等のいくつかのパターンを選択可能です。
前提条件
OS
CentOS Stream 8を使用します。
SELinux
有効です。無効にする場合はこちらを参照して下さい。
Firewalld
無効です。有効化する場合はこちらを参照して必要な許可設定をして下さい。
その他
- nmcliではcon-nameとifnameを省略可能(またはどちらかを)ですが、それらが同じ名前ではどちらに対して設定しているのか分かりづらくなる為、本稿の例ではcon-nameとifnameを明示的に設定しています。また、インストール時に割り当てられたcon-nameも予め変更しています。
ネットワーク構成
以下のネットワーク構成を想定しています。対向スイッチはCiscoのイメージです。赤枠はIPアドレスを持ちますが、それ以外はL2透過です。
所感
帯域が2倍?
Bonding(リンクアグリゲーション)でActive/Activeにすると帯域が2倍になる・・・、良く言う人達がいますがちょっと待ちましょう。帯域が2倍とは間違ってはいませんが、ある条件下での話です。何の値を使用して使用するネットワークアダプタを選択しているかが重要であり、通常はMACアドレス(送信元と宛先)となっているケースが多いです。当然ですが送信パケットでの選択です。つまり同じMACアドレスで通信している限りは同じネットワークアダプタが使われます。
全体のネットワーク構成にも依存しており、L3で細かく区切られた環境ではMACアドレスは殆ど意味を持ちません。この為、高機能なネットワークアプライアンス等ではMACアドレスに加え、IPアドレスやポート番号も選択(あるいは組み合わせ)できます。これによって分散効率を高めています。もう少しいうと十分な量の送信元/宛先の組み合わせが無ければ帯域の効率化になりません。また、ネットワークアダプタの選択は送信元でしか制御できない為、対向機器にも依存します。
ポイント
リンクアグリゲーションは物理ネットワークアダプタ(+ケーブル)の単なる冗長構成として捉えるだけでも十分なメリットがあります。L2の技術の為、スイッチとつなぐ場合でもスイッチ側でSTP等の考慮は不要となり、ネットワーク構成がシンプルになります。帯域については前述を踏まえた設計や伝え方にすると後々問題になることも少ないでしょう。
はじめに
Bondingポリシーの種類
Bondingポリシーの種類は下記の7つです。こちらからの引用です。
- 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 ネゴシエーションにより、受信ロードバランシングが可能です。このモードは、カーネルボンディングモジュールが認識しているローカルアドレスにのみ、適したものになります。このため、仮想マシンのブリッジの背後では使用できません。
実用的なポリシーとしては、一番分かり易いactive-backupは良く使われるのではないでしょうか。Active/Active構成では、LACPが使えなければbalance-rr、LACPが使えれば802.3adになると思います。他はニッチな環境向けだと思います。
設定
ステータス確認
ステータス確認の詳細はこちらを参照して下さい。
device
deviceの状態を確認します。今回はens34とens35をBondingで使用するネットワークアダプタとします。
[root@centos ~]# nmcli device status DEVICE TYPE STATE CONNECTION ens33 ethernet 接続済み con-ens33 ens34 ethernet 接続済み con-ens34 ens35 ethernet 接続済み con-ens35 lo loopback 管理無し --
connection
connectionの状態は下記の通りです。
[root@centos ~]# nmcli connection show NAME UUID TYPE DEVICE con-ens33 0b6ad2b8-4599-4f37-b077-47624d48bf55 ethernet ens33 con-ens34 d69129f7-39d8-493e-9080-a68bd79e9ea9 ethernet ens34 con-ens35 c011fecc-7da1-41af-83e3-15b93f9ceffa ethernet ens35
Bonding設定
Bondingインターフェイスの追加
Bondingインターフェイスの追加には2つの方法があります。下記はbond.optionsを使用しない例です。設定項目は下記に限られます。xmit_hash_policyはlayer2となります。
[root@centos ~]# nmcli connection add type bond ifname bond0 con-name con-bond0 mode 802.3ad miimon 100 updelay 100 downdelay 100
下記はbond.optionsを使用した例です。modeやmiimon等に=で値を設定します。前述のコマンドでは指定できない設定(xmit_hash_policy等)が可能ですが、一部のTAB補完が利用できません。今回はこちらを使用します。
[root@centos ~]# nmcli connection add type bond ifname bond0 con-name con-bond0 bond.options mode=802.3ad,miimon=100,updelay=100,downdelay=100,xmit_hash_policy=layer3+4
作成されたBondingインターフェイスを確認します。詳細を確認する場合はnmcli connection show con-bond0とします。
[root@centos ~]# nmcli connection show NAME UUID TYPE DEVICE con-bond0 241048c7-cb26-401e-b008-c572e194f2c8 bond bond0 con-ens33 0b6ad2b8-4599-4f37-b077-47624d48bf55 ethernet ens33 con-ens34 d69129f7-39d8-493e-9080-a68bd79e9ea9 ethernet ens34 con-ens35 c011fecc-7da1-41af-83e3-15b93f9ceffa ethernet ens35
/etc/sysconfig/network-scripts/ifcfg-con-bond0が作成されます。
[root@centos ~]# cat /etc/sysconfig/network-scripts/ifcfg-con-bond0
BONDING_OPTS="mode=802.3ad downdelay=100 miimon=100 updelay=100 xmit_hash_policy=layer3+4"
TYPE=Bond
BONDING_MASTER=yes
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=con-bond0
UUID=241048c7-cb26-401e-b008-c572e194f2c8
DEVICE=bond0
ONBOOT=yes
Bondingインターフェイスの追加に物理ネットワークアダプタを割り当て
ens34とens35をbond0に割り当てます。これらはconnectionではなくdeviceの指定です。
[root@centos ~]# nmcli connection add type bond-slave ifname ens34 con-name con-bond0-slave-ens34 master bond0 [root@centos ~]# nmcli connection add type bond-slave ifname ens35 con-name con-bond0-slave-ens35 master bond0
状態を確認します。bond-slave~はBondingインターフェイスとBondingインターフェイスに割り当てた物理ネットワークアダプタを関連付ける設定です。
[root@centos ~]# nmcli connection show NAME UUID TYPE DEVICE con-bond0 241048c7-cb26-401e-b008-c572e194f2c8 bond bond0 con-ens33 0b6ad2b8-4599-4f37-b077-47624d48bf55 ethernet ens33 con-ens34 d69129f7-39d8-493e-9080-a68bd79e9ea9 ethernet ens34 con-ens35 c011fecc-7da1-41af-83e3-15b93f9ceffa ethernet ens35 con-bond0-slave-ens34 6a3c90f6-174e-45e9-b3d0-60837b8a4934 ethernet -- con-bond0-slave-ens35 4b643adb-91b2-476f-aad7-7efaa2b6dc43 ethernet --
/etc/sysconfig/network-scripts/ifcfg-con-bond0-slave-ens34が作成されます。
[root@centos ~]# cat /etc/sysconfig/network-scripts/ifcfg-con-bond0-slave-ens34
TYPE=Ethernet
NAME=con-bond0-slave-ens34
UUID=6a3c90f6-174e-45e9-b3d0-60837b8a4934
DEVICE=ens34
ONBOOT=yes
MASTER=bond0
SLAVE=yes
/etc/sysconfig/network-scripts/ifcfg-con-bond0-slave-ens35が作成されます。
[root@centos ~]# cat /etc/sysconfig/network-scripts/ifcfg-con-bond0-slave-ens35
TYPE=Ethernet
NAME=con-bond0-slave-ens35
UUID=4b643adb-91b2-476f-aad7-7efaa2b6dc43
DEVICE=ens35
ONBOOT=yes
MASTER=bond0
SLAVE=yes
物理ネットワークアダプタのIPアドレス設定無効化
Bondingインターフェイスに割り当てた物理ネットワークアダプタにはIPアドレス設定が不要な為、無効化します。
[root@centos ~]# nmcli connection modify con-ens34 connection.autoconnect yes ipv4.method disabled ipv6.method ignore [root@centos ~]# nmcli connection modify con-ens35 connection.autoconnect yes ipv4.method disabled ipv6.method ignore
BondingインターフェイスのIPアドレス設定
IPアドレス設定は各インターフェイスタイプで共通です。こちらを参照して下さい。
Bondingインターフェイスの有効化
下記で有効にします。connection upは再読み込みも含まれています。まとめて反映する方法はありそうですが不明です(systemctl restart NetworkManager.serviceやnmcli connection reloadでは反映されません)。面倒な場合はOS再起動でも良いでしょう。
[root@centos ~]# nmcli connection up con-ens34 [root@centos ~]# nmcli connection up con-ens35 [root@centos ~]# nmcli connection up con-bond0
Bondingインターフェイスのステータス
Bondingインターフェイスのステータスは従来通り/proc/net/bonding/bond0で確認します。nmcliにはまだ組み込まれていないようです。下記のサンプルは対向機器に接続していない状態です。
[root@centos ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v4.18.0-301.1.el8.x86_64
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
MII Status: down
MII Polling Interval (ms): 100
Up Delay (ms): 100
Down Delay (ms): 100
Peer Notification Delay (ms): 0
802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: c6:3f:5b:7b:d8:ba
bond bond0 has no active aggregator
Bondingインターフェイスの削除
下記で削除します。bond0-slaveは個別に削除する必要があります。削除は即時に反映されます。
[root@centos ~]# nmcli connection delete con-bond0 [root@centos ~]# nmcli connection delete con-bond0-slave-ens34 [root@centos ~]# nmcli connection delete con-bond0-slave-ens35