Linux 網路介面 bonding 設定 文章首圖

Linux 網路介面 bonding 設定

Linux 網路介面 bonding 設定

在企業級伺服器架構中,網路的穩定性與頻寬往往是關鍵瓶頸。單一的網路連線不僅存在單點故障(Single Point of Failure)的風險,也難以滿足高流量的需求。Linux 內建了強大的 bonding 驅動模組,允許我們將多個實體網路介面卡(NIC)綁定成一個邏輯介面,實現負載平衡(Load Balancing)與故障轉移(Failover)。

這篇文章將帶領中階 Linux 使用者,在 Ubuntu 22.04 或 Debian 12 環境下,透過 netplan 設定最常見且實用的 balance-rr(輪詢模式)bonding。

環境準備與前置作業

在開始設定之前,請確保您的伺服器至少有兩張網路介面卡(例如 eth0eth1),且它們已連接至支援 LACP(Link Aggregation Control Protocol)的交換器。若交換器不支援 LACP,請改用 active-backup 模式,但本文將以效能較佳的 balance-rr 為例。

首先,確認目前的網路介面名稱:

ip link show

假設您的實體介面為 eth0eth1,邏輯 bonding 介面將命名為 bond0

步驟一:備份並修改 Netplan 設定檔

Ubuntu 22.04 與 Debian 12 預設使用 netplan 管理網路。請先備份原本的設定檔,通常位於 /etc/netplan/ 目錄下,副檔名為 .yaml(例如 00-installer-config.yaml50-cloud-init.yaml)。

使用編輯器打開設定檔:

sudo nano /etc/netplan/00-installer-config.yaml

請注意,Netplan 的 YAML 格式對縮排非常敏感,請確保使用空格而非 Tab。以下為範例設定,請根據您的實際 IP 與閘道器調整:

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: no
      dhcp6: no
    eth1:
      dhcp4: no
      dhcp6: no
  bonds:
    bond0:
      interfaces:
        - eth0
        - eth1
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 1.1.1.1
      parameters:
        mode: balance-rr
        miimon: 100
        dsl: 1
        # 若交換器支援 LACP,請取消下方註解並設定正確的值
        # lacp_rate: 1

參數說明:

  • interfaces: 指定參與 bonding 的實體介面。
  • mode: 設定 bonding 模式。balance-rr 為輪詢模式,提供最高頻寬;active-backup 僅使用一個介面,另一個作為備援。
  • miimon: 網路介面監控間隔(毫秒),用於偵測連線狀態。
  • dsl: 數據流標籤數量,建議設為 1 以確保封包順序。
  • lacp_rate: 若使用 802.3ad 模式且交換器支援,需設定為 1 (fast) 或 0 (slow)。

步驟二:套用設定並驗證

修改完成後,執行以下指令套用設定:

sudo netplan apply

若出現錯誤,請使用 sudo netplan try 並在 120 秒內確認連線正常,否則將自動回滾。

接著,檢查 bonding 狀態是否正常運作:

cat /proc/net/bonding/bond0

您應該能在輸出中看到 bond0 的狀態為 Up,且 eth0eth1 均顯示為 Slave Interface,狀態為 Up。若模式正確,您還會看到 Active Slave 欄位顯示目前活躍的介面。

步驟三:驗證頻寬與故障轉移

為了確認 bonding 是否真的發揮作用,您可以使用 iperf3 進行頻寬測試,或模擬介面故障來測試 failover。

模擬 eth0 故障:

sudo ip link set eth0 down

觀察網路是否自動切換至 eth1 而不中斷連線(對於 TCP 連線可能會有短暫延遲,但 UDP 流量應能繼續傳輸)。恢復 eth0 後,bonding 會自動將流量重新分配。

常見問題

1. 設定後無法連線或 Netplan 報錯? 這通常是由於 YAML 格式錯誤或 IP 衝突所致。請務必使用 yaml 語法檢查工具驗證設定檔。此外,確保實體交換器端口已啟用 LACP 或將端口設定為 trunk 模式,並允許相應的 VLAN 通過。若交換器不支援 LACP,請將 mode 改為 active-backup,此時無需交換器特殊設定。

2. bonding 模式選擇錯誤導致頻寬未提升? balance-rr 模式雖然頻寬最高,但可能導致封包亂序,不適合所有應用場景。若發現連線不穩,建議改用 802.3ad(需交換器支援 LACP)或 active-backup(僅用於高可用,不增加頻寬)。確認交換器端配置與 Linux 端 mode 一致是關鍵。

小結

透過 Linux 的 bonding 功能,您可以低成本地提升網路的可靠性與吞吐量。本文介紹了基於 netplanbalance-rr 設定方式,適合追求極致頻寬的環境。對於一般高可用需求,active-backup 也是極佳的選擇。記得在生產環境部署前,務必在測試環境充分驗證交換器兼容性與故障轉移行為。