當前位置:
首頁 > 最新 > Linux Bonding介紹及在虛擬網路設備中的應用

Linux Bonding介紹及在虛擬網路設備中的應用

每天讀一篇一線開發者原創好文


Linux Bonding介紹及在虛擬網路設備中的應用

簡介

Linux bonding驅動提供了一種方法,用以把多個網路介面(network interface)組合成一個邏輯的」bonded」介面。Bonded介面的工作方式取決於驅動的模式:不同的模式提供了熱備份或負載均衡等不同的服務。此外,驅動還會監控鏈路的可用性。


大多數目前發布的Linux內核都以模塊(module)方式帶了bonding驅動。Bonding驅動的選項是通過在載入時指定參數來設定的。有些參數必須要正確的設定,比如miimon,否則在鏈接故障時會導致嚴重的網路性能退化。

具體的主要參數列表:

downdelay

指定一個時間,用於在發現鏈路故障後,等待一段時間然後禁止一個slave,單位是毫秒(ms)。該選項只對miimon監控有效。downdelay值應該是miimon值的整數倍,否則它將會被取整到最接近的整數倍,預設值為0。

updelay

當發現一個鏈路恢復時,在激活該鏈路之前的等待時間,以毫秒計算。該選項只對miimon鏈路偵聽有效。updelay應該是miimon值的整數倍,如果不是,它將會被向下取整到最近的整數。預設值為0。指定

miimon

指定MII鏈路監控頻率,單位是毫秒(ms)。這將決定驅動檢查每個slave鏈路狀態頻率。0表示禁止MII鏈路監控。100可以作為一個很好的初始參考值。

primary

指定哪個slave成為主設備(primary device),取值為字元串,如eth0,eth1等。只要指定的設備可用,它將一直是激活的slave。只有在主設備(primary device)斷線時才會切換設備。這在希望某個slave設備優先使用的情形下很有用,比如,某個slave設備有更高的吞吐率。primary選項只對active-backup模式有效。

mode

指定bonding的策略。預設是balance-rr (round robin,循環賽)。可選的mode包括:

balance-rr 或者 0

Round-robin(循環賽)策略:按順序傳輸數據包,從第一個可用的slave到最後一個可用的slave。該模式提供了負載均衡和容錯機制。

active-backup 或者 1

Active-backup(激活-備份)策略:只有一個slave是激活的(active)。其他的slave只有在當前激活的slave故障後才會變為激活的(active)。從外面看來,bond的MAC地址是唯一的,以避免switch(交換機)發生混亂。

balance-xor 或者 2

XOR策略:基於指定的傳輸HASH策略傳輸數據包。預設的策略是:(源MAC地址 XOR 目標MAC地址) % slave數量。其他的傳輸策略可以通過xmit_hash_policy選項指定。該模式提供了負載均衡和容錯機制。

broadcast 或者 3

Broadcase(廣播)策略:在每個slave介面上傳輸每個數據包。該模式提供了容錯機制。

802.3ad 或者 4

IEEE 802.3ad Dynamic link aggregation(動態鏈接聚合)。創建一個聚合組,它們共享同樣的速率和雙工設定。根據802.3ad規範將多個slave工作在同一個激活的聚合體下。外出流量的slave選舉是基於傳輸hash策略,該策略可以通過xmit_hash_policy選項從預設的XOR策略改變到其他策略。需要注意的是,並不是所有的傳輸策略都是802.3ad適應的,尤其考慮到在802.3ad標準43.2.4章節提及的包亂序問題。不同的實現可能會有不同的適應性。

必要條件:

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

switch(交換機)支持IEEE 802.3ad Dynamic link aggregation。

balance-tlb 或者 5

自適應的傳輸負載均衡:不需要任何特別的switch(交換機)支持的通道bonding。在每個slave上根據當前的負載(根據速度計算)分配外出流量。如果正在接受數據的slave出故障了,另一個slave接管失敗的slave的MAC地址。

必要條件:ethtool支持獲取每個slave的速率。

balance-alb 或者 6

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

必要條件:

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

底層驅動支持設置某個設備的硬體地址,從而使得總是有個slave(curr_active_slave)使用bond的硬體地址,同時保證每個bond中的slave都有一個唯一的硬體地址。如果curr_active_slave出故障,它的硬體地址將會被新選出來的curr_active_slave接管。

我們可以使用以下方式配置Bonding設備:1、使用Sysconfig配置;2、使用Initscripts配置;3、通過Ifenslave手動配置;4、通過Sysfs手工配置;5、通過ip link命令配置。本文只介紹通過第4、5種方法配置Bonding。


Sysfs介面允許在不卸載模塊的情況下動態配置所有bonds,它也可以在運行時增加和移除bonds。如需配置bonding,必須mount了sysfs文件系統。本文里的示例假定在標準的sysfs的mount點,即/sys。


增加一個新的bond(bond0):

移除一個已存在的bond(bond0):

顯示所有存在的bonds:


通過使用文件/sys/class/net//bonding/slaves,可以把網路介面從屬於某個bond,這個文件的語義和bonding_masters文件完全相同。

把eth0加入bond(bond0):

從bond(bond0)里移除eth0:

注意:bond必須在slave加入之前啟動,所有slave必須在bond介面斷開前移除。


每個bond可以獨立地配置,通過操縱位於/sys/class/net//bonding下的文件。這些文件的名字直接對應於本文里描述的命令行參數。可以直接把對應文件cat出來看當前的設置。

把bond0配置為active-backup模式:

或者

注意:在修改模式前,請先斷開bond介面。

在bond0上啟用MII監控,使用1秒的時間間隔:

設置主備模式bond0的primary設備為eth0:


iproute2的3.10版本之後增加了對bond功能的支持,之前的版本不支持,如果要使用ip link命令配置bond,需要升級版本。



增加一個新的bond(bond0):

移除一個已存在的bond(bond0):

把eth0加入bond(bond0):

從bond(bond0)里移除eth0:


把bond0配置為active-backup模式:

或者

注意:在修改模式前,請先移除bond上的所有slaves。

在bond0上啟用MII監控,使用1秒的時間間隔:

設置主備模式bond0的primary設備為eth0:


新建兩個網路命名空間:blue和green;

新建兩個虛擬網橋設備:br0和br1,並將它們用veth對連接;

新建veth對連接網路命名空間和虛擬網橋設備;

在兩個網路命名空間中,分別新建bond設備:bond0和bond1,並配置屬性;

為兩個命名空間中的bond設備配置ip,進行ping包抓包測試。

創建網路命名空間blue和green


注意:只有在bond1和veth3.1上才能抓到包,因為我們設置了veth3.1為主口。



注意:veth3.1狀態為down,veth4.1切換為主口,此時,在bond1及veth4.1上能抓到包。


注意:由於我們設置bond1的primary為veth3.1,驅動每隔1000ms的miimon時間檢測鏈路狀態,若檢測到veth3.1正常時,等待1000ms的updelay時間,便切換主口為veth3.1,此時,在bond1及veth3.1上能抓到包。


每個bonding設備對應於一個只讀文件,存在/proc/net/bonding目錄,文件內容包括bonding配置的信息,選項以及每個slave的狀態。

上述實例blue網路命名空間中,載入驅動後,/proc/net/bonding/bond0的內容為:

網路配置可以通過ifconfig命令查看,Bonding設備會設上MASTER標記,slave設備會設上SLAVE標記。ifconfig的輸出不包含哪個slave關聯於哪個master的關係。

在上例中,bond0介面是master(MASTER),而veth1.1和veth2.1是slave(SLAVE)。注意除了TLB和ALB模式外,所有bond0的slave和bond0有著同樣的MAC地址(HWaddr),TLB和ALB需要每個slave有獨立的MAC地址。


go語言下開源工具包netlink,提供了簡單的netlink庫。該庫提供了linux下用戶空間程序與內核通信的介面,可以用於增加刪除網路設備等操作。我們可以調用該庫函數增加刪除bond設備。


active-backup、balance-tlb和balance-alb模式不需要對交換機做任何的配置。802.3ad模式需要交換機有對應的配置為802.3ad聚合的埠,具體的配置方法因交換機類型而異。

balance-rr、balance-xor和broadcast模式通常需要交換機對應的埠被分組在一起,不同的交換機對分組有著不同的命名。對於這些模式,每個交換機也會有它自己的針對到bond的傳輸策略的配置選項。典型的選擇包括對每個MAC地址或者IP地址進行XOR操作,兩端的傳輸策略不一定完全一致。對這三種模式,bonding模式會針對一個EtherChannel組選擇一種傳輸策略;所有這三種模式都會和另一個EtherChannel組進行互操作。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 中興開發者社區 的精彩文章:

使用kubeadm部署kubernetes集群

TAG:中興開發者社區 |