RedHat系Linuxサーバー構築中。
bondingの設定もしたので、自分向けにメモ。
◎概要
NICの負荷分散、冗長化機能。
複数のNICを束ねて1つのチャンネルにする。
あるNICや通信経路に障害が発生しても、他のNICで通信を継続できる。
また、複数のNICを使った大容量通信も実現可能。
◎事前確認
- Linuxカーネルバージョン
- 2.4.18以上 → 標準で利用可
- 2.4.18未満 → バージョンアップまたはパッチ適用が必要
- NICについて
- Linuxで利用可能なNIC→メーカー・型番が異なってもOK(NICベンダーに依存しない)
- bondデバイスのslaveの数には上限なし
- 対向のネットワーク機器はスイッチ機能を有していること → リピーターHUBだと問題発生要因になる
- bondingモード
- 導入環境にあわせて、モードを以下の7つから選択
- モード0 (balance-rr):ラウンドロビン
- ラウンドロビンによる負荷分散
- 高速転送向け
- デフォルト
- trunkに対応した対向スイッチが必要
- パケット到着順を気にするAPの場合は注意
- モード1(active-backup)
- 1つのNICがアクティブ。他はスタンバイ。
- 耐障害性を重視
- 切替時のARP学習状態に注意
- モード2(balance-xor)
- 送信元/宛先MACアドレスのXOR演算による負荷分散
- MACアドレスをキーにしてポート(NIC)を決定
- 直結ネットワーク上のホストとの通信に向く
- trunkに対応した対向スイッチが必要
- モード3(broadcast)
- 束ねた全NICから同一パケット送信
- 特殊環境(複数のSWに接続し、各SW間でL2レベルでの通信ができない環境)利用で、ほとんど使われない
- モード4(802.3ad)
- IEEE 802.3ad Dynamic link aggregation規格で接続
- IEEE802.3ad対応SW必要
- モード5(balance-tlb)
- NICの速度・負荷に応じた負荷分散
- I宛先IPアドレスで振分け
- 10秒ごとにポート負荷状態(byte単位の通信速度)確認。→宛先IPアドレス/ポート対応表作成
- 送信と受信では別のI対応表を使う→行き・帰りの経路が異なる→フラッディングすることも?
- モード6(balance-alb)
- NICの速度・負荷に応じた負荷分散
- TLBの機能に加え、受信ポートの状態も見て、受信ポートを切替える。
- ARP要求時に受信ポートを決定
- 障害検出時、ARPメッセージを送信して受信ポート切替え
◎設定
bondingを利用する設定手順の概要は以下。(設定後にシステム再起動する場合)
- bondingドライバの有効化
- bondingインタフェース(bond0)を定義
- sulaveインタフェースを定義
- システム再起動して、確認
1. bondingドライバの有効化
bondingインタフェース(ここではbond0)にbondingモジュールを組み込む
# vi /etc/modprobe.d/dist.conf (RHEL6の場合)
※他に/etc/modprobe.conや/etc/modules.confだったりする以下の2行を追記。ここではbondingモードは「0」を使う。MII監視インターバルは100msec。
alias bond0 bonding
options bonding mode=0 miimon=100
(またはoptions bond0 mode=0 miimon=100)miimonはMIIモニタリングのことだろう・・・。
2. bondingインタフェース(bond0)を定義
bondingインタフェースは仮想インタフェース。最初は設定ファイルが存在しないので、作成する。
# vi /etc/sysconfig/network-scripts/ifcfg-bond0
普通のインターフェースを設定をするのと同じ。たとえば、以下のように記述。DEVICE=bond0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
IPADDR=192.168.22.229
NETMASK=255.255.255.0
NETWORK=192.168.22.0
3. slaveインタフェースの定義
bondingで束ねられる(チーム化される)物理インタフェースのことをslaveインタフェースと呼ぶ。
ここではeth1、eth2。
eth1、eth2がbond0のslaveインタフェースになるように設定。
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
HWADDR=00:0c:29:**:**:**
ONBOOT=yes
BOOTPROTO=none
USERCTL=none
MASTER=bond0 <– これを書く!
SLAVE=yes <–これを書く!
※ifcfg-eth2も同じ
【注意】
RHEL6で、MASTER=”bond0”などと、bondingに関する項目の設定値を[“](ダブルクォーテーション)で囲んだら、システム再起動の際に、slaveインタフェースは自動で立ち上がってこなかった。手動ならリンクアップ可能。
[“]を使わなければOK。
4. システム再起動して、確認
# reboot
システム起動時に /etc/rc.d/rc.sysinit内のmodprobeコマンドでbondingモジュールもロードされる。
# lsmod | grep bond
bonding 98281 0
ipv6 270561 23 bonding
bondingの状態を確認
# cat /proc/net/bonding/bond0
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:29:**:**:**
Slave Interface: eth2
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:29:**:**:**
# ifconfig
bond0 Link encap:Ethernet HWaddr 00:0C:29:**:**:**
inet addr:192.168.22.229 Bcast:192.168.22.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe65:4b12/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
~~(omitted)~~eth1 Link encap:Ethernet HWaddr 00:0C:29:**:**
:**
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
~~(omitted)~~eth2 Link encap:Ethernet HWaddr 00:0C:29:65:4B:12
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
~~(omitted)~~
あとはping通信中にLANケーブルを抜いたりして、耐障害性機能を確認したりする。
【参考】
- オープンソース・カンパニー RHEL5のbonding設定
- JFEテクノリサーチ株式会社 8) NIC冗長化設定 (bonding設定)
- NEC システムテクノロジー bonding機能紹介と展望(PDF)
- NEC Express5800/Linux LANポート二重化機能 動作確認情報
- MIRACLE LINUX Linux技術トレーニング 基本管理コース II 第1章カーネル