Linux(CentOS8/RHEL8)のBondingのmodeと設定確認方法,スイッチのLink Aggregation設定との組合せ

Linux サーバではスイッチでの Link Aggregation に相当する機能のことを "Bonding(ボンディング)" と呼びます。

Link Aggregation との違いはありません。

また、Bonding に参加する物理インタフェースのことをスレーブインタフェースと呼びます。また、Bonding を司る論理インタフェースのことをマスターインタフェースと呼びます。

スイッチの Link Aggregation と Linux サーバ の Bonding を接続する際、Linux サーバ側では以下のモードが選べます。

mode# mode name 説明 スイッチの
Link Aggre-
gation設定
0 balance-rr ・ラウンドロビンによる負荷分散での送信
・受信は全てのスレーブインタフェースで可能
Static
1 active-backup ・1つのスレーブインタフェースのみを
 Activeとし、送信
・受信はActiveポートからのみARP応答
 することで誘導
無し
2 balance-xor ・Link AggregationのStaticモードと同じ
・送信元/宛先情報を元に負荷分散
・負荷分散に使う情報はパラメータである
 xmit_hash_policyによって設定可能
・受信は全てのスレーブインタフェース
 で可能
Static
3 broadcast ・全てのスレーブインタフェースから
同じパケットを送信
・受信は全てのスレーブインタフェースで可能
・冗長化はできるが実用的ではない
Static
4 802.3ad ・LACP を使った Link Aggregation を実現
・送信元/宛先情報を元に負荷分散
・負荷分散に使う情報はパラメータである

 xmit_hash_policy によって設定可能
・受信は LACP でネゴの取れたインタ
 フェースのみから可能
LACP
5 balance-tlb ・スレーブインタフェースの負荷(Load)
に応じた負荷分散での送信
・受信は全てのスレーブインタフェースで可能
Static
6 balance-alb ・送信は balance-tlb と同じ
・受信は負荷に応じて ARP 応答するインタ
フェースを変更することで誘導
無し

一般的によく使われるのは mode=1,2,4 です。

mode=0 は構成によってはフレーム到達順序が逆になるなどで効率が悪くなる可能性があるため、推奨されません。

負荷分散方式

mode=2 もしくは 4 においては、送信の負荷分散方式を「xmit_hash_policy」というパラメータで決めることができます。

デフォルトでは xmit_hash_policy=0 (layer2:送信元MAC/宛先MAC) となるため、宛先が他セグメントとの通信がメインのサーバにおいては偏りが発生する可能性があります。例えば mode=4 にして、xmit_hash_policy を設定しない場合は以下のようになります。

# cat /proc/net/bonding/bond0
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)

解消するためには、xmit_hash_policy=1 (layer3+4:送信元IP&port/宛先IP&port) や xmit_hash_policy=2 (layer2+3:送信元MAC&IP/宛先MAC&IP) を指定します。

nmcli (NetworkManager)を使った Bonding の設定

以下に eth0 と eth1 を bonding (balance-xor, xmit_hash_policy=layer3+4) する設定例を示します。

# nmcli con add type bond ifname bond0 con-name bond0 bond.options "mode=balance-xor,miimon=100,xmit_hash_policy=layer3+4"
# nmcli con mod bond0 autoconnect yes
# nmcli con add type ethernet ifname eth0 con-name eth0 master bond0
# nmcli con add type ethernet ifname eth1 con-name eth1 master bond0

以上で完了です。 # cat /proc/net/bonding/bond0 で状態を確認できます。

NetworkManager無効時のBonding設定

RHEL7 / CentOS7 では NetworkManager 有効が推奨ですが、無効状態での Bonding 設定例を以下に示します。

1. bonding のモジュールのロード

# modprobe --first-time bonding

2. /etc/sysconfig/network-scripts/ifcfg-bond0 ファイルの作成

# vi /etc/sysconfig/network-scripts/ifcfg-bond0

以下を新規作成

DEVICE=bond0
NAME=bond0
TYPE=Bond
BONDING_MASTER=yes
IPADDR=10.1.1.1
NETMASK=255.255.255.0
GATEWAY=10.1.1.254
ONBOOT=yes
BOOTPROTO=none
BONDING_OPTS="mode=0 miimon=1000 xmit_hash_policy=0"

3. bonding に参加させるインタフェースのファイルの編集

# vi /etc/sysconfig/network-scripts/ifcfg-***

以下を追記

MASTER=bond0
SLAVE=yes

4. ネットワークサービスを再起動

# systemctl restart network

以上で完了です。 # cat /proc/net/bonding/bond0 で状態を確認できます。

モードと負荷分散方式の指定方法

モードと負荷分散方式は /etc/sysconfig/network-scripts/ifcfg-bond0 のBONDING_OPTS の中で指定できます。

BONDING_OPTS="mode=4 miimon=1000 xmit_hash_policy=2"

vi 等で上記を編集したのち、先程の例と同様 systemctl restart network でネットワークサービスを再起動すれば OK です。状態を # cat /proc/net/bonding/bond0 で確認します。

# cat /proc/net/bonding/bond0
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2+3 (2)

なお、miimon=1000 とは、MII モニターという仕組みで 1000 msec = 1秒間隔で Bonding の状態を確認する、という意味になります。

また、/etc/modprobe.d/bonding.conf で Bonding のオプション等の設定をすることは可能ではありますが、RedHat としては非推奨になります。

IT/インフラエンジニアの地位とスキル向上のために

関連記事

IT 技術の進化はとどまることを知りません。矢継ぎ早に新たな技術が出てきたり、数年前の技術が時代遅れになったりと、IT エンジニアは勉強し続ける運命のようです。 それをどう思うかはあなた次第。 ビジネスの基本は『付加価値を与える[…]

IMG
関連記事

nesuke の考える NW エンジニアの2つの道 ネットワークエンジニアには 2 つの道があります。 1 つはネットワーク構築一筋で、L4 までをひたすらきっちりと構築していく道。 もう 1 つはネットワークを軸として深堀し[…]

IMG