bond雙網卡綁定總結

bond雙網卡綁定總結

 

什麼是bond?

      所謂bond,是一種通過把多個物理網卡綁定成一個邏輯網卡實現網卡冗餘、負載均衡、提高帶寬,從而實現網絡性能高可用高可靠的技術。

 

bond有七種模型:

mod0:(balance-rr,平衡輪循環策略,提供負載均衡和容錯能力),數據包傳輸是依次傳輸,第一個包從網卡1傳輸,第二個包從網卡2傳輸,第三個包從網卡3.......,一直循環直到傳輸完最後一個數據包。這種模式的bond有一個不完善的地方,如果一個數據包從不同的網卡傳輸,而中途再經過不同的鏈路,當客戶端接受到數據包的時候,數據包就可能出現無序到達的情況,而無序到達的數據包需要重新發送,這樣網絡的性能便會大大下降。

mod1:(active-backup,主備策略,提供冗餘能力),只有一個網卡被使用,當一個網卡宕了之後,馬上由備網卡接替主網卡的工作,爲了避免交換機發生混亂,邏輯網卡的mac地址是唯一的。這種模型的bond可提高網絡的可用性,但是它的資源利用率低,只有1/網卡個數(N)。

mod2:(balance-xor,平衡策略,提供負載均衡和容錯能力)---不是很明白實現原理與算法,有哪位大神知道的話,可以在下面留言,讓小弟也開開眼界。

mod3:(broadcast,廣播策略,提供容錯能力)每一個備網卡傳輸每個數據包。

mod4:(802.3ad,動態鏈路聚合),創建聚合組,聚合組中的每個備網卡共享同樣的速率和雙工,必要條件是交換機需要支持802.3ad以及需要ethtool的支持

mod5:(balance-tlb,適配器傳輸負載均衡),在每個網卡上根據當前的壓力負載分配流量,如果正在工作的網卡宕了,另外的網卡接管宕機的網卡的mac地址。必要條件是:需要ethtool的支持。

mod6:(balance-alb,適配器適應負載均衡),該模式包含了balance-tlb模式,同時加上針對IPV4流量的接收負載均衡(receive load balance, rlb),而且不需要任何switch(交換機)的支持。接收負載均衡是通過ARP協商實現的。bonding驅動截獲本機發送的ARP應答,並把源硬件地址改寫爲bond中某個slave的唯一硬件地址,從而使得不同的對端使用不同的硬件地址進行通信。



實驗(mod0爲例,其他mod大同小異)

 

創建邏輯網卡的配置文件

[root@bond network-scripts]# catifcfg-bond0   

DEVICE=bond0

BOOTPROTO=static

ONBOOT=yes

IPADDR=192.168.31.100

NETMASK=255.255.255.0

NETWORK=192.168.31.0

GATEWAY=192.168.31.1

BROADCAST=192.168.31.255

BONDING_OPTS="mode=0  miimon=200"  #mode指定模式,miimon爲探測的時間間隔(毫秒) 

USERCTL=no     #是否允許非root用戶控制該設備  yes|no

 

修改物理網卡的配置文件

[root@bond network-scripts]# catifcfg-eno16780032

DEVICE=eno16780032

BOOTPROTO=none

MASTER=bond0    #指定master爲bond0

SLAVE=yes            #是否爲附屬

USERCTL=no

 

[root@bond network-scripts]# catifcfg-eno33561344

DEVICE=eno33561344

BOOTPROTO=none

MASTER=bond0   

SLAVE=yes

USERCTL=no

 

bond0是通過bonding的驅動來配置的,所以我們還需要爲bond0這塊網卡添加驅動支持,將這個驅動添加到 /etc/modprobe.d/ 這個目錄下

[root@bond ~]# cat/etc/modprobe.d/bonding.conf

alias bond0 bonding

 

加載bonding模塊

[root@bond ~]# modprobe  bonding

[root@bond ~]# lsmod |grep bonding

bonding               136705  0

 

//在centos7裏面是不加載bonding也OK,但是你做如上操作也無妨


重啓網絡

[root@bond ~]# systemctl restart network

Job for network.service failed because thecontrol process exited with error code. See "systemctl statusnetwork.service" and "journalctl -xe" for details.

 

bond network[10418]:Bringing up interface bond0:  Error:Connection activation failed: No suitable device found for this connection.

bond network[10418]:Bringing up interface eno16780032: Error: Connection activation failed: Master device bond0 unmanaged ornot available for activation


如果發現有如上報錯,需要在網卡的配置文件裏面加入

NM_CONTORLLED=no

 

驗證       #仔細觀察發現物理網卡的mac地址和邏輯網卡的mac地址一樣

[root@bond ~]# ip add show

3: eno16780032: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP>mtu 1500 qdisc mq master bond0 state UP qlen1000

   link/ether 00:0c:29:bc:7d:41 brdff:ff:ff:ff:ff:ff

   inet6 fe80::20c:29ff:febc:7d41/64 scopelink

      valid_lft forever preferred_lft forever

4: eno33561344: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP>mtu 1500 qdisc mq master bond0 state UP qlen1000

   link/ether 00:0c:29:bc:7d:41 brdff:ff:ff:ff:ff:ff

   inet6 fe80::20c:29ff:febc:7d41/64 scopelink

      valid_lft forever preferred_lft forever

5: bond0:<BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP

   link/ether 00:0c:29:bc:7d:41 brdff:ff:ff:ff:ff:ff

   inet 192.168.31.100/24 brd 192.168.31.255 scope global bond0

      valid_lft forever preferred_lft forever

   inet6 fe80::20c:29ff:febc:7d41/64 scopelink tentative dadfailed

      valid_lft forever preferred_lft forever

 

查看邏輯網口設備的信息

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

Ethernet Channel Bonding Driver: v3.7.1(April 27, 2011)

 

Bonding Mode: load balancing (round-robin)    #模式爲負載均衡

MII Status: up      #狀態爲up

MII Polling Interval (ms): 200     #偵測間隔爲200ms

Up Delay (ms): 0     #啓動延遲爲0ms

Down Delay (ms): 0   #關閉延遲爲0ms

 

Slave Interface: eno16780032

MII Status: up     #狀態up

Speed: 10000 Mbps    #速率爲10000

Duplex: full       #全雙工

Link Failure Count: 0   

Permanent HW addr: 00:0c:29:bc:7d:41  

Slave queue ID: 0

 

Slave Interface: eno33561344

MII Status: up

Speed: 10000 Mbps

Duplex: full

Link Failure Count: 0

Permanent HW addr: 00:0c:29:bc:7d:4b

Slave queue ID: 0

 

測試


冗餘測試

wKioL1j98KriBdsaAAAcNxG4wzE667.png                    

 

模擬宕一個網口

[root@bond ~]# ifconfig eno16780032 down

 

ping正常

wKiom1j98LzifX1AAAA3EhRUXGY694.png

 

模擬宕另外一個網口

[root@bond ~]# ifconfig eno33561344 down

 

ping超時

wKiom1j98MmwNJ_pAAAxnuicUmQ189.png

 

 

網絡性能測試(通過netperf工具)

 有關netperf的使用可以看看這篇文章:http://blog.itpub.net/22664653/viewspace-714569/


邏輯網口的兩個物理網卡正常工作之時

[root@bond ~]# netserver    #在服務端運行netserver

 

[root@localhost ~]# netperf -H192.168.31.100 -l 60 -t TCP_STREAM     #-H 指定測試端,-l 指定測試時長,-t 指定測試模型,這裏是TCP的批量傳輸

MIGRATED TCP STREAM TEST from 0.0.0.0(0.0.0.0) port 0 AF_INET to 192.168.31.100 () port 0 AF_INET

Recv  Send    Send                         

Socket Socket  Message Elapsed             

Size  Size    Size     Time     Throughput 

bytes bytes   bytes    secs.   10^6bits/sec 

 

 87380 16384  16384    60.00   10151.01

 

模擬宕一個網卡

[root@bond ~]# ifconfig  eno33561344 down

 

[root@localhost ~]# netperf -H192.168.31.100 -l 60 -t TCP_STREAM 

MIGRATED TCP STREAM TEST from 0.0.0.0(0.0.0.0) port 0 AF_INET to 192.168.31.100 () port 0 AF_INET

Recv  Send    Send                         

Socket Socket  Message Elapsed             

Size  Size    Size     Time    Throughput 

bytes bytes   bytes    secs.   10^6bits/sec 

 

 87380 16384  16384    60.00   9509.36  #吞吐量降低

 

通過測試,做了bond之後,的確可以實現網口的冗餘和網絡性能的提高 



如有紕漏,歡迎指正。我對bond七種模式不是很明白理解透徹,這篇文章只是講了個大概。另外,如果各位博友有立志從事關於linux方面的事業,可以留下您的聯繫方式或者博客首頁,我將主動聯繫您,大家互相提高,一起共勉。

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