萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦基礎知識 >  >> 電腦入門

Linux 系統下 NIC Bonding(網卡聚合)配置實戰:雙 100Mbps 合併頻寬

當單張 100Mbps 網卡頻寬不足,且暫無千兆/萬兆設備預算時,利用 Linux 核心 bonding 模組將兩張實體網卡聚合為一張邏輯介面,可提升吞吐量與提供冗餘。本文以 Red Hat/CentOS 系列為例,示範 mode=0 (balance-rr) 與 mode=1 (active-backup) 兩種最常用模式的完整配置流程。

環境假設

  • OS:RHEL 7/8、CentOS 7/8、Rocky/AlmaLinux
  • 實體介面:eth0、eth1(皆為 100Mbps)
  • 目標邏輯介面:bond0,靜態 IP 192.168.1.2/24
  • 上游交換器:需支援 LACP(mode=4)或靜態聚合;若不支援,僅能用 mode=0/1/5/6。

步驟 1:建立 bond0 介面設定檔

vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
TYPE=Bond
BONDING_MASTER=yes
BOOTPROTO=none
IPADDR=192.168.1.2
PREFIX=24
GATEWAY=192.168.1.1
DNS1=192.168.1.1
ONBOOT=yes
BONDING_OPTS="mode=1 miimon=100"
# mode=0 (balance-rr) 輪詢負載均衡,需交換器支援靜態聚合
# mode=1 (active-backup) 主備容錯,無需交換器支援,最穩健
# miimon=100 每 100ms 檢測鏈路狀態

步驟 2:修改實體介面設定檔,加入 SLAVE 參數

vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
# 可選:HWADDR=xx:xx:xx:xx:xx:xx  # 指定 MAC 避免介面名漂移
vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes

步驟 3:確認 bonding 模組載入參數

vi /etc/modprobe.d/bonding.conf
alias bond0 bonding
options bonding mode=1 miimon=100
# 若需多組 bond,請依序 alias bond1 bonding 等

步驟 4:套用設定並驗證

systemctl restart network
# 或
nmcli con reload && nmcli con up bond0 && nmcli con up eth0 && nmcli con up eth1

驗證指令:

cat /proc/net/bonding/bond0
ip addr show bond0
ping -c 3 192.168.1.1

輸出應顯示 Bonding Mode: fault-tolerance (active-backup) 或 load balancing (balance-rr),且 Active Slave 顯示正常介面。

模式選擇指南

Mode名稱需交換器支援頻寬疊加容錯適用場景
0balance-rr靜態聚合是(理論 2x)有單一交換器、追求最大吞吐、封包亂序可接受
1active-backup不需要否最強雙上游交換器、高可用優先、設備不支援 LACP
4802.3ad (LACP)動態 LACP是有標準化、支援 LACP 的企業級交換器、需頻寬疊加
5balance-tlb不需要僅送出有無法控制上游交換器、需送出負載分散
6balance-alb不需要收發皆有有ARP 協商環境、無交換器支援時的折衷方案

常見坑點與排查

  • 介面命名漂移:使用 HWADDR 或 udev 規則固定 ethX 對應實體 MAC。
  • MTU 不一致:bond0 及所有 slave 需統一 MTU(如 9000 Jumbo Frame),否則封包分片影響效能。
  • ARP 更新延遲:mode=0/4 切換時需確保上游交換器快速學習 MAC,必要時啟用 arp_validate、arp_interval。
  • NetworkManager 衝突:RHEL 8+ 建議改用 nmcli 或 teamd(Team 驅動為 bonding 繼任者,語法相似但更現代)。

進階:改用 Team 驅動

# 安裝
dnf install teamd NetworkManager-team
# 建立 team0 (runner=activebackup)
nmcli con add type team con-name team0 ifname team0 config '{"runner":{"name":"activebackup"}}'
nmcli con add type team-slave con-name team0-port1 ifname eth0 master team0
nmcli con add type team-slave con-name team0-port2 ifname eth1 master team0
nmcli con mod team0 ipv4.addresses 192.168.1.2/24 ipv4.method manual
nmcli con up team0
copyright © 萬盛學電腦網 all rights reserved