« RAID5のパリティ生成アルゴリズム | Main | dmマルチパスを用いたDELLストレージ設定方法(MD30xx編) »

December 16, 2013

LinuxでのNIC冗長化(bonding)を少し深く考えてみる

サーバNIC(Network Interface Card)の可用性向上や負荷分散にはNIC冗長化が有効です。NIC冗長化については拙著「インフラエンジニアの教科書」にも記しましたが、bonding、チーミング、リンクアグリゲーションなど様々な呼び名があります。今回はLinux上でのNIC冗長化の話しとなりますので、bondingについての話題となります。

【bondingとは】
bondingとは、複数のNICが搭載されているマシンのNICを束ねて1つの仮想的なNICとして扱うことのできる技術です。例えば1GbpsのNICポートが4つ搭載されているサーバとL2スイッチの間を4本のLANケーブルで接続してbonding設定を有効にさせると、冗長化が行われて最低1本が正常であれば1~3本に問題があっても通信が継続できたり、負荷分散が行われて通信帯域幅を4Gbpsに拡張されたりといった使い方ができます。

Linux Kernelに標準搭載されているbondingでは以下のように7つのmodeがあります。

mode 名称 負荷分散 冗長性 primary
指定 
Switch
機能 
監視
モード
送信 受信 MII ARP
0 balance-rr SW依存 × Ether Channel
全スレーブを順繰り(ラウンドロビン)に使ってパケットを送信。
送信のみ負荷分散。
1 active-backup × × 不要
1つのスレーブのみを active interfaceとしパケットを送信。
active interfaceに障害が発生した場合、他の backup slave を active interfaceに切り替え、冗長性を確保。
2 balance-xor SW依存 × Ether Channel
送信元/先 MACアドレスを元に送信スレーブを決定しパケットを送信。
送信のみ負荷分散。
3 broadcast SW依存 不明 要(設定不明)
全スレーブに同一パケットを送信。
このモードは通常の用途で使用されないので無視。
4 802.3ad SW依存 802.3ad ×
IEEE 802.3ad(LACP)に準拠したリンクアグリゲーション。
5 balance-tlb SW依存 不要 ×
スレーブの負荷に応じて送信スレーブを決定しパケットを送信。
送信のみ負荷分散。
6 balance-alb 不要 ×
balance-tlbの機能に加え、受信も負荷分散。
参考文献: bondingドライバの違いについて


【負荷分散する際気を付けること】
「1Gbpsを4本を束ねると4Gbpsになる」という理屈は理解しやすいですが、適切なmodeを選び適切に設定しないと、例えば送信側は4Gbpsのままだけど受信側は1Gbpsのままといったようなことが起こりがちなので注意が必要です。

bondingを設定する際、ネットワークスイッチ側でも設定が必要な場合とネットワークスイッチ側の設定が特に不要な場合があることにも注意が必要でしょう。

ただしネットワークスイッチ側の設定が特に不要な場合だと言われているmodeにおいてもネットワークスイッチやそのファームウェアバージョンによってはまれに正常に動作しなくなる場合も見受けられるので、本番環境に投入する際には事前検証が必須です。著者の所属する会社のネットワークエンジニア某氏によるとmode4をお勧めしていました。

【Linux Kernelのbondingは実運用に耐えうるものか?】
著者の経験ではLinux Kernelのbondingはどこの会社でも一般的に使われているものなので、適切に設定されていれば安定性についてはそれなりに信頼できそうです。他のホームページでは2つのNICポートでの事例ばかりですが、4つのNICポートでも8つのNICポートでも普通に動作します。

bondingを可用性向上目的で用いる場合は、mode1にてそれぞれのNICポートの配線を別々のネットワークスイッチに接続することをお勧めします。一方bondingを帯域幅増強目的で行う際は、全ての配線を同一ネットワークスイッチに接続するのが一番安定するはずです。ただしこれはネットワークスイッチの挙動に依存する部分でもありますので、複数ネットワークスイッチでも安定的に動作する可能性を否定するものではありません。このあたりはネットワークスイッチベンダーに問い合わせみると良いでしょう。

|

« RAID5のパリティ生成アルゴリズム | Main | dmマルチパスを用いたDELLストレージ設定方法(MD30xx編) »

Comments

The comments to this entry are closed.

TrackBack


Listed below are links to weblogs that reference LinuxでのNIC冗長化(bonding)を少し深く考えてみる:

« RAID5のパリティ生成アルゴリズム | Main | dmマルチパスを用いたDELLストレージ設定方法(MD30xx編) »