Hatena::ブログ(Diary)

うさぎ文学日記 RSSフィード

 うさぎ文学日記甘味日記[甘味]

2006-10-02

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

| 意外と知らない?NICを冗長化するボンディング(bonding)を含むブックマーク

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


Linuxでは、ボンディング(bonding)を使うことでNICの冗長化、負荷分散ができます。ケーブルが断線したり、間違えて抜いてしまったなんてことがあったとしても大丈夫です。

このボンディングはNICを複数束ねて使うことで、1個のチャンネルにすることができます。異なるベンダーのNICとかでも大丈夫ですよ。(bondingは機能の名称で、束ねることはteamingとも言うらしい)

f:id:sen-u:20061002131919g:image

異なるスイッチ(更に、その上に異なるルーターとか)なんかにつなぐと、更に冗長化ですよ。

当たり前ですが、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スレーブ NIC の MACアドレスと受信要求の MACアドレスが適合されます。このリンクが確立されると、最初に使用できるインターフェイスから送信を順次行ないます。

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

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

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

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

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



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

# service network restart

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


えこえこ 2006/10/03 01:02 確かに bonding って、あまり知られていない気がします?

ネットワーク屋さんでも LAG や EtherChannel についてご存知でも、サーバの bonding (や、teaming)については、あまりご存知無いような気がします。サーバ屋さんでも、bonding を知らない方のほうが多いような気が・・・

yunayuna 2006/10/03 15:34 サーバがわかるネットワーク屋というか、ネットワークが(本当に)わかってサーバ屋が少ないから意外と知られてなかったのでしょうね。
かくいう私も初イヤーでした(恥

nunu 2006/10/03 17:06 MACアドレスとかどうなるんでしょう。
高負荷になるとHUBが死にそうですが。

sen-usen-u 2006/10/03 17:17 たしか、bond0, eth0, eth1 が全部同じMACアドレスになります。

sen-usen-u 2006/10/03 17:19 ↑ 指定しない限りは1番目スレーブデバイスのMACアドレスになります。

sen-usen-u 2006/10/03 17:19 http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.4/networking/bonding.txt.html
この辺りも参考にどうぞ。

solaris_usersolaris_user 2006/10/03 18:54 「今夜わかるシリーズ」重宝しております。
SolarisだとIPMPっていう機能があります、似たような機能ですけど、少し違うかな。MACアドレスの扱いは、IPレベルで冗長化してるので気にしないです。
ちなみに、L2/L3SWも含めて冗長化するなら、ちゃんとした製品を使いましょう。

nunu 2006/10/04 09:34 sen-uさん情報ありがとうございます。
私が気にしているのは、家庭用のHUBを使うとMACアドレステーブルの頻繁な書き換えが発生によってHUBが故障しそうなのではないかと懸念しています。
modeによっては問題ないのもありますが・・・

sen-usen-u 2006/10/04 09:45 ご家庭用のスイッチとの相性はどうなんでしょうね。active-backupなら頻繁な書き換えは発生しないと思いますが、逆に学習テーブルの有効期限の間隔ってたぶん調整できないモノが多そうなので、再学習するまでの期間が異様に長かったりする可能性もあるんでしょうかね。

sen-usen-u 2006/10/04 09:47 そもそも、家庭用スイッチを使ってる環境で冗長化が必要あるのかどうか。NICとかが壊れる可能性より、スイッチが壊れる可能性の方が大きそうですよね。w

nqnq 2006/10/04 12:11 上り速度が出ないADSL経由の線を3本束ねて、bondingしようとしたのですが、どうしても3本を対称に負荷分散させることができませんでした。さんざん実験して考えた結果、FLETsとLinuxの仕様の相性が悪いので無理ということになりました。正確な理由は忘れましたが、eth1のMACアドレスがeth0と同じに変っちゃうのでFLETsが拒否するんじゃなかったかな。

すずきすずき 2006/10/17 20:26 Sun だとこのあたりですかね。

Trunking /www.sun.com/products-n-solutions/hardware/docs/Network_Connectivity/Sun_Trunking_Software/index.html

IPMP //docs.sun.com/app/docs/doc/816-3958/6ma71jis2?a=view

LouisLouis 2006/12/10 16:04 bondの速度やautonegoをオフにできないかを探していたら辿りつきましたー
またお邪魔しまーす。ではでは。

アルトバウムアルトバウム 2010/02/22 17:35 初めまして、cntos5.4でサーバー用lanカードを使用してnicを助長化出来ないかなと思い調べと此処にたどりつきました。
 書いてある内容を参考に、M/B×1,サーバー用lanカード*2の内
サーバー用lanカードだけbonding化してみたのですが、bonding化したnicからDNSが引けなくて困っているのですが、原因になりそうな点がありましたらご教授いただけませんか。

nekoneko 2010/05/26 20:32 自分もRHEL4でボンディングしてDNS引けなくなった。
再起動したらDNSサーバ見に行くようになったけどね。
mode=0で設定してBuffaloのノンインテリなスイッチで950Mbps出たよ。


2003 | 08 | 09 | 10 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 02 | 03 | 05 | 11 |
2014 | 06 | 08 |