雙網卡綁定這個技術已經很老了,google一搜也一大堆,今天自己也小記一下
Linux雙網卡綁定實現就是使用兩塊網卡虛擬成爲一塊網卡,這個聚合起來的設備看起來是一個單獨的以太網接口設備,通俗點講就是兩塊網卡具有相同的IP 地址而並行鏈接聚合成一個邏輯鏈路工作。其實這項 技術在Sun和Cisco中早已存在,被稱爲Trunking和Etherchannel技術,在Linux的2.4.x的內核中也採用這這種技術,被稱 爲bonding。bonding技術的最早應用是在集羣——beowulf上,爲了提高集羣節點間的數據傳輸而設計的。
下面我們討論一下bonding 的原理,什麼是bonding需要從網卡的混雜(promisc)模式說起。我們知道,在正常情況下,網卡只接收目的硬件地址(MAC Address)是自身Mac的以太網幀,對於別的數據幀都濾掉,以減輕驅動程序的負擔。但是網卡也支持另外一種被稱爲混雜promisc的模式,可以接 收網絡上所有的幀,比如說tcpdump,就是運行在這個模式下。bonding也運行在這個模式下,而且修改了驅動程序中的mac地址,將兩塊網卡的 Mac地址改成相同,可以接收特定mac的數據幀。然後把相應的數據幀傳送給bond驅動程序處理。
Centos 6.0
1、修改網卡配置
首先是bond0
- cd /etc/sysconfig/network-scripts
- vim ifcfg-bond0
- DEVICE="bond0"
- BOOTPROTO=static
- BROADCAST="192.168.4.255"
- DNS1="218.108.248.200"
- GATEWAY="192.168.4.1"
- IPADDR="192.168.4.130"
- NETMASK="255.255.255.0"
- ONBOOT="yes"
- TYPE=Ethernet
接下來是eth0、eth1
- vim ifcfg-eth0
- DEVICE="eth0"
- BOOTPROTO=none
- ONBOOT="yes"
- TYPE=Ethernet
- MASTER=bond0
- SLAVE=yes
- vim ifcfg-eth1
- DEVICE="eth1"
- BOOTPROTO=none
- ONBOOT="yes"
- TYPE=Ethernet
- MASTER=bond0
- SLAVE=yes
2、加載模塊
- vim /etc/modprobe.d/dist.conf
- alias bond0 bonding
- options bond0 miimon=100 mode=0
對於這些參數解釋,網上也是一大堆
- miimon是用來進行鏈路監測的。 比如:miimon=100,那麼系統每100ms監測一次鏈路連接狀態,如果有一條線路不通就轉入另一條線路;mode的值表示工作模式,他共有0,1,2,3,4,5,6四種模式,常用的爲0,1兩種。
- mode=0表示load balancing (round-robin)爲負載均衡方式,兩塊網卡都工作。
- mode=1表示fault-tolerance (active-backup)提供冗餘功能,工作方式是主備的工作方式,也就是說默認情況下只有一塊網卡工作,另一塊做備份.
- bonding只能提供鏈路監測,即從主機到交換機的鏈路是否接通。如果只是交換機對外的鏈路down掉了,而交換機本身並沒有故障,那麼bonding會認爲鏈路沒有問題而繼續使用
- 這7種工作方式如下:
- =0: (balance-rr) Round-robin policy: (平衡掄循環策略):傳輸數據包順序是依次傳輸,直到最後一個傳輸完畢, 此模式提供負載平衡和容錯能力。
- =1: (active-backup) Active-backup policy:(主-備份策略):只有一個設備處於活動狀態。 一個宕掉另一個馬上由備份轉換爲主設備。mac地址是外部可見得。 此模式提供了容錯能力。
- =2:(balance-xor) XOR policy:(廣播策略):將所有數據包傳輸給所有接口。 此模式提供了容錯能力。
- =3:(balance-xor) XOR policy:(平衡策略): 傳輸根據原地址布爾值選擇傳輸設備。 此模式提供負載平衡和容錯能力。
- =4:(802.3ad) IEEE 802.3ad Dynamic link aggregation.IEEE 802.3ad 動態鏈接聚合:創建共享相同的速度和雙工設置的聚合組。
- =5:(balance-tlb) Adaptive transmit load balancing(適配器傳輸負載均衡):沒有特殊策略,第一個設備傳不通就用另一個設備接管第一個設備正在處理的mac地址,幫助上一個傳。
- =6:(balance-alb) Adaptive load balancing:(適配器傳輸負載均衡):大致意思是包括mode5,bonding驅動程序截獲 ARP 在本地系統發送出的請求,用其中之一的硬件地址覆蓋從屬設備的原地址。就像是在服務器上不同的人使用不同的硬件地址一樣。
3、重啓網卡
重啓的時候,可以看到網卡是否成功啓動,啓動成功之後就是雙網卡綁定狀態了
至於網上大部分說的ifenslave bond0 eth0 eth1,這只是一條啓用命令而已,像上述配置好了的話,這條命令根本不用執行了,也不用去開機執行,因爲開機就會加載網卡配置文件了
若要查看綁定的網卡狀態
Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:10:5c:ef:b1:fc
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:10:5c:ef:b1:fd
ifenslave是centos默認就安裝了,它的一些使用方法可以man看看
經過測試,雙網卡綁定之後,帶寬果然有增加至少50%
Ubuntu 10.04 server
沒安裝的話,執行
寫道
1、修改網卡配置
Ubuntu的稍微簡單一些
auto lo
iface lo inet loopback
auto bond0
iface bond0 inet static
address 192.168.4.132
netmask 255.255.255.0
gateway 192.168.4.1
post-up ifenslave bond0 eth0 eth1
pre-down ifenslave -d bond0 eth0 eth1
2、加載模塊
首先執行
這樣就不用重啓設備了
當然,配置文件也同樣需要添加
bonding mode=0 miimon=100
3、重啓網卡
執行
完成以後,同樣可以查看一下bonding的狀態
root@132:/etc/network# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 0
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:10:5c:ef:b2:a2
Slave queue ID: 0
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:10:5c:ef:b2:a3
Slave queue ID: 0