前言
一般企業內用於提供NFS服務、samba服務或者vsftpd服務時,要求系統必須提供7*24小時的網絡傳輸服務。它所能提供的最大網絡傳輸速度為100MB/s,但是當訪問的用戶數量特別多時,服務器的訪問壓力非常大,網絡傳輸速率特別慢。
因此我們可以采用bond技術實現多網卡的負載均衡來保障網絡的自動備援和負載均衡。以此保障實際運維工作中網絡的可靠性、文件高速率傳輸性。生產環境中,物理機基本上都是用兩張網卡做bond綁定,用主備或者負載模式
一、Linux多網卡綁定
1.1)網卡綁定mode的種類
網卡綁定mode共有七種:bond0、bond1、bond2、bond3、bond4、bond5、bond6
常見的網卡綁定驅動主要有以下三種模式:
mode0平衡負載模式: 平時兩塊網卡工作,且自動備援,但需要在服務器本機網卡相連的交換機設備上進行端口聚合來支持綁定技術;
mode1自動備援技術: 平時只有一塊網卡工作,在它故障后自動替換為另外的網卡;
mode6平衡負載模式: 平時兩塊網卡均工作,且自動備援,無須交換機設備提供輔助支持;
注意:mode 0負載均衡配置
我們在做mode 0 負載均衡時,僅僅設置option是bond0 miimon=100 mode=0是不行的,與網卡相連的交換機必須做聚合方式的配置。因為做bonding的這兩塊網卡使用的是同一個MAC地址,如果這些網卡都接在同一個交換機上,那么交換機的ARP中MAC地址對應的端口就有多個,此時,當交換機接收到發往此MAC地址的數據時會出現不知道應該往哪個端口發送的問題。
一般的解決方式:兩個網卡接入不同的交換機即可。mode6模式下無需配置交換機,因為做bonding的這兩塊網卡是使用不同的MAC地址。
二、bond七種模式詳解
2.1)mode 0(平衡輪循環策略)
Bonding Mode: load balancing (round-robin)
特點
傳輸數據包順序為依次傳輸:即第1個包走ens33/eth0,下一個包就走ens36/eth1….一直循環下去,直到最后一個傳輸完畢
實現功能
實現了負載平衡
提供容錯能力
缺點
如果一個連接或者會話的數據包從不同的接口發出的話,中途再經過不同的鏈路,在客戶端很有可能會出現數據包無序到達的問題,而無序到達的數據包需要重新要求被發送,這樣網絡的吞吐量就會下降
2.2)mode 1(主-備份策略)
Bonding Mode: fault-tolerance (active-backup)
特點
1. 只有一個設備處於活動狀態,當一個宕掉另一個馬上由備份轉換為主設備
2. mac地址是外部可見得,從外面看來,bond的MAC地址是唯一的,以避免switch(交換機)發生混亂
實現功能
提供容錯能力
提供高網絡連接的可用性
缺點
資源利用率較低,只有一個接口處於工作狀態,在有 N 個網絡接口的情況下,資源利用率為1/N
2.3)mode 2(平衡策略)
Bonding Mode: load balancing (xor)
特點
1. 基於指定的傳輸HASH策略傳輸數據包
2. 默認的策略為:(源MAC地址 XOR 目標MAC地址) % slave數量
3. 其他的傳輸策略可以通過xmit_hash_policy選項指定
實現功能
實現了負載平衡
提高了容錯能力
2.4)mode 3(廣播策略)
Bonding Mode: fault-tolerance (broadcast)
特點
在每個slave(從設備)上傳輸每個數據包
實現功能
只提供容錯能力
2.5)mode 4(IEEE 802.3ad 動態鏈接聚合)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
特點
1. 需要創建一個聚合組,它們共享同樣的速率和雙工設定
2. 根據802.3ad規范將多個slave工作在同一個激活的聚合體下
必要條件
1. ethtool支持獲取每個slave的速率和雙工設定
2. switch(交換機)支持IEEE 802.3ad Dynamic link aggregation
3. 很多switch(交換機)需要經過特定配置才能支持802.3ad模式
2.6)mode 5(適配器傳輸負載均衡)
Bonding Mode: transmit load balancing
特點
1. 不需要任何特別的switch(交換機)支持的通道bonding
2. 在每個slave上根據當前的負載(根據速度計算)分配外出流量
3. 如果正在接受數據的slave出故障了,另一個slave接管失敗的slave的MAC地址。
必要條件
ethtool支持獲取每個slave的速率
2.7 mode 6 (適配器適應性負載均衡)
Bonding Mode: adaptive load balancing
特點
1. 該模式包含了balance-tlb模式,同時加上針對IPV4流量的接收負載均衡(receive load balance, rlb),而且不需要任何switch(交換機)的支持
2. 接收負載均衡是通過ARP協商實現的
bonding驅動截獲本機發送的ARP應答,並把源硬件地址改寫為bond中某個slave的唯一硬件地址,從而使得不同的對端使用不同的硬件地址進行通信
3. 來自服務器端的接收流量也會被均衡
當本機發送ARP請求時,bonding驅動把對端的IP信息從ARP包中復制並保存下來。當ARP應答從對端到達 時,bonding驅動把它的硬件地址提取出來,並發起一個ARP應答給bond中的某個slave
必要條件
1. ethtool支持獲取每個slave的速率
2. 底層驅動支持設置某個設備的硬件地址,從而使得總是有個slave(curr_active_slave)使用bond的硬件地址,同時保證每個 bond 中的slave都有一個唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址將會被新選出來的 curr_active_slave接管
mode 6與mode 0的區別
mod 6:會先把ens33/eth0流量占滿,再占ens36/eth1,….;
mod 0:會發現2個口的流量都很穩定,基本一樣的帶寬。
通過比對會發現mod 6的第一個口流量很高,第2個口只占了小部分流量
三。bound配置
(1)加載模塊
modprobe bonding #加載bond模塊,默認未加載
lsmod | grep bonding #查看內核是否加載
(2)添加網卡
2.1)ens33網卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
ONBOOT=yes
MASTER=bond0
BOOTPROTO=none
SLAVE=yes
2.2)ens36網卡
vim /etc/sysconfig/network-scripts/ifcfg-ens36
DEVICE=ens36
ONBOOT=yes
MASTER=bond0
BOOTPROTO=none
SLAVE=yes
2.3)bond網卡
**還有配置項可以根據需要增加
vim /etc/sysconfig/network-scripts/ifcfg-bond0 #自己創建bond網卡文件
DEVICE=bond0 #與文件名一致
BOOTPROTO=static
IPADDR=192.168.150.200 #設置IP
NETMASK=255.255.255.0 #設置掩碼
ONBOOT=yes
BROADCAST=192.168.150.254
BONDING_OPTS="miimon=100 mode=0" #miimon=100,系統每100ms 監測一次鏈路連接狀態,mode=0,表示網卡eth0,eth1采用平衡輪詢模式(如果mode=1,則表示eth0和eth1采用主備模式)
BONDING_OPTS="fail_over_mac=1" #默認fail_over_mac=0,當發生錯誤時,只改slave的mac不改bond;fail_over_mac=1時,只改bond不改slave,配置該項是為了更改mac地址獲取方式,是虛擬機bug所需增加的配置,實際環境不一定要配置
(3)啟動網卡
systemctl restart network #重啟網卡信息
ip a #查看所有I
cat /proc/net/bonding/bond0 #查看網卡綁定詳細的信息
注意:
與真機環境有所不同,vmware虛擬機下給linux系統做bond0網卡配置,照這樣做完后,測試發現down掉ens33后,bond0網卡ping不通,無法起到網卡備份效果。所以需要fail_over_mac=1時,只改bond不改slave。改完后,service network restart重啟下網卡配置。