Linuxでイーサネットチャネルボンディングを設定する方法
ネットワークインターフェースカード(NIC)が2枚以上ある場合、速度を向上させたりネットワーク接続をより信頼性のあるものにしたりするために、それらを一緒に使用できるかどうか疑問に思っているなら、あなたは正しい場所にいます。
このガイドでは、イーサネットチャネルバンディング(別名NICチーミングまたはインターフェースバンディング)について説明します。設定方法、動作原理、トラフィックをバランスさせたり、ネットワークのダウンタイムを防いだりする方法について説明します。
イーサネットチャネルボンディングとは何ですか?
簡単に言うと、イーサネットチャネルボンディングは、複数の物理NICを1つの仮想NIC(bond0)に結合できる機能であり、これはネットワークトラフィックを処理し、背後にある物理インターフェイス(eth1やeth2など)と通信を行う仮想インターフェイスです。
これから得られることは次の通りです:
- 冗長性: 1つのNICがダウン(抜かれたり故障したり)しても、サーバーはもう1つを使って稼働し続けます。
- ロードバランシング: トラフィックは両方のNIC間で分割されるため、場合によってはパフォーマンスが向上することがあります。
- シングルIP: たとえNICが2つあっても、ボンディングされたインターフェースには1つのIPアドレスだけで十分です。
このセットアップは、稼働時間とパフォーマンスが重要なサーバー、プロダクションシステム、またはネットワーク機器でよく使用されます。
結合モードの概要
Linuxには約6つのボンディングモードがありますが、今のところ、最も一般的で実用的な2つのモードだけを見ていきます:
モード0 - 負荷分散(ラウンドロビン)
- すべての利用可能なインターフェース(
eth1、eth2など)を介して、パケットを順番に送信します。 - 冗長性とパフォーマンスの向上の両方を提供します。
- バランスの取れた外向きトラフィックに最適です。
- 注意: あなたのスイッチがそれをサポートしている必要があります(例えば、LACPや静的リンク集約のように)。
モード1 - アクティブバックアップ
- 同時にアクティブになるNICは1つだけです。
- アクティブなNICが故障した場合、もう一方が引き継ぎます。
- 高可用性(冗長性)を提供しますが、速度は提供しません。
- 特別なスイッチ設定は必要ありません。
前提条件
始める前に、次のことを確認してください。
- あなたはRed Hatベースのシステム(例えば、RHEL、Alma Linux、Rocky Linux)を使用しています。
- あなたはルートアクセスまたはsudo権限を持っています。
- あなたには2つのNICがあります:
eth1とeth2。 - あなたのシステムはnetwork-scriptsまたはNetworkManagerを使用しています。
(Ubuntu/Debianを使用している場合 - ボンディングはNetplanを通じて行われます。
ステップ1: ボンディングカーネルモジュールをロードする
Linuxが2つ以上のネットワークカード(NIC)を組み合わせる前に、ボンディングカーネルモジュールと呼ばれる特別なソフトウェアをロードする必要があります。
デフォルトでは、ほとんどのLinuxシステムにはこのボンディングモジュールが利用可能ですが、自動的にはロードされず、ロードするように指示しない限りは有効になりません。
sudo modprobe bonding
システムが起動するたびに結合機能を利用できるようにするためには、自動ロードのために登録する必要があります。
echo "bonding" | sudo tee /etc/modules-load.d/bonding.conf
モジュールが正常にロードされたかを確認するには、次のコマンドを使用してください:
lsmod | grep bonding
ステップ2: eth1とeth2をボンディングのために設定する
このステップでは、物理ネットワークインタフェース(eth1 と eth2)をバンディンググループに参加させる準備をしています。bond0 をチームリーダー、これらの2つのインタフェースをそのチームメンバー(スレーブ)と考えてください。これらはもはや独立して動作せず、bond0 を介してのみ通信します。
私たちは、各インターフェースの設定ファイルを作成または編集することによってこれを行います。
- /etc/sysconfig/network-scripts/ifcfg-eth1
- /etc/sysconfig/network-scripts/ifcfg-eth2
次に、以下の構成でifcfg-eth1ファイルを開いて編集してください。
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ifcfg-eth2についても同じことをしてください。
DEVICE=eth2
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
この設定がなければ、カーネルはeth1とeth2が一緒に動作すべきことを知ることができません。また、eth1やeth2にIPアドレスを割り当てないでください。bond0のみがIPを持つべきです。そうしないと、OSはトラフィックをルーティングしようとして混乱してしまいます。
ステップ3: ボンドインターフェース(bond0)を作成する
さて、これまであなたはLinuxにeth1とeth2がスレーブとして動作するように指示しましたが、スレーブにはマスターが必要ですよね?そのマスターがここで作成しているもので、bond0という名前のボンディングインターフェースです。
負荷分散(mode 0)のために– 設定ファイルifcfg-bond0を作成します。
vi /etc/sysconfig/network-scripts/ifcfg-bond0
次の設定を追加してください。
DEVICE=bond0
TYPE=Bond
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
BONDING_OPTS="mode=0 miimon=100"
Active-Backup(mode 1)の場合 - ボンディングオプションを変更するだけです:
BONDING_OPTS="mode=1 miimon=100"
あなたのシステムによって:
sudo systemctl restart NetworkManager
あるいは、古いネットワークサービスを使用している場合は:
sudo systemctl restart network
ステップ4:ボンディングステータスを確認する
ボンディングの設定を行い、ネットワークサービスを再起動したら、ボンドが正しく動作しているか確認したいでしょう。
watch -n 1 cat /proc/net/bonding/bond0
モード0(ラウンドロビン)用のサンプル出力:
Bonding Mode: load balancing (round-robin)
Slave Interface: eth1
Slave Interface: eth2
MII Status: up
モード1(アクティブ-バックアップ)のサンプル出力:
Bonding Mode: fault-tolerance (active-backup)
Currently Active Slave: eth1
Slave Interface: eth2
これにより、どのNICがアクティブであり、両方のリンクが正常に接続されているかがわかります。
オプション: テストフェイルオーバー(アクティブ-バックアップモード)
NICが1つダウンしたときに何が起こるかテストしたいですか?
sudo ifconfig eth1 down
eth2 should automatically become active
watch -n 1 cat /proc/net/bonding/bond0
取り戻して:
sudo ifconfig eth1 up
Linuxがダウンタイムなしでインターフェースを自動的に切り替えるのを見られるでしょう - それがボンディングの魅力です!
トラブルシューティングのヒント
bond0が表示されない場合、設定ファイルを再確認し、すべてのインターフェースが起動していることを確認してください。- バイディングモジュールがロードされていることを確認してください (
lsmod | grep bonding)。 - 「モード0」では、一部のスイッチはそれぞれの設定でリンクアグリゲーションの設定が必要です。
ifconfigの代わりに新しいシステムではip addrを使用してください。
イーサネットチャネルバンディングを解除する方法
時々、ボンディングを解除してNICを個別に使用したい場合があります。これはテストやトラブルシューティング、あるいはサーバーの再構成のためです。
sudo systemctl stop NetworkManager
sudo ip link set bond0 down
sudo modprobe -r bonding
今、ボンディングを設定する構成ファイルを削除してください:
sudo rm /etc/sysconfig/network-scripts/ifcfg-bond0
また、eth1 と eth2 の設定ファイルを編集して、MASTER と SLAVE の行を削除し、それらを独立したインターフェースとして復元します。
スタンドアロンのifcfg-eth1ファイルは次のようになります:
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp
または静的IPアドレスを使用する場合:
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.101
NETMASK=255.255.255.0
eth2についても同じことをしてください。
すべてがクリーンになったら、インターフェースを再び起動するためにNetworkManagerを再起動します。
sudo systemctl start NetworkManager
確認できます:
ip addr
今、eth1とeth2が再び動作しているのが見えるはずで、bond0は消えているはずです。
結論
イーサネットチャネルボンディングは、Linuxシステムにおけるネットワークのパフォーマンスと信頼性を向上させるための便利で簡単なツールです。複数のネットワークインターフェース間でトラフィックをバランスさせる必要がある場合や、NICの障害時に冗長性を確保する必要がある場合、ボンディングを利用することでハードウェアを最大限に活用することができます。
このガイドの手順に従うことで、2つのNICを使用して簡単にボンディングを構成し、ニーズに応じてロードバランシングまたはアクティブ-バックアップモードのいずれかを選択できるようになったはずです。
