Bonding まとめ

1.Bondingとは・メリット

Bondingとは複数のNICを束ねて仮想的なNICとして利用できる技術です。複数のリンクを束ねる類似機能としてWindows・VMwareではチーミング(teaming)、スイッチではリンクアグリゲーション(EtherChannel)があります。Bondingにより得られるメリットは耐障害性の向上や、複数のリンクから送受信を行うことによる負荷分散などが挙げられます。
 
■Bondingを用いない場合
例えばBondingを用いないケースでは、下記図のように複数のNICは独立したデバイスとして動作します。各リンクは別々のリンクとして扱われ複数のNICに同じIPaddressを付与することはできません。リンクのどちらかに障害が発生した場合、片側のIP宛には通信できなくなります。
bond1
 
■Bondingを使用する場合
Bondingを用いれば下記のように複数の物理NICを仮想的なNICとして利用できます。リンクのどちらかに障害が発生しても通信の継続は可能ですし、両方の物理NICから通信を送出すれば送信負荷分散が可能です。(負荷分散の有無はBondingの設定により変わります。)
bond2
仮想インターフェースからは通常の物理NICと同じようにAlias IPアドレスを付与することもできます。
bond3
 

2.Bondingモードについて

Bondingでは7種類の動作モードが用意されており、目的に応じたモードを選択し設定する必要があります。ただし主に採用されるオプションは3つのみです。(赤字)
 
モード名称
モード
番号
送信
分散
受信
分散
特徴
balance-rr
0
SW設定
ラウンドロビン方式で送信のみ負荷分散する。サーバが複数のスイッチに接続されている場合、スイッチで行っているフローベースの通信にバラつきが生じ、相手にパケットがバラバラな順番で届きやすくなる。(TCPの再送処理が走る)
active-backup
1
1つのアクティブなスレーブインターフェースで送受信を行い、他のスレーブインターフェーブはスタンバイ状態とする。アクティブなスレーブインターフェース障害が発生したら他のスレーブインターフェースに切り替える。
balance-xor
2
SW設定
送信元・先のmac-addressを基に送出スレーブインターフェースを決定する方式で負荷分散する。L3ポート直結だとmacが変わらないので負荷分散されない。
broadcast
3
SW設定
全てのスレーブインタフェースから同一のパケットを送出する。(基本使わないはず)
802.3ad
4
SW設定
プロトコルLACPを使用してリンクアグリゲーションを行い、動的にリンクを形成する。スイッチ側にもLACPでリンク形成を行うためのを設定が必要。全てのスレーブインターフェースで送受信を行う。
balance-tlb
5
SW設定
NICの負荷に応じて送出スレーブインターフェースを変える。
balance-alb
6
SW設定
NIC負荷に応じて送出・受信スレーブインターフェースを決定する。
 
BondingはKernelのbonding moduleを使用します。モジュールがすでにロードされているかは下記コマンドでbondingが表示されるかで確認できます。
[root@bond01 ~]# lsmod | grep bonding
bonding               130997  0
8021q                  25527  1 bonding
ipv6                  334932  16 bonding,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6

Bondingを扱う上でよく出てくるインターフェースのキーワードありますが扱いや意味を下記にまとめます。

名前
概要
マスターインターフェース
(Master Interface)
bondingされた仮想的なインターフェースを指す。例:bond0
スレーブインターフェース
(SLAVE Interface)
マスターインターフェースを構成するインターフェース。例:eth0,eth1など
アクティブインターフェース
(Active Interface)
マスターインターフェースに所属するスレーブインタフェースで実際にパケットの送受信を行うインターフェース。
 

3.Bondingの監視モードについて

Bondingはスレーブインタフェースの状態を監視しており、スレーブインターフェースの状態を監視する方法は下記2つです。

MII監視

MII(Media Independent Interface)とはメディアに依存しないインターフェースを設定・管理するために使用されるユーティリティです。イーサネットアダプタの多くは、speed,duplexを設定するためにMIIを使う。MII監視は、自身にハードウェア的な問題がないかチェックする方法です。そのため、対向の接続SWポート以降の経路に障害が発生している場合には障害検知を行うことができません。この場合、ARP監視でSW以降の両側からアクセス可能なデバイスをARPターゲットとして監視を行う必要があります。
bond4
 

ARP監視

デフォルトで無効化されています。予め監視対象のIPアドレスを設定し、そこに定期的にARPリクエストを送出します。ARP監視に失敗すると自身のアクティブなスレーブインターフェースに障害が発生したと判断し、アクティブインターフェースを切り替えます。(Mode=ActiveBackupの場合)
 

4.Bonding(Active Backup)設定手順

今回は仮想マシンでサクッと設定してみます。物理マシンで行っているのではないのでご参考までに。
素のVMにVMwareの管理画面からNICを追加します。

bond5
 
追加したNICがOS側からPCIデバイスとして認識されているか確認する。
[root@bond01 ~]# lspci | grep Eth
02:00.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
02:02.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
 何も変更を加えていない状態です。00:0c:29:5d:4e:64 , 00:0c:29:5d:4e:6eのmac-addressが見えますね。
eth0    link/ether 00:0c:29:5d:4e:64 brd ff:ff:ff:ff:ff:ff
eth1    link/ether 00:0c:29:5d:4e:6e brd ff:ff:ff:ff:ff:ff
 次にbondig設定に必要なファイル編集&作成を行います。各パラメータの意味は下記のとおりです。
パラメータ
意味
DEVICE
device名を指定
ONBOOT
OS起動時に自動起動するか
USERCTL
root以外のユーザに制御を許可するか
BOOTPROTO
DHCPの使用有無
MASTER
bondingのmaster interfaceのデバイス名を指定する。
SLAVE
slave interfaceとするか
BONDING_OPTS
bondigのためオプション設定。カーネルモジュールに渡すパラメータを記述する。
 
スレーブインターフェース(今回はeth0,eth1)はほぼ同一の設定となるはずです。
//Slave interface eth0
[root@bond01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
USERCTL=no
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
 
//Slave interface eth1
[root@bond01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
USERCTL=no
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
マスターインターフェース用のコンフィグファイルです。bonding-optionでMII監視の監視間隔、bonding-mode,優先的に使用するスレーブインターフェース、スレーブインターフェース復旧後の挙動についてのポリシー設定を行っています。
//Master Interface bond0
[root@bond01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
IPADDR=10.24.96.151
NETMASK=255.255.255.0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
BONDING_OPTS="miimon=100 mode=1 primary=eth0 primary_reselect=failure"
ネットワーク設定を再読込します。
[root@bond01 ~]# /etc/init.d/network restart
インターフェース bond0 を終了中:                           [  OK  ]
ループバックインターフェースを終了中                       [  OK  ]
ループバックインターフェイスを呼び込み中                   [  OK  ]
インターフェース bond0 を活性化中:  Determining if ip address 10.24.96.151 is already in use for device bond0...
                                                           [  OK  ]
 

5.設定確認

Bonding設定を確認します。新たにbond0インターフェースが確認できました。mac-addressはprimary スレーブインターフェースのmacが使用されています。(フェイルオーバしてもmacに変化はありませんでした。)

[root@bond01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
    link/ether 00:0c:29:5d:4e:64 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
    link/ether 00:0c:29:5d:4e:64 brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether 00:0c:29:5d:4e:64 brd ff:ff:ff:ff:ff:ff
    inet 10.24.96.151/24 brd 10.24.96.255 scope global bond0
    inet6 fe80::20c:29ff:fe5d:4e64/64 scope link
       valid_lft forever preferred_lft forever
Bondingのステータス状態(モード、スレーブインターフェースの状態)を確認するにはプロセスファイルを確認します。
[root@bond01 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: eth0 (primary_reselect failure)
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:5d:4e:64
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:5d:4e:6e
Slave queue ID: 0

[root@bond01 ~]# ifconfig | grep HW
bond0     Link encap:Ethernet  HWaddr 00:0C:29:5D:4E:64
eth0      Link encap:Ethernet  HWaddr 00:0C:29:5D:4E:64
eth1      Link encap:Ethernet  HWaddr 00:0C:29:5D:4E:64
 

リンクスピードなどNICとしてのステータス状態を確認する場合はethtoolを使用して確認します。

[root@bond01 ~]# ethtool bond0
Settings for bond0:
    Supported ports: [ ]
    Supported link modes:   Not reported
    Supported pause frame use: No
    Supports auto-negotiation: No
    Advertised link modes:  Not reported
    Advertised pause frame use: No
    Advertised auto-negotiation: No
    Speed: 1000Mb/s
    Duplex: Full
    Port: Other
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: off
    Link detected: yes
 

6.手動切り替え方法(Active Backup)

現在のプライマリアクティブとなっているインターフェースeth0をeth1に変更してみます。
//切り替えコマンド
[root@bond01 ~]# ifenslave -c bond0 eth1

//切り替わったことを確認
[root@bond01 ~]# cat /proc/net/bonding/bond0  | grep Currently
Currently Active Slave: eth1

//messgaes log出力
Oct  5 14:59:45 bond01.tagutagu.com kernel: [19797355.867324] bond0: Setting eth1 as active slave
Oct  5 14:59:45 bond01.tagutagu.com kernel: [19797355.867329] bond0: making interface eth1 the new active one
 
以上です。

Copyright © 2021 たぐたぐ.com. All rights reserved.