読者です 読者をやめる 読者になる 読者になる

Carpe Diem

備忘録。https://github.com/jun06t

NICチーミング を構築する

NICチーミングとは、複数NICを用いることで ・片方のNICが落ちた時に、もう片方で対応する(フォールトトレランス) ・帯域幅を広げる(リンクアグリゲーション) ・負荷分散をする(ロードバランシング) などを実現する方法です。 Linuxでは、Bonding(ボンディング)ドライバを使用していることから、チーミングのことを"ボンディング"とも呼びます。 今回はVMを使って簡単に環境を実現します。 NICを増やす 以下の環境で構築します。 eth0・・・SSH用。すべてbondingで使用すると動作確認でSSHが途切れて不便なため eth1・・・bonding用1 eth2・・・bonding用2 bond0・・・eth1, eth2をまとめた仮想NIC ネットワークアダプタを選択 teaming01.png 今回はブリッジで構築します。 teaming02.png こんな感じです。 teaming03.png ◆bondingドライバを使う ※/etc/modprobe.d/disable-ipv6.conf ファイルにinstall ipv6 /bin/trueの記述があるとbondingを使えないので注意 CentOS 5/6 の場合
$ sudo vi /etc/modprobe.d/bonding
alias bond0 bonding
CentOS 4 の場合
$ sudo vi /etc/modprobe.conf
alias bond0 bonding
options bond0 mode=1 miimon=100
bondingモードは以下のとおりです。
mode 名称 説明
0 balance-rr load balancing (round-robin) 全てのスレーブデバイス(NIC)を順番(ラウンドロビン)に使いパケットを送信。 送信のみ負荷分散。
1 active-backup fault-tolerance (active-backup) 1つの NIC のみをアクティブインターフェイスとしてパケットを送信。 送受信とも負荷分散なし。
2 balance-xor load balancing (xor) 送信元/先のMACアドレスを元に、送信スレーブデバイスを決定しパケットを送信。 送信のみ負荷分散。
3 broadcast fault-tolerance (broadcast) 全スレーブに同一パケットを送信。 通常の用途では使用しない。
4 802.3ad IEEE 802.3ad Dynamic link aggregation IEEE 802.3ad(LACP)に準拠したリンクアグリゲーション。 接続するスイッチが IEEE 802.3ad に対応している必要がある。
5 balance-tlb transmit load balancing 各スレーブの負荷に応じて送信スレーブを分散させる。受信は現在のスレーブによって行われる。 送信のみ負荷分散。
6 balance-alb adaptive load balancing balance-tlbの機能に加え、受信も負荷分散。
◆各ネットワークインタフェースの設定 NetworkManagerが起動してると邪魔をするので停止します。
$ sudo service NetworkManager stop
$ sudo chkconfig NetworkManager off
/etc/sysconfig/network-scripts にある、各インターフェースを設定するファイルを次のように設定します。
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-bonding
DEVICE=bond0
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
ONBOOT=yes
BONDING_OPTS="mode=1 miimon=100"
設定したらネットワークを再起動します
$ sudo service network restart
◆動作確認 ifconfigとprocを見てみます。
$ ifconfig
bond0     Link encap:Ethernet  HWaddr 00:0C:29:96:21:C9
          inet addr:192.168.1.100  Bcast:192.168.11.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe96:21c9/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:373 errors:0 dropped:0 overruns:0 frame:0
          TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:28770 (28.0 KiB)  TX bytes:6406 (6.2 KiB)

eth0      Link encap:Ethernet  HWaddr 00:0C:29:96:21:B5
          inet addr:192.168.157.128  Bcast:192.168.157.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe96:21b5/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14169 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8382 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:18886214 (18.0 MiB)  TX bytes:532463 (519.9 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:96:21:C9
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:197 errors:0 dropped:0 overruns:0 frame:0
          TX packets:52 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:15242 (14.8 KiB)  TX bytes:5040 (4.9 KiB)

eth2      Link encap:Ethernet  HWaddr 00:0C:29:96:21:C9
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:176 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:13528 (13.2 KiB)  TX bytes:1366 (1.3 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:26 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2310 (2.2 KiB)  TX bytes:2310 (2.2 KiB)
$ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

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

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:96:21:c9
Slave queue ID: 0

Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:96:21:bf
Slave queue ID: 0
実際にNICの接続を切ったり再接続したりします。 /var/log/message には bonding の動作ログが記録されるのでそれを見ます。 eth1を切断してみると
# sudo tail -fn50 /var/log/message
Mar  8 07:10:11 localhost kernel: e1000: eth1 NIC Link is Down
Mar  8 07:10:12 localhost kernel: bonding: bond0: link status definitely down for interface eth1, disabling it
Mar  8 07:10:12 localhost kernel: bonding: bond0: making interface eth2 the new active one.
また/proc/net/bonding/bond0は
$ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

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

Slave Interface: eth1
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 2
Permanent HW addr: 00:0c:29:96:21:c9
Slave queue ID: 0

Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 2
Permanent HW addr: 00:0c:29:96:21:bf
Slave queue ID: 0
この状態で192.168.1.100にアクセスしてみると、きちんとアクセスできることが確認できます。 以上です。 ソース: teaming CentOS/NICの冗長化(bonding設定) 【メモ】CentOS6でIPv6を無効化するには