當在Linux系統上使用Bonding技術時,實際上是將多個物理網絡接口(也稱爲Slave接口)綁定在一起,形成一個虛擬的Bond接口。這個Bond接口可以提高網絡的可靠性和性能,有助於負載均衡和容錯。
配置Linux系統上Bonding的步驟:
步驟 1:加載Bonding模塊
在Linux內核中,Bonding功能是通過一個模塊實現的,因此首先需要確保該模塊已加載。可以使用以下命令加載Bonding模塊:
modprobe bonding
如果要使這個設置永久生效,可以將bonding添加到系統的模塊配置文件中,例如,在/etc/modules中添加一行:
bonding
步驟 2:配置Bond接口
編輯Bond接口的配置文件,通常是/etc/network/interfaces或/etc/sysconfig/network-scripts/ifcfg-bondX(X是Bond接口的編號)。在配置文件中,指定Bond接口的基本信息和所使用的Bonding模式。
DEVICE=bond0
TYPE=Bond
# mode=balance-rr:這是Bonding接口的工作模式,指定了使用的負載均衡模式。
# 在這裏,balance-rr 表示輪詢模式(Round Robin)。
# 在輪詢模式下,傳輸的數據包在可用的Slave接口之間輪流分配,實現負載均衡。這可以增加帶寬,並提高網絡性能。
# miimon=100:這是監測間隔的設置。miimon 指定了Bond接口監測Slave接口是否正常工作的時間間隔,單位是毫秒。在這裏,miimon=100 表示每100毫秒檢查一次Slave接口的狀態。如果在這個間隔內沒有從Slave接口收到任何數據包,Bond接口將認爲該接口出現故障,並將流量從故障的接口轉移到其他正常工作的接口。
# BONDING_OPTS="mode=balance-rr miimon=100"
# mode=4:這指定了Bonding接口的工作模式。在這裏,mode=4 表示使用的是802.3ad(LACP)模式。
# 這是一種聚合模式,使用IEEE 802.3ad標準的鏈路聚合控制協議(LACP)。在這種模式下,多個物理接口被聚合成一個邏輯接口,以提高帶寬和容錯性。
# miimon=100:這是監測間隔的設置,與之前解釋的一樣。miimon=100 表示每100毫秒檢查一次Slave接口的狀態。
# xmit_hash_policy=layer3+4:這個選項指定了傳輸哈希的策略,用於決定如何在Slave接口之間分配傳輸的數據包。
# 在這裏,layer3+4 表示使用Layer 3(IP地址)和Layer 4(端口號)信息進行哈希計算。這樣可以在負載均衡時更精確地分配流量。
# lacp_rate=1:這是LACP協議的速率設置。lacp_rate=1 表示LACP的協商速率爲快速(fast),
# 也就是每秒發送一次LACP協商包。這有助於更快地檢測鏈路狀態的變化。
# 這個配置的目的是在Bond接口上啓用802.3ad(LACP)模式,使用特定的傳輸哈希策略,
# 並配置快速的LACP協商速率以提高鏈路的快速故障檢測和恢復。
BONDING_OPTS="mode=4 miimon=100 xmit_hash_policy=layer3+4 lacp_rate=1"
IPADDR=IP
NETMASK=IP
GATEWAY=IP
BOOTPROTO=none
ONBOOT=yes
DEVICE=bond0 #指定Bond接口的名稱。
TYPE=Bond #指定接口類型爲Bond。
BONDING_MASTER=yes #表示這是一個Bond接口。
BOOTPROTO=none #禁用自動配置IP地址。
ONBOOT=yes #表示接口在系統啓動時自動激活。
步驟 3:配置Slave接口
配置每個物理網絡接口(Slave接口),這些接口將綁定到Bond接口上。編輯每個Slave接口的配置文件,通常是/etc/network/interfaces或/etc/sysconfig/network-scripts/ifcfg-ethX。
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
DEVICE=eth0 #指定物理接口的名稱。
TYPE=Ethernet #指定接口類型爲以太網。
BOOTPROTO=none #禁用自動配置IP地址。
ONBOOT=yes #表示接口在系統啓動時自動激活。
MASTER=bond0 #指定接口綁定到哪個Bond接口上。
SLAVE=yes #表示這是一個Slave接口。
重複以上步驟,爲每個物理網絡接口創建相應的Slave接口。
步驟 4:重啓網絡服務或系統
根據不同的Linux發行版,使用適當的命令來重啓網絡服務,以應用新的配置。例如:
service network restart # 對於Red Hat / CentOS
systemctl restart network # 對於Systemd-based系統
或者,也可以直接重啓系統。
請注意,以上步驟中的配置文件路徑和文件名可能會因Linux發行版的不同而有所變化。確保查閱並根據你的系統進行適當的配置。如果系統使用了NetworkManager,可能需要禁用它或相應地配置。
配置結果
· 用6張物理網卡分別做2個bond對應內網和外網
ifconfig
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 內網IP netmask 255.255.255.192 broadcast xxxxx
inet6 fe80::22e:c7ff:fede:bbec prefixlen 64 scopeid 0x20<link>
ether 00:2e:c7:de:bb:ec txqueuelen 1000 (Ethernet)
RX packets 246355998028 bytes 208303790741491 (189.4 TiB)
RX errors 0 dropped 3816775 overruns 0 frame 0
TX packets 202598700106 bytes 93802287439078 (85.3 TiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
bond1: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 公網IP netmask 255.255.255.192 broadcast xxxxx
inet6 fe80::6e44:2aff:fe11:7e7a prefixlen 64 scopeid 0x20<link>
ether 6c:44:2a:11:7e:7a txqueuelen 1000 (Ethernet)
RX packets 24873307632 bytes 16810009736133 (15.2 TiB)
RX errors 0 dropped 1580508 overruns 0 frame 0
TX packets 28258917875 bytes 23112510171897 (21.0 TiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp2s0f0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 00:2e:c7:de:bb:ec txqueuelen 1000 (Ethernet)
RX packets 124158342391 bytes 104466083013418 (95.0 TiB)
RX errors 0 dropped 2640312 overruns 0 frame 0
TX packets 98452382047 bytes 45841408859483 (41.6 TiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp2s0f1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 00:2e:c7:de:bb:ec txqueuelen 1000 (Ethernet)
RX packets 122197655638 bytes 103837707728342 (94.4 TiB)
RX errors 0 dropped 1176462 overruns 0 frame 0
TX packets 104146318060 bytes 47960878579921 (43.6 TiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp4s0f0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 6c:44:2a:11:7e:7a txqueuelen 1000 (Ethernet)
RX packets 11803693682 bytes 7781711756799 (7.0 TiB)
RX errors 0 dropped 374624 overruns 0 frame 0
TX packets 14381029459 bytes 11931791763557 (10.8 TiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp4s0f1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 6c:44:2a:11:7e:7a txqueuelen 1000 (Ethernet)
RX packets 13069613950 bytes 9028297979334 (8.2 TiB)
RX errors 0 dropped 1205884 overruns 0 frame 0
TX packets 13877888419 bytes 11180718408762 (10.1 TiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp5s0f0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether b4:96:91:25:eb:2c txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp5s0f1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether b4:96:91:25:eb:2e txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0