Linux--多網卡的7種Bond模式


 

網卡bond是通過把多張網卡綁定為一個邏輯網卡,實現本地網卡的冗余,帶寬擴容和負載均衡。在應用部署中是一種常用的技術,我們公司基本所有的項目相關服務器都做了bond,這里總結整理,以便待查。

bond模式:

  1. Mode=0(balance-rr) 表示負載分擔round-robin,和交換機的聚合強制不協商的方式配合。
  2. Mode=1(active-backup) 表示主備模式,只有一塊網卡是active,另外一塊是備的standby,這時如果交換機配的是捆綁,將不能正常工作,因為交換機往兩塊網卡發包,有一半包是丟棄的。
  3. Mode=2(balance-xor) 表示XOR Hash負載分擔,和交換機的聚合強制不協商方式配合。(需要xmit_hash_policy)
  4. Mode=3(broadcast) 表示所有包從所有interface發出,這個不均衡,只有冗余機制...和交換機的聚合強制不協商方式配合。
  5. Mode=4(802.3ad) 表示支持802.3ad協議,和交換機的聚合LACP方式配合(需要xmit_hash_policy)
  6. Mode=5(balance-tlb) 是根據每個slave的負載情況選擇slave進行發送,接收時使用當前輪到的slave
  7. Mode=6(balance-alb) 在5的tlb基礎上增加了rlb。

5和6不需要交換機端的設置,網卡能自動聚合。4需要支持802.3ad。0,2和3理論上需要靜態聚合方式
但實測中0可以通過mac地址欺騙的方式在交換機不設置的情況下不太均衡地進行接收。

 

常用的有三種

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地址。

 

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

……

 [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用的比較多,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM