linux多網卡捆綁

(1)編輯虛擬網絡接口配置文件(bond0),並指定網卡IP 
vi   /etc/sysconfig/network-scripts/ifcfg-bond0 
DEVICE=bond0 
ONBOOT=yes 
BOOTPROTO=static 
IPADDR=192.168.0.254 
BROADCAST=192.168.0.255 
NETMASK=255.255.255.0 
NETWORK=192.168.0.0 
GATEWAY=192.168.0.1 
USERCTL=no 
TYPE=Ethernet 
注意:不要指定MAC地址

vi   /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0 
BOOTPROTO=none 
ONBOOT=yes 
USERCTL=no 
MASTER=bond0   ------添加 
SLAVE=yes           ------添加 
注意:建議不要指定MAC地址,其餘保持不變即可,註釋掉ip,掩碼,網關

vi   /etc/sysconfig/network-scripts/ifcfg-eth1 
DEVICE=eth1 
BOOTPROTO=none 
ONBOOT=yes 
USERCTL=no 
MASTER=bond0   ------添加 
SLAVE=yes           ------添加 
注意:建議不要指定MAC地址,其餘保持不變即可,註釋掉ip,掩碼,網關

4.修改/etc/modprobe.conf,配置綁定模型

加入以下內容:

alias bond0 bonding

options bond0 millmon=100 mode=0

這樣配置完就不需要在對/etc/rc.local進行修改了

注:{一般會在/etc/rc.local增加以下內容:ifenslave bond0 eth0 eth1,負責在系統啓動時將虛擬網卡和兩張物理網卡相綁定,使用本方法不需要此步}

說明: 
miimon=100 
miimon是指多久時間要檢查網路一次,單位是ms(毫秒) 
這邊的100,是100ms,即是0.1秒 
意思是假設其中有一條網路斷線,會在0.1秒內自動備援 
mode共有七種(0~6) 
mode=0:平衡負載模式,有自動備援,但需要”Switch”支援及設定。 
mode=1:自動備援模式,其中一條線若斷線,其他線路將會自動備援。

mode=6:平衡負載模式,有自動備援,不必”Switch”支援及設定。

需要說明的是如果想做成mode 0的負載均衡,僅僅設置這裏options bond0 miimon=100 mode=0是不夠的,與網卡相連的交換機必須做特殊配置(這兩個端口應該採取聚合方式),因爲做bonding的這兩塊網卡是使用同一個MAC地址. 
從原理分析一下(bond運行在mode 0下): 
mode 0下bond所綁定的網卡的IP都被修改成相同的mac地址,如果這些網卡都被接在同一個交換機,那麼交換機的arp表裏這個mac地址對應的端口就有多 個,那麼交換機接受到發往這個mac地址的包應該往哪個端口轉發呢?正常情況下mac地址是全球唯一的,一個mac地址對應多個端口肯定使交換機迷惑了。 
所以 mode0下的bond如果連接到交換機,交換機這幾個端口應該採取聚合方式(cisco稱爲 ethernetchannel,foundry稱爲portgroup),因爲交換機做了聚合後,聚合下的幾個端口也被捆綁成一個mac地址.我們的解 決辦法是,兩個網卡接入不同的交換機即可。

mode6模式下無需配置交換機,因爲做bonding的這兩塊網卡是使用不同的MAC地址。

PS:RHEL4 (centos4)及以下的版本options加在/etc/modprobe.conf中; 
RHEL5 (centos5)可以在ifcfg-bond0中加BONDING_OPTS=”mode=1 arp_interval=100 arp_ip_target=192.168.0.1″

可以查看bond0來得知當前狀態:

[root@localhost ~]# cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 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 
Speed: 100 Mbps 
Duplex: full 
Link Failure Count: 0 
Permanent HW addr: 00:24:XXXXXXXX

Slave Interface: eth1 
MII Status: up 
Speed: 100 Mbps 
Duplex: full 
Link Failure Count: 1 
Permanent HW addr: 00:24:XXXXXXXX

七種bond模式說明:

第一種模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡掄循環策略) 
特點:傳輸數據包順序是依次傳輸(即:第1個包走eth0,下一個包就走eth1….一直循環下去,直到最後一個傳輸完畢),此模式提供負載平衡和容錯能力;但是我們知道如果一個連接或者會話的數據包從不同的接口發出的話,中途再經過不同的鏈路,在客戶端很有可能會出現數據包無序到達的問題,而無序到達的數據包需要重新要求被髮送,這樣網絡的吞吐量就會下降

第二種模式:mod=1,即: (active-backup) Active-backup policy(主-備份策略) 
特點:只有一個設備處於活動狀態,當一個宕掉另一個馬上由備份轉換爲主設備。mac地址是外部可見得,從外面看來,bond的MAC地址是唯一的,以避免switch(交換機)發生混亂。此模式只提供了容錯能力;由此可見此算法的優點是可以提供高網絡連接的可用性,但是它的資源利用率較低,只有一個接口處於工作狀態,在有 N 個網絡接口的情況下,資源利用率爲1/N

第三種模式:mod=2,即:(balance-xor) XOR policy(平衡策略) 
特點:基於指定的傳輸HASH策略傳輸數據包。缺省的策略是:(源MAC地址 XOR 目標MAC地址) % slave數量。其他的傳輸策略可以通過xmit_hash_policy選項指定,此模式提供負載平衡和容錯能力

第四種模式:mod=3,即:broadcast(廣播策略) 
特點:在每個slave接口上傳輸每個數據包,此模式提供了容錯能力

第五種模式:mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 動態鏈接聚合) 
特點:創建一個聚合組,它們共享同樣的速率和雙工設定。根據802.3ad規範將多個slave工作在同一個激活的聚合體下。 
外出流量的slave選舉是基於傳輸hash策略,該策略可以通過xmit_hash_policy選項從缺省的XOR策略改變到其他策略。需要注意的 是,並不是所有的傳輸策略都是802.3ad適應的,尤其考慮到在802.3ad標準43.2.4章節提及的包亂序問題。不同的實現可能會有不同的適應 性。 
必要條件: 
條件1:ethtool支持獲取每個slave的速率和雙工設定 
條件2:switch(交換機)支持IEEE 802.3ad Dynamic link aggregation 
條件3:大多數switch(交換機)需要經過特定配置才能支持802.3ad模式

第六種模式:mod=5,即:(balance-tlb) Adaptive transmit load balancing(適配器傳輸負載均衡) 
特點:不需要任何特別的switch(交換機)支持的通道bonding。在每個slave上根據當前的負載(根據速度計算)分配外出流量。如果正在接受數據的slave出故障了,另一個slave接管失敗的slave的MAC地址。 
該模式的必要條件:ethtool支持獲取每個slave的速率

第七種模式:mod=6,即:(balance-alb) Adaptive load balancing(適配器適應性負載均衡) 
特點:該模式包含了balance-tlb模式,同時加上針對IPV4流量的接收負載均衡(receive load balance, rlb),而且不需要任何switch(交換機)的支持。接收負載均衡是通過ARP協商實現的。bonding驅動截獲本機發送的ARP應答,並把源硬件地址改寫爲bond中某個slave的唯一硬件地址,從而使得不同的對端使用不同的硬件地址進行通信。 
來自服務器端的接收流量也會被均衡。當本機發送ARP請求時,bonding驅動把對端的IP信息從ARP包中複製並保存下來。當ARP應答從對端到達 時,bonding驅動把它的硬件地址提取出來,併發起一個ARP應答給bond中的某個slave。使用ARP協商進行負載均衡的一個問題是:每次廣播 ARP請求時都會使用bond的硬件地址,因此對端學習到這個硬件地址後,接收流量將會全部流向當前的slave。這個問題可以通過給所有的對端發送更新 (ARP應答)來解決,應答中包含他們獨一無二的硬件地址,從而導致流量重新分佈。當新的slave加入到bond中時,或者某個未激活的slave重新 激活時,接收流量也要重新分佈。接收的負載被順序地分佈(round robin)在bond中最高速的slave上 
當某個鏈路被重新接上,或者一個新的slave加入到bond中,接收流量在所有當前激活的slave中全部重新分配,通過使用指定的MAC地址給每個 client發起ARP應答。下面介紹的updelay參數必須被設置爲某個大於等於switch(交換機)轉發延時的值,從而保證發往對端的ARP應答 不會被switch(交換機)阻截。 
必要條件: 
條件1:ethtool支持獲取每個slave的速率; 
條件2:底層驅動支持設置某個設備的硬件地址,從而使得總是有個slave(curr_active_slave)使用bond的硬件地址,同時保證每個 bond 中的slave都有一個唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址將會被新選出來的 curr_active_slave接管 
其實mod=6與mod=0的區別:mod=6,先把eth0流量佔滿,再佔eth1,….ethX;而mod=0的話,會發現2個口的流量都很穩定,基本一樣的帶寬。而mod=6,會發現第一個口流量很高,第2個口只佔了小部分流量

Linux網口綁定

通過網口綁定(bond)技術,可以很容易實現網口冗餘,負載均衡,從而達到高可用高可靠的目的。

前提約定:

2個物理網口分別是:eth0,eth1

綁定後的虛擬口是:bond0

服務器IP是:192.168.0.100

第一步,配置設定文件:

/etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0

BOOTPROTO=none

ONBOOT=yes

IPADDR=192.168.0.100

NETMASK=255.255.255.0

NETWORK=192.168.0.0

BROADCAST=192.168.0.255

#BROADCAST廣播地址

/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

/etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

第二步,修改modprobe相關設定文件,並加載bonding模塊:

1.在這裏,我們直接創建一個加載bonding的專屬設定文件/etc/modprobe.d/bonding.conf

[root@test ~]# vi /etc/modprobe.d/bonding.conf

#追加

alias bond0 bonding

options bonding mode=0 miimon=200

2.加載模塊(重啓系統後就不用手動再加載了)

[root@test ~]# modprobe bonding

3.確認模塊是否加載成功:

[root@test ~]# lsmod | grep bonding

bonding 100065 0

第三步,重啓一下網絡,然後確認一下狀況:

[root@test ~]# /etc/init.d/network restart

[root@test ~]# cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)

Bonding Mode: fault-tolerance (active-backup)

Primary Slave: None

Currently Active Slave: eth0

MII Status: up

MII Polling Interval (ms): 200

Up Delay (ms): 0

Down Delay (ms): 0

Slave Interface: eth0

MII Status: up

Link Failure Count: 0

Permanent HW addr: 00:16:36:1b:bb:74

Slave Interface: eth1

MII Status: up

Link Failure Count: 0

Permanent HW addr: 00:16:36:1b:bb:80

[root@test ~]# 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

從上面的確認信息中,我們可以看到3個重要信息:

1.現在的bonding模式是active-backup

2.現在Active狀態的網口是eth0

3.bond0,eth1的物理地址和處於active狀態下的eth0的物理地址相同,這樣是爲了避免上位交換機發生混亂。

任意拔掉一根網線,然後再訪問你的服務器,看網絡是否還是通的。

第四步,系統啓動自動綁定、增加默認網關:

[root@test ~]# vi /etc/rc.d/rc.local

#追加

ifenslave bond0 eth0 eth1

route add default gw 192.168.0.1

#如可上網就不用增加路由,0.1地址按環境修改.

------------------------------------------------------------------------

留心:前面只是2個網口綁定成一個bond0的情況,如果我們要設置多個bond口,比如物理網口eth0和eth1組成bond0,eth2和eth3組成bond1,

那麼網口設置文件的設置方法和上面第1步講的方法相同,只是/etc/modprobe.d/bonding.conf的設定就不能像下面這樣簡單的疊加了:

alias bond0 bonding

options bonding mode=1 miimon=200

alias bond1 bonding

options bonding mode=1 miimon=200

正確的設置方法有2種:

第一種,你可以看到,這種方式的話,多個bond口的模式就只能設成相同的了:

alias bond0 bonding

alias bond1 bonding

options bonding max_bonds=2 miimon=200 mode=1

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

alias bond0 bonding

options bond0 miimon=100 mode=1

install bond1 /sbin/modprobe bonding -o bond1 miimon=200 mode=0

仔細看看上面這2種設置方法,現在如果是要設置3個,4個,甚至更多的bond口,你應該也會了吧!

後記:簡單的介紹一下上面在加載bonding模塊的時候,options裏的一些參數的含義:

miimon 監視網絡鏈接的頻度,單位是毫秒,我們設置的是200毫秒。

max_bonds 配置的bond口個數

mode bond模式,主要有以下幾種,在一般的實際應用中,0和1用的比較多,

如果你要深入瞭解這些模式各自的特點就需要靠讀者你自己去查資料並做實踐了。

0或balance-rr 輪轉策略,提供負載均衡和耐故障功能,按順序輪流把包發給包含在bond口內的網口。

1或active-backup 主備策略,提供高耐故障功能,邏輯簡單,一個處於激活狀態,一個失敗,另外一個自動激活。

2或balance-xor XOR策略,提供負載均衡和耐故障功能。

3或broadcast 廣播策略,耐故障功能。把數據以廣播的方式,發給包含在該bond口內的所有網口。

4或802.3ad IEEE 802.3ad動態鏈接集合。

5或balance-tlb 自動適應傳輸負載均衡策略。

6或balance-alb 自動適應負載均衡策略。

本文出自 “阿克琉斯的腳跟 ~” 博客,請務必保留此出處http://rockhooray.blog.51cto.com/938613/813119

Linux各版本上的多網卡綁定(Debian和Ubuntu,SuSE,Fedora和RH) 
2006-07-28 08:50 
Linux上很容易可以將多塊網卡綁定,實現負載均衡和雙線熱備的功能。 
負載均衡即將負載平均的分配到任意多塊網卡上面,實現帶寬的疊加 
雙線熱備即多塊網卡互爲備份,任何一塊能夠工作即可保證網絡正常運行。 
各個綁定類型的分別 
mode=0 Round-robin: sequential(輪詢負載均衡,最常用) 
mode=1 Active-backup: only one 
mode=2 XOR: same MAC same nic 
mode=3 Broadcast: all 
各大發行版略有不同,基本上分成3種,2036 一塊網卡如何綁定兩個ip(linuxloveu) 
#cd /etc/sysconfig/network-scripts 
#cp ifcfg-eth0 ifcfg-eth0:1 
#vi ifcfg-eth0:1 
修改IP和設備名 
Debian下一個網卡綁定多個ip的方法(NetDC) 
修改/etc/network/interfaces 
auto eth0 
iface eth0 inet static 
address 172.16.3.123 
netmask 255.255.255.0 
network 172.16.3.0 
broadcast 172.16.3.255 
gateway 172.16.3.1 
auto eth0:1 
iface eth0:1 inet static 
address 10.16.3.123 
netmask 255.255.0.0 
network 10.16.0.0 
broadcast 10.16.255.255 
修改/etc/network/ifstate 
lo=lo 
eth0=eth0 
eth0:1=eth0:1 
然後/etc/init.d/networking restart就可以了。 
一個網卡綁定多ip另一法(hotbox) 
在/etc/sysconfig/network-scripts/下創建一個文件:ifcfg-ethX-rangeX ("X"爲網卡號) 
文件內容: 
IPADDR_START= 
IPADDR_END= 
CLONENUM=0 
可以有256個ip 
2037 一個ip如何綁定兩塊網卡(hutuworm) 
假設1Array2.168.0.88是ip,1Array2.168.0.1是網關: 
/sbin/modprobe bonding miimon=100 mode=1 
/sbin/ifdown eth0 
/sbin/ifdown eth1 
/sbin/ifconfig bond0 1Array2.168.0.88 
/sbin/ifenslave bond0 eth0 eth1 
/sbin/route add default gw 1Array2.168.0.1 
2038 1Array2.168.1.0/24(雙眼皮的豬) 
它與1Array2.168.1.0/255.255.255.0是等價的,只是表示方式不同.... 
Debian下 
Debian和Ubuntu, 
SuSE, 
Mandriva、Fedora和RH 
----------------------------------------------------------------------- 
Debian和Ubuntu上的多網卡綁定 
實驗環境Ubuntu 6.06 Dadder,內核版本2.6.15-23 server 
首先安裝ifenslave 
#apt-get install ifenslave-2.6 
編輯/etc/network/interfaces 
auto lo bond0 eth0 eth1 
iface bond0 inet static 
address 10.31.1.5 
netmask 255.255.255.0 
network 10.31.1.0 
gateway 10.31.1.254 
up /sbin/ifenslave bond0 eth0 
up /sbin/ifenslave bond0 eth1 
iface lo loopback 
iface eth0 inet static 
address 10.1.1.101 
netmask 255.255.255.0 
iface eth1 inet static 
address 10.1.1.102 
netmask 255.255.255.0 
再編輯 /etc/modprobe.d/arch/i386 
加上兩行: 
alias bond0 bonding 
options bonding mode=0 miimon=100 
最後重啓網絡即可 
/etc/init.d/networking restart 
----------------------------------------------------------------------- 
SuSE,Mandriva、Fedora和RH 
1、編輯 /etc/modules.conf 文件(SuSE的系統是/etc/modprobe.d/modprobe.cong.local),加入如下一行內容,以使系統在啓動時加載bonding模塊,對外虛擬網絡接口設備爲 bond0 
alias bond0 bonding 
2、編輯虛擬網絡接口配置文件,指定網卡IP 
vi /etc/sysconfig/network-scripts/ifcfg-bond0 
(SuSE的系統是/etc/sysconfig/network/ifcfg-bond0) 
Fedora的寫法 
DEVICE=bond0 
IPADDR=1Array2.168.1.1 
NETMASK=255.255.255.0 
NETWORK=1Array2.168.1.0 
BROADCAST=1Array2.168.1.255 
ONBOOT=yes 
BOOTPROTO=none 
USERCTL=no 
SuSE的寫法 
BOOTPROTO=’static’ 
BROADCAST=’1Array2.168.1.255’ 
ETHTOOL_OPTIONS=’’ 
IPADDR=’1Array2.168.1.1’ 
MTU=’’ 
NETMASK=’255.255.255.0’ 
NETWORK=’1Array2.168.1.0’ 
STARTMODE=’auto’ 
USERCONTROL=’no’ 
3、編輯物理網絡接口配置文件,並指向虛擬網絡接口bond0 
Fedora: 
物理網絡接口配置文件位於/etc/sysconfig/network-scripts, 
ifcfg-eth0對應第一個網卡,ifcfg-eth1對應第二個千兆網卡。 
ifcfg-eth0 : 
DEVICE=eth0 
IPADDR=11.0.0.1 
NETMASK=255.255.255.0 
USERCTL=no 
ONBOOT=yes 
BOOTPROTO=none 
ifcfg-eth1 : 
DEVICE=eth1 
IPADDR=11.0.0.2 
NETMASK=255.255.255.0 
USERCTL=no 
ONBOOT=yes 
BOOTPROTO=none 
SuSE: 
物理網絡接口配置文件位於/etc/sysconfig/network/, 
以ifcfg-eth-(mac)爲名字 
BOOTPROTO=’static’ 
IPADDR=’10.0.0.1’ 
NETMASK=’255.255.255.0’ 
STARTMODE=’auto’ 
USERCONTROL=’no’ 
最後編輯/etc/rc.local(SuSE是/etc/rc.d/rc)或是直接運行 
ifenslave bond0 eth0 eth1 eth2(綁幾個網卡就寫幾個網卡的名字) 
無論eth0 eth1 eth2的IP怎樣設置,綁定之後全都以bind0的設置爲準。此時所有網卡的mac地址都是一樣的。


另外:如果在RHEL6下執行:
  1. service network restart
     時,報如下錯誤:
  1. Bringing up interface bond0: Error: Connection activation failed: Device not managed by NetworkManager
     此錯誤是因爲系統中默認由NetworkManager服務管理網絡,可以將其停止:
  1. [root@Hostname ~]#chkconfig NetworkManager off
  2. [root@Hostname ~]#service NetworkManager stop
  3. [root@Hostname ~]#chkconfig network on
  4. [root@Hostname ~]#service network restart

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