【APP】多網卡綁定Bonding生產實戰


一、什麼是網卡綁定及簡單原理

   網卡綁定也稱作"網卡捆綁",就是使用多塊物理網卡虛擬成爲一塊網卡,以提供負載均衡或者冗餘,增加帶寬的作用。當一個網卡壞掉時,不會影響業務。這個聚合起來的設備看起來是一個單獨的以太網接口設備,也就是這幾塊網卡具有相同的IP地址而並行鏈接聚合成一個邏輯鏈路工作。這種技術在Cisco等網絡公司中,被稱爲TrunkingEtherchannel 技術,在Linux2.4.x的內核中把這種技術稱爲bonding

二、技術分類

1. 負載均衡

   對於bonding的網絡負載均衡是我們在文件服務器中常用到的,比如把三塊網卡,當做一塊來用,解決一個IP地址,流量過大,服務器網絡壓力過大的問題。 對於文件服務器來說,比如NFS或SAMBA文件服務器,沒有任何一個管理員會把內部網的文件服務器的IP地址弄很多個來解決網絡負載的問題。如果在內網中,文件服務器爲了管理和應用上的方便,大多是用同一個IP地址。對於一個百M的本地網絡來說,文件服務器在多 個用戶同時使用的情況下,網絡壓力是極大的,特別是SAMABA和NFS服務器。爲了解決同一個IP地址,突破流量的限制,畢竟網線和網卡對數據的吞吐量是有限制的。如果在有限的資源的情況下,實現網絡負載均衡,最好的辦法就是 bonding。

2. 網絡冗餘

   對於服務器來說,網絡設備的穩定也是比較重要的,特別是網卡。在生產型的系統中,網卡的可靠性就更爲重要了。在生產型的系統中,大多通過硬件設備的冗餘來提供服務器的可靠性和安全性,比如電源。bonding 也能爲網卡提供冗餘的支持。把多塊網卡綁定到一個IP地址,當一塊網卡發生物理性損壞的情況下,另一塊網卡自動啓用,並提供正常的服務,即:默認情況下只有一塊網卡工作,其它網卡做備份。

三、bonding負載均衡和網絡冗餘技術的現實

1. 網絡環境

  1. [root@web-31 ~]# cat /etc/issue

  2. CentOS release 6.3 (Final)

  3. Kernel \r on an \m

  4. [root@web-31 ~]# getconf LONG_BIT

  5. 64

  6. [root@web-31 ~]# ip a |grep -v lo

  7. 2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000

  8.    link/ether f0:4d:a2:3e:57:00 brd ff:ff:ff:ff:ff:ff

  9.    inet 172.28.2.31/24 brd 172.28.2.255 scope global em1

  10. 3: em2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000

  11.    link/ether f0:4d:a2:3e:57:02 brd ff:ff:ff:ff:ff:ff

  12. 4: em3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000

  13.    link/ether f0:4d:a2:3e:57:04 brd ff:ff:ff:ff:ff:ff

  14. 5: em4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000

  15.    link/ether f0:4d:a2:3e:57:06 brd ff:ff:ff:ff:ff:ff

PS : 使用四塊網卡進行bonding綁定:em1em2em3em4

2. 檢查bonding環境

  1. 有如下方法檢測:

  2. [root@web-31 ~]# modinfo bonding |grep bonding.ko

  3. filename:       /lib/modules/2.6.32-279.5.2.el6.centos.plus.x86_64/kernel/drivers/net/bonding/bonding.ko

  4. [root@web-31 ~]# modprobe -l bond*

  5. kernel/drivers/net/bonding/bonding.ko

3. 加載bonding模塊

  1. [root@web-31 ~]# lsmod | grep 'bonding'

  2. [root@web-31 ~]# modprobe bonding

  3. WARNING: Deprecated config file /etc/modprobe.conf, all config files belong into /etc/modprobe.d/.

  4. PS: 加載模塊時,發出警告,意思是:當前內核版本已經棄用配置文件/etc/modprobe.conf,所有的配置文件屬於/etc/modprobe.d,也就是說,以後的加載模塊要寫入到配置文件時要寫到/etc/modprobe.conf這個配置文件中!因此,這裏bonding的模塊配置文件也要獨立一個配置文件!

  5. [root@web-31 ~]# lsmod | grep 'bonding'

  6. bonding               127806  0

  7. ipv6                  322637  167 bonding

  8. 8021q                  25941  1 bonding

  9. 開機自動加載模塊到內核:

  10. echo 'modprobe bonding &> /dev/null' >> /etc/rc.local

4. 創建虛擬網卡配置文件

  1. cd /etc/sysconfig/network-scripts

  2. cat >> ifcfg-bond0 << EOF

  3. DEVICE=bond0

  4. ONBOOT=yes

  5. BOOTPROTO=static

  6. IPADDR=172.28.2.31

  7. BROADCAST=172.28.2.255

  8. NETMASK=255.255.255.0

  9. GATEWAY=172.28.2.1

  10. USERCTL=no

  11. TYPE=Ethernet

  12. EOF

5. 修改真實網卡配置文件

  1. mv ifcfg-em{1,2,3,4} /tmp/bakcup

  2. em1配置文件內容:

  3. cat >> ifcfg-em1 << EOF

  4. DEVICE="em1"

  5. ONBOOT="yes"

  6. BOOTPROTO="none"

  7. USERCTL="no"

  8. MASTER="bond0"

  9. SLAVE="yes"

  10. EOF

  11. em2配置文件內容:

  12. cat >> ifcfg-em2 << EOF

  13. DEVICE="em2"

  14. ONBOOT="yes"

  15. BOOTPROTO="none"

  16. USERCTL="no"

  17. MASTER="bond0"

  18. SLAVE="yes"

  19. EOF

  20. em3配置文件內容:

  21. cat >> ifcfg-em3 << EOF

  22. DEVICE="em3"

  23. ONBOOT="yes"

  24. BOOTPROTO="none"

  25. USERCTL="no"

  26. MASTER="bond0"

  27. SLAVE="yes"

  28. EOF

  29. em4配置文件內容:

  30. cat >> ifcfg-em4 << EOF

  31. DEVICE="em4"

  32. ONBOOT="yes"

  33. BOOTPROTO="none"

  34. USERCTL="no"

  35. MASTER="bond0"

  36. SLAVE="yes"

  37. EOF

6. 編輯模塊載入配置文件,讓系統支持bonding

  1. cat >> /etc/modprobe.d/bonding.conf <<EOF

  2. #/etc/modprobe.conf

  3. alias bond0 bonding

  4. options bond0 miimon=100 mode=4 lacp_rate=1

  5. EOF


PS :

a. mode=4 這裏我採用這種模式,總共有0123456七種模式,文章後面會詳細介紹這七種模式!

此模式下所以網卡共用一個MAC地址,後面結果會有驗證!

b. miimon是用來進行鏈路監測的,如:miimon=100,那麼系統每100ms監測一次鏈路連接狀態,如果有一條線路不通就轉入另一條線路;

c. bonding只能提供鏈路監測,即從主機到交換機的鏈路是否接通。如果只是交換機對外的鏈路down掉了,而交換機本身並沒有故障,那麼bonding會認爲鏈路沒有問題而繼續使用。

7. 重啓服務器或重啓網絡進行測試

  1. [root@web-31 ~]# service network restart

  2. [root@web-31 ~]# ip a |grep -v lo

  3. 2: em1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000

  4.    link/ether f0:4d:a2:3e:57:00 brd ff:ff:ff:ff:ff:ff

  5. 3: em2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000

  6.    link/ether f0:4d:a2:3e:57:00 brd ff:ff:ff:ff:ff:ff

  7. 4: em3: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000

  8.    link/ether f0:4d:a2:3e:57:00 brd ff:ff:ff:ff:ff:ff

  9. 5: em4: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000

  10.    link/ether f0:4d:a2:3e:57:00 brd ff:ff:ff:ff:ff:ff

  11. 6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP

  12.    link/ether f0:4d:a2:3e:57:00 brd ff:ff:ff:ff:ff:ff

  13.    inet 172.28.2.38/24 brd 172.28.2.255 scope global bond0

  14.    inet6 fe80::f24d:a2ff:fe3f:23c0/64 scope link

  15.       valid_lft forever preferred_lft forever

  16. [root@liuhe038 ~]#


PS: 生產服務器下,測試略!mode=4這種模式要配置交換機相應端口開啓鏈路聚合!

四、對於mode七種模式的簡單介紹


mode=0 : 可實現網絡負載均衡和網絡冗餘,採用平衡輪循策略(balance-rr)

此模式的特點:

a. 所以網卡都工作,傳輸數據包順序是依次傳輸,也就是說第1個包經過eth0,下一個包就經過eth1,一直循環下去,直到最後一個包傳輸完畢。

b. 此模式對於同一連接從不同的接口發出的包,中途傳輸過程中再經過不同的鏈接,在客戶端很有可能會出現數據包無序到達的問題,而無序到達的數據包需要重新要求被髮送,這樣網絡的吞吐量就會下降。

c. 與網卡相連的交換必須做特殊配置(這兩個端口應該採取聚合方式),因爲做bonding的這兩塊網卡是使用同一個MAC地址

mode=1:只實現網絡冗餘,採用主-備份策略(active/backup)

此模式的特點:

a. 此模式下只有一塊網卡正常工作,另外的網卡都是備份用狀態,當另外一塊網卡壞掉後另一塊網卡馬上由備份轉換爲主。

b. 此模式好處是可以提供高網絡連接的可用性,但是它的資源利用率較低,只有一個接口處於工作狀態。

mode=2:可模式提供負載平衡和容錯能力,採用平衡策略(balance-xor)

此模式的特點:基於指定的傳輸HASH策略傳輸數據包,這種模式用得相對少!

mode=3:只提供容錯能力,採用廣播策略。

此模式特點:在每個slave接口上傳輸每個數據包。

mode=4IEEE 802.3ad 動態鏈接聚合,使用lagp協議,可以帶寬翻倍增加!

此模式的特點:

創建一個聚合組,它們共享同樣的速率和雙工設定。根據802.3ad規範將多個slave工作在同一個激活的聚合體下。
外出流量的slave選舉是基於傳輸hash策略,該策略可以通過xmit_hash_policy選項從缺省的XOR策略改變到其他策略。

用此模式必要條件:
條件1ethtool支持獲取每個slave的速率和雙工設定
條件2switch(交換機)支持IEEE 802.3ad Dynamic link aggregation
條件3:大多數switch(交換機)需要經過特定配置才能支持802.3ad模式

mode=5:採用適配器傳輸負載均衡(balance-tlb)

此模式特點:

特點:不需要任何特別的switch(交換機)支持的通道bonding。在每個slave上根據當前的負載(根據速度計算)分配外出流量。如果正在接受數據的slave出故障了,另一個slave接管失敗的slaveMAC地址。
該模式的必要條件:ethtool支持獲取每個slave的速率

mode=6:可實現網絡負載均衡和網絡冗餘,採用load balancing (round-robin)方式。

此模式的特點:

a. 兩塊網卡都處於工作狀態,但各網卡的MAC地址是不一樣

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

這種模式是所最複雜的,不再詳細介紹!

五、總結

生產中常用的是第 0164這幾中模式

如果實現簡單的負載均衡可以採用 mode=0mode=6(注意區別mode=0mode=6兩種模式的區別)

如果實現簡單的網絡冗餘可以採用 mode=1(此模式可以用VM虛擬機模擬)


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