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の機能に加え、受信も負荷分散。 |
【負荷分散する際気を付けること】
「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を帯域幅増強目的で行う際は、全ての配線を同一ネットワークスイッチに接続するのが一番安定するはずです。ただしこれはネットワークスイッチの挙動に依存する部分でもありますので、複数ネットワークスイッチでも安定的に動作する可能性を否定するものではありません。このあたりはネットワークスイッチベンダーに問い合わせみると良いでしょう。
The comments to this entry are closed.
Comments