在生產(chǎn)環(huán)境中為了保證網(wǎng)絡(luò)的更高可用性,我們一般都會(huì)將網(wǎng)絡(luò)做bond 。也稱為雙網(wǎng)卡綁定。
先看看我們bond 的模式:
bond0: 平衡輪循環(huán)策略,有自動(dòng)備援,不過需要交換機(jī)支持 。
方式: 在雙網(wǎng)卡上輪詢吞吐數(shù)據(jù)流量。 第一個(gè)數(shù)據(jù)走eth1 第二個(gè)走eth2 第三個(gè)eth1 這個(gè)反復(fù)輪詢
優(yōu)點(diǎn):
提供負(fù)載均衡和容錯(cuò)能力。
缺點(diǎn):
同一個(gè)鏈接或者會(huì)話的數(shù)據(jù)包從不同的接口發(fā)出的話,中間會(huì)經(jīng)過不同的鏈路,數(shù)據(jù)包無法到達(dá)目的地, 可能會(huì)出現(xiàn)網(wǎng)絡(luò)的吞吐量下降。
bond1 : 主-備份策略
方式:只有一個(gè)設(shè)備處于活動(dòng)狀態(tài),當(dāng)一個(gè)宕掉另一個(gè)馬上由備份轉(zhuǎn)換為主設(shè)備,
優(yōu)點(diǎn):
提供了容錯(cuò)能力,由此可見此算法的優(yōu)點(diǎn)是可以提高網(wǎng)絡(luò)連接的可用性
缺點(diǎn):
資源利用率較低,只有一個(gè)接口處于工作狀態(tài)
bond2: 平衡策略
方式: 基于指定的HASH來傳輸數(shù)據(jù)
特點(diǎn): 有負(fù)載和容錯(cuò) (bond2 沒有用過)
bond3:廣播策略 (用得較少)
方式: 廣播策略在每個(gè)從的端口都會(huì)發(fā)送數(shù)據(jù)包
特點(diǎn): 提供一定的容錯(cuò)能力
bond4:802.3ad 動(dòng)態(tài)鏈路聚合
方式: 建一個(gè)聚合組,共享同樣的速率和雙工設(shè)定,也需要交換機(jī)配置鏈路聚合
bond5: 適配器傳輸負(fù)載均衡
方式: 在每個(gè)slave上根據(jù)當(dāng)前的負(fù)載(根據(jù)速度計(jì)算)分配外出流量。如果正在接受數(shù)據(jù)的slave出故障了,另一個(gè)slave接管失敗的slave的mac地址。
bond6: 適配器適應(yīng)性負(fù)載均衡
方式: 該模式包含了balance-tlb模式,同時(shí)加上針對(duì)IPV4流量的接收負(fù)載均衡(receive load balance, rlb),而且不需要任何switch(交換機(jī))的支持。接收負(fù)載均衡是通過ARP協(xié)商實(shí)現(xiàn)的。bonding驅(qū)動(dòng)截獲本機(jī)發(fā)送的ARP應(yīng)答,并把源硬件地址改寫為bond中某個(gè)slave的唯一硬件地址,從而使得不同的對(duì)端使用不同的硬件地址進(jìn)行通信。
來自服務(wù)器端的接收流量也會(huì)被均衡。當(dāng)本機(jī)發(fā)送ARP請(qǐng)求時(shí),bonding驅(qū)動(dòng)把對(duì)端的IP信息從ARP包中復(fù)制并保存下來。當(dāng)ARP應(yīng)答從對(duì)端到達(dá) 時(shí),bonding驅(qū)動(dòng)把它的硬件地址提取出來,并發(fā)起一個(gè)ARP應(yīng)答給bond中的某個(gè)slave。使用ARP協(xié)商進(jìn)行負(fù)載均衡的一個(gè)問題是:每次廣播 ARP請(qǐng)求時(shí)都會(huì)使用bond的硬件地址,因此對(duì)端學(xué)習(xí)到這個(gè)硬件地址后,接收流量將會(huì)全部流向當(dāng)前的slave。這個(gè)問題可以通過給所有的對(duì)端發(fā)送更新 (ARP應(yīng)答)來解決,應(yīng)答中包含他們獨(dú)一無二的硬件地址,從而導(dǎo)致流量重新分布。當(dāng)新的slave加入到bond中時(shí),或者某個(gè)未激活的slave重新 激活時(shí),接收流量也要重新分布。接收的負(fù)載被順序地分布(round robin)在bond中最高速的slave上
當(dāng)某個(gè)鏈路被重新接上,或者一個(gè)新的slave加入到bond中,接收流量在所有當(dāng)前激活的slave中全部重新分配,通過使用指定的MAC地址給每個(gè) client發(fā)起ARP應(yīng)答。下面介紹的updelay參數(shù)必須被設(shè)置為某個(gè)大于等于switch(交換機(jī))轉(zhuǎn)發(fā)延時(shí)的值,從而保證發(fā)往對(duì)端的ARP應(yīng)答 不會(huì)被switch(交換機(jī))阻截。
必要條件:
條件1:ethtool支持獲取每個(gè)slave的速率;
條件2:底層驅(qū)動(dòng)支持設(shè)置某個(gè)設(shè)備的硬件地址,從而使得總是有個(gè)slave(curr_active_slave)使用bond的硬件地址,同時(shí)保證每個(gè)bond 中的slave都有一個(gè)唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址將會(huì)被新選出來的 curr_active_slave接管
其實(shí)mod=6與mod=0的區(qū)別:mod=6,先把eth0流量占滿,再占eth1,….ethX;而mod=0的話,會(huì)發(fā)現(xiàn)2個(gè)口的流量都很穩(wěn)定,基本一樣的帶寬。而mod=6,會(huì)發(fā)現(xiàn)第一個(gè)口流量很高,第2個(gè)口只占了小部分流量
我們工作中常用的bond模式bond0 bond1 bond4
實(shí)驗(yàn)演練:
環(huán)境: centos7
網(wǎng)卡: ens37 ens38
bond模式: 0
準(zhǔn)備環(huán)境,準(zhǔn)備最少兩塊網(wǎng)口的環(huán)境
1.
2. 準(zhǔn)備網(wǎng)卡配置文件
進(jìn)入網(wǎng)卡配置文件所在目錄,新建bond 模式的文件
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#
[root@localhost network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.1.99
NETMASK=255.255.255.0
NETWORK=192.168.0.0
我這里后添加的網(wǎng)卡,沒有相對(duì)應(yīng)的網(wǎng)卡配置文件,新建ens37 ,ens38 的網(wǎng)卡配置文件
生產(chǎn)一個(gè)bonding 專屬配置文件
[root@localhost network-scripts]# cat /etc/modprobe.d/bonding.conf
alias bond0 bonding
options bonding mode=0 miimon=200
加載剛生產(chǎn)的配置文件(重啟也可以讓配置文件生效)
[root@localhost network-scripts]# modprobe bonding
檢查模塊是否加載成功
重啟網(wǎng)絡(luò)
[root@localhost network-scripts]# systemctl restart network.service
檢查網(wǎng)絡(luò)發(fā)現(xiàn)bond 已經(jīng)生效
通過NetworkManager 服務(wù)實(shí)現(xiàn)網(wǎng)口bond的實(shí)現(xiàn)
準(zhǔn)備環(huán)境,提前準(zhǔn)備實(shí)現(xiàn)的bond 的端口。 啟動(dòng)NetworkManager服務(wù),該服務(wù)如果已經(jīng)啟動(dòng)可以跳過啟動(dòng)步驟。
nmcli connection show #查看當(dāng)前的鏈接
上圖中我們發(fā)現(xiàn)的ens37/38 是表示已經(jīng)在鏈接的狀態(tài)了,我們先將他先關(guān)閉或者刪除 (否在后面會(huì)影響到做bond)
[root@localhost network-scripts]# nmcli connection delete Wired connection 1
Connection 'Wired connection 1' (29116f45-932d-3e5b-b4ec-c1e49fc3317a) successfully deleted.
[root@localhost network-scripts]# nmcli connection delete Wired connection 2
Connection 'Wired connection 2' (5d5e70f5-0e82-3a2e-8b03-ddef1ab83484) successfully deleted.
新建bond 信息 添加一個(gè)bond 信息,給bond 綁定靜態(tài)地址和網(wǎng)關(guān)。(如果想配置dhcp 獲取,ipv4.method manua(靜態(tài)) ipv4.addresses 192.168.8.100/24(配置ipv4地址) gw4 192.168.8.1 (網(wǎng)關(guān)) 這些信息不用添加,默認(rèn)為dhcp 獲取)
root@localhost network-scripts]# nmcli connection add type bond ifname bond1 mode 1 ipv4.method manual ipv4.addresses 192.168.8.100/24 gw4 192.168.8.1
Connection 'bond-bond1' (b5db094f-fab9-4896-b0d4-770e76a410b5) successfully added.
(如果我們配置了dhcp 獲取后想修改為靜態(tài)的ip地址可以 編輯/etc/sysconfig/network-scripts/ifcfg-bond-bond1-1)
BONDING_OPTS=mode=active-backup
TYPE=Bond
BONDING_MASTER=yes
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static (這里寫static ,static 表示是靜態(tài))
IPADDR=192.168.8.100
PREFIX=24
GATEWAY=192.168.8.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=bond-bond1-1
UUID=5b140f66-b3a6-4e52-808a-43bc3a22b226
DEVICE=bond1
ONBOOT=yes
將網(wǎng)口ens37 與ens38 綁定到bond 中
[root@localhost ~]# nmcli connection add type bond-slave ifname ens37 master bond1
Connection 'bond-slave-ens37' (7a08f862-1e71-4c95-baf7-23fc25d6a2ce) successfully added.
[root@localhost ~]# nmcli connection add type bond-slave ifname ens38 master bond1
Connection 'bond-slave-ens38' (8298f974-206d-4999-add9-8c528f74e571) successfully added.
檢查
ip a 可以查看到bond 信息
nmcli 會(huì)自己生產(chǎn)網(wǎng)卡和bond 的配置文件,不需要我們?cè)偃ナ謩?dòng)生產(chǎn)配置文件
檢查bond 的信息
驗(yàn)證關(guān)閉ens37 端口ping bond 的ip,網(wǎng)絡(luò)可以通,關(guān)閉ens38 端口ping bond 網(wǎng)絡(luò)也可以通。 bond1 的模式是主備模式,當(dāng)一個(gè)端口down 掉后另一個(gè)端口會(huì)升為master 來繼續(xù)維持工作。此功能驗(yàn)證ok 。
刪除bond
[root@localhost network-scripts]# nmcli connection delete bond-bond1-1
Connection 'bond-bond1-1' (5b140f66-b3a6-4e52-808a-43bc3a22b226) successfully deleted.
檢查bond 的模式已經(jīng)是沒有了






