Personal tools
You are here: Home Linuxの設定 NIC冗長化(bonding)
Document Actions

NIC冗長化(bonding)

by tamohiko last modified 2007-03-23 00:13

カーネルのモジュールであるbondingを使用してNICの冗長化をする方法。

bondingとは?

簡単に書くと複数のNICを一つにまとめて、負荷分散や冗長化を行うというものです。

kernelのモジュールである「bondモジュール」をつかうので、bondingといったように呼ばれているらしいです。

注意点

BondingでリピータHUB(いわゆる馬鹿ハブ・ダムハブ)を使用するとコリジョンが多発する為、スイッチングHUBの使用が必要です。

※ リピーターHUBは受信データを受信中のポートを除く全てのポートから一斉に送信します。 なので、リピーターHUBをつかってbondingをしている端末でデータ送信を行うと、 bondingされているNICデバイス全てに同じデータが送信され(bondingされているNICデバイスはMACアドレスが全部同じになるため)、 問題が発生しちゃうということらしいです。

また、bondingを行うためにはカーネルレベルで対応していなくてはいけません。
Kernel-2.4.18以降であればデフォルトでBonding のモジュールは組み込まれています。それ以前のカーネルでは、カーネルをバージョンアップしたり パッチを当てる等の作業が必要になるらしいです。(検証をしていないので未確認ですが・・・)

bondingモジュール設定(/etc/modprobe.conf)

kernelのモジュールであるbondを使えるように、設定ファイルである/etc/modprobe.confにbondingの設定を追加します。
※ディストリビューションによっては/etc/modules.confの場合もあります。

書式

設定内容はbond0のalias設定と、bondingの方式とNIC死活監視の設定となります。

alias bond0 bonding
options bonding mode=x miimon=x arp_interval=x arp_ip_target=xxx.xxx.xxx.xxx (primary=eth0)
bonding mode (方式)

bondingには以下のmode(方式)があります。

 0: load balancing (round-robin):ラウンドロビン方式。
    使用できるスレーブデバイスから順にデータの送受信を行い、負荷分散と冗長化に対応します。
 1: fault-tolerance (active-backup):アクティブ・バックアップ方式。
  1つのスレーブがアクティブでありそのスレーブに障害が起きたとき自動的に他のスレーブを使用し、冗長化に対応
 2: load balancing (xor):XOR方式。
    同じ送信先のMACアドレス対して同じスレーブを使用し、負荷分散と冗長化に対応
 3: fault-tolerance (broadcast):     全部のスレーブデバイスでデータの送信を行います。  4: IEEE 802.3ad Dynamic link aggregation:IEEE 802.3ad ダイナミックリンク集合方式。
IEEE 802.3adに対応しているスイッチを用いて、Speed(通信速度100M/1Gb等)とDuplex(全/半二重設定)が同じグループを作って、
全てのスレーブデバイスでデータの送受信をします。(やったことないので、よく分りませんが・・・)
 5: transmit load balancing:     送信時のみ負荷分散を行い受信時は冗長化(MACアドレスを引き継ぐ)  6: adaptive load balancing:アクティブロードバランシング方式。
    送受信共に負荷分散を行う
NIC死活確認方式 (miimon / arp_interval)

bondingを設定する際にNICの死活監視を行う方法がMIIを使う方法とarp監視の2つがあり、どちらかを指定する必要があります。
(MIIが使えるのならばMIIを使用するのが良いような気がします、ネットワークに無駄なトラフィック流れないし。)

miimon
MIIリンク監視頻度を指定をミリ秒単位で指定します。0は使用しない。(MIIをサポートしないNICでは使用できません)
arp_interval
ARP監視頻度をミリ秒単位で指定します。0は使用しない。

arp_intervalを使用する場合は、以下の設定も必要となります。
arp_ip_target=
arp_intervalが使用するARP要求のターゲットのIPアドレスを指定します。
複数を指定する場合は「,」でくぎります。

指定例
options bond0 miimon=0 arp_interval=1000 arp_ip_target=192.168.0.1,192.168.0.2,192.168.0.3

※ 設定はミリ秒(m/s)なので、注意してください。私は間違って10秒に1回のチェックと設定しようとしてarp_interval=10とかやってしまい、ネットワークを 不安定にしました・・・

MIIリンクに対応しているかの確認

mii-toolコマンドを使用することにより、NICがMIIリンクに対応しているか簡単に確認出来ます。

対応していない
# mii-tool
SIOCGMIIPHY on 'eth0' failed: Operation not supported
SIOCGMIIPHY on 'eth1' failed: Operation not supported
no MII interfaces found
対応している
# mii-tool
eth0: negotiated 100baseTx-FD flow-control, link ok
/etc/modprobe.conf 編集

とりあえず、/etc/modprobe.confをバックアップしてから、viで編集していきます。

# cp -p /etc/modprobe.conf /etc/modprob.conf_yyyymmdd
# vi /etc/modprobe.conf
追加内容

今回は、bondingのmodeを1(アクティブ・バックアップ方式)で、NICの死活監視はarp監視(arp_interval)方式を使用します。

alias bond0 bonding
options bonding mode=1 miimon=0 arp_interval=10000 arp_ip_target=192.168.85.1 primary=eth0

※primary=eth0というのは、正常時に使用するNICデバイスをeth0へ指定するという設定です。

/etc/modprobe.confの中身

参考までに、/etc/modprobe.confをcatしてみるとこんな感じになっています。

alias eth0 bnx2
alias eth1 bnx2
alias scsi_hostadapter mptbase
alias scsi_hostadapter1 mptscsi
alias scsi_hostadapter2 mptfc
alias scsi_hostadapter3 mptspi
alias scsi_hostadapter4 mptsas
alias scsi_hostadapter5 mptscsih
alias scsi_hostadapter6 qla2xxx
alias scsi_hostadapter7 ata_piix
alias scsi_hostadapter8 qla2300
alias usb-controller ehci-hcd
alias usb-controller1 uhci-hcd
alias bond0 bonding
options bonding mode=1 miimon=0 arp_interval=10000 arp_ip_target=192.168.85.1 primary=eth0
参考 http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/ja/ref-guide/s1-modules-ethernet.html

NIC設定

/etc/modprobe.confの設定が終わったら、今度はbondigで使用するNICデバイスの設定を行っていきます。

bond0設定

bondingインターフェイス(仮想NIC)であるbond0の設定です。書式は通常のNICの設定とほぼ同じです。

# vi /etc/sysconfig/network-scripts/ifcfg-bond0 
ifcfg-bond0 設定内容
DEVICE=bond0
IPADDR=192.168.0.100
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
USERCTL=no
eth0デバイス設定

今回bondingに使用されるNICデバイスである「eth0」「eth1」の設定を行います。

設定内容的には、MATERのNICデバイスをbond0にし自分はSLAVEである事を設定します。 なお、IP情報等の設定はありません。

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
ifcfg-eth0 設定内容
DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
MASTER=bond0 SLAVE=yes BOOTPROTO=none
eth1デバイス設定
# vi /etc/sysconfig/network-scripts/eifcfg-eth1
ifcfg-eth1 設定内容
DEVICE=eth1
ONBOOT=yes
TYPE=Ethernet
MASTER=bond0 SLAVE=yes BOOTPROTO=none

設定の有効化

モジュールとNICの設定が終わったら設定を有効化します。再起動の方法はサーバの再起動となります。

# reboot

bonding動作確認

設定に間違いがなく無事設定反映が終われば、bond0というデバイスが見えてくるはずなので ifconfigコマンドでNICの状態を確認してみましょう:-)

 # ifconfig -a
bond0 Link encap:Ethernet HWaddr 00:0C:29:87:92:9C
inet addr:192.168.85.129 Bcast:192.168.85.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe87:929c/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:162 errors:0 dropped:0 overruns:0 frame:0
TX packets:179 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:19961 (19.4 KiB) TX bytes:22667 (22.1 KiB)

eth0 Link encap:Ethernet HWaddr 00:0C:29:87:92:9C
inet6 addr: fe80::20c:29ff:fe87:929c/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:148 errors:0 dropped:0 overruns:0 frame:0
TX packets:94 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:18160 (17.7 KiB) TX bytes:12236 (11.9 KiB)
Interrupt:10 Base address:0x1080

eth1 Link encap:Ethernet HWaddr 00:0C:29:87:92:9C
inet6 addr: fe80::20c:29ff:fe87:929c/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:19 errors:0 dropped:0 overruns:0 frame:0
TX packets:98 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2101 (2.0 KiB) TX bytes:12433 (12.1 KiB)
Interrupt:9 Base address:0x1400

************** 以下省略 ***************

※すべてのMACアドレスが一緒になっているのが確認できます。

bonding詳細情報

bondingの詳細な情報については、「/proc/net/bonding/bond0」の中身をcat等で見てみると良いでしょう。

# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v2.6.1 (October 29, 2004)

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

Slave Interface: eth0
MII Status: up
Link Failure Count: 7
Permanent HW addr: 00:0c:29:87:92:9c

Slave Interface: eth1
MII Status: up
Link Failure Count: 6
Permanent HW addr: 00:0c:29:87:92:a6
HA動作の確認

NICデバイスに繋がっているLANケーブルを引っこ抜いても、通信が出来ることを確認します。
(NIC死活監視間隔の設定によってはNICの切り替えに時間が掛かるので、数秒ほどの通信断が発生すると思います。)

 

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: