么麗穎
(黑龍江信息技術(shù)職業(yè)學(xué)院計(jì)算機(jī)工程系,黑龍江哈爾濱 150025)
在計(jì)算機(jī)系統(tǒng)應(yīng)用中,Linux操作系統(tǒng)被較來用戶所接受,并在服務(wù)器、開發(fā)環(huán)境和桌面辦公等領(lǐng)域得到廣泛應(yīng)用。在企業(yè)應(yīng)用中,Linux操作系統(tǒng)在穩(wěn)定性、工作效率和安全性等方面都有優(yōu)秀表現(xiàn)。近年來,Linux操作系統(tǒng)逐漸成熟,標(biāo)準(zhǔn)化的MPI、PVM和GNU軟件消息傳遞機(jī)制,特別是其操作系統(tǒng)對(duì)高性能網(wǎng)絡(luò)的支持,促進(jìn)了基于Linux的集群系統(tǒng)的飛速發(fā)展。Linux的集群系統(tǒng)是計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)的前沿領(lǐng)域,其集群系統(tǒng)是由多個(gè)獨(dú)立計(jì)算機(jī)系統(tǒng)構(gòu)成的一個(gè)多處理器系統(tǒng),通過網(wǎng)絡(luò)實(shí)現(xiàn)計(jì)算機(jī)系統(tǒng)之間進(jìn)程間的通信。通過網(wǎng)絡(luò)共享內(nèi)存進(jìn)行應(yīng)用程序的消息傳送,從而實(shí)現(xiàn)分布式計(jì)算機(jī)。
調(diào)配多臺(tái)計(jì)算機(jī)之間的負(fù)載,使各臺(tái)計(jì)算機(jī)的負(fù)載基本均衡,實(shí)現(xiàn)計(jì)算能力共享,達(dá)到提高Linux集群系統(tǒng)的性能的目的,因此常稱作負(fù)載平衡集群系統(tǒng)。負(fù)載平衡集群系統(tǒng)的功能:(1)能將TCP/IP協(xié)議用于多種服務(wù),如遠(yuǎn)程登錄、FTP、HTTP等進(jìn)行轉(zhuǎn)發(fā)。在應(yīng)用程序中,用戶能夠通過加入特定服務(wù),以增加相應(yīng)端口指定的服務(wù)支持。(2)實(shí)現(xiàn)動(dòng)態(tài)負(fù)載平衡:負(fù)荷平衡器收集每個(gè)服務(wù)器運(yùn)行過程中的實(shí)際數(shù)字,通過尋找次數(shù)最少的工藝操作來找出這個(gè)機(jī)器,將被要求發(fā)送到機(jī)器。這種負(fù)載均衡是機(jī)器與負(fù)荷現(xiàn)狀的改變,所以是動(dòng)態(tài)負(fù)載平衡。(3)確??沙掷m(xù)的關(guān)聯(lián):負(fù)載平衡器鏈接列表中已接受檢查是否有配套的表項(xiàng),一經(jīng)發(fā)現(xiàn)已有匹配表項(xiàng),即請(qǐng)求相應(yīng)的實(shí)際服務(wù)器。
負(fù)載平衡集群系統(tǒng)的性能特點(diǎn):(1)具有較短的響應(yīng)時(shí)間。從負(fù)載平衡器向集群中實(shí)際服務(wù)器發(fā)出收集負(fù)載的請(qǐng)求到?jīng)Q定出負(fù)載最輕機(jī)器所用的總時(shí)間約為30 ms,該負(fù)載平衡系統(tǒng)能保證ms級(jí)的響應(yīng)時(shí)間。(2)具有良好的擴(kuò)展性。用戶可以在機(jī)器的應(yīng)用數(shù)量上加以控制,機(jī)器的IP地址由程序中的一個(gè)數(shù)組來記錄,因此增加一個(gè)機(jī)器只需增加一個(gè)新的數(shù)組元素,刪除一個(gè)機(jī)器只需刪除相應(yīng)的元素。(3)具有良好的糾錯(cuò)性。當(dāng)集群機(jī)器突然倒塌時(shí),應(yīng)用程序可以即時(shí)發(fā)現(xiàn),并不會(huì)被分配到請(qǐng)求失敗的機(jī)器。把機(jī)器修好重返集群中時(shí),應(yīng)用程序能夠?qū)⑵錂z測(cè)到,開始正常收集工作負(fù)荷。
組成該負(fù)載平衡集群系統(tǒng)的機(jī)器設(shè)備有:路由器、服務(wù)器1~服務(wù)器n。路由器作為外部網(wǎng)絡(luò)與人機(jī)互動(dòng)界面內(nèi)部網(wǎng)的接口,能夠接受外部網(wǎng)絡(luò)的用戶請(qǐng)求,并將該用戶請(qǐng)求發(fā)送到服務(wù)器1~服務(wù)器n中的一臺(tái)機(jī)器上,如果server2處理用戶的請(qǐng)求后,它將處理結(jié)果的路由器發(fā)送,然后到路由器要求對(duì)應(yīng)的外部網(wǎng)絡(luò)用戶。由于該機(jī)器設(shè)備具有均衡負(fù)載功能,把路由器這臺(tái)機(jī)器稱為負(fù)載平衡器,由于服務(wù)器具有實(shí)際響應(yīng)用戶請(qǐng)求的功能,因此將其稱為實(shí)際服務(wù)器,如圖1所示。
圖1 負(fù)載平衡系統(tǒng)環(huán)境設(shè)置圖
負(fù)載平衡集群系統(tǒng)必須要建立IP偽裝機(jī)制,以提高IP端口轉(zhuǎn)發(fā)機(jī)制。設(shè)計(jì)一個(gè)應(yīng)用程序,該應(yīng)用程序能夠根據(jù)集群中機(jī)器的狀態(tài)完成實(shí)時(shí)動(dòng)態(tài)負(fù)載平衡。建立動(dòng)態(tài)負(fù)載平衡的應(yīng)用程序,該應(yīng)用程序監(jiān)視集群中各實(shí)際服務(wù)器的負(fù)載情況,并將用戶請(qǐng)求轉(zhuǎn)發(fā)到負(fù)載最輕的實(shí)際服務(wù)器上。
負(fù)載平衡集群系統(tǒng)實(shí)現(xiàn)了IP級(jí)的負(fù)載平衡,當(dāng)一個(gè)客戶平衡裝置發(fā)送一個(gè)請(qǐng)求信息時(shí),IP層的平衡器對(duì)這個(gè)請(qǐng)求報(bào)文的目標(biāo)地址作了更換,將取代實(shí)際目標(biāo)地址,然后將報(bào)文傳遞出去。當(dāng)實(shí)際服務(wù)器將請(qǐng)求內(nèi)部網(wǎng)處理后,它將請(qǐng)求回應(yīng)發(fā)向平衡器,平衡器又一次在IP層將目標(biāo)地址替換為客戶要求在外部網(wǎng)絡(luò)的IP地址,然后報(bào)文將被提交給客戶。
目標(biāo)地址代替工作是該系統(tǒng)的運(yùn)行核心,選擇負(fù)載最輕IP地址的機(jī)器在應(yīng)用層實(shí)現(xiàn)。這是因?yàn)樵趹?yīng)用層帶負(fù)荷數(shù)據(jù)可以提高系統(tǒng)的可擴(kuò)展性,當(dāng)需要向內(nèi)部網(wǎng)中增加一臺(tái)新服務(wù)器時(shí),只需將應(yīng)用程序的數(shù)組變量增加,并將應(yīng)用層實(shí)行靈活調(diào)度策略,可用動(dòng)態(tài)調(diào)度策略,還可用靜態(tài)調(diào)度策略。IP數(shù)據(jù)包到目標(biāo)地址重寫的主要工作在核心完成,刪去用戶到核心的通訊過程,使得執(zhí)行速度加快。
當(dāng)客戶在外部網(wǎng)絡(luò)負(fù)載平衡發(fā)送服務(wù)請(qǐng)求時(shí),請(qǐng)求中可能有一個(gè)外部網(wǎng)絡(luò)機(jī)器的IP地址和端口號(hào)(laddr,lport)以及平衡器的IP地址,根據(jù)這些信息查詢IP端口轉(zhuǎn)發(fā)雙向鏈表檢查是否有匹配(laddr,lport)的表項(xiàng)存在,如果存在相應(yīng)的表項(xiàng),提取該表項(xiàng)中的(raddr,rport)價(jià)值,即機(jī)器在內(nèi)部網(wǎng)的IP地址和端口號(hào),并更換IP包的目標(biāo)地址和端口為(raddr,rport),那么它的IP數(shù)據(jù)包將再次發(fā)送到相應(yīng)的內(nèi)部網(wǎng)的機(jī)器。如果沒有相應(yīng)的表項(xiàng),就創(chuàng)建新的IP端口轉(zhuǎn)發(fā)表項(xiàng)和相應(yīng)的IP偽裝表項(xiàng),再完成目標(biāo)地址替換和包重發(fā)的工作。
該負(fù)載平衡系統(tǒng)主要分為IP偽裝模塊、IP端口轉(zhuǎn)發(fā)模塊和調(diào)度模塊。在IP層實(shí)現(xiàn)IP偽裝模塊和IP端口轉(zhuǎn)發(fā)模塊,在Linux源代碼所在目錄下都可以找到其對(duì)應(yīng)程序。而調(diào)度模塊在應(yīng)用層實(shí)現(xiàn),具體各模塊功能見表1。
表1 各模塊功能
(1)IP偽裝模塊。1)隱藏內(nèi)部網(wǎng)發(fā)向外部網(wǎng)中所有請(qǐng)求的源地址,從表面上平衡器發(fā)送了全部請(qǐng)求。2)通過平衡器在內(nèi)部網(wǎng)連接請(qǐng)求將被提交到外部網(wǎng)絡(luò)。3)接收內(nèi)部網(wǎng)發(fā)向外部網(wǎng)的全部請(qǐng)求。4)由建立的HASH表來記錄已建立的所有連接。5)接收外部網(wǎng)對(duì)請(qǐng)求的回應(yīng),同時(shí)將其轉(zhuǎn)發(fā)到內(nèi)部網(wǎng)發(fā)出請(qǐng)求的機(jī)器上。
(2)IP端口轉(zhuǎn)發(fā)模塊。1)接受外部網(wǎng)的連接請(qǐng)求。2)對(duì)外只能看見平衡器,使所有請(qǐng)求從表面看都是由平衡器處理。3)能夠建立一個(gè)端口轉(zhuǎn)發(fā)鏈表。4)接收外部網(wǎng)發(fā)向內(nèi)部網(wǎng)的請(qǐng)求,根據(jù)連接請(qǐng)求源地址、源端口、目標(biāo)地址和目標(biāo)端口的信息查看鏈表中是否有對(duì)應(yīng)表項(xiàng)。5)利用系統(tǒng)調(diào)用實(shí)現(xiàn)函數(shù)在IP端口轉(zhuǎn)發(fā)模塊中對(duì)用戶的系統(tǒng)調(diào)用進(jìn)行處理。
(3)調(diào)度模塊。1)負(fù)載平衡器向各臺(tái)實(shí)際服務(wù)器發(fā)送收集負(fù)載信息的命令。2)各臺(tái)實(shí)際服務(wù)器分別運(yùn)行取自CPU運(yùn)行隊(duì)列長(zhǎng)度的程序。3)各臺(tái)機(jī)器將各自的CPU運(yùn)行隊(duì)列長(zhǎng)度信息回傳給負(fù)載平衡器。4)負(fù)載平衡器對(duì)各臺(tái)機(jī)器的CPU運(yùn)行隊(duì)列長(zhǎng)度進(jìn)行比較,選出CPU運(yùn)行隊(duì)列長(zhǎng)度最短的機(jī)器,確定該機(jī)器是負(fù)載最輕的機(jī)器。5)負(fù)載最輕機(jī)器的IP地址通過系統(tǒng)調(diào)用傳入IP端口轉(zhuǎn)發(fā)模塊。
目前Linux集群系統(tǒng)已被廣泛應(yīng)用,在服務(wù)器領(lǐng)域,其良好的安全性和穩(wěn)定性得到更多用戶的認(rèn)可,并在嵌入式應(yīng)用及開發(fā)方面,Linux集群系統(tǒng)更具有其他操作系統(tǒng)無可比擬的優(yōu)勢(shì)。
[1] MARCUS E,STERN H.高可用性系統(tǒng)設(shè)計(jì)[M].汪青青,盧祖英,譯.北京:清華大學(xué)出版社,2005.
[2] VRENIOS A.Linux集群體系結(jié)構(gòu)[M].馬朝暉,譯.北京:機(jī)械工業(yè)出版社,2003.
[3] MATTHEW N,STONE R.Linux程序設(shè)計(jì)[M].2版.楊曉云,譯.北京:機(jī)械工業(yè)出版社,2002.
[4] DEVINE BOMAN K D,ERIK G.New Challenges in Dynamic Load Balancing[J].Applied Numerical Mathematics,2005,23(8):1121-1128.
[5] BUYYA R,CORTES T,JIN H.Single System Image[J].The International Journal of High Performance Computing Applications,2001,28(6):542 -549.
[6] 么麗穎.Linux系統(tǒng)管理和應(yīng)用[M].北京:中國(guó)鐵道出版社,2011.
[7] 龔梅.一種集群系統(tǒng)的透明動(dòng)態(tài)反饋負(fù)載均衡算法[J].計(jì)算機(jī)應(yīng)用,2007,38(7):87 -91.
[8] 彭土有.新編Linux網(wǎng)絡(luò)組建與實(shí)訓(xùn)[M].北京:北京出版社,2008.
[9] 林洪祥.基于服務(wù)分類和性能監(jiān)測(cè)的負(fù)載均衡研究[J].計(jì)算機(jī)應(yīng)用技術(shù),2008,30(6):67 -70.
[10]王文義.Linux集群系統(tǒng)并行應(yīng)用程序監(jiān)測(cè)技術(shù)的研究[J].鄭州大學(xué)學(xué)報(bào),2005,37(4):257-263.