Linux中雙網卡綁定實現的各種模式

一、Linux中雙網卡綁定實現的原理

Linux雙網卡綁定實現就是使用兩塊網卡虛擬成爲一塊網卡;linux設置bond網卡綁定---有些用。
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驅動程序處理。
說了半天理論,其實配置很簡單,一共四個步驟:
實驗的操作系統是Redhat Linux Enterprise 3.0
綁定的前提條件:芯片組型號相同,而且網卡應該具備自己獨立的BIOS芯片。
1.編輯虛擬網絡接口配置文件,指定網卡IP
vi /etc/sysconfig/ network-scripts/ ifcfg-bond0
[root@rhas-13 root]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 ifcfg-bond0
2 #vi ifcfg-bond0
將第一行改成 DEVICE=bond0
# cat ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
IPADDR=172.31.0.13
NETMASK=255.255.252.0
BROADCAST=172.31.3.254
ONBOOT=yes
TYPE=Ethernet
這裏要主意,不要指定單個網卡的IP 地址、子網掩碼或網卡 ID。將上述信息指定到虛擬適配器(bonding)中即可。
[root@rhas-13 network-scripts]# cat ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
[root@rhas-13 network-scripts]# cat ifcfg-eth1
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
3 # vi /etc/modules.conf
編輯 /etc/modules.conf 文件,加入如下一行內容,以使系統在啓動時加載bonding模塊,對外虛擬網絡接口設備爲 bond0
加入下列兩行
alias bond0 bonding
options 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)提供冗餘功能,工作方式是主備的工作方式,也就是說默認情況下只有一塊網卡工作,另一塊做備份.
bonding只能提供鏈路監測,即從主機到交換機的鏈路是否接通。如果只是交換機對外的鏈路down掉了,而交換機本身並沒有故障,
那麼bonding會認爲鏈路沒有問題而繼續使用
4 # vi /etc/rc.d/rc.local
加入兩行
ifenslave bond0 eth0 eth1
route add -net 172.31.3.254 netmask 255.255.255.0 bond0
到這時已經配置完畢重新啓動機器.
重啓會看見以下信息就表示配置成功了
................
Bringing up interface bond0 OK
Bringing up interface eth0 OK
Bringing up interface eth1 OK
................
下面我們討論以下mode分別爲0,1時的情況
mode=1工作在主備模式下,這時eth1作爲備份網卡是no arp的
[root@rhas-13 network-scripts]# ifconfig 驗證網卡的配置信息
bond0 Link encap:Ethernet HWaddr 00:0E:7F:25

9:8B
inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:18495 errors:0 dropped:0 overruns:0 frame:0
TX packets:480 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1587253 (1.5 Mb) TX bytes:89642 (87.5 Kb)
eth0 Link encap:Ethernet HWaddr 00:0E:7F:25

9:8B
inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:9572 errors:0 dropped:0 overruns:0 frame:0
TX packets:480 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:833514 (813.9 Kb) TX bytes:89642 (87.5 Kb)
Interrupt:11
eth1 Link encap:Ethernet HWaddr 00:0E:7F:25

9:8B
inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0
UP BROADCAST RUNNING NOARP SLAVE MULTICAST MTU:1500 Metric:1
RX packets:8923 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:753739 (736.0 Kb) TX bytes:0 (0.0 b)
Interrupt:15
那也就是說在主備模式下,當一個網絡接口失效時(例如主交換機掉電等),不回出現網絡中斷,
系統會按照cat /etc/rc.d/rc.local裏指定網卡的順序工作,機器仍能對外服務,起到了失效保護的功能.
在mode=0 負載均衡工作模式,他能提供兩倍的帶寬,下我們來看一下網卡的配置信息
[root@rhas-13 root]# ifconfig
bond0 Link encap:Ethernet HWaddr 00:0E:7F:25:D9:8B
inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:2817 errors:0 dropped:0 overruns:0 frame:0
TX packets:95 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:226957 (221.6 Kb) TX bytes:15266 (14.9 Kb)
eth0 Link encap:Ethernet HWaddr 00:0E:7F:25:D9:8B
inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:1406 errors:0 dropped:0 overruns:0 frame:0
TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:113967 (111.2 Kb) TX bytes:7268 (7.0 Kb)
Interrupt:11
eth1 Link encap:Ethernet HWaddr 00:0E:7F:25:D9:8B
inet addr:172.31.0.13 Bcast:172.31.3.255 Mask:255.255.252.0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:1411 errors:0 dropped:0 overruns:0 frame:0
TX packets:47 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:112990 (110.3 Kb) TX bytes:7998 (7.8 Kb)
Interrupt:15
在這種情況下出現一塊網卡失效,僅僅會是服務器出口帶寬下降,也不會影響網絡使用.
通過查看bond0的工作狀態查詢能詳細的掌握bonding的工作狀態
[root@rhas-13 bonding]# cat /proc/net/bonding/bond0
bonding.c:v2.4.1 (September 15, 2003)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 0
Up Delay (ms): 0
Down Delay (ms): 0
Multicast Mode: all slaves
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0e:7f:25:d9:8a
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0e:7f:25:d9:8b
QuickLinux AS4 下網卡綁定實現負載均衡和失效保護
Linux下的的負載平衡(說白了就是n塊網卡邦定在一起當一個用速度變成原來的n倍)在linux下叫做bonding,理論就不說了,網上一大堆.網 上也有好多這樣的文章但是大多都和實際配置過程有些不同,下面說說在2.6內核的quicklinux AS4 上具體的實現方法。
第一步、編輯虛擬網絡接口配置文件。
建立 /etc/sysconfig/network-scripts/ifcfg-bond0 文件
內容如下:
DEVICE=bond0
IPADDR=192.168.0.1
NETMASK=255.255.255.0
BROADCAST=192.168.0.255
NETWORK=192.168.0.1
ONBOOT=yes
ip地址根據自己的需要配置(一個簡單的方法就是拷貝一個ifcfg-eht0修改DEVICE=bond0)
第二步、編輯真實網卡的配置文件(建議修改之前做好備份)
/etc/sysconfig/network-scripts/ifcfg-eth*
內容如下
BOOTPROTO=none
TYPE=Ethernet
DEVICE=eth* (*與那個配置文件名中的相同)
ONBOOT=yes
MASTER=bond0
slave=yes
注意:真實網卡不能再設置ip地址了,按需要把所要綁定的真實網卡都按這個設置,主要是MASTER=bond0 和 slave=yes 一定不要弄錯(簡單的方法就是修改一個然後拷貝再修改)
第三步、修改/etc/modprobe.conf 文件加入如下兩行(建議做好備份)
alias bond0 bonding
options bond0 miimon=100 mode=0
注:1、miimon 是鏈路監測的時間間隔單位是毫秒,miimon=100的意思就是,每100毫秒檢測網卡和交換機之間是否連通,如不通則使用另外的鏈路。
2、mode=0 表示負載均衡方式,兩塊網卡都工作。
mode=1 表示冗餘方式,網卡只有一個工作,一個出問題啓用另外的。
第四步、在/etc/rc.d/rc.local 加入如下一行(啓動時執行此行命令)
ifenslave bond0 eth0 eth1 …… eht*
重新啓動後負載平衡已經能正常工作。
但是還有需要注意的,就是shorewall防火牆的設置,這個設置最好在配置負載平衡前進行,因爲 shorewall在webmin下配置最簡單,
負載平衡啓動後原來的設置的“網卡界面”裏面的網卡就應該由eht* 改成了bond0 了 。不改設置全部通訊都會斷掉。
用service shorewall stop 也不能停掉防火牆,因爲shorewall關掉後它就會啓動“關閉規則(routerstopped)”。“關閉規則”默認的是不允許任何通訊。
所以建議在配置負載平衡前建立防火牆規則。否則只能通過手工來改shorewall的配置文件了。
以上的實現方法已經在QuickLinux as4 2.6.11-8內核下實現,網卡爲雙intel pro1000 速度相
當令人滿意,服務器雙網卡和兩臺客戶計算機所都連接到同一個普通交換機上,兩臺客戶機網同時從
SMB上用totle copy拷貝大文件速度都能達到10000KB/S以上。
Linux下雙網卡綁定實現負載均衡
我們在這介紹的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驅動程序處理。說了半天理論,其實配置很簡單,一共四個步驟: 實驗的操作系統是Redhat Linux Enterprise 3.0。綁定的前提條件:芯片組型號相同,而且網卡應該具備自己獨立的BIOS芯片。
雙網卡邦定的拓樸圖
1.編輯虛擬網絡接口配置文件,指定網卡IP:
vi /etc/sysconfig/ network-scripts/ ifcfg-bond0
[root@rhas-13 root]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 ifcfg-bond0
2、#vi ifcfg-bond0
將第一行改成 DEVICE=bond0:
# cat ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
IPADDR=172.31.0.13
NETMASK=255.255.252.0
BROADCAST=172.31.3.254
ONBOOT=yes
TYPE=Ethernet
這裏要主意,不要指定單個網卡的IP 地址、子網掩碼或網卡 ID。將上述信息指定到虛擬適配器(bonding)中即可。
[root@rhas-13 network-scripts]# cat ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
[root@rhas-13 network-scripts]# cat ifcfg-eth1
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
3、# vi /etc/modules.conf
編輯 /etc/modules.conf 文件,加入如下一行內容,以使系統在啓動時加載bonding模塊,對外虛擬網絡接口設備爲 bond0.加入下列兩行:
alias bond0 bonding
options bond0 miimon=100 mode=1

當前的二進制安裝與升級機制

redhat/fedora   RPM   rpm rpmbuild   yum
debian          dpkg   dpkg      apt
rpm  的相關參數
  --nodeps
  --replacepkgs
  --replacefiles
  --force
  --test
  --nosignature
  --prefix
  --noscripts

二、案例1  mode=1(注:mode=1表示fault-tolerance (active-backup)提供冗餘功能,工作方式是主備的工作方式,也就是說默認情況下只有一塊網卡工作,另一塊做備份.)

1、編輯虛擬機 給虛擬機添加一個網卡

image

網卡添加後該虛擬機擁有雙網卡

image

2、查看各網卡的ip地址

image

4、給eth0配置臨時ip地址

image

5、將雙網卡均選擇host-only方式連接

image

 

image

6、切換到該目錄下編輯eth0

image

編輯結果如下圖所示

image

7、編輯eth1

image

編輯結果如下圖所示

image

8、將ifcfg-eth0拷貝成ifcfg-bond0

image

編輯ifcfg-bond0   結果如下圖所示

image

9、編輯模塊配置文件

image

添加bond0和模塊參數   結果如下圖所示

image

10、編輯rc.local

image

將eth0和eth1綁定到bond0中

image

11、重啓系統

image

下圖結果中bond0、eth0、eth1的mac地址相同

image

12、查看網卡信息

image

image

測試

image

斷開eth0

image

斷開eth0後 中間超時一次立即恢復正常

連接eth0後斷開eth1無影響 一直爲ping通狀態

eth0、eth1均斷開 不能ping通

 

 

斷開eth0後網卡信息

image

三、案例2  mode=0(注:mode=0表示load balancing (round-robin)爲負載均衡方式,兩塊網卡都工作。

 

mode=0模式的配置步驟與mode=1配置步驟完全相同,只需將mode的值改爲0即可 結果如下圖所示

image

測試

image

image

斷開eth0和eth1中任何一個網卡均正常平通,不會出現超時

斷開eth1的網卡信息

image

斷開eth0的網卡信息

image

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