linux 双网卡绑定(bonding)实现负载均衡或故障转移
linux 雙網(wǎng)卡綁定(bonding)實(shí)現(xiàn)負(fù)載均衡或故障轉(zhuǎn)移
| 我們?cè)谶@介紹的Linux雙網(wǎng)卡綁定實(shí)現(xiàn)就是使用兩塊網(wǎng)卡虛擬成為一塊網(wǎng)卡,這個(gè)聚合起來(lái)的設(shè)備看起來(lái)是一個(gè)單獨(dú)的以太網(wǎng)接口設(shè)備,通俗點(diǎn)講就是兩塊網(wǎng)卡具有相同的IP地址而并行鏈接聚合成一個(gè)邏輯鏈路工作。其實(shí)這項(xiàng)技術(shù)在Sun和Cisco中早已存在,被稱為Trunking和Etherchannel 技術(shù),在Linux的2.4.x的內(nèi)核中也采用這這種技術(shù),被稱為bonding。 ? ? ?bonding技術(shù)的最早應(yīng)用是在集群——beowulf上,為了提高集群節(jié)點(diǎn)間的數(shù)據(jù)傳輸而設(shè)計(jì)的。下面我們討論一下bonding 的原理,什么是bonding需要從網(wǎng)卡的混雜(promisc)模式說(shuō)起。我們知道,在正常情況下,網(wǎng)卡只接收目的硬件地址(MAC Address)是自身Mac的以太網(wǎng)幀,對(duì)于別的數(shù)據(jù)幀都濾掉,以減輕驅(qū)動(dòng)程序的負(fù)擔(dān)。但是網(wǎng)卡也支持另外一種被稱為混雜promisc的模式,可以接收網(wǎng)絡(luò)上所有的幀,比如說(shuō)tcpdump,就是運(yùn)行在這個(gè)模式下。bonding也運(yùn)行在這個(gè)模式下,而且修改了驅(qū)動(dòng)程序中的mac地址,將兩塊網(wǎng)卡的 Mac地址改成相同,可以接收特定mac的數(shù)據(jù)幀。然后把相應(yīng)的數(shù)據(jù)幀傳送給bond驅(qū)動(dòng)程序處理。 ? ? ?直接給兩塊網(wǎng)卡設(shè)置同一IP地址是不可能的。Kernels 2.4.12及以后的版本均供bonding模塊,以前的版本可以通過(guò)patch實(shí)現(xiàn)。 一、編輯虛擬網(wǎng)絡(luò)接口配置文件,指定網(wǎng)卡IP 假設(shè)eth0是對(duì)外服務(wù)的網(wǎng)卡,已經(jīng)調(diào)試好網(wǎng)絡(luò);eth1是希望與eth0同時(shí)對(duì)外提供服務(wù)的網(wǎng)卡。 # cd /etc/sysconfig/network-scripts/ # vi ifcfg-bond0 所以我建議執(zhí)行如下語(yǔ)句,將ifcfg-eth0復(fù)制一份再改。 # cp ifcfg-eth0 ifcfg-bon0 DEVICE=bond0  BOOTPROTO=static  IPADDR=[IP]  NETMASK=[MASK]  BROADCAST=[BROADCAST]  GATEWAY=[GATEWAY]  ONBOOT=yes  TYPE=Ethernet 修改ifcfg-eth0如下: DEVICE=eth0  BOOTPROTO=none  ONBOOT=yes  MASTER=bond0 #如果不寫,則必須做第四步  SLAVE=yes ? ? ? #如果不寫,則必須做第四步  USERCTL=yes DEVICE=eth1  BOOTPROTO=none  ONBOOT=yes  MASTER=bond0 #如果不寫,則必須做第四步  SLAVE=yes ? ? ? #如果不寫,則必須做第四步  USERCTL=yes 默認(rèn)情況下,內(nèi)核已支持bonding,只需要簡(jiǎn)單修改/etc/modprobe.conf 這個(gè)配置文檔就可以了:添加兩行 alias bond0 bonding  options bond0 miimon=100 mode=1 ? ? ?mode指定了bond0的工作模式,常用的是0和1,0表示負(fù)載均衡方式,1表示主從方式,可根據(jù)需要自行配置。常用的為0,1兩種。mode=0表示 load balancing (round-robin)為負(fù)載均衡方式,兩塊網(wǎng)卡都工作。mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主備的工作方式,也就是說(shuō)默認(rèn)情況下只有一塊網(wǎng)卡工作,另一塊做備份。bonding只能提供鏈路監(jiān)測(cè),即從主機(jī)到交換機(jī)的鏈路是否接通。如果只是交換機(jī)對(duì)外的鏈路down掉了,而交換機(jī)本身并沒(méi)有故障,那么bonding會(huì)認(rèn)為鏈路沒(méi)有問(wèn)題而繼續(xù)使用。 miimon是用來(lái)進(jìn)行鏈路監(jiān)測(cè)的。比如:miimon=100,那么系統(tǒng)每100ms監(jiān)測(cè)一次鏈路連接狀態(tài),如果有一條線路不通就轉(zhuǎn)入另一條線路。 四、增加開(kāi)機(jī)啟動(dòng)腳本 在 /etc/rc.d/rc.local里加上 ifenslave bond0 eth0 eth1 五、重啟 reboot或者service network restart 都可以看到結(jié)果。 六、測(cè)試 ? ? ?ping著某個(gè)地址,當(dāng)然是能ping通的地址啦。如果發(fā)現(xiàn)網(wǎng)絡(luò)不通,請(qǐng)檢查ifcfg-bond0的網(wǎng)絡(luò)設(shè)置。 然后拔掉一根網(wǎng)線,如果ping沒(méi)斷,證明拔了一根backup的線,不是主線,重新插上等兩分鐘。 此時(shí)拔掉另一根網(wǎng)線,估計(jì)現(xiàn)在可以看到ping超時(shí)或者卡在那里,稍等10~30秒,ping繼續(xù)連同。 測(cè)試成功。 | 
轉(zhuǎn)載于:https://blog.51cto.com/netkailong/1200887
總結(jié)
以上是生活随笔為你收集整理的linux 双网卡绑定(bonding)实现负载均衡或故障转移的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: nullnulle-人事管理系统-人事档
- 下一篇: 【分享】java反射获取、设置、打印对象
