1. 程式人生 > >多網絡卡繫結bonding

多網絡卡繫結bonding

linux下多網絡卡繫結bonding

Linux bonding 驅動提供了一個將多個物理網路埠捆綁為單個邏輯網路埠的方法,用於網路負載均衡、冗餘和提升網路的效能,比如對於備份伺服器,需要在一個晚上備份幾個T的資料,如果使用單個的千兆網口將會是很嚴重的瓶頸。其它的應用,比如ftp伺服器,高負載的下載網站, 都有類似的問題。因此使用bond或Linux teaming來繫結多個網絡卡作為一個邏輯網口,配置單個的IP地址,會大幅提升伺服器的網路吞吐(I/O)。

Linux的多網絡卡繫結功能使用的是核心中的"bonding"模組,關於此模組可以參考Linux Ethernet Bonding Driver文件, 但是目前釋出各個Linux版本核心均已包含了此模組,大多數情況下不需要重新編譯核心。 Linux 的 bonding 驅動提供了繫結/整合(bond)多個網絡卡為一個虛擬邏輯網口的功能。

bond主要模式介紹:

mode=0(balance-rr)(平衡掄迴圈策略)

鏈路負載均衡,增加頻寬,支援容錯,一條鏈路故障會自動切換正常鏈路。交換機需要配置聚合口,思科叫port channel

特點:傳輸資料包順序是依次傳輸(即:第1個包走eth0,下一個包就走eth1….一直迴圈下去,直到最後一個傳輸完畢),此模式提供負載平衡和容錯能力;但是我們知道如果一個連線或者會話的資料包從不同的介面發出的話,中途再經過不同的鏈路,在客戶端很有可能會出現資料包無序到達的問題,而無序到達的資料包需要重新要求被髮送,這樣網路的吞吐量就會下降

mode=1(active-backup)(主-備份策略)

這個是主備模式,只有一塊網絡卡是active,另一塊是備用的standby,所有流量都在active鏈路上處理,交換機配置的是捆綁的話將不能工作,因為交換機往兩塊網絡卡發包,有一半包是丟棄的

特點:只有一個裝置處於活動狀態,當一個宕掉另一個馬上由備份轉換為主裝置。mac地址是外部可見得,從外面看來,bond的MAC地址是唯一的,以避免switch(交換機)發生混亂。此模式只提供了容錯能力;由此可見此演算法的優點是可以提供高網路連線的可用性,但是它的資源利用率較低,只有一個介面處於工作狀態,在有 N 個網路介面的情況下,資源利用率為1/N

mode=2(balance-xor)(平衡策略)

表示XOR Hash負載分擔,和交換機的聚合強制不協商方式配合

特點:基於指定的傳輸HASH策略傳輸資料包。此模式提供負載平衡和容錯能力

mode=3(broadcast)(廣播策略)

表示所有包從所有網路介面發出,這個不均衡,只有冗餘機制,但過於浪費資源。此模式適用於金融行業,因為他們需要高可靠性的網路,不允許出現任何問題。需要和交換機的聚合強制不協商方式配合

特點:在每個slave介面上傳輸每個資料包,此模式提供了容錯能力

mode=4(802.3ad)(IEEE 802.3ad 動態連結聚合)

表示支援802.3ad協議,和交換機的聚合LACP方式配合,標準要求所有裝置在聚合操作時,要在同樣的速率和雙工模式,而且,和除了balance-rr模式外的其它bonding負載均衡模式一樣,任何連線都不能使用多於一個介面的頻寬

特點:建立一個聚合組,它們共享同樣的速率和雙工設定

mode=5(balance-tlb)(介面卡傳輸負載均衡)

根據每個slave的負載情況選擇slave進行傳送,接收時使用當前輪到的slave

特點:不需要任何特別的switch(交換機)支援的通道bonding。在每個slave上根據當前的負載分配外出流量。如果正在接受資料的slave出故障了,另一個slave接管失敗的slave的MAC地址。

mode=6(balance-alb)(介面卡適應性負載均衡)

在tlb的基礎上增加了rlb(接收負載均衡).不需要任何switch(交換機)的支援。接收負載均衡是通過ARP協商實現的.

特點:該模式包含了balance-tlb,同時加上針對IPV4流量的接收負載均衡,而且不需要任何switch(交換機)的支援。接收負載均衡通過ARP協商實現。

常用mode0,mode1,mode6

 

bond介面的命令生成

nmcli connection add con-name bond0 ifname bond0 type bond mode active-backup ip4 172.25.254.100 ---- 生成bond0的主備份模式埠並設定ip地址

watch -n 1 'cat /proc/net/bonding/bond0' ---- 介面bond0的監控命令

此時介面不能ping通,因為沒有真實的物理裝置對他進行支撐,我們需要設定網絡卡為介面服務

首先要刪除網絡卡的配置檔案 /etc/sysconfig/network-scripts

設定網絡卡eth0為介面服務:nmcli connection add con-name eth0 ifname eth0 type bond-slave master bond0 

設定網絡卡eth1為介面服務:nmcli connection add con-name eth1 ifname eth1 type bond-slave master bond0 

此時從監控中可以看到,eth0正在為介面提供物理裝置的服務

ifconfig eth0 down ---- 使eth0網絡卡關閉,此時介面仍可ping通,監控顯示此時eth1正在工作

ifconfig eth0 up ---- 恢復eth0網絡卡,此時eth1仍然在工作,需要等eth1網絡卡出現問題再由eth0網絡卡工作

 

bond介面的配置檔案生成

/etc/sysconfig/network-scripts 網路配置檔案中:

新建ifcfg-bond0,內容如下:

DEVICE=bond0

ONBOOT=yes

BOOTPROTO=none

IPADDR=172.25.254.100

NETMASK=255.255.255.0

TYPE=Bond

BONDING_OPTS=mode=active-backup

新建網絡卡配置檔案,內容如下:

MASTER=bond0

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=none 

重啟網路服務,bond介面生成,正常執行