碼迷,mamicode.com
首頁 > 系統相關 > 詳細

linux多網卡綁定聚合-Bond詳細完整版

時間:2018-03-01 23:42:44      閱讀:5007      評論:0      收藏:0      [點我收藏+]

標簽:Bond詳細完整版

Linux Bonding

一、什么是bonding

Linux bonding 驅動提供了一個把多個網絡接口設備捆綁為單個的網絡接口設置來使用,用于網絡負載均衡及網絡冗余


二、bonding應用方向

1、網絡負載均衡

bonding的網絡負載均衡是我們在文件服務器中常用到的,比如把三塊網卡,當做一塊來用,解決一個IP地址,流量過大,服務器網絡壓力過大的問題。 對于文件服務器來說,比如NFSSAMBA文件服務器,沒有任何一個管理員會把內部網的文件服務器的IP地址弄很多個來解決網絡負載的問題。如果在內網 中,文件服務器為了管理和應用上的方便,大多是用同一個IP地址。對于一個百M的本地網絡來說,文件服務器在多 個用戶同時使用的情況下,網絡壓力是極大的,特別是SAMABANFS服務器。為了解決同一個IP地址,突破流量的限制,畢竟網線和網卡對數據的吞吐量 是有限制的。如果在有限的資源的情況下,實現網絡負載均衡,最好的辦法就是 bonding

2、網絡冗余

對于服務器來說,網絡設備的穩定也是比較重要的,特別是網卡。在生產型的系統中,網卡的可靠性就更為重要了。在生產型的系統中,大多通過硬件設備的冗余來提供服務器的可靠性和安全性,比如電源。bonding 也能為網卡提供冗余的支持。把多塊網卡綁定到一個IP地址,當一塊網卡發生物理性損壞的情況下,另一塊網卡自動啟用,并提供正常的服務,即:默認情況下只有一塊網卡工作,其它網卡做備份


三、bonding實驗環境及配置

1、實驗環境

系統為:CentOS,使用4塊網卡(eth0eth1  ==>  bond0eth2eth3 ==> bond1)來實現bonding技術

2bonding配置

第一步:先查看一下內核是否已經支持bonding

1)如果內核已經把bonding編譯進內核,那么要做的就是加載該模塊到當前內核;其次查看ifenslave該工具是否也已經編譯
modprobe  -l   bond*  或者 modinfo   bonding
modprobe   bonding
lsmod | grep 'bonding'
echo  'modprobe bonding &> /dev/null'  >>  /etc/rc.local(開機自動加載bonding模塊到內核)
which  ifenslave
注意:默認內核安裝完后就已經支持bonding模塊了,無需要自己手動編譯

2)如果bonding還沒有編譯進內核,那么要做的就是編譯該模塊到內核
1)編譯bonding
tar -jxvf  kernel-XXX.tar.gz
cd  kernel-XXX
make  menuconfig
選擇 " Network device support "  ->  " Bonding driver support "
make bzImage
make modules  &&  make modules_install
make install
2)編譯ifenslave工具
gcc -Wall -O -I   kernel-XXX/include ifenslave.c -o ifenslave

第二步:主要有兩種可選擇(1種:實現網絡負載均衡,第2種:實現網絡冗余)

1:實現網絡冗余(即:mod=1方式,使用eth0eth1

1編輯虛擬網絡接口配置文件(bond0),并指定網卡IP
vi   /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.254
BROADCAST=192.168.0.255
NETMASK=255.255.255.0
NETWORK=192.168.0.0
GATEWAY=192.168.0.1
USERCTL=no
TYPE=Ethernet
注意:建議不要指定MAC地址

vi   /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes
注意:建議不要指定MAC地址

vi   /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
MASTER=bond0
SLAVE=yes
注意:建議不要指定MAC地址

2編輯模塊載入配置文件(/etc/modprobe.conf),開機自動加載bonding模塊到內核
vi   /etc/modprobe.conf

alias  bond0  bonding 
options  bond0  miimon=100  mode=1

alias  net-pf-10  off   #關閉ipv6支持
說明:miimon是用來進行鏈路監測的。 比如:miimon=100,那么系統每100ms監測一次鏈路連接狀態,如果有一條線路不通就轉入另一條線路;mode的值表示工作模式,他共有0123456六種模式,常用為061三種,具體后面會介紹
mode=0,表示load balancing (round-robin)為負載均衡方式,兩塊網卡都工作,但是與網卡相連的交換必須做特殊配置( 這兩個端口應該采取聚合方式),因為做bonding的這兩塊網卡是使用同一個MAC地址
mode=6,表示load balancing (round-robin)為負載均衡方式,兩塊網卡都工作,但是該模式下無需配置交換機,因為做bonding的這兩塊網卡是使用不同的MAC地址
mode=1,表示fault-tolerance (active-backup)提供冗余功能,工作方式是主備的工作方式,也就是說默認情況下只有一塊網卡工作,另一塊做備份
注意:bonding只能提供鏈路監測,即從主機到交換機的鏈路是否接通。如果只是交換機對外的鏈路down掉了,而交換機本身并沒有故障,那么bonding會認為鏈路沒有問題而繼續使用

4)重啟并測試
第一:由于bonding使用的模式為mod=1(網絡冗余),所以eth0eth1與虛擬的bond0同一個MAC地址


注意:對比上面這兩個圖,可知mode=1模式下,eth0eth1這兩塊網卡,只有一塊網卡在工作(即:eth0),因為eth1網卡的RXTX都沒有在發生變化

第二:測試,用ping指令ping虛擬網卡設備bond0IP地址(192.168.0.254),然后禁用eth0設備看一下能夠繼續ping的通

說明:如上圖可得到,斷開eth0(上圖的右下角),還是可以ping的通的


2:實現網絡負載均衡和網絡冗余(即:mod=0方式,使用eth0eth1
注意:VM中只能做mode=1的實驗,其它的工作模式得用真機來實踐

跟例1的步驟一樣,只需要修改模塊載入配置文件(/etc/modprobe.conf),如下:

alias  bond0  bonding 
options  bond0  miimon=100  mode=0


1)測試如下
##目前兩塊網卡都處于連接狀態
[email protected]:~# ifconfig | grep 'eth' | awk '{print $1}'
eth0
eth1
##禁用了網卡eth0,用ping指令測試


反之,也是一樣的!

3:實現網絡負載均衡和網絡冗余(即:mod=6方式,使用eth0eth1,其中eth0設置為primay

跟例1的步驟一樣,只需要修改模塊載入配置文件(/etc/modprobe.conf),如下:
alias  bond0  bonding 
options  bond0  miimon=100  mode=6


上圖可知:mode=6時,eth0eth1所使用的MAC是不一樣的

1)測試如下
##目前兩塊網卡都處于連接狀態
[email protected]:~# ifconfig | grep 'eth' | awk '{print $1}'
eth0
eth1
##禁用了網卡eth0,用ping指令測試



四、bonding運用的注意事項

1bonding的模式:0-6,即:7種模式

第一種模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡掄循環策略)
特點:傳輸數據包順序是依次傳輸(即:第1個包走eth0,下一個包就走eth1....一直循環下去,直到最后一個傳輸完畢) 此模式提供負載平衡和容錯能力;但是我們知道如果一個連接或者會話的數據包從不同的接口發出的話,中途再經過不同的鏈路,在客戶端很有可能會出現數據包無序到達的問題,而無序到達的數據包需要重新要求被發送,這樣網絡的吞吐量就會下降

第二種模式:mod=1,即: (active-backup) Active-backup policy(主-備份策略)
特點:只有一個設備處于活動狀態,當 一個宕掉另一個馬上由備份轉換為主設備。mac地址是外部可見得,從外面看來,bondMAC地址是唯一的,以避免switch(交換機)發生混亂。此模式只提供了容錯能力;由此可見此算法的優點是可以提供高網絡連接的可用性,但是它的資源利用率較低,只有一個接口處于工作狀態,在有 N 個網絡接口的情況下,資源利用率為1/N

第三種模式:mod=2,即:(balance-xor) XOR policy(平衡策略)
特點:基于指定的傳輸HASH策略傳輸數據包。缺省的策略是:(MAC地址 XOR 目標MAC地址) % slave數量。其他的傳輸策略可以通過xmit_hash_policy選項指定,此模式提供負載平衡和容錯能力

第四種模式:mod=3,即:broadcast(廣播策略)
特點:在每個slave接口上傳輸每個數據包,此模式提供了容錯能力

第五種模式:mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregationIEEE 802.3ad 動態鏈接聚合)
特點:創建一個聚合組,它們共享同樣的速率和雙工設定。根據802.3ad規范將多個slave工作在同一個激活的聚合體下。
出流量的slave選舉是基于傳輸hash策略,該策略可以通過xmit_hash_policy選項從缺省的XOR策略改變到其他策略。需要注意的是, 并不是所有的傳輸策略都是802.3ad適應的,尤其考慮到在802.3ad標準43.2.4章節提及的包亂序問題。不同的實現可能會有不同的適應性。
必要條件:
條件1ethtool支持獲取每個slave的速率和雙工設定
條件2switch(交換機)支持IEEE 802.3ad Dynamic link aggregation
條件3:大多數switch(交換機)需要經過特定配置才能支持802.3ad模式

第六種模式:mod=5,即:(balance-tlb) Adaptive transmit load balancing(適配器傳輸負載均衡)
特點:不需要任何特別的switch(交換機)支持的通道bonding。在每個slave上根據當前的負載(根據速度計算)分配外出流量。如果正在接受數據的slave出故障了,另一個slave接管失敗的slaveMAC地址。
該模式的必要條件:ethtool支持獲取每個slave的速率

第七種模式:mod=6,即:(balance-alb) Adaptive load balancing(適配器適應性負載均衡)
特點:該模式包含了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(交換機)阻截。
必要條件:
條件1ethtool支持獲取每個slave的速率;
條件2:底層驅動支持設置 某個設備的硬件地址,從而使得總是有個slave(curr_active_slave)使用bond的硬件地址,同時保證每個bond 中的slave都有一個唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址將會被新選出來的 curr_active_slave接管
其實mod=6mod=0的區別:mod=6,先把eth0流量占滿,再占eth1....ethX;而mod=0的話,會發現2個口的流量都很穩定,基本一樣的帶寬。而mod=6,會發現第一個口流量很高,第2個口只占了小部分流量


2bonding驅動選項

Bonding驅動的選項是通過在加載時指定參數來設定的。可以通過insmodmodprobe命令的命令行參數來指定,但通常在/etc/modprobe.conf配置文件中指定,或其他的配置文件中

面列出可用的bonding驅動參數。如果參數沒有指定,驅動會使用缺省參數。剛開始配置bond的時候,建議在一個終端窗口中運行"tail -f /var/log/messages"來觀察bonding驅動的錯誤信息【譯注:/var/log/messages一般會打印內核中的調試信息】
有些參數必須要正確的設定,比如miimonarp_intervalarp_ip_target,否則在鏈接故障時會導致嚴重的網絡性能退化。很少的設備不支持miimon,因此沒有任何理由不使用它們。
有些選項不僅支持文本值的設定,出于兼容性的考慮,也支持數值的設定,比如,"mode=802.3ad""mode=4"效果是一樣的

具體的參數列表:
1primay
定哪個slave成為主設備(primary device),取值為字符串,如eth0eth1等。只要指定的設備可用,它將一直是激活的slave。只有在主設備(primary device)斷線時才會切換設備。這在希望某個slave設備優先使用的情形下很有用,比如,某個slave設備有更高的吞吐率
注意:  primary選項只對active-backup模式有效

2updelay
指定當發現一個鏈路恢復時,在激活該鏈路之前的等待時間,以毫秒計算。該選項只對miimon鏈路偵聽有效。updelay應該是miimon值的整數倍,如果不是,它將會被向下取整到最近的整數。缺省值為0

3arp_interval
ARP鏈路監控頻率,單位是毫秒(ms)。如果APR監控工作于以太兼容模式(模式0和模式2)下,需要把switch(交換機)配置為在所有鏈路上均 勻的分發網絡包。如果switch(交換機)被配置為以XOR方式分發網絡包,所有來自ARP目標的應答將會被同一個鏈路上的其他設備收到,這將會導致其 他設備的失敗。ARP監控不應該和miimon同時使用。設定為0將禁止ARP監控。缺省值為0

4arp_ip_target
定一組IP地址用于ARP監控的目標,它只在arp_interval > 0時有效。這些IP地址是ARP請求發送的目標,用于判定到目標地址的鏈路是否工作正常。該設定值為ddd.ddd.ddd.ddd格式。多個IP地址通 過逗號分隔。至少指定一個IP地址。最多可以指定16IP地址。缺省值是沒有IP地址

5downdelay
指定一個時間,用于在發現鏈路故障后,等待一段時間然后禁止一個slave,單位是毫秒(ms)。該選項只對miimon監控有效。downdelay值應該是miimon值的整數倍,否則它將會被取整到最接近的整數倍。缺省值為0

6lacp_rate
指定在802.3ad模式下,我們希望的鏈接對端傳輸LACPDU包的速率。可能的選項:
1slow 或者 0
請求對端每30s傳輸LACPDU
2fast 或者 1
請求對端每1s傳輸LACPDU
3)缺省值是slow

7max_bonds
bonding驅動指定創建bonding設備的數量。比如:如果max_bonds3,而且bonding驅動還沒有加載,那么bond0bond1bond2將會被創建。缺省值為1

6miimon
指定MII鏈路監控頻率,單位是毫秒(ms)。這將決定驅動檢查每個slave鏈路狀態頻率
0表示禁止MII鏈路監控。100可以作為一個很好的初始參考值。下面的use_carrier選項將會影響如果檢測鏈路狀態。更多的信息可以參考高可靠性章節。缺省值為0

8mode
指定bonding的策略。缺省是balance-rr round robin,循環賽)。可選的mode包括:0123456

3bonding鏈路監測方法

官方文檔里說有兩種針對鏈路的監測方法(注意:這兩種監測不能同時使用)

第一種:miimon(這種方法是最常見的,此方法使用系統的mii-tool命令進行監測)

模塊加載設置(/etc/modprobe.conf):
# Start of bonding configure
alias bond0 bonding
options  bond0 miimon=100 mode=1
注意:使用cat /proc/net/bonding/bond0,可查看Bonding Mode: load balancing (round-robin)狀態
options  bond0 miimon=100 mode=0
注意:使用cat /proc/net/bonding/bond0,可查看Bonding Mode: load balancing ((active-backup))狀態                       

[email protected]:~# mii-tool
eth0: negotiated 100baseTx-HD, link ok
eth1: negotiated 100baseTx-HD, link ok

點:這種方法,只能監測交換機與該網卡之間的鏈路;如果它們之外的鏈路的地方斷了,而交換機本身沒有問題,也就是說你的網卡和交換機之間還是UP狀態,它 是不會認為網絡中斷,除非你的網卡是DOWN狀態,它才會把鏈路轉到另一塊網卡上,就像是拔掉網線一樣,或者把交換機端口shutdown一樣

第二種:arp(這種方法比較實用,你可以把它看作是arpping(二層ping),但是可能會給網關造成一定的壓力)

模塊加載:
alias bond0 bonding
options  bond0  arp_interval=100  arp_ip_target=192.168.1.1  mode=active-backup   primary=eth0
解析如下:
arp_interval=100,表示arp的檢測時間,等同于miimon=100的作用
arp_ip_target=192.168.1.1,表示arp檢測的目標IP,必須是同網段的,最好就是網關
注意:如果使用arpping網關不通,那么在/proc/net/bonding/bond0里會一會down,一會up

優點:使用arp這種方法,如果交換機的上出現問題,網絡不通,它就會把鏈轉到另一塊網卡上,但是不管是哪種方法,在第一塊網卡出現問題,鏈路轉到第二塊后,如果第一塊恢復正常,鏈路自己不會恢復的


五、bonding參考資料

1linux系統中有一份原文幫助文件(很詳細):/usr/share/doc/iputils-20020927/README.bonding
2http://www.itqun.net/content-detail/86623_2.html
3redhat linux內核升級補丁下載
http://people.redhat.com/jwilson/el5---內核升級補丁(這里可以得到免費的升級包)
http://people.redhat.com/jwilson/el5/198.el5/i686/kernel-2.6.18-198.el5.i686.rpm
http://people.redhat.com/jwilson/el5/198.el5/i686/kernel-devel-2.6.18-198.el5.i686.rpm
http://people.redhat.com/jwilson/el5/198.el5/i686/kernel-2.6.18-i686.config
http://rhn.redhat.com/errata---內核補丁(注意:得使用Red Hat Network來下載這些update包)
http://rhn.redhat.com/errata/RHSA-2010-0178.html


linux多網卡綁定聚合-Bond詳細完整版

標簽:Bond詳細完整版

原文地址:http://blog.51cto.com/sf1314/2074459

(0)
(0)
   
舉報
評論 一句話評論(0
0條  
登錄后才能評論!
? 2014 mamicode.com 版權所有 京ICP備13008772號-2
迷上了代碼!
公式规律下期单双