bond模式詳解
一、什么是bond?
CentOS7系統可以將多個網絡接口綁定在一起,來作為單一的接口去給上層應用使用。
二、為什么使用bond?
bong可以將多個網卡綁定到一起,可以讓兩個或多個接口作為一個接口,同時提高帶寬,並提供網絡鏈路的冗余,當有其中一塊網卡故障的時候,不會中斷服務器的業務。
三、bond模式配置
1、配置linux bond
a)、加載bonding模塊
# 對於CentOS系統默認會加載bonding模塊,我們也可以使用root用戶手動加載模塊**
# 臨時加載模塊,重啟失效。
modprobe --first-time bonding
# 永久加載模塊
modprobe bonding
# 查看模塊信息
modinfo bonding
b)、配置bond
b-1)、創建bond接口,在 /etc/sysconfig/network-scripts/ 目錄中創建名為 ifcfg-bondN 的文
件,使用接口號碼替換 N,比如 0
### 創建bond接口
# vim /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0 //和文件名中的ifcfg-bond0中的bond0是一致的。
NAME=bond0 //設備名字,為了NetworkManage方便管理,和DEVICE保持一致
TYPE=Bond //TYPE要設置成Bond,表示該接口為bond接口
BONDING_MASTER=yes
IPADDR=192.168.1.1
PREFIX=24
ONBOOT=yes
BOOTPROTO=none
BONDING_OPTS="mode=4 miion=100" //bond選項,引號里面的內容,需要配置,這里配置了之后,就不需要配置
b-2)、修改物理接口的配置文件
### vim /etc/sysconfig/network-scripts/ifcfg-em1
DEVICE=em1
ONBOOT=yes
HOTPLUG=no
NM_CONTROLLED=no
PEERDNS=no
MASTER=bond0 //
SLAVE=yes //
BOOTPROTO=none
同樣的修改物理網卡,em2.
b-3)、驗證、查看bond
### 查看bond0的綁定結果
[root@control1 network-scripts]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: em1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: em1
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: b8:ca:3a:6c:49:68
Slave queue ID: 0
Slave Interface: em2
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: b8:ca:3a:6c:49:6a
Slave queue ID: 0
#######到這里,我們的bond可以直接用了,如果想將bond綁定到ovs上面,可以看下面的步驟########
2、將bond綁定到ovs上面(可選)
a)、前置條件
### 安裝openvswitch
yum install -y openvswitch
systemctl enable openvswitch
systemctl start openvswitch
b)、配置網卡
b-1)、修改bond網卡
###
# vim /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
HOTPLUG=no
NM_CONTROLLED=no
PEERDNS=no
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-ex
MACADDR="b8:ca:3a:6c:46:b0"
BONDING_OPTS="mode=802.3ad miimon=100"
MTU=9000
b-2)、創建br-ex,並定義br-ex為ovs虛擬網橋。
###
# vim /etc/sysconfig/network-scripts/ifcfg-br-ex
DEVICE=br-ex
ONBOOT=yes
HOTPLUG=no
NM_CONTROLLED=no
DEVICETYPE=ovs
TYPE=OVSBridge
MTU=9000
OVS_EXTRA="set bridge br-ex fail_mode=standalone"
四、bond模式
1、模式0
模式0(mode=0,round-robin):此模式使用輪詢策略,即順序的在每一個被bond的網卡上發送數據包,這種模式提供負載均衡和容錯能力。Bond0可以保證bond虛擬網卡和被bond的兩張或多張物理網卡擁有相同的MAC地址,其中bond虛擬網卡的MAC地址是其中一張物理網卡的MAC地址,而bond虛擬網卡的MAC地址是根據bond自己實現的一個算法來選擇的。
在bond0模式下,如果一個連接或者會話的數據包從不同的網口發出,途中再經過不同的鏈路,則在客戶端很有可能會出現數據包無序到達的現象,而無序到達的數據包一般需要重新發送,這樣網絡的吞吐量就會下降。同時,如果做bond0的兩張或多張網卡接到了同一交換機上,還需對其配置聚合模式。
2、模式1
模式1(mode=1,active-backup):此模式使用主被策略(熱備)。在所有做bond1的物理網卡中,同一時刻只有一張網卡被激活,當且僅當活動網卡失效時才會激活其他的網卡。這種模式下做bond的兩張或多張網卡的MAC地址和Bond虛擬網卡的MAC地址相同,而Bond的MAC地址是Bond創建啟動后活動網卡(Active Slave)的MAC地址。這種模式要求主被網卡能快速的切換,即當主網卡出現故障后能迅速地切換至備用網卡。切換過程中,上層的應用幾乎不受影響,因為Bond的驅動程序會臨時接管上層應用的數據包,存放至數據緩沖區,等待備用網卡啟動后再發送出去。但是如果切換時間過長,則會引起緩沖區的溢出,導致丟包。
3、模式2
模式2(mode=2,balance-xor):xor為異或運算(二進制位相異為1,相同為0)。此模式的默認選擇策略是:
選擇網卡的序號=(源MAC地址 XOR 目標MAC地址) % Slave網卡(從網卡)的數量。
其他的傳輸策略可以通過xmit_hash_policy配置項指定。
4、模式3
模式3(mode=3,broadcast):使用廣播策略,數據包會被廣播至所有Slave網卡進行傳送。
5、模式4
模式4(mode=4,802.3ad):使用動態鏈接聚合策略,啟動時會創建一個聚合組,所有Slave網卡共享同樣的速率和雙工設定。
必要條件:
1.支持使用ethtool工具獲取每個slave網卡的速率和雙工設定;
2.需要交換機支持IEEE 802.3ad 動態鏈路聚合(Dynamic link aggregation)模式
6、模式5
模式5(mode=5,balance-tlbtransmitload balancing):基於每個slave網卡的速率選擇傳輸網卡。
必要條件:支持使用ethtool工具獲取每個slave網卡的速率。
7、模式6
模式6(mode=6,balance-alb,Adaptive load balancing):該模式包含了bond5模式,同時還支持對IPV4流量接收時的負載均衡策略(receive load balance, rlb),而且不需要任何交換機的支持。
必要條件:
- ethtool支持獲取每個slave的速率;
- 底層驅動支持設置某個網卡設備的硬件地址。
五、如何選擇bond 模式
配置bond 模式主要是為了和交換機做協商。一般交換機支持LACP鏈路聚合,交換機的LACP又分為靜態和動態。下面是交換機的兩種聚合方式介紹:
####################################
1,靜態:
mode on,手動強制模式:
不發送也不接收LACP協商報文,交換機物理端口被強制捆綁到etherchannel,數據包根據聚合口負載均衡模式在多個物理口上傳輸。一般默認的為基於包的負載均衡,即在多個網口之間輪詢發送數據包。使用這種聚合模式時,對端也必須是mode on,強制形成etherchannel。
########################################
2,動態:
active,主動協商模式:
交換機聚合口主動發出LACPDU報文,與對端符合802.3ad規范的動態聚合口主動協商。
一般推薦使用主動模式。
passive,被動協商模式:
交換機聚合口只接收LACPDU報文,被動與對端符合802.3ad規范的動態聚合口進行協商。
問題:那么服務器的bond 和交換機的鏈路聚合是如何匹配的?