理解Linux下網(wǎng)卡的bonding

發(fā)現(xiàn)工作中可能會(huì)用到Linux下網(wǎng)卡綁定相關(guān)的知識(shí)攀甚。找了些文章看,然后一通混剪岗喉,各家所長(zhǎng)為我所用秋度。

什么是網(wǎng)卡bond

網(wǎng)卡bonding

網(wǎng)卡bond,即網(wǎng)卡綁定钱床,也稱(chēng)作網(wǎng)卡捆綁荚斯。網(wǎng)卡綁定有多種稱(chēng)謂:Port Trunking, Channel Bonding, Link Aggregation, NIC teaming等等,其實(shí)說(shuō)的是一回事查牌。就是將兩個(gè)或者更多的物理網(wǎng)卡綁定成一個(gè)虛擬網(wǎng)卡事期。通過(guò)綁定可以達(dá)到鏈路冗余、帶寬倍增纸颜、負(fù)載均衡等目的兽泣。是生產(chǎn)場(chǎng)景中提高性能和可靠性的一種常用技術(shù)。
Linux內(nèi)置了網(wǎng)卡綁定的驅(qū)動(dòng)程序胁孙,可以將多個(gè)物理網(wǎng)卡分別捆綁成多個(gè)不同的邏輯網(wǎng)卡(例如把eth0唠倦、eth1捆綁成bond0,把eth2涮较、eth3捆綁成bond1)稠鼻。對(duì)于每一個(gè)bond接口來(lái)說(shuō),可以分別定義不同的綁定模式和鏈路監(jiān)視選項(xiàng)法希。

bond的模式

對(duì)應(yīng)于不同的負(fù)載均衡和容錯(cuò)特性需求枷餐,Linux網(wǎng)卡bond的模式共有bond0-bond6共7種靶瘸。

mode=0(balance-rr)

表示負(fù)載分擔(dān)round-robin苫亦,并且是輪詢(xún)的方式,比如第一個(gè)包走eth0怨咪,第二個(gè)包走eth1屋剑,直到數(shù)據(jù)包發(fā)送完畢。

  • 優(yōu)點(diǎn):可用帶寬提高一倍
  • 缺點(diǎn):需要接入交換機(jī)做端口聚合诗眨,否則可能無(wú)法使用

mode=1(active-backup)

表示主備模式唉匾,即同一時(shí)間時(shí)只有1塊網(wǎng)卡在工作。

  • 優(yōu)點(diǎn):冗余性高
  • 缺點(diǎn):鏈路利用率低,兩塊網(wǎng)卡只有1塊在工作巍膘,N塊網(wǎng)卡綁定時(shí)利用率是1/N

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

表示使用MAC地址的XOR Hash負(fù)載分擔(dān)厂财,網(wǎng)絡(luò)上特定的通信雙方會(huì)始終經(jīng)由某一個(gè)網(wǎng)卡的鏈路通信,和交換機(jī)的聚合強(qiáng)制不協(xié)商方式配合峡懈。(需要xmit_hash_policy[1]璃饱,需要交換機(jī)配置port channel)

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

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

表示所有包從所有綁定的網(wǎng)絡(luò)接口發(fā)出,不考慮均衡流量的分擔(dān)磷支,只有冗余機(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ò)能力

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í)锭弊,要在同樣的速率和雙工模式堪澎。

  • 特點(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ī))支持IEEE802.3ad Dynamic link aggregation
    • 條件3:大多數(shù)switch(交換機(jī))需要經(jīng)過(guò)特定配置才能支持802.3ad模式

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的速率

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

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

與交換機(jī)對(duì)接的要求

模式1、模式5和模式6不需要交換機(jī)端的設(shè)置,網(wǎng)卡能自動(dòng)聚合爹殊。模式4需要支持802.3ad蜕乡。模式0,模式2和模式3理論上需要靜態(tài)聚合方式梗夸。(據(jù)說(shuō)實(shí)測(cè)中模式0可以通過(guò)mac地址欺騙的方式在交換機(jī)不設(shè)置的情況下不太均衡地進(jìn)行接收异希。)

Linux下的配置方法

第一步:創(chuàng)建ifcfg-bond0

創(chuàng)建ifcfg-bond0文件,配置IP地址绒瘦、子網(wǎng)掩碼称簿、網(wǎng)關(guān)等參數(shù)。

# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0 
IPADDR=192.168.1.12 
NETMASK=255.255.255.0 
GATEWAY=192.168.1.1 
USERCTL=no 
BOOTPROTO=none 
ONBOOT=yes

第二步:修改網(wǎng)卡配置文件ifcfg-eth*(以三個(gè)網(wǎng)卡綁定為例)

修改eth0惰帽、eth1憨降、eth2的配置文件,注釋或刪除IP地址该酗、掩碼授药、網(wǎng)關(guān)和MAC地址的配置,添加關(guān)于MASTER和SLAVE的設(shè)置

# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 
BOOTPROTO=none 
ONBOOT=yes 
# Settings for Bond 
MASTER=bond0 
SLAVE=yes

# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1 
BOOTPROTO=none  
ONBOOT=yes 
USERCTL=no 
# Settings for bonding 
MASTER=bond0 
SLAVE=yes

# cat /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2 
BOOTPROTO=none 
ONBOOT=yes 
MASTER=bond0 
SLAVE=yes

第三步:確定選用何種bonding模式

根據(jù)實(shí)際需求呜魄,選擇合適的bonding模式悔叽,為bond0設(shè)置bonding kernel module。
/etc/modprobe.conf中添加以下內(nèi)容

# bonding commands 
alias bond0 bonding 
options bond0 mode=1 miimon=200

有些Linux是在/etc/modprobe.d/下創(chuàng)建一個(gè)新的設(shè)置文件bonding.conf

options中
miimon:監(jiān)視網(wǎng)絡(luò)鏈接的頻度爵嗅,單位是毫秒娇澎,我們?cè)O(shè)置的是200毫秒。為0則不檢測(cè)
max_bonds:配置的bond口個(gè)數(shù)
mode:bond模式睹晒,主要有0-6共7種趟庄,在一般的實(shí)際應(yīng)用中,0和1用的比較多

第四步:激活bonding驅(qū)動(dòng)

# modprobe bonding

確認(rèn)模塊是否加載成功

#lsmod | grep bonding 

第五步:重啟網(wǎng)絡(luò)伪很,并確認(rèn)一下bond0的狀態(tài)戚啥。

重啟網(wǎng)絡(luò)(或重啟主機(jī)):

# service network restart

查看bond0的狀態(tài):

# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver
Bonding Mode: adaptive load balancing 
Primary Slave: None 
Currently Active Slave: eth2 
MII Status: up 
MII Polling Interval (ms): 100 
Up Delay (ms): 0 
Down Delay (ms): 0
Slave Interface: eth2 
MII Status: up 
Link Failure Count: 0 
Permanent HW addr: 00:13:72:80: 62:f0

另外還可以使用ifconfig -a | grep HWaddr查看bond0接口是否處于活動(dòng)狀態(tài),以及各網(wǎng)卡MAC地址情況锉试。

# ifconfig | grep HWaddr  
bond0 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74  
eth0 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74  
eth1 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74 
eth2 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74 

從上面的確認(rèn)信息中猫十,我們可以看到3個(gè)重要信息:
1.現(xiàn)在的bonding模式是active-backup
2.現(xiàn)在Active狀態(tài)的網(wǎng)口是eth2
3.bond0,eth0、eth1呆盖、的物理地址和處于active狀態(tài)下的eth2的物理地址相同拖云,這樣是為了避免上位交換機(jī)發(fā)生混亂。

測(cè)試驗(yàn)證

可以ping一個(gè)遠(yuǎn)程地址絮短,然后斷開(kāi)Active狀態(tài)的eth2口網(wǎng)線(xiàn)江兢,驗(yàn)證主備模式是否能正常切換,業(yè)務(wù)是否受到影響丁频。

ifenslave命令

將網(wǎng)口添加到bond中:ifenslave bond eth0 eth1【bond要先up】
將bond中刪除網(wǎng)口:ifenslave -d bond eth0
bond中網(wǎng)口主備倒換:ifenslave -c bond eth1

多個(gè)bond口如何處理

前面只是3個(gè)網(wǎng)口綁定成一個(gè)bond1的情況,如果我們要設(shè)置多個(gè)bond口,比如物理網(wǎng)口eth0和eth1組成bond0席里,eth2和eth3組成bond1應(yīng)該如何設(shè)置呢叔磷?
網(wǎng)口設(shè)置文件的設(shè)置方法和上面第1步講的方法相同,只是/etc/modprobe.d/bonding.conf的設(shè)定就不能像下面這樣簡(jiǎn)單的疊加了:

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

正確的設(shè)置方法有2種:
第一種:你可以看到奖磁,這種方式的話(huà)改基,多個(gè)bond口的模式就只能設(shè)成相同的了:

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

第二種:這種方式,不同的bond口的mode可以設(shè)成不一樣:

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

按照上面這2種設(shè)置方法咖为,現(xiàn)在如果是要設(shè)置3個(gè)秕狰,4個(gè),甚至更多的bond口躁染,可是可以的鸣哀。

參考資料:
中文:
https://blog.csdn.net/shengerjianku/article/details/79221886
https://www.cnblogs.com/tcicy/p/8554014.html
https://www.cnblogs.com/fan-gx/p/11069845.html
http://www.reibang.com/p/1919bdb7e8c2
英文:
https://www.thegeekdiary.com/what-are-the-network-bonding-modes-in-centos-rhel/
http://www.enterprisenetworkingplanet.com/linux_unix/article.php/3850636/Understanding-NIC-Bonding-with-Linux.htm
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/networking_guide/overview-of-bonding-modes-and-the-required-settings-on-the-switch
http://www.linuxhowto.in/2012/08/modes-of-bonding-network-bonding.html
https://www.cloudibee.com/network-bonding-modes/


  1. xmit_hash_policy的解釋?zhuān)哼@個(gè)參數(shù)可用于mode2和mode4,有以下幾種:
    layer2:使用二層幀頭作為計(jì)算分發(fā)出口的參數(shù)吞彤,這導(dǎo)致通過(guò)同一個(gè)網(wǎng)關(guān)的數(shù)據(jù)流將完全從一個(gè)端口發(fā)送我衬,為了更加細(xì)化分發(fā)策略,必須使用一些三層信息饰恕,然而卻增加了計(jì)算開(kāi)銷(xiāo)挠羔。
    layer2+3:在1的基礎(chǔ)上增加了三層的ip報(bào)頭信息,計(jì)算量增加了埋嵌,然而負(fù)載卻更加均衡了破加,一個(gè)個(gè)主機(jī)到主機(jī)的數(shù)據(jù)流形成并且同一個(gè)流被分發(fā)到同一個(gè)端口,根據(jù)這個(gè)思想雹嗦,如果要使負(fù)載更加均衡拌喉。
    layer3+4:可以形成一個(gè)個(gè)端口到端口的流,負(fù)載更加均衡俐银。通過(guò)TCP及UDP端口及其IP地址進(jìn)行HASH計(jì)算尿背。
    miimon和arp:使用miimon僅能檢測(cè)鏈路層的狀態(tài),也就是鏈路層的端到端連接(即交換機(jī)某個(gè)口和與之直連的本地網(wǎng)卡口)捶惜,然而交換機(jī)的上行口如果down掉了還是無(wú)法檢測(cè)到田藐,因此必然需要網(wǎng)絡(luò)層的狀態(tài)檢測(cè),最簡(jiǎn)單也是最直接的方式就是arp了吱七,可以直接arp網(wǎng)關(guān)汽久,如果定時(shí)器到期網(wǎng)關(guān)還沒(méi)有回復(fù)arp reply,則認(rèn)為鏈路不通了踊餐。 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末景醇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吝岭,更是在濱河造成了極大的恐慌三痰,老刑警劉巖吧寺,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異散劫,居然都是意外死亡稚机,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)获搏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)赖条,“玉大人,你說(shuō)我怎么就攤上這事常熙∥痴В” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵裸卫,是天一觀的道長(zhǎng)仿贬。 經(jīng)常有香客問(wèn)我,道長(zhǎng)彼城,這世上最難降的妖魔是什么诅蝶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮募壕,結(jié)果婚禮上调炬,老公的妹妹穿的比我還像新娘。我一直安慰自己舱馅,他們只是感情好缰泡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著代嗤,像睡著了一般棘钞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上干毅,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天宜猜,我揣著相機(jī)與錄音,去河邊找鬼硝逢。 笑死姨拥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的渠鸽。 我是一名探鬼主播叫乌,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼徽缚!你這毒婦竟也來(lái)了憨奸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凿试,失蹤者是張志新(化名)和其女友劉穎排宰,沒(méi)想到半個(gè)月后似芝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡额各,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年国觉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吧恃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虾啦。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖痕寓,靈堂內(nèi)的尸體忽然破棺而出傲醉,到底是詐尸還是另有隱情,我是刑警寧澤呻率,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布硬毕,位于F島的核電站,受9級(jí)特大地震影響礼仗,放射性物質(zhì)發(fā)生泄漏吐咳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一元践、第九天 我趴在偏房一處隱蔽的房頂上張望韭脊。 院中可真熱鬧,春花似錦单旁、人聲如沸沪羔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蔫饰。三九已至,卻和暖如春愉豺,著一層夾襖步出監(jiān)牢的瞬間篓吁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工蚪拦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杖剪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓外盯,卻偏偏與公主長(zhǎng)得像摘盆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子饱苟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356