在生產環境中為了保證網絡的更高可用性,我們一般都會將網絡做bond 。也稱為雙網卡綁定。
先看看我們bond 的模式:
bond0: 平衡輪循環策略,有自動備援,不過需要交換機支持 。
方式: 在雙網卡上輪詢吞吐數據流量。 第一個數據走eth1 第二個走eth2 第三個eth1 這個反復輪詢
優點:
提供負載均衡和容錯能力。
缺點:
同一個鏈接或者會話的數據包從不同的接口發出的話,中間會經過不同的鏈路,數據包無法到達目的地, 可能會出現網絡的吞吐量下降。
bond1 : 主-備份策略
方式:只有一個設備處于活動狀態,當一個宕掉另一個馬上由備份轉換為主設備,
優點:
提供了容錯能力,由此可見此算法的優點是可以提高網絡連接的可用性
缺點:
資源利用率較低,只有一個接口處于工作狀態
bond2: 平衡策略
方式: 基于指定的HASH來傳輸數據
特點: 有負載和容錯 (bond2 沒有用過)
bond3:廣播策略 (用得較少)
方式: 廣播策略在每個從的端口都會發送數據包
特點: 提供一定的容錯能力
bond4:802.3ad 動態鏈路聚合
方式: 建一個聚合組,共享同樣的速率和雙工設定,也需要交換機配置鏈路聚合
bond5: 適配器傳輸負載均衡
方式: 在每個slave上根據當前的負載(根據速度計算)分配外出流量。如果正在接受數據的slave出故障了,另一個slave接管失敗的slave的mac地址。
bond6: 適配器適應性負載均衡
方式: 該模式包含了balance-tlb模式,同時加上針對IPV4流量的接收負載均衡(receive load balance, rlb),而且不需要任何switch(交換機)的支持。接收負載均衡是通過ARP協商實現的。bonding驅動截獲本機發送的ARP應答,并把源硬件地址改寫為bond中某個slave的唯一硬件地址,從而使得不同的對端使用不同的硬件地址進行通信。
來自服務器端的接收流量也會被均衡。當本機發送ARP請求時,bonding驅動把對端的IP信息從ARP包中復制并保存下來。當ARP應答從對端到達 時,bonding驅動把它的硬件地址提取出來,并發起一個ARP應答給bond中的某個slave。使用ARP協商進行負載均衡的一個問題是:每次廣播 ARP請求時都會使用bond的硬件地址,因此對端學習到這個硬件地址后,接收流量將會全部流向當前的slave。這個問題可以通過給所有的對端發送更新 (ARP應答)來解決,應答中包含他們獨一無二的硬件地址,從而導致流量重新分布。當新的slave加入到bond中時,或者某個未激活的slave重新 激活時,接收流量也要重新分布。接收的負載被順序地分布(round robin)在bond中最高速的slave上
當某個鏈路被重新接上,或者一個新的slave加入到bond中,接收流量在所有當前激活的slave中全部重新分配,通過使用指定的MAC地址給每個 client發起ARP應答。下面介紹的updelay參數必須被設置為某個大于等于switch(交換機)轉發延時的值,從而保證發往對端的ARP應答 不會被switch(交換機)阻截。
必要條件:
條件1:ethtool支持獲取每個slave的速率;
條件2:底層驅動支持設置某個設備的硬件地址,從而使得總是有個slave(curr_active_slave)使用bond的硬件地址,同時保證每個bond 中的slave都有一個唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址將會被新選出來的 curr_active_slave接管
其實mod=6與mod=0的區別:mod=6,先把eth0流量占滿,再占eth1,….ethX;而mod=0的話,會發現2個口的流量都很穩定,基本一樣的帶寬。而mod=6,會發現第一個口流量很高,第2個口只占了小部分流量
我們工作中常用的bond模式bond0 bond1 bond4
實驗演練:
環境: centos7
網卡: ens37 ens38
bond模式: 0
準備環境,準備最少兩塊網口的環境
1.
2. 準備網卡配置文件
進入網卡配置文件所在目錄,新建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
我這里后添加的網卡,沒有相對應的網卡配置文件,新建ens37 ,ens38 的網卡配置文件
生產一個bonding 專屬配置文件
[root@localhost network-scripts]# cat /etc/modprobe.d/bonding.conf
alias bond0 bonding
options bonding mode=0 miimon=200
加載剛生產的配置文件(重啟也可以讓配置文件生效)
[root@localhost network-scripts]# modprobe bonding
檢查模塊是否加載成功
重啟網絡
[root@localhost network-scripts]# systemctl restart network.service
檢查網絡發現bond 已經生效
通過NetworkManager 服務實現網口bond的實現
準備環境,提前準備實現的bond 的端口。 啟動NetworkManager服務,該服務如果已經啟動可以跳過啟動步驟。
nmcli connection show #查看當前的鏈接
上圖中我們發現的ens37/38 是表示已經在鏈接的狀態了,我們先將他先關閉或者刪除 (否在后面會影響到做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 信息 添加一個bond 信息,給bond 綁定靜態地址和網關。(如果想配置dhcp 獲取,ipv4.method manua(靜態) ipv4.addresses 192.168.8.100/24(配置ipv4地址) gw4 192.168.8.1 (網關) 這些信息不用添加,默認為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 獲取后想修改為靜態的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 表示是靜態)
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
將網口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 會自己生產網卡和bond 的配置文件,不需要我們再去手動生產配置文件
檢查bond 的信息
驗證關閉ens37 端口ping bond 的ip,網絡可以通,關閉ens38 端口ping bond 網絡也可以通。 bond1 的模式是主備模式,當一個端口down 掉后另一個端口會升為master 來繼續維持工作。此功能驗證ok 。
刪除bond
[root@localhost network-scripts]# nmcli connection delete bond-bond1-1
Connection 'bond-bond1-1' (5b140f66-b3a6-4e52-808a-43bc3a22b226) successfully deleted.
檢查bond 的模式已經是沒有了