Proxmox VEにおけるLACP(802.3ad)ネットワークボンディング設定:帯域集約と実践的な冗長化

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

Quick start: Cấu hình bond LACP trong 5 phút

深夜2時、Zabbixのアラートが鳴り響く。データバックアップと重なったバッチ処理により、Proxmox上のPostgreSQLクラスタが1 Gbpsの帯域上限に到達。同時にeth0ポートのフラッピングが発生し、パケットロス率は18%まで急上昇しました。この問題を根本解決する決定打が、2つの物理ネットワークポート(enp3s0とenp4s0)を束ねる単一の802.3ad LACPリンクの構築です。

ProxmoxノードにSSH接続し、次の手順に従って実行します:

  1. サーバーを再起動せずにネットワーク設定を再読み込みできるよう、ifupdown2が導入されていることを確認します:
apt-get update && apt-get install ifupdown2 -y
  1. ネットワーク設定ファイル/etc/network/interfacesを開きます:
nano /etc/network/interfaces
  1. bond0インターフェースを定義し、Bridgeであるvmbr0に関連付けます:
auto lo
iface lo inet loopback

iface enp3s0 inet manual
iface enp4s0 inet manual

auto bond0
iface bond0 inet manual
    bond-slaves enp3s0 enp4s0
    bond-miimon 100
    bond-mode 802.3ad
    bond-xmit-hash-policy layer2+3
    bond-lacp-rate 1

auto vmbr0
iface vmbr0 inet static
    address 192.168.10.50/24
    gateway 192.168.10.1
    bridge-ports bond0
    bridge-stp off
    bridge-fd 0
  1. 構文を確認し、新しい設定を即座に反映します:
ifreload -a
cat /proc/net/bonding/bond0

出力結果にMII Status: upが表示され、両方のスレーブインターフェースが同一のAggregator IDを持っていれば設定成功です。

Linuxにおける802.3ad LACPの技術的本質

LACPはケーブルを挿せば勝手に動く魔法ではありません。ホストから一般的なアンマネージドスイッチにLANケーブルを2本挿してMode 4を有効化した結果、わずか10秒足らずでネットワークループが発生し、ブロードキャストストームでスイッチ全体がダウンした事例もあります。絶対的な鉄則として、物理スイッチは必ずマネージドスイッチを使用し、事前に対象ポートでリンクアグリゲーショングループ(LAG/LACP)を設定しておく必要があります。

押さえておくべき主要パラメータ

  • bond-mode 802.3ad (Mode 4): ホストとスイッチ間でLACPDUパケットを常時やり取りします。片方のケーブルが断線しても、1秒未満で残りのポートへトラフィックが自動フェイルオーバーされ、仮想マシンのTCPセッションも切断されません。
  • bond-miimon 100: リンク状態の監視周期を100msに設定します。リンクダウンを即座に検知するのに十分な感度でありながら、サーバーのCPUリソースを浪費することもありません。
  • bond-xmit-hash-policy layer2+3: パケット送信時の負荷分散アルゴリズムです。デフォルトのlayer2(MACアドレスのみのハッシュ)は、仮想化環境ではゲートウェイ宛ての全パケットが同一宛先MACになるため極めて非効率です。IPアドレスやポート番号も考慮して均等に分散させるため、layer2+3またはlayer3+4への変更を推奨します。
  • bond-lacp-rate 1 (fast): LACPDUの送信頻度を通常の30秒(slow)から1秒ごと(fast)に強制します。これにより障害検知と再ネゴシエーションが格段に高速化されます。

Proxmox Web GUIからの直接設定手順

深夜に設定ファイルを手動編集したくない場合でも、ProxmoxのWeb GUIを使えば迅速に対応できます:

  1. ノード > システム > ネットワークにアクセスします。
  2. 作成 > Linux Bondをクリックします。
  3. 名前にbond0と入力し、Slaves欄にenp3s0 enp4s0を指定します。モードにLACP (802.3ad)、ハッシュポリシーにlayer2+3を選択します。
  4. vmbr0の編集画面を開き、Bridge portsをbond0に変更します。
  5. メニューバーにあるオレンジ色の設定を適用ボタンをクリックします。ifupdown2パッケージにより、稼働中の仮想マシンを停止させることなくバックグラウンドで設定が適用されます。

応用:VLANトランキングと対向スイッチの設定

同一Bondペア上で複数のVLANを運用する

本番環境では、VLAN 10(Web)、VLAN 20(DB)、VLAN 30(Ceph/NFS)のようにトラフィックを分離するのが一般的です。多数のサブインターフェースを作成する代わりに、Bridgeであるvmbr0でVLAN Awareを有効化します:

auto vmbr0
iface vmbr0 inet static
    address 192.168.10.50/24
    gateway 192.168.10.1
    bridge-ports bond0
    bridge-stp off
    bridge-fd 0
    bridge-vlan-aware yes
    bridge-vids 2-4094

各VMのNIC設定で希望するVLANタグ番号を指定するだけで、Proxmoxがフレームに802.1Qタグを自動付与し、bond0経由でスイッチへ送出します。

スイッチ側の設定(CiscoおよびMikroTik)

Proxmoxに接続するスイッチポートは、Dynamic LACP Activeモードに設定する必要があります。Cisco Catalystスイッチの設定例:

interface range GigabitEthernet0/1 - 2
 description Uplink-PVE-Node01
 switchport mode trunk
 channel-group 1 mode active
!

MikroTik RouterOSの場合は、Interfaces > Bondingメニューでインターフェースを作成し、モードに802.3ad、Link Monitoringにmii、Transmit Hash Policyにlayer-2-and-3を選択します。

実践ノウハウとトラブルシューティング

1. Applyを押した後にWeb GUIへ接続できなくなった場合

ブラウザの読み込みが止まらず、ゲートウェイへのpingも完全に途絶える現象です。これはスイッチ側のLACP設定が未完了であるか、802.3ad DynamicではなくStatic LAGに誤設定されている場合に発生します。

IPMI/iDRAC/iLOコンソールからの緊急復旧手順:

# アクセスを復旧するため、bridgeを単一NICに戻す
sed -i 's/bridge-ports bond0/bridge-ports enp3s0/' /etc/network/interfaces
ifreload -a

2. カーネルのボンディングログを確認する

スイッチのリンクランプが点灯していても、LACPのハンドシェイクが成功しているとは限りません。カーネルドライバの情報を直接確認しましょう:

cat /proc/net/bonding/bond0

特に注視すべきは次の2行です:

  • Partner Mac Address: 対向スイッチのMACアドレスが表示されている必要があります。00:00:00:00:00:00となっている場合、ホストがスイッチからLACPDUを受信できていません。ケーブルの接続やポートチャネル設定を再確認してください。
  • Actor Churn State / Partner Churn State: 正常時の状態はnoneです。もしchurnedと表示されている場合、通信速度・全半二重(Speed/Duplex)の不一致やケーブルの接触不良によるフラッピングが発生しています。

3. LACPは単一接続の通信速度を向上させるものではない

1 GbpsのNICを2枚束ねても、単一のscpやwgetによるファイル転送が2 Gbpsになるわけではありません。クライアントAからサーバーBへの単一TCPセッションは同一のハッシュ値を持つため、常に1本の物理回線のみを経由します(オーバーヘッドを除くと実効最大約940 Mbps)。

合計2 Gbpsの帯域幅が真価を発揮するのは、複数のクライアントが同時にアクセスする場合や、iperf3 -P 8のように並列マルチスレッドに対応したベンチマークツールを実行した場合に限られます。

Share: