原理:
多塊網(wǎng)卡虛擬成一張,實現(xiàn)冗余;多張網(wǎng)卡對外顯示一張,具有同一個IP;網(wǎng)絡(luò)配置都會使用Bonding技術(shù)做網(wǎng)口硬件層面的冗余,防止單個網(wǎng)口應(yīng)用的單點故障。
對于多物理網(wǎng)卡的 Bond 網(wǎng)卡而言,其中一塊物理網(wǎng)卡會被設(shè)置為 Master(主設(shè)備),其他的網(wǎng)卡都是 Slave(從設(shè)備),Bond 網(wǎng)卡的 MAC 地址取自標(biāo)志為 Master 的
物理 網(wǎng)卡,然后將這個 MAC 地址復(fù)制到其他物理網(wǎng)卡上;
工作模式:
在主備模式下 , 只有主網(wǎng)卡 eth0 工作,eth1 作為備份網(wǎng)卡是不工作的,只有當(dāng)一個網(wǎng)絡(luò)接口失效時 ( 例如主交換機掉電等 ),為了不會出現(xiàn)網(wǎng)絡(luò)中斷,系統(tǒng)會按照配置指定的網(wǎng)卡順序啟動工作,保證機器仍能對外服務(wù),起到了失效保護的功能。
在負(fù)載均衡模式下,由于兩塊網(wǎng)卡都正常工作,它能提供兩倍的帶寬,在這種情況下出現(xiàn)一塊網(wǎng)卡失效,僅僅會是服務(wù)器出口帶寬下降,也不會影響網(wǎng)絡(luò)使用。
不足:
1. 我們先看主備模式
主備模式下,Linux Bonding實現(xiàn)會將Bond的兩個slave網(wǎng)口的MAC地址改為Bond的MAC地址,而Bond的MAC地址是Bond創(chuàng)建啟動后,主用slave網(wǎng)口的MAC地址。
當(dāng)主用網(wǎng)口故障后,Bond會切換到備用網(wǎng)口,切換過程中,上層的應(yīng)用是無感知不受影響的,因為Bond在驅(qū)動層,會接管上層應(yīng)用的數(shù)據(jù)包,緩存起 來等備用網(wǎng)卡起來后再通過備用網(wǎng)卡發(fā)送出去。當(dāng)然,前提是切換時間很短,否則緩沖區(qū)是會溢出的,溢出后就開始丟包了。
2. 再看負(fù)載均衡模式
負(fù)載均衡模式下,Linux Bonding實現(xiàn)可以保持兩個slave網(wǎng)口的MAC地址不變,Bond的MAC地址是其中一個網(wǎng)卡的,Bond MAC地址的選擇是根據(jù)Bond自己實現(xiàn)的一個算法來的,具體如何選擇還沒有研究。
當(dāng)然,這里要重點說明的是,Bond負(fù)載均衡模式下,要求交換機做配置,是的兩個slave網(wǎng)口能夠互通,否則的話,丟包會很厲害,基本沒法使用。這個是因為Bond的負(fù)載均衡模式算法,會將包在兩個網(wǎng)口之間傳輸以達到負(fù)載均衡。
由于負(fù)載均衡模式下,兩個slave有獨立的MAC地址,你可能會想,我能否給slave網(wǎng)口再綁定一個IP地址,用作其他用途。
這種方法是實現(xiàn)不了的。
負(fù)載均衡模式下,兩個slave網(wǎng)口在操作性系統(tǒng)上看到是兩個獨立的MAC地址,但是當(dāng)你指定一個MAC地址發(fā)送包的時候,實際上發(fā)生的現(xiàn)象,不是你期望的。你指定MAC地址1發(fā)包,這個數(shù)據(jù)包可能到MAC地址2出去了。
這個是因為Bond對這兩個網(wǎng)口做了手腳,改了網(wǎng)口的驅(qū)動??雌饋硭麄冇歇毩⒌腗AC地址,實際上他們的MAC地址不是獨立的,只能給Bond使用。
不足
從上面的介紹中,很容易看到Bond的一點不足:
Bond更改了網(wǎng)口的驅(qū)動,其網(wǎng)口不能被用作其他用途。
Bond還有一點不足就是其故障監(jiān)測上面:
Bond默認(rèn)只能做網(wǎng)口MII監(jiān)測不能做鏈路監(jiān)測(鏈路是指本機到網(wǎng)關(guān)的路徑),也就是只能監(jiān)測網(wǎng)口是否連接(網(wǎng)口是否亮);當(dāng)然Bond也支持ARP協(xié)議的鏈路監(jiān)測,但是ARP鏈路監(jiān)測在一些場景下,太消耗資源,得不償失。我們曾經(jīng)在實際應(yīng)用中使用過,效果確實不好。