今天分享的是linux操做系統下雙網卡綁定有哪七種模式,分別是如何工做的。如今通常的企業都會使用雙網卡接入,這樣既能添加網絡帶寬,同時又能作相應的冗餘,能夠說是好處多多。而通常企業都會使用linux操做系統下自帶的網卡綁定模式,固然如今網卡產商也會出一些針對windows操做系統網卡管理軟件來作網卡綁定(windows操做系統沒有網卡綁定功能 須要第三方支持)。進入正題,linux有七種網卡綁定模式:0. round robin,1.active-backup,2.load balancing (xor), 3.fault-tolerance (broadcast), 4.lacp, 5.transmit load balancing, 6.adaptive load balancing。
第一種:bond0:round robin
標準:round-robin policy: Transmit packets in sequential order from the first available slave through the last. This mode provides load balancing and fault tolerance.linux
特色:(1)全部鏈路處於負載均衡狀態,輪詢方式往每條鏈路發送報文,基於per packet方式發送。服務上ping 一個相同地址:1.1.1.1 雙網卡的兩個網卡都有流量發出。負載到兩條鏈路上,說明是基於per packet方式 ,進行輪詢發送。(2)這模式的特色增長了帶寬,同時支持容錯能力,當有鏈路出問題,會把流量切換到正常的鏈路上。算法
實際綁定結果:
cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
Bonding Mode: load balancing (round-robin) -----RR的模式
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 74:ea:3a:6a:54:e3
Slave Interface: eth1
MII Status: up
Link Failure Count: 0ubuntu
應用拓撲:交換機端須要配置聚合口,cisco叫port channel。拓撲圖以下:
windows
第二種:bond1:active-backup
標準文檔定義:Active-backup policy: Only one slave in the bond is active. A different slave becomes active if, and only if, the active slave fails. The bond’s MAC address is externally visible on only one port (network adapter) to avoid confusing the switch. This mode provides fault tolerance. The primary option affects the behavior of this mode.緩存
模式的特色:一個端口處於主狀態 ,一個處於從狀態,全部流量都在主鏈路上處理,從不會有任何流量。當主端口down掉時,從端口接手主狀態。服務器
實際綁定結果:
root@1:~# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
Bonding Mode: fault-tolerance (active-backup) -----backup模式
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 74:ea:3a:6a:54:e3
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: d8:5d:4c:71:f9:94網絡
應用拓撲:這種模式接入不須要交換機端支持,隨便怎麼接入都行。併發
第三種:bond2:load balancing (xor)
標準文檔描述:XOR policy: Transmit based on [(source MAC address XOR'd with destination MAC address) modulo slave count]. This selects the same slave for each destination MAC address. This mode provides load balancing and fault tolerance.負載均衡
特色:該模式將限定流量,以保證到達特定對端的流量老是從同一個接口上發出。既然目的地是經過MAC地址來決定的,所以該模式在「本地」網絡配置下能夠工做得很好。若是全部流量是經過單個路由器(好比 「網關」型網絡配置,只有一個網關時,源和目標mac都固定了,那麼這個算法算出的線路就一直是同一條,那麼這種模式就沒有多少意義了。),那該模式就不是最好的選擇。和balance-rr同樣,交換機端口須要能配置爲「port channel」。這模式是經過源和目標mac作hash因子來作xor算法來選路的。ide
實際綁定結果:
[root@localhost ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.0.3 (March 23, 2006)
Bonding Mode: load balancing (xor) ------配置爲xor模式
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:d0:f8:40:f1:a0
Slave Interface: eth2
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:d0:f8:00:0c:0c
應用拓撲:同bond0同樣的應用模型。這個模式也須要交換機配置聚合口。
第四種:bond3:fault-tolerance (broadcast)
標準文檔定義:Broadcast policy: transmits everything on all slave interfaces. This mode provides fault tolerance.
特色:這種模式的特色是一個報文會複製兩份往bond下的兩個接口分別發送出去,當有對端交換機失效,咱們感受不到任何downtime,但此法過於浪費資源;不過這種模式有很好的容錯機制。此模式適用於金融行業,由於他們須要高可靠性的網絡,不容許出現任何問題。
實際綁定結果:
root@ubuntu12:~/ram# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
Bonding Mode: fault-tolerance (broadcast) ------- fault-tolerance 模式
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 74:ea:3a:6a:54:e3
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: d8:5d:4c:71:f9:94
應用拓撲:以下:
這種模式適用於以下拓撲,兩個接口分別接入兩臺交換機,而且屬於不一樣的vlan,當一邊的網絡出現故障不會影響服務器另外一邊接入的網絡正常工做。並且故障過程是0丟包。下面展現了這種模式下ping信息:
64 bytes from 1.1.1.1: icmp_seq=901 ttl=64 time=0.205 ms
64 bytes from 1.1.1.1: icmp_seq=901 ttl=64 time=0.213 ms (DUP!) ---dup爲重複報文
64 bytes from 1.1.1.1: icmp_seq=902 ttl=64 time=0.245 ms
64 bytes from 1.1.1.1: icmp_seq=902 ttl=64 time=0.254 ms (DUP!)
64 bytes from 1.1.1.1: icmp_seq=903 ttl=64 time=0.216 ms
64 bytes from 1.1.1.1: icmp_seq=903 ttl=64 time=0.226 ms (DUP!)
從這個ping信息能夠看到,這種模式的特色是,同一個報文服務器會複製兩份分別往兩條線路發送,致使回覆兩份重複報文,這種模式有浪費資源的嫌疑。
第五種:bond4:lacp
標準文檔定義:IEEE 802.3ad Dynamic link aggregation. Creates aggregation groups that share the same speed and duplex settings. Utilizes all slaves in the active aggregator according to the 802.3ad specification. Pre-requisites: 1. Ethtool support in the base drivers for retrieving.the speed and duplex of each slave. 2. A switch that supports IEEE 802.3ad Dynamic link
aggregation. Most switches will require some type of configuration to enable 802.3ad mode.
特色:802.3ad模式是IEEE標準,所以全部實現了802.3ad的對端均可以很好的互操做。802.3ad 協議包括聚合的自動配置,所以只須要不多的對交換機的手動配置(要指出的是,只有某些設備才能使用802.3ad)。802.3ad標準也要求幀按順序(必定程度上)傳遞,所以一般單個鏈接不會看到包的亂序。802.3ad也有些缺點:標準要求全部設備在聚合操做時,要在一樣的速率和雙工模式,並且,和除了balance-rr模式外的其它bonding負載均衡模式同樣,任何鏈接都不能使用多於一個接口的帶寬。
此外,linux bonding的802.3ad實現經過對端來分發流量(經過MAC地址的XOR值),所以在「網關」型配置下,全部外出(Outgoing)流量將使用同一個設備。進入(Incoming)的流量也可能在同一個設備上終止,這依賴於對端802.3ad實現裏的均衡策略。在「本地」型配置下,路兩將經過 bond裏的設備進行分發。
實際綁定結果:
root@:~# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
802.3ad info
LACP rate: slow
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
Aggregator ID: 1
Number of ports: 1
Actor Key: 9
Partner Key: 1
Partner Mac Address: 00:00:00:00:00:00
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 74:ea:3a:6a:54:e3
Aggregator ID: 1
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: d8:5d:4c:71:f9:94
Aggregator ID: 2
應用拓撲:應用拓撲同bond0,和bond2同樣,不過這種模式除了配置port channel以外還要在port channel聚合口下開啓LACP功能,成功協商後,兩端能夠正常通訊。不然不能使用。
交換機端配置:
interface AggregatePort 1 配置聚合口
interface GigabitEthernet 0/23
port-group 1 mode active 接口下開啓lacp 主動模式
interface GigabitEthernet 0/24
port-group 1 mode active
第六種:bond5: transmit load balancing
標準文檔定義:Adaptive transmit load balancing: channel bonding that does not require any special switch support. The outgoing traffic is distributed according to the current load (computed relative to the speed) on each slave. Incoming traffic is received by the current slave. If the receiving slave fails, another slave takes over the MAC address of the failed receiving slave. Prerequisite: Ethtool support in the base drivers for retrieving the speed of each slave.
特色:balance-tlb模式經過對端均衡外出(outgoing)流量。既然它是根據MAC地址進行均衡,在「網關」型配置(如上文所述)下,該模式會經過單個設備來發送全部流量,然而,在「本地」型網絡配置下,該模式以相對智能的方式(不是balance-xor或802.3ad模式裏說起的XOR方式)來均衡多個本地網絡對端,所以那些數字不幸的MAC地址(好比XOR獲得一樣值)不會彙集到同一個接口上。
不像802.3ad,該模式的接口能夠有不一樣的速率,並且不須要特別的交換機配置。不利的一面在於,該模式下全部進入的(incoming)流量會到達同一個接口;該模式要求slave接口的網絡設備驅動有某種ethtool支持;並且ARP監控不可用。
實際配置結果:
cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.0.3 (March 23, 2006)
Bonding Mode: transmit load balancing -----TLB模式
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:d0:f8:40:f1:a0
Slave Interface: eth2
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:d0:f8:00:0c:0c
應用拓撲:這個模式下bond成員使用各自的mac,而不是上面幾種模式是使用bond0接口的mac。
如上圖,設備開始時會發送免費arp,以主端口eth1的mac爲源,當客戶端收到這個arp時就會在arp緩存中記錄下這個mac對的ip。而在這個模式下,服務器每一個端口在ping操做時,會根據算法算出出口,地址不斷變化時他,這時會負載到不一樣端口。實驗中ping1.1.1.3時往eth2發送,源mac爲00:D0:F8:00:0C:0C,ping1.1.1.4是往eth1發送,源mac爲00:D0:F8:40:F1:A0,以此類推,因此從服務器出去的流量負載到兩條線路,可是因爲服務發arp時只用00:D0:F8:40:F1:A0,這樣客戶端緩衝記錄的是00:D0:F8:40:F1:A0對的ip,封裝時目標mac:00:D0:F8:40:F1:A0。這樣進入服務的流量都只往eth1(00:D0:F8:40:F1:A0)走。設備會一直髮入snap報文,eth1發送源爲00d0.f840.f1a0的snap報文,eth2發送源爲00d0.f800.0c0c的snap報文。這個snap報文mac和目標mac同樣都是網卡本地mac,源ip和目標ip也同樣,這個報文的做用是檢測線路是否正常的迴環報文。
注:能夠經過修改bond0的mac地址來引導他發修改後的源mac的免費arp(MACADDR=00:D0:F8:00:0C:0C)
第七種:bond6:adaptive load balancing
特色:該模式包含了balance-tlb模式,同時加上針對IPV4流量的接收負載均衡(receive load balance, rlb),並且不須要任何switch(交換機)的支持。接收負載均衡是經過ARP協商實現的。bonding驅動截獲本機發送的ARP應答,並把源硬件地址改寫爲bond中某個slave的惟一硬件地址,從而使得不一樣的對端使用不一樣的硬件地址進行通訊。全部端口都會收到對端的arp請求報文,回覆arp回時,bond驅動模塊會截獲所發的arp回覆報文,根據算法算到相應端口,這時會把arp回覆報文的源mac,send源mac都改爲相應端口mac。從抓包狀況分析回覆報文是第一個從端口1發,第二個從端口2發。以此類推。
(還有一個點:每一個端口除發送本端口回覆的報文,也一樣會發送其餘端口回覆的報文,mac仍是其餘端口的mac)這樣來自服務器端的接收流量也會被均衡。
當本機發送ARP請求時,bonding驅動把對端的IP信息從ARP包中複製並保存下來。當ARP應答從對端到達時,bonding驅動把它的硬件地址提取出來,併發起一個ARP應答給bond中的某個slave(這個算法和上面同樣,好比算到1口,就給發送arp請求,1回覆時mac用1的mac)。使用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出故障,它的硬件地址將會被新選出來的 curr_active_slave接管。
實際配置結果:
root@:/tmp# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
Bonding Mode: adaptive load balancing
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 74:ea:3a:6a:54:e3
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: d8:5d:4c:71:f9:94
應用拓撲:
A是雙網卡綁定。
當B 發送一個arp請求到達A時,按正常狀況A會迴應一個arp迴應報文,源mac爲bond的mac,源就是bond的ip。可是這個模式下bonding驅動會截獲這個arp迴應,把源mac改爲bond狀態 下其中某一個網卡的mac:mac1,這樣B收到這個arp迴應時就會在arp緩存中記錄下ip:1.1.1.1對應的mac爲mac1。這樣B的過來的流量都走MAC1.
當C 發送一個arp請求到達A時,按正常狀況A會迴應一個arp迴應報文,源mac爲bond的mac,源就是bond的ip。可是這個模式下bonding驅動會截獲這個arp迴應,把源mac改爲bond狀態 下其中某一個網卡的mac:mac2,這樣C收到這個arp迴應時就會在arp緩存中記錄下ip:1.1.1.1對應的mac爲mac2。這樣C的過來的流量都走MAC2.
這樣就能夠作到回來讓回來的流量也負載均衡。出方向均衡和MODE=5一致,不一樣地址會根據xor算法算出不一樣出口,發不一樣出口發送相應的arp ,mac是對應網卡的mac。
以上分析是我的總結的一個觀點,若有不一樣意見歡迎拍磚。
若有轉載請說明本文出處,數據中心天空博客:http://www.datacentersky.com。