Linux網(wǎng)卡Bond設(shè)置方式
一、網(wǎng)卡Bond介紹
1.概念
網(wǎng)卡 Bond 是一種網(wǎng)絡技術(shù),也被稱為鏈路聚合、端口綁定或接口綁定,能將多個物理網(wǎng)絡接口組合成一個邏輯接口。
2.工作原理及作用
| bond模式 | 增加網(wǎng)絡帶寬 | 提高網(wǎng)絡可靠性 | 實現(xiàn)負載均衡 | 適用場景 | 備注 |
|---|---|---|---|---|---|
| Mode 0 : Balance-RR(輪詢模式) | 原理:依次將數(shù)據(jù)包按順序分配到各個成員接口發(fā)送。例如有三個成員接口,第一個數(shù)據(jù)包從接口 1 發(fā)送,第二個從接口 2 發(fā)送,第三個從接口 3 發(fā)送,之后循環(huán)。
| 原理:按順序依次在成員接口上發(fā)送數(shù)據(jù)包,均勻分配流量。
| 適用于需要高帶寬且對數(shù)據(jù)包順序要求不高的環(huán)境,例如數(shù)據(jù)中心內(nèi)部服務器之間的高速數(shù)據(jù)傳輸。 | 需要交換機設(shè)置 | |
| Mode 1 : Active-Backup(主備模式) | 原理:設(shè)置一個主接口和多個備用接口,正常情況下只有主接口工作,當主接口出現(xiàn)故障時,自動切換到備用接口中的一個繼續(xù)工作。
| 適用于對網(wǎng)絡可靠性要求較高,但對帶寬需求相對穩(wěn)定的場景,像關(guān)鍵業(yè)務服務器的網(wǎng)絡連接。 | |||
| Mode 2 : Balance-XOR(基于異或的負載均衡) | 原理:根據(jù)數(shù)據(jù)包的源 MAC 地址、目標 MAC 地址或 IP 地址等信息通過異或算法計算,根據(jù)結(jié)果選擇成員接口發(fā)送。
| 原理:依據(jù)數(shù)據(jù)包的相關(guān)地址信息計算結(jié)果選擇接口發(fā)送,一定程度上分散流量。
| 適用于對數(shù)據(jù)包順序有要求且需要一定負載均衡的場景,如視頻流傳輸。 | 需要交換機設(shè)置 | |
| Mode 3 : Broadcast(廣播模式) | 這種模式使用較少,主要用于一些特殊的測試環(huán)境或?qū)W(wǎng)絡可靠性要求極高但對帶寬利用效率不敏感的場景。 | 需要交換機設(shè)置 | |||
| Mode 4 : 802.3ad(動態(tài)鏈路聚合) | 原理:需交換機支持 802.3ad 協(xié)議,通過鏈路聚合控制協(xié)議(LACP)與交換機協(xié)商,動態(tài)將流量分配到成員接口。
| 原理:通過 LACP 協(xié)議與交換機協(xié)商,當某個成員接口出現(xiàn)故障時,協(xié)議能自動檢測到并將流量重新分配到其他正常的接口上。
| 原理:通過 LACP 協(xié)議與交換機動態(tài)協(xié)商,根據(jù)接口狀態(tài)和帶寬使用情況分配流量。
| 適用于需要高帶寬和高可靠性的企業(yè)網(wǎng)絡環(huán)境,如數(shù)據(jù)中心的核心交換機與服務器之間的連接。 | 需要交換機設(shè)置 |
| Mode 5 : Balance-TLB(傳輸負載均衡) | 原理:無需交換機特殊支持,根據(jù)成員接口當前負載動態(tài)分配發(fā)送流量,接收流量由單個接口完成。
| 原理:根據(jù)成員接口當前負載動態(tài)分配發(fā)送流量。
| 適用于發(fā)送流量較大,但接收流量相對穩(wěn)定的場景,如文件服務器。 | ||
| Mode 6 : Balance-ALB(自適應負載均衡) | 原理:是 balance - tlb 的增強版,不僅能動態(tài)分配發(fā)送流量,還能通過 ARP 協(xié)商動態(tài)分配接收流量。
| 原理:在流量分配過程中,當某個成員接口故障時,能自動將流量轉(zhuǎn)移到其他正常接口。
| 原理:在發(fā)送和接收方向都能根據(jù)接口情況和 ARP 協(xié)商動態(tài)分配流量。
| 適用于對網(wǎng)絡帶寬和性能要求極高的場景,如云計算數(shù)據(jù)中心。 |
常用的有三種:
mode=0:平衡負載模式,有自動備援,但需要”Switch”支援及設(shè)定。
mode=1:自動備援模式,其中一條線若斷線,其他線路將會自動備援。
mode=6:平衡負載模式,有自動備援。
二、網(wǎng)卡Bond設(shè)置
方法一:基于配置文件配置(Bond=0)
1.查看可用網(wǎng)卡:使用ifconfig -a或ip addr show命令查看系統(tǒng)中的可用網(wǎng)卡,確定要綁定的物理網(wǎng)卡,如eth0、eth1。
2.創(chuàng)建或編輯物理網(wǎng)卡配置文件:在/etc/sysconfig/network-scripts/目錄下,編輯要綁定的物理網(wǎng)卡的配置文件。例如,對于eth0和eth1,打開對應的ifcfg-eth0和ifcfg-eth1文件。在文件中添加或修改以下內(nèi)容:
DEVICE=eth0 或 eth1 ONBOOT=yes BOOTPROTO=none MASTER=bond0 SLAVE=yes USERCTL=no
3.創(chuàng)建或編輯 Bond 接口配置文件:在同一目錄下創(chuàng)建或編輯ifcfg-bond0文件,內(nèi)容如下:
TYPE=Ethernet DEVICE=bond0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 BONDING_OPTS="miimon=100 mode=0 fail_over_mac=1"
其中BONDING_OPTS中的miimon表示鏈路監(jiān)測間隔,其值為 100 表示每 100 毫秒對網(wǎng)絡鏈路的狀態(tài)進行一次監(jiān)測;mode指定 Bond 模式,mode=0 表示采用輪詢模式;fail_over_mac用于設(shè)置故障切換時的 MAC 地址選項,fail_over_mac=1 表示在主備切換時,綁定設(shè)備的 MAC 地址會切換為當前活動接口的 MAC 地址。
4.重啟服務器:使用reboot重啟服務器使配置生效。
方法二:基于 nmcli 命令配置(Bond=1)(推薦)
1.查看可用網(wǎng)卡
使用nmcli device status命令查看系統(tǒng)中的可用網(wǎng)卡,確定要綁定到bond1的物理網(wǎng)卡,比如ens224和ens256。

2.創(chuàng)建 bond1 接口
執(zhí)行以下命令創(chuàng)建名為bond1的 Bond 接口,并指定模式為balance-rr(輪詢模式),你也可以根據(jù)需求將模式修改為其他模式,如active-backup等。
nmcli connection add type bond ifname bond1 mode balance-rr
備注:
# 創(chuàng)建bond0 nmcli connection add type bond ifname bond0 mode active-backup # 創(chuàng)建bond1 nmcli connection add type bond ifname bond1 mode balance-rr # 創(chuàng)建bond2 nmcli connection add type bond ifname bond2 mode balance-xor # 創(chuàng)建bond3 nmcli connection add type bond ifname bond3 mode broadcast # 創(chuàng)建bond4 nmcli connection add type bond ifname bond4 mode 802.3ad # 創(chuàng)建bond5 nmcli connection add type bond ifname bond5 mode balance-tlb # 創(chuàng)建bond6 nmcli connection add type bond ifname bond6 mode balance-alb
3.配置 bond1 的 IP 等信息
若要設(shè)置靜態(tài) IP 地址,可使用以下命令。假設(shè)要設(shè)置 IP 地址為192.168.10.81,子網(wǎng)掩碼為255.255.255.0,網(wǎng)關(guān)為192.168.10.251
nmcli connection modify bond-bond1 ipv4.addresses 192.168.10.81/24 ipv4.gateway 192.168.10.251 ipv4.method manual

若要使用 DHCP 獲取 IP 地址,則執(zhí)行:
nmcli connection modify bond-bond1 ipv4.method auto
4.添加物理網(wǎng)卡到 bond1
將ens224和ens256添加到bond1,執(zhí)行以下命令:
nmcli connection add type bond-slave ifname ens224 master bond-bond1 nmcli connection add type bond-slave ifname ens256 master bond-bond1
5.啟用 bond1 及相關(guān)連接
nmcli connection reload nmcli connection up bond-bond1 reboot
6.查看 bond1 配置及狀態(tài)
使用nmcli connection show bond-bond1命令查看bond1的詳細配置信息,使用nmcli device status命令查看設(shè)備狀態(tài),確保bond1及相關(guān)物理網(wǎng)卡已正確配置和啟用。配置完成后,還可以使用ping命令等測試網(wǎng)絡連接是否正常。
使用cat /proc/net/bonding/bond1查看bond1的狀態(tài),確認是否配置成功。

方法三:使用腳本
#!/usr/bin/env bash
set -euo pipefail
need_cmd() { command -v "$1" >/dev/null 2>&1 || { echo "缺少命令: $1"; exit 1; }; }
need_cmd nmcli
need_cmd ip
echo "=== Bond 自動化配置腳本 ==="
# 讀取可用物理網(wǎng)卡(排除 lo、bond、vlan、bridge、tun、docker 等)
mapfile -t IFACES < <(
nmcli -t -f DEVICE,TYPE device status |
awk -F: '
$2=="ethernet" || $2=="infiniband" {
dev=$1;
if (dev!="lo" && dev!~/(^bond|^br|^virbr|^docker|^veth|^tun|^tap|^wg|^sit|^gre|^vlan)/) print dev
}'
)
if (( ${#IFACES[@]} < 2 )); then
echo "可用物理網(wǎng)卡少于 2 塊,無法創(chuàng)建 bond。"
nmcli device status
exit 1
fi
echo
echo "發(fā)現(xiàn)可用網(wǎng)卡:"
for i in "${!IFACES[@]}"; do
dev="${IFACES[$i]}"
state="$(nmcli -t -f DEVICE,STATE device status | awk -F: -v d="$dev" '$1==d{print $2}')"
mac="$(nmcli -t -f GENERAL.HWADDR device show "$dev" 2>/dev/null | cut -d: -f2- || true)"
ip4="$(ip -4 -o addr show "$dev" 2>/dev/null | awk '{print $4}' | head -n1 || true)"
printf " [%d] %-12s state=%-12s ip=%-18s mac=%s\n" "$i" "$dev" "$state" "${ip4:-none}" "${mac:-unknown}"
done
echo
read -rp "請輸入 bond 名稱(默認 bond0): " BOND_NAME
BOND_NAME="${BOND_NAME:-bond0}"
echo
echo "請選擇 bond mode:"
echo " 1) balance-rr (輪詢,需交換機支持/容忍亂序)"
echo " 2) active-backup(主備,最穩(wěn),無需交換機特殊配置)"
echo " 3) balance-xor (基于 hash 分流,部分場景需配合交換機)"
echo " 4) broadcast"
echo " 5) 802.3ad (LACP,推薦生產(chǎn);交換機需做鏈路聚合)"
echo " 6) balance-tlb"
echo " 7) balance-alb"
read -rp "輸入序號(默認 2): " MODE_NO
MODE_NO="${MODE_NO:-2}"
case "$MODE_NO" in
1) BOND_MODE="balance-rr" ;;
2) BOND_MODE="active-backup" ;;
3) BOND_MODE="balance-xor" ;;
4) BOND_MODE="broadcast" ;;
5) BOND_MODE="802.3ad" ;;
6) BOND_MODE="balance-tlb" ;;
7) BOND_MODE="balance-alb" ;;
*) echo "無效選擇"; exit 1 ;;
esac
echo
read -rp "請輸入 IPv4 地址(如 192.168.100.1): " IPADDR
read -rp "請輸入 CIDR 前綴(如 24): " PREFIX
ADDR_CIDR="${IPADDR}/${PREFIX}"
read -rp "是否配置網(wǎng)關(guān)? (y/N): " GW_YN
GW_YN="${GW_YN:-N}"
GATEWAY=""
if [[ "$GW_YN" =~ ^[Yy]$ ]]; then
read -rp "請輸入網(wǎng)關(guān)(如 192.168.100.254): " GATEWAY
fi
read -rp "是否配置 DNS? (y/N): " DNS_YN
DNS_YN="${DNS_YN:-N}"
DNS_SERVERS=""
if [[ "$DNS_YN" =~ ^[Yy]$ ]]; then
read -rp "請輸入 DNS(可多個,用逗號分隔,如 223.5.5.5,8.8.8.8): " DNS_SERVERS
fi
echo
echo "請選擇兩塊(或多塊)網(wǎng)卡作為 slave(輸入序號,用空格分隔,例如:0 1):"
read -rp "slave 序號: " -a IDX
if (( ${#IDX[@]} < 2 )); then
echo "至少選擇 2 塊網(wǎng)卡。"
exit 1
fi
SLAVES=()
for id in "${IDX[@]}"; do
[[ "$id" =~ ^[0-9]+$ ]] || { echo "序號非法: $id"; exit 1; }
(( id < ${#IFACES[@]} )) || { echo "越界序號: $id"; exit 1; }
SLAVES+=("${IFACES[$id]}")
done
# 檢查重復
uniq_count="$(printf "%s\n" "${SLAVES[@]}" | sort -u | wc -l)"
if (( uniq_count != ${#SLAVES[@]} )); then
echo "檢測到重復網(wǎng)卡選擇,請重新運行腳本。"
exit 1
fi
echo
echo "=== 你將創(chuàng)建如下配置 ==="
echo "bond: $BOND_NAME"
echo "mode: $BOND_MODE"
echo "addr: $ADDR_CIDR"
echo "gw: ${GATEWAY:-<none>}"
echo "dns: ${DNS_SERVERS:-<none>}"
echo "slaves: ${SLAVES[*]}"
echo
read -rp "確認執(zhí)行? (y/N): " OK
OK="${OK:-N}"
if [[ ! "$OK" =~ ^[Yy]$ ]]; then
echo "已取消。"
exit 0
fi
echo
echo ">>> 開始配置..."
# 如果已有同名連接,先提示并刪除(更可控)
if nmcli -t -f NAME connection show | grep -qx "$BOND_NAME"; then
echo "檢測到已存在連接 $BOND_NAME,將刪除后重建。"
nmcli connection delete "$BOND_NAME" || true
fi
# 刪除舊的 slave 連接(只刪我們腳本命名過的)
for dev in "${SLAVES[@]}"; do
nmcli -t -f NAME connection show | grep -E "^${BOND_NAME}-slave-${dev}$" | while IFS= read -r con; do
nmcli connection delete "$con" || true
done || true
done
# 創(chuàng)建 bond
nmcli connection add con-name "$BOND_NAME" type bond ifname "$BOND_NAME" mode "$BOND_MODE" >/dev/null
# 配置 IPv4
nmcli connection modify "$BOND_NAME" ipv4.method manual ipv4.addresses "$ADDR_CIDR"
if [[ -n "$GATEWAY" ]]; then
nmcli connection modify "$BOND_NAME" ipv4.gateway "$GATEWAY"
else
nmcli connection modify "$BOND_NAME" ipv4.gateway ""
fi
if [[ -n "$DNS_SERVERS" ]]; then
# nmcli 支持用空格或逗號,統(tǒng)一轉(zhuǎn)空格
DNS_SERVERS="${DNS_SERVERS//,/ }"
nmcli connection modify "$BOND_NAME" ipv4.dns "$DNS_SERVERS"
fi
# 建議:bond 承載主 IP,物理口不配 IP
for dev in "${SLAVES[@]}"; do
slave_con="${BOND_NAME}-slave-${dev}"
nmcli connection add type bond-slave con-name "$slave_con" ifname "$dev" master "$BOND_NAME" >/dev/null
done
# 啟用連接(先 bond 再 slave)
nmcli connection up "$BOND_NAME" >/dev/null || true
for dev in "${SLAVES[@]}"; do
nmcli connection up "${BOND_NAME}-slave-${dev}" >/dev/null || true
done
echo
echo ">>> 完成。當前設(shè)備狀態(tài):"
nmcli device status
echo
echo ">>> Bond 鏈路概覽:"
ip -d link show "$BOND_NAME" || true
echo
echo ">>> IPv4 地址:"
ip -4 addr show "$BOND_NAME" || true
echo
echo "提示:如果你選的是 802.3ad (LACP),交換機側(cè)必須配置對應端口的鏈路聚合(同一聚合組)。"總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
ubuntu執(zhí)行sudo apt-get update要很久的解決方案
Ubuntu更新緩慢或報錯因默認使用外國鏡像,可通過更換國內(nèi)源(如阿里云、華為云、清華等)或選擇最佳服務器優(yōu)化,操作包括修改下載源、授權(quán)、重新載入,提升下載速度和穩(wěn)定性2025-09-09
Centos7.5配置java環(huán)境安裝tomcat的講解
今天小編就為大家分享一篇關(guān)于Centos7.5配置java環(huán)境安裝tomcat的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
Linux系統(tǒng)下安裝rz/sz命令及使用說明(詳解)
下面小編就為大家?guī)硪黄狶inux系統(tǒng)下安裝rz/sz命令及使用說明(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,祝大家游戲愉快哦2016-12-12
Linux內(nèi)存泄露的原因排查和解決方案(內(nèi)存管理方法)
文章主要介紹了運維團隊在Linux處理LB服務內(nèi)存暴漲、內(nèi)存報警問題的過程,從發(fā)現(xiàn)問題、排查原因到制定解決方案,并從中學習了Linux內(nèi)存管理的相關(guān)知識2025-02-02

