Linux 網(wǎng)卡bond的七種模式

Linux 網(wǎng)卡bond的七種模式

什么是bond

網(wǎng)卡bond是通過(guò)多張網(wǎng)卡綁定為一個(gè)邏輯網(wǎng)卡,實(shí)現(xiàn)本地網(wǎng)卡的冗余,帶寬擴(kuò)容和負(fù)載均衡,在生產(chǎn)場(chǎng)景中是一種常用的技術(shù)。Kernels 2.4.12及以后的版本均供bonding模塊,以前的版本可以通過(guò)patch實(shí)現(xiàn)??梢酝ㄟ^(guò)以下命令確定內(nèi)核是否支持 bonding:

#cat /boot/config-2.6.32-573.el6.x86_64 |grep -i bonding
CONFIG_BONDING=m

bond的七種模式介紹:

1、mode=0(balance-rr)(平衡掄循環(huán)策略)

鏈路負(fù)載均衡,增加帶寬,支持容錯(cuò),一條鏈路故障會(huì)自動(dòng)切換正常鏈路。交換機(jī)需要配置聚合口,思科叫port channel。

  • 特點(diǎn):傳輸數(shù)據(jù)包順序是依次傳輸(即:第1個(gè)包走eth0,下一個(gè)包就走eth1….一直循環(huán)下去,直到最后一個(gè)傳輸完畢),此模式提供負(fù)載平衡和容錯(cuò)能力;但是我們知道如果一個(gè)連接或者會(huì)話(huà)的數(shù)據(jù)包從不同的接口發(fā)出的話(huà),中途再經(jīng)過(guò)不同的鏈路,在客戶(hù)端很有可能會(huì)出現(xiàn)數(shù)據(jù)包無(wú)序到達(dá)的問(wèn)題,而無(wú)序到達(dá)的數(shù)據(jù)包需要重新要求被發(fā)送,這樣網(wǎng)絡(luò)的吞吐量就會(huì)下降
  • 表示負(fù)載分擔(dān)round-robin,并且是輪詢(xún)的方式比如第一個(gè)包走eth0,第二個(gè)包走eth1,直到數(shù)據(jù)包發(fā)送完畢。
  • 優(yōu)點(diǎn):流量提高一倍
  • 缺點(diǎn):需要接入交換機(jī)做端口聚合,否則可能無(wú)法使用

2、mode=1(active-backup)(主-備份策略)

這個(gè)是主備模式,只有一塊網(wǎng)卡是active,另一塊是備用的standby,所有流量都在active鏈路上處理,交換機(jī)配置的是捆綁的話(huà)將不能工作,因?yàn)榻粨Q機(jī)往兩塊網(wǎng)卡發(fā)包,有一半包是丟棄的。

  • 特點(diǎn):只有一個(gè)設(shè)備處于活動(dòng)狀態(tài),當(dāng)一個(gè)宕掉另一個(gè)馬上由備份轉(zhuǎn)換為主設(shè)備。mac地址是外部可見(jiàn)得,從外面看來(lái),bond的MAC地址是唯一的,以避免switch(交換機(jī))發(fā)生混亂。
    此模式只提供了容錯(cuò)能力;由此可見(jiàn)此算法的優(yōu)點(diǎn)是可以提供高網(wǎng)絡(luò)連接的可用性,但是它的資源利用率較低,只有一個(gè)接口處于工作狀態(tài),在有 N 個(gè)網(wǎng)絡(luò)接口的情況下,資源利用率為1/N
  • 優(yōu)點(diǎn):冗余性高
  • 缺點(diǎn):鏈路利用率低,兩塊網(wǎng)卡只有1塊在工作

3、mode=2(balance-xor)(平衡策略)

表示XOR Hash負(fù)載分擔(dān),和交換機(jī)的聚合強(qiáng)制不協(xié)商方式配合。(需要xmit_hash_policy,需要交換機(jī)配置port channel)

  • 特點(diǎn):基于指定的傳輸HASH策略傳輸數(shù)據(jù)包。缺省的策略是:(源MAC地址 XOR 目標(biāo)MAC地址) % slave數(shù)量。其他的傳輸策略可以通過(guò)xmit_hash_policy選項(xiàng)指定,此模式提供負(fù)載平衡和容錯(cuò)能力

4、mode=3(broadcast)(廣播策略)

表示所有包從所有網(wǎng)絡(luò)接口發(fā)出,這個(gè)不均衡,只有冗余機(jī)制,但過(guò)于浪費(fèi)資源。此模式適用于金融行業(yè),因?yàn)樗麄冃枰呖煽啃缘木W(wǎng)絡(luò),不允許出現(xiàn)任何問(wèn)題。需要和交換機(jī)的聚合強(qiáng)制不協(xié)商方式配合。

  • 特點(diǎn):在每個(gè)slave接口上傳輸每個(gè)數(shù)據(jù)包,此模式提供了容錯(cuò)能力
  • 必要條件:
    條件1:ethtool支持獲取每個(gè)slave的速率和雙工設(shè)定
    條件2:switch(交換機(jī))支持IEEE802.3ad Dynamic link aggregation
    條件3:大多數(shù)switch(交換機(jī))需要經(jīng)過(guò)特定配置才能支持802.3ad模式

5、mode=4(802.3ad)(IEEE 802.3ad 動(dòng)態(tài)鏈接聚合)

表示支持802.3ad協(xié)議,和交換機(jī)的聚合LACP方式配合(需要xmit_hash_policy).標(biāo)準(zhǔn)要求所有設(shè)備在聚合操作時(shí),要在同樣的速率和雙工模式,而且,和除了balance-rr模式外的其它bonding負(fù)載均衡模式一樣,任何連接都不能使用多于一個(gè)接口的帶寬。

  • 特點(diǎn):創(chuàng)建一個(gè)聚合組,它們共享同樣的速率和雙工設(shè)定。根據(jù)802.3ad規(guī)范將多個(gè)slave工作在同一個(gè)激活的聚合體下。
    外出流量的slave選舉是基于傳輸hash策略,該策略可以通過(guò)xmit_hash_policy選項(xiàng)從缺省的XOR策略改變到其他策略。需要注意的 是,并不是所有的傳輸策略都是802.3ad適應(yīng)的,
    尤其考慮到在802.3ad標(biāo)準(zhǔn)43.2.4章節(jié)提及的包亂序問(wèn)題。不同的實(shí)現(xiàn)可能會(huì)有不同的適應(yīng) 性。
  • 必要條件:
    條件1:ethtool支持獲取每個(gè)slave的速率和雙工設(shè)定
    條件2:switch(交換機(jī))支持IEEE 802.3ad Dynamic link aggregation
    條件3:大多數(shù)switch(交換機(jī))需要經(jīng)過(guò)特定配置才能支持802.3ad模式

6、mode=5(balance-tlb)(適配器傳輸負(fù)載均衡)

是根據(jù)每個(gè)slave的負(fù)載情況選擇slave進(jìn)行發(fā)送,接收時(shí)使用當(dāng)前輪到的slave。該模式要求slave接口的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)有某種ethtool支持;而且ARP監(jiān)控不可用。

  • 特點(diǎn):不需要任何特別的switch(交換機(jī))支持的通道bonding。在每個(gè)slave上根據(jù)當(dāng)前的負(fù)載(根據(jù)速度計(jì)算)分配外出流量。如果正在接受數(shù)據(jù)的slave出故障了,另一個(gè)slave接管失敗的slave的MAC地址。
  • 必要條件:
    ethtool支持獲取每個(gè)slave的速率

7、mode=6(balance-alb)(適配器適應(yīng)性負(fù)載均衡)

在5的tlb基礎(chǔ)上增加了rlb(接收負(fù)載均衡receive load balance).不需要任何switch(交換機(jī))的支持。接收負(fù)載均衡是通過(guò)ARP協(xié)商實(shí)現(xiàn)的.

  • 特點(diǎn):該模式包含了balance-tlb模式,同時(shí)加上針對(duì)IPV4流量的接收負(fù)載均衡(receive load balance, rlb),而且不需要任何switch(交換機(jī))的支持。接收負(fù)載均衡是通過(guò)ARP協(xié)商實(shí)現(xiàn)的。bonding驅(qū)動(dòng)截獲本機(jī)發(fā)送的ARP應(yīng)答,并把源硬件地址改寫(xiě)為bond中某個(gè)slave的唯一硬件地址,從而使得不同的對(duì)端使用不同的硬件地址進(jìn)行通信。
    來(lái)自服務(wù)器端的接收流量也會(huì)被均衡。當(dāng)本機(jī)發(fā)送ARP請(qǐng)求時(shí),bonding驅(qū)動(dòng)把對(duì)端的IP信息從ARP包中復(fù)制并保存下來(lái)。當(dāng)ARP應(yīng)答從對(duì)端到達(dá) 時(shí),bonding驅(qū)動(dòng)把它的硬件地址提取出來(lái),并發(fā)起一個(gè)ARP應(yīng)答給bond中的某個(gè)slave。
    使用ARP協(xié)商進(jìn)行負(fù)載均衡的一個(gè)問(wèn)題是:每次廣播 ARP請(qǐng)求時(shí)都會(huì)使用bond的硬件地址,因此對(duì)端學(xué)習(xí)到這個(gè)硬件地址后,接收流量將會(huì)全部流向當(dāng)前的slave。這個(gè)問(wèn)題可以通過(guò)給所有的對(duì)端發(fā)送更新 (ARP應(yīng)答)來(lái)解決,應(yīng)答中包含他們獨(dú)一無(wú)二的硬件地址,從而導(dǎo)致流量重新分布。
    當(dāng)新的slave加入到bond中時(shí),或者某個(gè)未激活的slave重新 激活時(shí),接收流量也要重新分布。接收的負(fù)載被順序地分布(round robin)在bond中最高速的slave上
    當(dāng)某個(gè)鏈路被重新接上,或者一個(gè)新的slave加入到bond中,接收流量在所有當(dāng)前激活的slave中全部重新分配,通過(guò)使用指定的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ì)被新選出來(lái)的 curr_active_slave接管
    其實(shí)mod=6與mod=0的區(qū)別:mod=6,先把eth0流量占滿(mǎn),再占eth1,….ethX;而mod=0的話(huà),會(huì)發(fā)現(xiàn)2個(gè)口的流量都很穩(wěn)定,基本一樣的帶寬。而mod=6,會(huì)發(fā)現(xiàn)第一個(gè)口流量很高,第2個(gè)口只占了小部分流量。

小結(jié)

mode5和mode6不需要交換機(jī)端的設(shè)置,網(wǎng)卡能自動(dòng)聚合。mode4需要支持802.3ad。mode0,mode2和mode3理論上需要靜態(tài)聚合方式。
但實(shí)測(cè)中mode0可以通過(guò)mac地址欺騙的方式在交換機(jī)不設(shè)置的情況下不太均衡地進(jìn)行接收。

二、bond的配置實(shí)例

1、首先要看linux是否支持bonding,大部分發(fā)行版都支持

# modinfo bonding |more
filename:       /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/bonding/bonding.ko
author:         Thomas Davis, tadavis@lbl.gov and many others
description:    Ethernet Channel Bonding Driver, v3.6.0
version:        3.6.0
license:        GPL
srcversion:     353B1DC123506708446C57B
depends:        8021q,ipv6
vermagic:       2.6.32-431.el6.x86_64 SMP mod_unload modversions

如輸出以上信息,則說(shuō)明支持bonding,如果沒(méi)有,說(shuō)明內(nèi)核不支持bonding,需要重新編譯內(nèi)核
2、網(wǎng)卡配置文件
兩個(gè)物理網(wǎng)口分別是:eth0,eth1 綁定后的虛擬口是:bond0

[root@jacken ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
HWADDR=EC:F4:BB:DC:4C:0C
TYPE=Ethernet
UUID=669f0694-9c52-4792-bd67-22c9d2c17acb
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
[root@jacken ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
HWADDR=EC:F4:BB:DC:4C:0D
TYPE=Ethernet
UUID=1d2f30f4-b3f0-41a6-8c37-54f03115f7bd
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
[root@jacken ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
NAME='System bond0'
TYPE=Ethernet
NM_CONTROLLED=no
USERCTL=no
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.100
NETMASK=255.255.255.0
BONDING_OPTS='mode=1 miimon=100'
IPV6INIT=no

開(kāi)機(jī)自動(dòng)加載模塊到內(nèi)核

#echo 'options bonding mode=0 miimon=200' >> /etc/modprobe.d/dist.conf
#echo 'ifenslave bond0 eth0 eth1' >>/etc/rc.local
miimon=100

每100毫秒 (即0.1秒) 監(jiān)測(cè)一次路連接狀態(tài),如果有一條線(xiàn)路不通就轉(zhuǎn)入另一條線(xiàn)路; Linux的多網(wǎng)卡綁定功能使用的是內(nèi)核中的"bonding"模塊
如果修改為其它模式,只需要在BONDING_OPTS中指定mode=Number即可。USERCTL=no --是否允許非root用戶(hù)控制該設(shè)備
查看bond0狀態(tài):可以看到調(diào)用的是哪幾個(gè)物理網(wǎng)卡

#cat /proc/net/bonding/bond0

[root@compute05 ~]#  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: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: ec:f4:bb:dc:4c:0c
Slave queue ID: 0
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: ec:f4:bb:dc:4c:0d
Slave queue ID: 0

三、擴(kuò)展
上邊是兩個(gè)網(wǎng)卡(eth0、eth1)綁定成一個(gè)bond0,如果我們要設(shè)置多個(gè)bond口,比如物理網(wǎng)口eth0和eth1組成bond0,eth2和eth3組成bond1,那么網(wǎng)口設(shè)置文件的設(shè)置方法和上面
是一樣的,只是/etc/modprobe.d/dist.conf文件就不能疊加了。正確的設(shè)置方法有兩種:
1、第一種

alias bond0 bonding
alias bond1 bonding
options bonding max_bonds=2 miimon=200 mode=1

這樣所有的綁定只能使用一個(gè)mode了。
2、第二種

alias bond0 bonding
options bond0 miimon=100 mode=1
install bond1 /sbin/modprobe bonding -o bond1 miimon=100 mode=0
install bond2 /sbin/modprobe bonding -o bond2 miimon=100 mode=1
install bond3 /sbin/modprobe bonding -o bond3 miimon=100 mode=0

這種方式不同的bond口可以設(shè)定為不同的mode,注意開(kāi)機(jī)自動(dòng)啟動(dòng)/etc/rc.d/rc.local文件的設(shè)置

ifenslave bond0 eth0 eth1
ifenslave bond1 eth2 eth3
ifenslave bond2 eth4 eth5
ifenslave bond3 eth6 eth7

參考

http://lixin15.blog.51cto.com/3845983/1769338

http://linuxnote.blog.51cto.com/9876511/1680315

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容