Linu服務器研究論文
時間:2022-03-12 10:21:00
導語:Linu服務器研究論文一文來源于網(wǎng)友上傳,不代表本站觀點,若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
摘要負載均衡技術的使用能夠在不對網(wǎng)絡中各種設備進行重大改造的條件下提高各種服務的質量,是解決當前網(wǎng)絡業(yè)務迅猛增加和升級硬件設施之間矛盾的一個有效措施,本文簡單描述了關于負載均衡方面的研究現(xiàn)狀,重點介紹了現(xiàn)今linuxbonding技術及其基于bonding技術的幾種負載均衡的算法,并對此進行了簡要的分析與研究,提出了其不足之處,針對這些不足提出了一種多網(wǎng)卡情況下基于傳輸協(xié)議的發(fā)送方面的算法,并對此進行了簡單的實現(xiàn),最后對此進行了測試,測試結果表明該方法的可用性。
關鍵詞linuxbonding;傳輸協(xié)議;負載均衡;高可用性;
1引言
現(xiàn)今幾乎各行各業(yè)內(nèi)部都建立了自己的服務器,由于服務器的特殊地位,它的可靠性、可用性及其I/O速度就顯得非常的重要,保持服務器的高可用性和安全性是企業(yè)級IT環(huán)境的重要指標,其中最重要的一點是服務器網(wǎng)絡連接的高可用性,為實現(xiàn)這些要求,現(xiàn)在服務器大都采用多網(wǎng)卡配置,系統(tǒng)大都采用現(xiàn)在非常流行的linux作為服務器工作的環(huán)境?,F(xiàn)在帶寬已經(jīng)不是服務質量提高的瓶頸了,相對的網(wǎng)絡設備和服務器的處理能力就漸漸成為新的瓶頸。為提高服務器的網(wǎng)絡連接的可用性和可靠性,目前Sun公司的Trunking技術、3Com公司的DynamicAccess技術、Cisco公司的Etherchannel技術等等都在研究將服務器的多個網(wǎng)卡接口綁定在一起的鏈路聚集技術,鏈路聚集技術將多個鏈路虛擬成一個邏輯鏈路進而提供了一種廉價、有效的方法擴展網(wǎng)絡設備和服務器的帶寬,提高網(wǎng)絡的靈活性與可用性。
本文介紹linux下的bonding技術,linux2.4.x的內(nèi)核中采用了這種技術,利用bonding技術可以將多塊網(wǎng)卡接口通過綁定虛擬成為一塊網(wǎng)卡,在用戶看來這個聚合起來的設備好像是一個單獨的以太網(wǎng)接口設備,通俗點講就是多塊網(wǎng)卡具有相同的IP地址而并行連接聚合成一個邏輯鏈路工作。現(xiàn)在在關于linuxbonding技術中,有幾種算法來實現(xiàn)負載均衡的要求,此文針對這些算法,在此進行簡單分析與研究,討論其不足,并提出另外一種在此基礎上改進的一種基于傳輸協(xié)議的負載均衡實現(xiàn)方法。討論如何實現(xiàn)多個網(wǎng)絡接口的分在均衡及其故障接管。
2負載均衡技術和高可用技術研究介紹
2.1負載均衡技術
負載均衡技術的主要思想就是如何根據(jù)某種算法將網(wǎng)絡的業(yè)務流量平均分配到不同的服務器和網(wǎng)絡設備上去,以減輕單臺服務器和網(wǎng)絡設備的負擔,從而提高整個系統(tǒng)的效率。負載均衡既可以由有負載均衡功能的硬件實現(xiàn),也可以通過一些專用的軟件來實現(xiàn),負載均衡是一種策略,它能讓多臺服務器或多條鏈路共同承擔一些繁重的計算或者I/O任務,從而以較低的成本消除網(wǎng)絡瓶頸,提高網(wǎng)絡的靈活性和可靠性。
2.2高可用技術
實現(xiàn)負載均衡首先是基于網(wǎng)絡的高可用性提出來的,高可用技術是容錯技術的一個分支。實現(xiàn)系統(tǒng)的高可用性最簡單的一個辦法就是冗余。完整的網(wǎng)絡負載均衡和高可用性網(wǎng)絡技術有兩個方面構成,一是多服務器的綁定和負載均衡,二是一個服務器內(nèi)部的多網(wǎng)卡綁定的負載均衡,這里主要討論一個服務器內(nèi)部的多網(wǎng)卡綁定時的負載均衡。
3Linux的bonding技術中負載均衡的簡單實現(xiàn)
3.1Linux的bonding技術
Linux的bonding技術是網(wǎng)卡驅動程序之上、數(shù)據(jù)鏈路層之下實現(xiàn)的一個虛擬層,通過這種技術,服務器接在交換機上的多塊網(wǎng)卡不僅被綁定為一個IP,MAC地址也被設定為同一個,進而構成一個虛擬的網(wǎng)卡,工作站向服務器請求數(shù)據(jù),服務器上的網(wǎng)卡接到請求后,網(wǎng)卡根據(jù)某種算法智能決定由誰來處理數(shù)據(jù)的傳輸。Bonding技術可以提高主機的網(wǎng)絡吞吐量和可用性。
3.2Linux的幾種發(fā)送均衡算法
目前Linux的發(fā)送算法最主要的有三種:輪轉算法(Round-Robin)、備份算法(Active-Backup)、MAC地址異或算法(MAC-XOR)。下面對目前這三種主要算法進行簡單分析。
3.2.1輪轉算法
該算法是基于公平原則進行的,它為每個將要被發(fā)送的數(shù)據(jù)包選擇發(fā)送接口,算法的主要思想是首先第一個數(shù)據(jù)包由一個接口發(fā)送,另一個數(shù)據(jù)包則由另外一個接口發(fā)送,下面依次進行循環(huán)選擇。通過分析我們可以看出這種算法比較比較簡單,在發(fā)送數(shù)據(jù)方面也比較公平,能保證網(wǎng)卡發(fā)送數(shù)據(jù)時候的負載均衡,資源利用率很高。但是我們知道如果一個連接或者會話的數(shù)據(jù)包從不同的接口發(fā)出的話,中途再經(jīng)過不同的鏈路,在客戶端很有可能會出現(xiàn)數(shù)據(jù)包無序到達的問題,而無序到達的數(shù)據(jù)包需要重新要求被發(fā)送,這樣網(wǎng)絡的吞吐量就會下降。
3.2.2備份算法
該算法將多個網(wǎng)卡接口中的一個接口設定為活動狀態(tài),其他的接口處于備用狀態(tài)。當活動接口或者活動鏈路出現(xiàn)故障時,啟動備用鏈路,由此可見此算法的優(yōu)點是可以提供高網(wǎng)絡連接的可用性,但是它的資源利用率較低,只有一個接口處于工作狀態(tài),在有N個網(wǎng)絡接口的情況下,資源利用率為1/N。
3.2.3MAC地址異或算法
該算法的主要思想是:由服務器的MAC地址和客戶端的MAC地址共同決定每個數(shù)據(jù)包的發(fā)送端口號,由源MAC地址和目的MAC地址進行異或計算,并將異或結果對接口數(shù)求余計算。由于發(fā)送到同一個客戶端的數(shù)據(jù)流經(jīng)過同一個鏈路,因此數(shù)據(jù)包能夠有序到達客戶端。此算法在只有一個客戶機訪問服務器或者服務器和客戶機不在同一子網(wǎng)的情況下,由算法思想得知這種情況下負載不會均衡,在只有一個客戶機訪問服務器的時候,資源的利用率也是1/N(N為接口數(shù))。
通常在一個大的局域網(wǎng)內(nèi),往往存在多個子網(wǎng)。其拓撲結構如下所示:
4基于傳輸協(xié)議的發(fā)送算法
上面我們對Linux中的幾種實現(xiàn)多網(wǎng)卡發(fā)送負載均衡算法進行了分析,針對這些算法的不足,這里提出另外一種發(fā)送負載均衡算法。
4.1算法描述實其中source為源端口號,dst為目的端口號,saddr為源ip地址,daddr為目的ip地址。
基于傳輸協(xié)議的發(fā)送算法的主要思想是:由目的主機號、目的主機所在子網(wǎng)的子網(wǎng)號及該會話的TCP或UDP的目的端口號共同決定某個數(shù)據(jù)包的發(fā)送接口號,此算法和MAC地址的異或算法有點類似,因為它也是一種異或計算。
下面我們約定:
(1)host為要發(fā)送數(shù)據(jù)包的目的主機號。
(2)subnet為目的主機的子網(wǎng)的子網(wǎng)號。
(3)port為UDP或TCP連接的目的端口號。
(4)slave_cnt為綁定的接口數(shù)。
不失一般性,這里先考慮slave_cnt為4的情況,在這種情況下由上述幾個條件異或并進行求余計算來共同確定發(fā)送的接口號,即進行下面的運算:
(host^subnet^port)&(0x03)%slave_cnt①式
上式可能的結果可能為0、1、2、3。即該算法這種情況下最多可以綁定4個網(wǎng)卡接口。
該算法最大程度上將不同連接的數(shù)據(jù)包從不同的接口發(fā)送,下面分幾種情況討論:
(1)對于同一個客戶機的兩個TCP連接,發(fā)送的接口號只與要連接的目的端口號有關。我們假設連接1和連接2的目的端口號分別為port1,port2,當port1(二進制)和port2(二進制)的最后兩位不同時,上個算法的計算結果不相等,兩個連接的數(shù)據(jù)流從不同的接口發(fā)送出去.
(2)對于同一個子網(wǎng)的不同客戶機的兩個TCP連接來說,上述算法式子中的subnet相同,假設連接的目的端口號port相同。但是主機號不同。設目的主機號分別為host1和host2,當host1和host2(都是用二進制表示)的最后兩位不相同時,算法公式的計算結果不相等,兩個連接的數(shù)據(jù)流從不同的接口發(fā)送出去。
(3)對于不同子網(wǎng)的兩個TCP連接來說,假定主機號和連接的目的號port號都相同,子網(wǎng)號不同。設連接1和連接2所在的子網(wǎng)號分別為subnet1和subnet2,當兩者的最后兩位不相同時,算法公式的計算結果不相等,此時兩個連接的數(shù)據(jù)流從不同的接口發(fā)送出去。
下面考慮有N個網(wǎng)卡接口的情況,在某個時間段內(nèi)從第i個接口發(fā)送的連接數(shù)為(i=1,2,….N),第i個接口發(fā)送的第j個連接的數(shù)據(jù)流為,則第i個網(wǎng)卡接口的負載是:
當②式。
當②式成立時,每個接口的負載絕對均衡,由于①式能夠將連接盡量分配到不同的接口,所以一般情況下==……,即每個接口的連接數(shù)相等,但是每個連接的數(shù)據(jù)流量不一定相等,也就是說②式不一定成立,根據(jù)統(tǒng)計原理,當客戶機和服務器的連接數(shù)足夠大并且時間足夠長時,②式是成立的。
從上面對基于傳輸協(xié)議的負載均衡算法分析來看,該算法不僅在網(wǎng)絡層并且傳輸層都實現(xiàn)了各個接口的負載均衡,且保證了數(shù)據(jù)有序到達客戶端問題,同時資源的利用率也很高。
5測試結果進行驗證分析
測試軟件環(huán)境:RedHat9.0(內(nèi)核2.4.20)
測試硬件配置環(huán)境:一臺服務器(CPU:PIV2.8G;內(nèi)存:512M;兩塊支持MII狀態(tài)字寄存器的百兆網(wǎng)卡,每個有一個接口;一臺客戶機(配置和服務器一樣);兩臺(一臺也可)24口千兆交換機。測試軟件為netpipe,利用此軟件可以測試TCP協(xié)議性能,用它依次來對輪轉算法、MAC地址異或算法以及基于傳輸協(xié)議的發(fā)送算法的網(wǎng)絡延時和吞吐率。這里服務器用來發(fā)送數(shù)據(jù),客戶機用來接收數(shù)據(jù)。
服務器發(fā)送方執(zhí)行:
NPtcp–t–s–h172.19.11.130–otest.ppt–p
客戶機接受方執(zhí)行:
NPtcp–r–s
測試結果(測試結果為平均值)如表一所示。
從測試結果可以得出結論:由于輪轉算法簡單,計算量小,網(wǎng)絡延遲也相對小,而基于傳輸協(xié)議的發(fā)送算法計算量相對較多,網(wǎng)絡延時也比較大。由于這里是雙機對測,即只有一個客戶端,一個服務器端,所有MAC地址異或算法每次計算的結果也就唯一,只有一個接口被使用,吞吐率最小。相對來說,基于傳輸協(xié)議的發(fā)送算法吞吐率要大一些。
表一測試結果
上面測試需要說明的是:測試中服務器僅配置了兩塊網(wǎng)卡,并且只有一臺客戶機訪問服務器,當網(wǎng)卡接口和客戶機增加時,此文介紹的基于傳輸協(xié)議的發(fā)送算法的優(yōu)勢將會很明顯。在一個比較大的局域網(wǎng)中多個客戶機和服務器建立連接對話時,采用輪轉算法的同一個連接的數(shù)據(jù)包經(jīng)過不同的鏈路傳送,無序到達客戶端的概率就會增加,重發(fā)的次數(shù)也增加,服務器吞吐率會降低。而基于傳輸協(xié)議的發(fā)送算法則不存在這樣的問題,此種情況下,服務器的吞吐率相對增加。
6結束語
Linux的bonding技術將多個網(wǎng)卡接口綁定在一起,使用多個接口發(fā)送數(shù)據(jù),算法上實現(xiàn)了負載均衡和故障遷移與接管。它是一種不對稱得負載均衡技術,目前只是研究了發(fā)送算法,接受算法還有待于進一步的研究,目前的鏈路技術都是將網(wǎng)卡接口綁定在一起來提高服務器的網(wǎng)絡性能,但是各種實現(xiàn)算法包括基于傳輸協(xié)議的發(fā)送算法并沒有考慮接口的速度,這一點有必要進一步改進。
參考文獻
1ACost-effectiveApproachtoImproveServerPerformanceandFaultTolerance.
/whitepaper.aspx?&scid=15&docid=46346
2毛德操,胡希明著.LINUX內(nèi)核源代碼情景分析.浙江大學出版社
3博韋&西斯特陳莉君.深入理解linux內(nèi)核(第二版)
4AlanRobertsonLinux-HAHeartbeatsystemdesign.linux-.
5M.Bozyigita.”History-drivendynamicloadbalancingforrecurringapplicationsonnetworkofworkstations”.Systemsandsoftware,
6LoadBalancingyourNICS