linux 單網卡綁定多IP及BONGDING的實現

Linux Bond

1 bond 的概念

Linux雙網卡綁定實現就是使用兩塊網卡虛擬成爲一塊網卡,這個聚合起來的設備看起來是一個單獨的以太網接口設備,通俗點講就是兩塊網卡具有相同的IP地址而並行鏈接聚合成一個邏輯鏈路工作。

2 bond 技術的由來

這項 技術在Sun和Cisco中早已存在,被稱爲Trunking和Etherchannel技術,在Linux的2.4.x的內核中也採用這這種技術,被稱爲bonding。

3 bond 工作原理

在正常情況下,網卡只接收目的硬件地址(MAC Address)是自身Mac的以太網幀,對於別的數據幀都濾掉,以減輕驅動程序的負擔。但是網卡也支持另外一種被稱爲混雜promisc的模式,可以接收網絡上所有的幀,bonding也運行在這個模式下,而且修改了驅動程序中的mac地址,將兩塊網卡的Mac地址改成相同,可以接收特定mac的數據幀。然後把相應的數據幀傳送給bond驅動程序處理。

4 bond 文件配置

查看是否支持 a.  vim /etc/modprobe.d/bonding.conf  alias bond0  bonding  ---以使系統在啓動時加載bonding模塊,對外虛擬網絡接口設備爲 bond0options bond0 miimon=100 mode=1   說明:miimon是用來進行鏈路監測的。 比如:miimon=100,那麼系統每100ms監測一次鏈路連接狀態,如果有一條線路不通就轉入另一條線路;mode的值表示工作模式,他共有0,1,2,3四種模式,常用的爲0,1兩種。  mode=0表示load balancing (round-robin)爲負載均衡方式,兩塊網卡都工作。 mode=1表示fault-tolerance (active-backup)提供冗餘功能,工作方式是主備的工作方式,也就是說默認情況下只有一塊網卡工作,另一塊做備份.  b.加載bonding模塊 modprobe  bonding  加載bonding模塊

5 mode模式說明

a: 主備模式:mode = 1

主備模式下,Linux Bonding實現會將Bond的兩個slave網口的MAC地址改爲Bond的MAC地址,而Bond的MAC地址是Bond創建啓動後,主用slave網口的MAC地址。當住用網口故障後,Bond會切換到備用網口,切換過程中,上層的應用是無感知不受影響的,因爲Bond在驅動層,會接管上層應用的數據包,緩存起來等備用網卡起來後再通過備用網卡發送出去。當然,前提是切換時間很短,否則緩衝區是會溢出的,溢出後就開始丟包了。   b:負載均衡模式:mode = 0

 負載均衡模式下,Linux Bonding實現可以保持兩個slave網口的MAC地址不變,Bond的MAC地址是其中一個網卡的,Bond MAC地址的選擇是根據Bond自己的算法實現  Bond負載均衡模式下,要求交換機做配置,是的兩個slave網口能夠互通,否則的話,丟包會很厲害,基本沒法使用。這個是因爲Bond的負載均衡模式算法,會將包在兩個網口之間傳輸以達到負載均衡。該模式下,兩個slave有獨立的MAC地址

上面的兩種方式是比較常用的,除此之外以下mode模式

mode指定了bond0的工作模式,在redhat中有0-6共7種工作模式,常用的是0和1。

mode=0 表示 load balancing (round-robin)爲負載均衡方式,兩塊網卡都工作。mode=1 表示 fault-tolerance (active-backup)提供冗餘功能,工作方式是主 從的工作方式,也就是說默認情況下只有一塊網卡工作,另一塊做備份。 mode=2 表示 XOR policy 爲平衡策略。此模式提供負載平衡和容錯能力 mode=3 表示 broadcast 爲廣播策略。此模式提供了容錯能力 mode=4 表示 IEEE 802.3ad Dynamic link aggregation 爲 IEEE 802.3ad 爲 動態鏈接聚合。該策略可以通過 xmit_hash_policy 選項從缺省的 XOR 策略改變到其他策略。 mode=5 表示 Adaptive transmit load balancing 爲適配器傳輸負載均衡。該 模式的必要條件:ethtool 支持獲取每個 slave 的速率 mode=6 表示 Adaptive load balancing 爲適配器適應性負載均衡。該模式包含 了 balance-tlb 模式,同時加上針對 IPV4 流量的接收負載均衡(receive load   balance, rlb),而且不需要任何 switch(交換機)的支持。  bonding 只能提供鏈路監測,即從主機到交換機的鏈路是否接通。如果只是交換機對 外的鏈路 down 掉了,而交換機本身並沒有故障,那麼 bonding 會認爲鏈路沒有問題而繼 續使用。

6 如何查看當前bond的模式

#cat /proc/net/bonding/bond0

輸出類似如下:

Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) Bonding Mode: fault-tolerance (active-backup)Primary Slave: eth4 (primary_reselect always)Currently Active Slave: eth4MII Status: upMII Polling Interval (ms): 300Up Delay (ms): 0Down Delay (ms): 0 Slave Interface: eth6MII Status: upSpeed: 10000 MbpsDuplex: fullLink Failure Count: 1Permanent HW addr: 8c:dc:d4:12:bf:c8Slave queue ID: 0 Slave Interface: eth4MII Status: upSpeed: 10000 MbpsDuplex: fullLink Failure Count: 1Permanent HW addr: 8c:dc:d4:12:b0:80Slave queue ID: 0

7 如何自己配置bond--方式一

step 1、編輯虛擬網絡接口配置文件,指定網卡IP 假設eth0是對外服務的網卡,已經調試好網絡;eth1是希望與eth0同時對外提供服務的網卡 # cd /etc/sysconfig/network-scripts/ #vi ifcfg-bond0 寫入如下信息和原來 ifcfg-eth0 的配置其實差不多。所以我建議執行如下語句,將ifcfg-eth0複製一份再改。 # cp ifcfg-eth0 ifcfg-bon0 將ifcfg-bon0的信息修改大致如下: DEVICE=bond0BOOTPROTO=staticIPADDR=[IP]NETMASK=[MASK]BROADCAST=[BROADCAST]GATEWAY=[GATEWAY]ONBOOT=yesTYPE=Ethernet

step 2 配置真實網卡

修改ifcfg-eth0如下:DEVICE=eth0BOOTPROTO=noneONBOOT=yesMASTER=bond0     #如果不寫,則必須做第四步SLAVE=yes             #如果不寫,則必須做第四步USERCTL=yes

類似地修ifcfg-eth1如下:

DEVICE=eth1BOOTPROTO=noneONBOOT=yesMASTER=bond0     #如果不寫,則必須做第四步SLAVE=yes             #如果不寫,則必須做第四步USERCTL=yes step 3、加載模塊,讓系統 支持bonding 默認情況下,內核已支持bonding-- 只需要簡單修改/etc/modprobe.conf 這個配置文檔就可以了:添加兩行 alias bond0 bonding options bond0 miimon=100 mode=1 step 4、增加開機啓動腳本 在 /etc/rc.d/rc.local里加上

ifenslave bond0 eth0 eth1

如果eth0和eth1都寫了MASTER和SLAVE,則上面的步驟做不做都無所謂。

7 如何自己配置bond--方式二

 step 1:create a bond device, simply follow these three steps :   - ensure that the required drivers are properly loaded :     # modprobe bonding ; modprobe <3c59x|eepro100|pcnet32|tulip|...>  step 2:assign an IP address to the bond device :     # ifconfig bond0 <addr> netmask <mask> broadcast <bcast>  step 3: attach all the interfaces you need to the bond device :     # ifenslave [{-f|--force}] bond0 eth0 [eth1 [eth2]...] If bond0 didn't have a MAC address, it will take eth0's. Then, all     interfaces attached AFTER this assignment will get the same MAC addr.     (except for ALB/TLB modes)

8 Linux 單網卡綁定多IP

方式 1、單網卡綁定多IP在Redhat系列中的實現方法 假設需要綁定多IP的網卡是eth0,請在/etc/sysconfig/network-scripts/目錄裏面創建一個名爲ifcfg-eth0:0的文件

內容樣例爲:

DEVICE=”eth0:0″IPADDR=”192.168.0.2″BROADCAST=”192.168.0.255″NETMASK=”255.255.255.0″ONBOOT=”yes” 其中的DEVICE爲設備的名稱,IPADDR爲此設備的IP地址,BROADCAST是廣播地址---可以省略 NETMASK爲子網掩碼,ONBOOT 表示在系統啓動時自動啓動。 如果需要再綁定多一個IP地址,只需要把文件名和文件內的DEVICE中的eth0:x加一後修改其中IP等信息即可 LINUX最多可以支持255個IP別名。  方式 2:ifconfig eth0:1 192.168.0.3 broadcast 192.168.0.255 netmask 255.255.255.0 可以把上述命令加在啓動自運行文件裏面,Linux是/etc/rc.d/rc.local。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章