LinuxのBonding設定とスイッチ側のLinkAggregation設定
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 の中で指定できます。
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 としては非推奨になります。
コメント