01
雙網卡bond調優背景
雙網卡綁定技術較早在各個主機操作系統引入,如HP-UNIX的APA、IBM的EtherChannel,linux上也有對應bond技術。通過雙網卡綁定,一方面利用主備網卡自動切換可以提高網絡接入的高可用能力,另一方面雙網卡bond部分模式下可以雙活的接入,充分利用硬件資源,實現負載均衡,極大的提升主機接入帶寬能力。近年,隨著分步式計算、大數據大規模興起,不斷增長的計算節點之間海量數據傳輸交互,內部節點處理過程產生大量東西向流量,要求網絡具有良好的擴展性和吞吐率,能夠充分適應業務突發流量且具備高可靠性,對主機雙網卡bond要求既能充分利用鏈路帶寬資源又具備高可靠性顯得尤其重要。目前大數據廣泛應用的平台一般是基於linux操作系統,為此我們以linux下的bond模式為例開展研究和分析。
02
Linux雙網卡bond方式簡介
基於linux的操作系統網卡bond模式有七種,模式 (0~6) mode=0、mode=1、mode=2、mode=3、mode=4、mode=5、mode=6,七種bond模式分別說明如下:
第一種模式:mode=0,即:(balance-rr) Round-robin policy(負載均衡輪詢策略)
特點:傳輸數據包順序是依次傳輸(即:第1個包走eth0,下一個包就走eth1….一直循環下去,直到最後一個傳輸完畢),此模式提供負載平衡和容錯能力;如果一個連接或者會話的數據包從不同的接口發出的話,中途再經過不同的鏈路,在客戶端很有可能會出現數據包無序到達的問題,而無序到達的數據包需要重新要求被發送,這樣網絡的吞吐量就會下降。
第二種模式:mode=1,即: (active-backup) Active-backup policy(主-備用策略)
特點:只有一個網卡處於活動狀態,當一個宕掉另一個即刻由備用狀態轉換為主用狀態。從交換機上看,bond的MAC地址是唯一的,以避免SwitchARP表項發生混亂。此模式只提供了容錯能力;由此可見此算法的優點是可以提供高網絡連接的可用性,但是它的資源利用率較低,只有一個接口處於工作狀態,在有N個網絡接口的情況下,資源利用率為1/N。
第三種模式:mode=2,即:(balance-xor) XOR policy(平衡策略)
特點:基於指定的傳輸HASH策略傳輸數據包。缺省的策略是:通過源和目標mac做hash因子來做xor算法來選路的。其他的傳輸策略可以通過xmit_hash_policy選項指定,此模式提供負載平衡和容錯能力。
第四種模式:mode=3,即:broadcast(廣播策略)
特點:在每個slave接口上傳輸每個數據包,一個報文會復制兩份往bond下的兩個接口分別發送出去,當有對端交換機失效時無感知。此方式過於浪費資源,但有很好的容錯機制。
第五種模式:mode=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad動態鏈路聚合)
特點:創建一個聚合組,它們共享同樣的速率和雙工設定。根據802.3ad規范將多個slave工作在同一個激活的聚合體下。外出流量的slave選舉是基於傳輸hash策略,該策略可以通過xmit_hash_policy選項從缺省的XOR策略改變到其他策略。
必要條件:
條件1:ethtool支持獲取每個slave的速率和雙工設定
條件2:Switch(交換機)支持IEEE 802.3ad Dynamic link aggregation
條件3:大多數Switch(交換機)需要經過特定配置才能支持802.3ad模式
第六種模式:mode=5,即:(balance-tlb) Adaptive transmit load balancing(適配器傳輸負載均衡)
特點:不需要任何特別的Switch(交換機)支持的通道bonding。在每個slave上根據當前的負載(根據速度計算)分配外出流量。如果正在接受數據的slave出故障了,另一個slave接管失敗的slave的MAC地址。
該模式的必要條件:ethtool支持獲取每個slave的速率。
第七種模式:mode=6,即:(balance-alb) Adaptive load balancing(適配器適應性負載均衡)
特點:該模式包含了balance-tlb模式,同時加上針對IPV4流量的接收負載均衡(receive load balance, rlb),而且不需要任何switch(交換機)的支持。接收負載均衡是通過ARP協商實現的。bonding驅動截獲本機發送的ARP應答,並把源硬件地址改寫為bond中某個slave的唯一硬件地址,從而使得不同的對端使用不同的硬件地址進行通信。來自服務器端的接收流量也會被均衡。當本機發送ARP請求時,bonding驅動把對端的IP信息從ARP包中復制並保存下來。當ARP應答從對端到達時,bonding驅動把它的硬件地址提取出來,並發起一個ARP應答給bond中的某個slave。使用ARP協商進行負載均衡的一個問題是:每次廣播ARP請求時都會使用bond的硬件地址,因此對端學習到這個硬件地址後,接收流量將會全部流向當前的slave。這個問題可以通過給所有的對端發送更新(ARP應答)來解決,應答中包含他們獨一無二的硬件地址,從而導致流量重新分布。當新的slave加入到bond中時,或者某個未激活的slave重新激活時,接收流量也要重新分布。
必要條件:
條件1:ethtool支持獲取每個slave的速率;
條件2:底層驅動支持設置某個設備的硬件地址,從而使得總是有個slave(curr_active_slave)使用bond的硬件地址,同時保證每個bond中的slave都有一個唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址將會被新選出來的curr_active_slave接管。
mode=6與mode=0的區別:mode=6,先把eth0流量占滿,再占eth1,…ethX;而mode=0的話,會發現兩個口的流量都很穩定,基本一樣的帶寬。在mode=6下,會發現第一個口流量很高,第2個口只占了小部分流量。
以上我們對linux雙網卡不同bond模式進行了分析。通過分析可知,mode=1實現最簡單,對接入交換機無適配要求,交換機無需做鏈路聚合配置;mode=0、mode=2需交換機配置靜態鏈路聚合;mode=4需要交換機進行動態鏈路聚合配置;mode=3,報文會復制兩份往bond下的兩個接口分別發送出去,無形中增大了網絡中無用的帶寬;mode=5、mode=6兩種模式基於網卡適配器傳輸特性實現,bond組裡端口流量可能分擔不均。對於mode=2、mode=3、mode=5、mode=6這些模式或配置復雜、或浪費資源而沒得到廣泛使用,故我們選取業界最常用的三種模式mode=0、mode=1、mode=4進行測試比較。
03
雙網卡不同bond模式接入實測效果對比及調優
在大數據集群主機中多采用主備雙網卡接入。隨著大數據集群規模的擴大,集群內加載機對帶寬需求與日俱增,為此我們對部分加載機進行了雙網卡bond模式修改,將之前的主備模式調整成負載均衡輪詢模式。經過調整,加載機雙網卡能有效分擔流量,流量已超過之前主備卡接入模式下最大10GEb/s限制,高峰時達到近20GEb/s。但在調整後,應用維護人員反映集群存在加載延時和失敗率偏高的問題。經在集群內部加載機上抓包分析,發現存在大量out_of_order、lost_segment、duplicate_ack、retransmission報文。在網絡存在多路徑、擁塞時可能導致這些異常報文大量出現。在同樣加載場景下,在主備網卡接入的加載機上抓包,發現僅有少量此類報文出現。初步懷疑因修改加載機雙網卡bond接入為負載均衡輪詢模式導致。
以下我們將在大數據集群環境下對linux主機mode=0、mode=1、mode=4三種模式進行測試對比,在主機端對bond端口抓包進行分析,並在抓包文件裡統計out_of_order、lost_segment、duplicate_ack、retransmission報文數量,作為bond接入模式選擇參考依據。
>>>>接入測試環境
項目明細軟硬件環境 (三台配置相同的主機)X86服務器Cpu: 4*8硬盤:21*900 SAS 10krpm內存:512GB操作系統:redhat 6.5網絡2台N7010接入交換機,支持vPC(virtual port channel), 3台加載機,每台加載機或節點機兩塊萬兆網卡分別連至不同交換機。部署架構主倉3*12 節點機+ 3加載機數據庫版本GBase8a_MPP_Cluster-8.5.1.2_build11.4_r64_2-redhat6.2-x86_64.tar.bz2>>>>
接入拓撲示意
>>>>不同bond模式下加載效率對比
在集群裡分三次通過加載機向36台節點機裝載數據,第一次通過加載機server1裝載數據,第二次通過server2裝載數據,第三次通過server3裝載數據。每次加載機啟動加載,待速度穩定後,觀察加載機的加載速度,並在加載機機上使用tcpdump抓包。抓包後,使用Wireshark軟件分析out_of_order、lost_segment、duplicate_ack、retransmission報文計數情況。每次裝載數據只啟動一個單任務作業,保持三次測試環境條件一致。
報文類型注解out_of_order由於是通過不同的路徑或者傳輸有問題,延時太長,或者包丟失,需要重新組合數據單元lost_segment這個錯誤非致命,如果大量出現,證明發送和接受者的通信機制需要改善duplicate_ack當收到一個它認為出問題的分片,Tcp立即產生一個應答。這個相同的ack不會延遲。其的意圖是讓對端知道一個分片被收到的時候出現問題,並且告訴它希望得到的序列號retransmission作為一個可靠的傳輸協議,傳輸控制協議(TCP)在發送主機需要從目標主機收到一個包時確認,如果未確認,就會重傳在某時間間隔內分別統計每次節點機加載速度和可能造成傳輸質量問題的相關報文計數情況。
加載機節點機每節點加載速度duplicate_ackretransmissionlost_ segmentout_of_order負載均衡輪詢模式(mode=0)3.79MB/s1115761752412197主備模式
(mode=1)5.33MB/s47811831802.3ad動態鏈路聚合模式(mode=4)9.46MB/s561313445從以上數據對比可以看出,雙網卡在負載均衡輪詢模式下網絡傳輸質量低於主備卡模式及802.3ad動態鏈路聚合模式。802.3ad模式能高效利用兩張卡同時進行數據傳輸,理論上速度較主備卡模式提升一倍。從網絡質量方面對比,負載均衡輪詢模式下的out_of_order數量是主備模式及802.3ad動態鏈路聚合模式的300多倍,表明在負載均衡輪詢模式下報文的亂序嚴重,而接收端需要等報文順序到達,可能會導致接收端認為報文丟失,引起擁塞窗口的調整和快速重傳。另一方面,當TCP報文發生亂序時,接收端對接收到的數據在緩存中重新排序,並按照正確報文順序交付給應用程序,這可能會導致所有已到達的報文在緩存中等待序號小的報文到達,而當緩存滿時,後面的報文就不能再接收了,這樣會導致應用程序性能的下降,也可能會影響到系統CPU資源的利用率。
>>>>大數據集群加載機主機網卡bond模式調優
在大數據加載機裝載數據時,並發持續加大,長時間加載情況下,問題累加會更加嚴重。一方面加重了網絡負擔,同時會導致操作系統CPU 系統資源占用較多,周而復始惡性循環,可能造成加載失敗和集群的分裂。
目前大數據集群其中一台加載機雙網卡已修改為802.3ad動態鏈路聚合模式,暫未發現集群加載數據延時和失敗率偏高的問題,後期可考慮在大數據集群主機中大范圍采用802.3ad模式進行雙網卡bond,更加有效利用網卡、交換機端口及鏈路資源。
雙網卡bondmode=4模式,主機配置參考:
交換機側配置參考:
本次以數據中心交換機Cisco Nexus7010(支持vPC,跨框鏈路聚合)為例,單台主機兩張網卡分別接入主備兩台交換機。在主機雙網卡配置802.3ad bond模式下,交換機適配配置如下:
04
關於各類常用bond模式適用場景的思考
通過在大數據場景下雙網卡三種bond接入模式的測試對比,結合現網生產環境,我們對這三種接入模式適用場景進行了梳理如下:
mode=0模式,網卡工作在負載均衡輪詢模式。接入交換機需支持靜態鏈路聚合功能,需配置port-channel。比較適用於在雙網卡同時接入單台交換機的環境。當接入兩台交換機時,兩台交換機需堆疊或支持跨框鏈路聚合,若兩台交換機網關雙活,網絡出口存在多條冗余鏈路時可能會出現數據包亂序、重傳現象。
mode=1模式,網卡工作在主備用模式。該模式實現最簡單,對接入交換機無特殊配置要求,中低端交換機均支持,交換機端口配置成access端口即可。主機雙網卡可同時接入單台交換機或兩台主備交換機上。適用於兩台主備交換機不支持跨框鏈路聚合、主機對帶寬需求不高但又要保證高可靠性的環境。目前在傳統網絡中較為常見。
mode=4模式,網卡工作在802.3ad動態鏈路聚合模式。接入交換機需支持動態鏈路聚合功能,需配置port-channel並封裝LACP協議。適用於雙網卡同時接入單台或兩台交換機環境,兩台交換機需堆疊或支持跨框802.3ad動態鏈路聚合。此種模式下,雙網卡能有效分擔流量壓力,能有效增加主機接入帶寬,同時也保證了高可靠性。可廣泛運用於資源池、大數據環境。