意外と知らない?NICを冗長化するボンディング(bonding)

割と長い間ネットワークに携わってる人と話していて、その人がボンディングの存在を知らなかったので、もしかして知られていないのではないかと思ったので紹介してみます。


Linuxでは、ボンディング(bonding)を使うことでNIC冗長化、負荷分散ができます。ケーブルが断線したり、間違えて抜いてしまったなんてことがあったとしても大丈夫です。
このボンディングはNICを複数束ねて使うことで、1個のチャンネルにすることができます。異なるベンダーのNICとかでも大丈夫ですよ。(bondingは機能の名称で、束ねることはteamingとも言うらしい)

異なるスイッチ(更に、その上に異なるルーターとか)なんかにつなぐと、更に冗長化ですよ。
当たり前ですが、NICは2個以上消費します。

/etc/sysconfig/network-scripts/ifcfg-bond0 を作成

DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
NETWORK=192.168.1.0
NETMASK=255.255.255.0
IPADDR=192.168.1.11

ifcfg-eth0 と ifcfg-eth1 を編集

DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes

/etc/modules.conf を作成(or 編集)

alias bond0 bonding
options bond0 mode=0 miimon=200

bondingモジュールにて使用できるパラメータの一覧は次の通りです。 (参考:http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/ja/ref-guide/s1-modules-ethernet.html

mode= — bondingモジュールに許可された 4つのポリシーの中から1つを指定します。このパラメータに有効な値は次の通りです。

0 — 耐障害性と負荷バランシングに対するラウンド ロビン ポリシーを設定します。ボンディングされたスレーブインターフェイスは使用できるものから順に、送受信を順次行ないます。

1 — 耐障害性に対するアクティブ バックアップ ポリシーを設定します。 最初に使用できるボンディングされたスレーブインターフェイスによって送受信が行なわれます。ボンディングされた他のスレーブインターフェイスはアクティブなスレーブインターフェイスが失敗した場合のみ使用されます。

2 — 耐障害性と負荷バランシングに対する XOR (exclusive-or)ポリシーを設定します。この方法では、インターフェイスによって1スレーブ NICMACアドレスと受信要求の MACアドレスが適合されます。このリンクが確立されると、最初に使用できるインターフェイスから送信を順次行ないます。

3 — 対障害性用のブロードキャストポリシーを設定します。全ての送信は、全てのスレーブインターフェイスで送られます。

4 — IEEE 802.3ad ダイナミックリンク集合ポリシーを設定します。同じスピードとデュープレックス設定を共有する集合グループを作成します。アクティブな集合体内の全てのスレーブ上で送信と受信をします。そして802.3ad 対応のスイッチを必要とします。

5 — 対障害性とロードバランシング用の送信ロードバランシング (TLB)ポリシーを設定します。外部への送信は、各スレーブインターフェイス上の現在のロードに従って配信されます。受信は現在のスレーブにより受け付けられます。もし受信するスレーブに障害があるともう一つのスレーブが問題のスレーブの MAC アドレスを引き取ります。

6 — 対障害性とロードバランシング用のアクティブロードバランシング (ALB)を設定します。IPV4 通信用の送信および受信ロードバランシングを含んでいます。受信のロードバランシングは ARP ネゴシエーションによって達成されます。

miimon=MIIリンク監視の実行頻度を指定します。(ミリ秒単位) NICがアクティブかを確認するのにMIIが使用されるため、高い可用性が必要になる場合便利です。

最後に上記の変更を反映するために、ネットワークを再起動します。

# service network restart

試しにケーブルを片一方抜いても動いていれば動作しています。