Linux網(wǎng)卡Bond設(shè)置方式
一、網(wǎng)卡Bond介紹
1.概念
網(wǎng)卡 Bond 是一種網(wǎng)絡(luò)技術(shù),也被稱(chēng)為鏈路聚合、端口綁定或接口綁定,能將多個(gè)物理網(wǎng)絡(luò)接口組合成一個(gè)邏輯接口。
2.工作原理及作用
| bond模式 | 增加網(wǎng)絡(luò)帶寬 | 提高網(wǎng)絡(luò)可靠性 | 實(shí)現(xiàn)負(fù)載均衡 | 適用場(chǎng)景 | 備注 |
|---|---|---|---|---|---|
| Mode 0 : Balance-RR(輪詢(xún)模式) | 原理:依次將數(shù)據(jù)包按順序分配到各個(gè)成員接口發(fā)送。例如有三個(gè)成員接口,第一個(gè)數(shù)據(jù)包從接口 1 發(fā)送,第二個(gè)從接口 2 發(fā)送,第三個(gè)從接口 3 發(fā)送,之后循環(huán)。
| 原理:按順序依次在成員接口上發(fā)送數(shù)據(jù)包,均勻分配流量。
| 適用于需要高帶寬且對(duì)數(shù)據(jù)包順序要求不高的環(huán)境,例如數(shù)據(jù)中心內(nèi)部服務(wù)器之間的高速數(shù)據(jù)傳輸。 | 需要交換機(jī)設(shè)置 | |
| Mode 1 : Active-Backup(主備模式) | 原理:設(shè)置一個(gè)主接口和多個(gè)備用接口,正常情況下只有主接口工作,當(dāng)主接口出現(xiàn)故障時(shí),自動(dòng)切換到備用接口中的一個(gè)繼續(xù)工作。
| 適用于對(duì)網(wǎng)絡(luò)可靠性要求較高,但對(duì)帶寬需求相對(duì)穩(wěn)定的場(chǎng)景,像關(guān)鍵業(yè)務(wù)服務(wù)器的網(wǎng)絡(luò)連接。 | |||
| Mode 2 : Balance-XOR(基于異或的負(fù)載均衡) | 原理:根據(jù)數(shù)據(jù)包的源 MAC 地址、目標(biāo) MAC 地址或 IP 地址等信息通過(guò)異或算法計(jì)算,根據(jù)結(jié)果選擇成員接口發(fā)送。
| 原理:依據(jù)數(shù)據(jù)包的相關(guān)地址信息計(jì)算結(jié)果選擇接口發(fā)送,一定程度上分散流量。
| 適用于對(duì)數(shù)據(jù)包順序有要求且需要一定負(fù)載均衡的場(chǎng)景,如視頻流傳輸。 | 需要交換機(jī)設(shè)置 | |
| Mode 3 : Broadcast(廣播模式) | 這種模式使用較少,主要用于一些特殊的測(cè)試環(huán)境或?qū)W(wǎng)絡(luò)可靠性要求極高但對(duì)帶寬利用效率不敏感的場(chǎng)景。 | 需要交換機(jī)設(shè)置 | |||
| Mode 4 : 802.3ad(動(dòng)態(tài)鏈路聚合) | 原理:需交換機(jī)支持 802.3ad 協(xié)議,通過(guò)鏈路聚合控制協(xié)議(LACP)與交換機(jī)協(xié)商,動(dòng)態(tài)將流量分配到成員接口。
| 原理:通過(guò) LACP 協(xié)議與交換機(jī)協(xié)商,當(dāng)某個(gè)成員接口出現(xiàn)故障時(shí),協(xié)議能自動(dòng)檢測(cè)到并將流量重新分配到其他正常的接口上。
| 原理:通過(guò) LACP 協(xié)議與交換機(jī)動(dòng)態(tài)協(xié)商,根據(jù)接口狀態(tài)和帶寬使用情況分配流量。
| 適用于需要高帶寬和高可靠性的企業(yè)網(wǎng)絡(luò)環(huán)境,如數(shù)據(jù)中心的核心交換機(jī)與服務(wù)器之間的連接。 | 需要交換機(jī)設(shè)置 |
| Mode 5 : Balance-TLB(傳輸負(fù)載均衡) | 原理:無(wú)需交換機(jī)特殊支持,根據(jù)成員接口當(dāng)前負(fù)載動(dòng)態(tài)分配發(fā)送流量,接收流量由單個(gè)接口完成。
| 原理:根據(jù)成員接口當(dāng)前負(fù)載動(dòng)態(tài)分配發(fā)送流量。
| 適用于發(fā)送流量較大,但接收流量相對(duì)穩(wěn)定的場(chǎng)景,如文件服務(wù)器。 | ||
| Mode 6 : Balance-ALB(自適應(yīng)負(fù)載均衡) | 原理:是 balance - tlb 的增強(qiáng)版,不僅能動(dòng)態(tài)分配發(fā)送流量,還能通過(guò) ARP 協(xié)商動(dòng)態(tài)分配接收流量。
| 原理:在流量分配過(guò)程中,當(dāng)某個(gè)成員接口故障時(shí),能自動(dòng)將流量轉(zhuǎn)移到其他正常接口。
| 原理:在發(fā)送和接收方向都能根據(jù)接口情況和 ARP 協(xié)商動(dòng)態(tài)分配流量。
| 適用于對(duì)網(wǎng)絡(luò)帶寬和性能要求極高的場(chǎng)景,如云計(jì)算數(shù)據(jù)中心。 |
常用的有三種:
mode=0:平衡負(fù)載模式,有自動(dòng)備援,但需要”Switch”支援及設(shè)定。
mode=1:自動(dòng)備援模式,其中一條線若斷線,其他線路將會(huì)自動(dòng)備援。
mode=6:平衡負(fù)載模式,有自動(dòng)備援。
二、網(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)卡的配置文件。例如,對(duì)于eth0和eth1,打開(kāi)對(duì)應(yīng)的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)測(cè)間隔,其值為 100 表示每 100 毫秒對(duì)網(wǎng)絡(luò)鏈路的狀態(tài)進(jìn)行一次監(jiān)測(cè);mode指定 Bond 模式,mode=0 表示采用輪詢(xún)模式;fail_over_mac用于設(shè)置故障切換時(shí)的 MAC 地址選項(xiàng),fail_over_mac=1 表示在主備切換時(shí),綁定設(shè)備的 MAC 地址會(huì)切換為當(dāng)前活動(dòng)接口的 MAC 地址。
4.重啟服務(wù)器:使用reboot重啟服務(wù)器使配置生效。
方法二:基于 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(輪詢(xún)模式),你也可以根據(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的詳細(xì)配置信息,使用nmcli device status命令查看設(shè)備狀態(tài),確保bond1及相關(guān)物理網(wǎng)卡已正確配置和啟用。配置完成后,還可以使用ping命令等測(cè)試網(wǎng)絡(luò)連接是否正常。
使用cat /proc/net/bonding/bond1查看bond1的狀態(tài),確認(rèn)是否配置成功。

方法三:使用腳本
#!/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 自動(dòng)化配置腳本 ==="
# 讀取可用物理網(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 塊,無(wú)法創(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 "請(qǐng)輸入 bond 名稱(chēng)(默認(rèn) bond0): " BOND_NAME
BOND_NAME="${BOND_NAME:-bond0}"
echo
echo "請(qǐng)選擇 bond mode:"
echo " 1) balance-rr (輪詢(xún),需交換機(jī)支持/容忍亂序)"
echo " 2) active-backup(主備,最穩(wěn),無(wú)需交換機(jī)特殊配置)"
echo " 3) balance-xor (基于 hash 分流,部分場(chǎng)景需配合交換機(jī))"
echo " 4) broadcast"
echo " 5) 802.3ad (LACP,推薦生產(chǎn);交換機(jī)需做鏈路聚合)"
echo " 6) balance-tlb"
echo " 7) balance-alb"
read -rp "輸入序號(hào)(默認(rèn) 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 "無(wú)效選擇"; exit 1 ;;
esac
echo
read -rp "請(qǐng)輸入 IPv4 地址(如 192.168.100.1): " IPADDR
read -rp "請(qǐng)輸入 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 "請(qǐng)輸入網(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 "請(qǐng)輸入 DNS(可多個(gè),用逗號(hào)分隔,如 223.5.5.5,8.8.8.8): " DNS_SERVERS
fi
echo
echo "請(qǐng)選擇兩塊(或多塊)網(wǎng)卡作為 slave(輸入序號(hào),用空格分隔,例如:0 1):"
read -rp "slave 序號(hào): " -a IDX
if (( ${#IDX[@]} < 2 )); then
echo "至少選擇 2 塊網(wǎng)卡。"
exit 1
fi
SLAVES=()
for id in "${IDX[@]}"; do
[[ "$id" =~ ^[0-9]+$ ]] || { echo "序號(hào)非法: $id"; exit 1; }
(( id < ${#IFACES[@]} )) || { echo "越界序號(hào): $id"; exit 1; }
SLAVES+=("${IFACES[$id]}")
done
# 檢查重復(fù)
uniq_count="$(printf "%s\n" "${SLAVES[@]}" | sort -u | wc -l)"
if (( uniq_count != ${#SLAVES[@]} )); then
echo "檢測(cè)到重復(fù)網(wǎng)卡選擇,請(qǐng)重新運(yùn)行腳本。"
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 "確認(rèn)執(zhí)行? (y/N): " OK
OK="${OK:-N}"
if [[ ! "$OK" =~ ^[Yy]$ ]]; then
echo "已取消。"
exit 0
fi
echo
echo ">>> 開(kāi)始配置..."
# 如果已有同名連接,先提示并刪除(更可控)
if nmcli -t -f NAME connection show | grep -qx "$BOND_NAME"; then
echo "檢測(cè)到已存在連接 $BOND_NAME,將刪除后重建。"
nmcli connection delete "$BOND_NAME" || true
fi
# 刪除舊的 slave 連接(只刪我們腳本命名過(guò)的)
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 支持用空格或逗號(hào),統(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 ">>> 完成。當(dāng)前設(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),交換機(jī)側(cè)必須配置對(duì)應(yīng)端口的鏈路聚合(同一聚合組)。"總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux中SSH遠(yuǎn)程訪問(wèn)和控制的實(shí)現(xiàn)
SSH是一種安全通道協(xié)議,主要用來(lái)實(shí)現(xiàn)字符界面的遠(yuǎn)程登錄、遠(yuǎn)程復(fù)制等功能,本文主要介紹了Linux中SSH遠(yuǎn)程訪問(wèn)和控制的實(shí)現(xiàn),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
ubuntu執(zhí)行sudo apt-get update要很久的解決方案
Ubuntu更新緩慢或報(bào)錯(cuò)因默認(rèn)使用外國(guó)鏡像,可通過(guò)更換國(guó)內(nèi)源(如阿里云、華為云、清華等)或選擇最佳服務(wù)器優(yōu)化,操作包括修改下載源、授權(quán)、重新載入,提升下載速度和穩(wěn)定性2025-09-09
Linux低電量自動(dòng)關(guān)機(jī)的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Linux低電量自動(dòng)關(guān)機(jī)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用linux具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
Centos7.5配置java環(huán)境安裝tomcat的講解
今天小編就為大家分享一篇關(guān)于Centos7.5配置java環(huán)境安裝tomcat的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
Linux系統(tǒng)下安裝rz/sz命令及使用說(shuō)明(詳解)
下面小編就為大家?guī)?lái)一篇Linux系統(tǒng)下安裝rz/sz命令及使用說(shuō)明(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,祝大家游戲愉快哦2016-12-12
Linux內(nèi)存泄露的原因排查和解決方案(內(nèi)存管理方法)
文章主要介紹了運(yùn)維團(tuán)隊(duì)在Linux處理LB服務(wù)內(nèi)存暴漲、內(nèi)存報(bào)警問(wèn)題的過(guò)程,從發(fā)現(xiàn)問(wèn)題、排查原因到制定解決方案,并從中學(xué)習(xí)了Linux內(nèi)存管理的相關(guān)知識(shí)2025-02-02
Linux服務(wù)器快速搭建MinIO對(duì)象存儲(chǔ)全過(guò)程
在Linux服務(wù)器上搭建MinIO存儲(chǔ)服務(wù)器的步驟,MinIO支持從二進(jìn)制文件或包管理器下載,用戶需要配置環(huán)境變量、創(chuàng)建存儲(chǔ)目錄并設(shè)置服務(wù)權(quán)限,然后啟動(dòng)服務(wù)并訪問(wèn)Web控制臺(tái)進(jìn)行驗(yàn)證,文章還提到可配置防火墻、Nginx反向代理及多節(jié)點(diǎn)部署2025-09-09
如何通過(guò)其他主機(jī)查看Apahce服務(wù)器的運(yùn)行狀態(tài)
這篇文章主要介紹了如何通過(guò)其他主機(jī)查看Apahce服務(wù)器的運(yùn)行狀態(tài),需要的朋友可以參考下2016-04-04

