Linux下多網卡綁定bond及模式介紹


【介紹】

網卡bond一般主要用於網絡吞吐量很大,以及對於網絡穩定性要求較高的場景。

   

主要是通過將多個物理網卡綁定到一個邏輯網卡上,實現了本地網卡的冗余,帶寬擴容以及負載均衡。

   

Linux下一共有七種網卡bond方式,實現以上某個或某幾個具體功能。

最常見的三種模式是bond0bond1bond6.

   

bond0

平衡輪循環策略,有自動備援,不過需要"Switch"支援及設定。

balance-rr(Round-robin policy)

   

方式:

傳輸數據包的順序是依次傳輸(即:第一個包走eth0,第二個包就走eth1……,一直到所有的數據包傳輸完成)。

優點:

提供負載均衡和容錯能力。

缺點:

同一個鏈接或者會話的數據包從不同的接口發出的話,中間會經過不同的鏈路,在客戶端可能會出現數據包無法有序到達的情況,而無序到達的數據包將會被要求重新發送,網絡吞吐量反而會下降

   

bond1

主-備份策略

active-backup(Active -backup policy)

方式:

只有一個設備處於活動狀態,一個宕掉之后另一個馬上切換為主設備。

mac地址為外部可見,從外面看,bond的mac地址是唯一的,switch不會發生混亂。

優點:

提高了網絡連接的可靠性。

缺點:

此模式只提供容錯能力資源利用性較低,只有一個接口處於active狀態,在有N個網絡接口bond的狀態下,利用率只有1/N。

   

【bond2】

平衡策略

balance-xor(XOR policy)

方式:

基於特性的Hash算法傳輸數據包。

缺省的策略為:(源MAC地址 XOR 目標MAC地址) % slave數量。 # XRO為異或運算,值不同時結果為1,相同為0

可以通過xmit_hash_policy選項設置傳輸策略。

特點:

提供負載均衡和容錯能力。

   

【bond3】

廣播策略

broadcast

方式:

在每個slave接口上傳輸每一個數據包。

特點:

提供容錯能力。

   

【bond4】

IEEE 802.3ad 動態鏈接聚合

802.3ad( IEEE 802.3ad Dynamic link aggregation)

方式:

創建一個聚合組,共享同樣的速率和雙工設定

根據802.3ad規范將多個slave工作在同一個激活的聚合體下。外出流量的slave選舉基於傳輸Hash策略,同樣,此策略也可以通過xmit_hash_policy選項進行修改。

注意:

並不是所有的傳輸策略都是802.3ad所適應的

條件:

1. ethtool支持獲取每個slave的速率和雙工設定。

2. switch支持IEEE 802.3ad Dynamic link aggregation(大多數交換機需要設定才支持)

   

【bond5】

適配器傳輸負載均衡

balance-tlb(Adaptive transmit load balancing)

   

方式:

在每個slave上根據當前的負載(依據速度)分配外出流量,接收時使用當前輪到的slave。

如果正在接受數據的slave出故障了,另一個slave接管失敗的slave的MAC地址。

條件:

ethtool支持獲取每個slave的速率。

特點:

不需要任何特別的switch(交換機)支持的通道bonding。

   

bond6

適配器適應性負載均衡

balance-alb(Adaptive load balancing)

   

方式:

此模式包含了bond5的balance-tlb,同時增加了針對IPV4流量的接收負載均衡。(receive load balance, rlb)

   

接收負載均衡是通過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出了故障,則它的硬件地址會被重新選舉產生的slave接管。

與bond0最大的區別在於,bond0的多張網卡里面的流量幾乎是相同的,但是bond6里面的流量是先占滿eth0,再占滿eth1……依次

   

【網卡綁定】

我們假定前條件:

2個物理網口eth0,eth1

綁定后的虛擬口為bond0

服務器IP為10.10.10.1

   

配置文件:

1. vi /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0

BOOTPROTO=none

ONBOOT=yes

IPADDR=10.10.10.1

NETMASK=255.255.255.0

NETWORK=192.168.0.0

2. vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

3. vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

   

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

1. vi /etc/modprobe.d/bonding.conf

alias bond0 bonding

options bonding mode=0 miimon=200

2. 加載模塊

modprobe bonding

3. 確認是否加載成功

[root@slb ~]# lsmod | grep bonding

bonding 100065 0

4. 重啟網絡

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

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

   

以上信息可以確認:

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

b. 現在Active的網口是eth0

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

可以隨意拔掉一根網線或者在交換機上shutdown一個網口,查看網絡是否依舊聯通。

   

5. 系統啟動自動綁定並增加默認網關(可選

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

ifenslave bond0 eth0 eth1

route add default gw 10.10.10.1

   

【多網卡綁定】

上面只是兩個網卡綁定一個bond0的情況,如果我們要設置多個bond口,就不能這樣做了。

·/etc/modprobe.d/bonding.conf·的修改可以如下:

1. 多個bond的模式一樣的情況

alias bond0 bonding

alias bond1 bonding

options bonding max_bonds=2 miimon=200 mode=1

2. 多個bond的模式不一樣的情況

alias bond0 bonding

options bond0 miimon=100 mode=1

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

 


免責聲明!

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



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