web服務(wù)器集群系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
web服務(wù)器集群系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
web服務(wù)器集群系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
web服務(wù)器集群系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
web服務(wù)器集群系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

web服務(wù)器集群系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

一、web集群系統(tǒng)的實(shí)現(xiàn)隨著客戶數(shù)量和密集任務(wù)的增加,僅依靠web服務(wù)器和單獨(dú)的web服務(wù)器是難以承受的。WEB服務(wù)器集群系統(tǒng)成為解決這一問題的最佳方法。WEB服務(wù)器集群系統(tǒng)是指2臺(tái)或2臺(tái)以上WEB服務(wù)器聯(lián)合向客戶提供WEB服務(wù)的一種計(jì)算機(jī)系統(tǒng)。它采用負(fù)載均衡策略,將到達(dá)的請(qǐng)求分配給集群中的某臺(tái)服務(wù)器進(jìn)行處理,并且通過數(shù)據(jù)冗余和軟件監(jiān)測等方法實(shí)現(xiàn)系統(tǒng)的高可用性。目前,國內(nèi)外很多公司都已推出了商業(yè)化的集群系統(tǒng)產(chǎn)品,如微軟的Windows2003Server、IBM的Websphere等均支持集群的服務(wù)。這些商業(yè)化的產(chǎn)品價(jià)格較高,要求特定的軟、硬件配置,產(chǎn)品的專用性較強(qiáng)。也有一些免費(fèi)的集群方案,如自由軟件項(xiàng)目:Linux服務(wù)器集群系統(tǒng)——LVS(LinuxVirtualServer)方案目前得到廣泛應(yīng)用。但是這種方案只適用于Linux系統(tǒng)。現(xiàn)有的集群系統(tǒng)方案中,大多數(shù)系統(tǒng)負(fù)載均衡的粒度為數(shù)據(jù)報(bào)文,所以用戶的一個(gè)請(qǐng)求由一臺(tái)服務(wù)器提供,而下一個(gè)請(qǐng)求則很可能由另一臺(tái)服務(wù)器提供。這一點(diǎn)對(duì)于一般的網(wǎng)頁瀏覽而言,由于瀏覽的內(nèi)容隨機(jī)性較大,不會(huì)影響負(fù)載均衡的效果。而在某些特殊的WEB服務(wù)(如實(shí)時(shí)曲線瀏覽)中,一個(gè)用戶瀏覽的內(nèi)容前后相關(guān)性很強(qiáng),在WEB服務(wù)器的數(shù)據(jù)庫中這些內(nèi)容往往聚集在一起,如果由不同的服務(wù)器響應(yīng)同一個(gè)用戶的請(qǐng)求,反而加大了數(shù)據(jù)檢索的工作量,加大系統(tǒng)的負(fù)載。對(duì)于這種情況下負(fù)載均衡的粒度還是定為用戶較好。本文提出了一種基于SOCKET的軟件實(shí)現(xiàn)WEB集群系統(tǒng)方法。這種方法可以在WINDOWS和UNIX系統(tǒng)平臺(tái)上實(shí)現(xiàn)負(fù)載均衡和高可用性系統(tǒng)。系統(tǒng)負(fù)載均衡的粒度定為用戶,應(yīng)用于內(nèi)容相關(guān)性較強(qiáng)的WEB服務(wù)器系統(tǒng),可以取得較好的負(fù)載均衡效果。二、系統(tǒng)功能模塊本文提出的集群系統(tǒng)是由一個(gè)負(fù)載均衡器(配備了相應(yīng)軟件的計(jì)算機(jī))和若干臺(tái)軟件配置完全相同的WEB服務(wù)器構(gòu)成。負(fù)載均衡器和WEB服務(wù)器之間通過SOCKET通訊。負(fù)載均衡器定時(shí)地向系統(tǒng)中的每臺(tái)WEB服務(wù)器發(fā)送同步信號(hào),而WEB服務(wù)器收到同步信號(hào)后,向負(fù)載均衡器傳遞兩方面的數(shù)據(jù):WEB服務(wù)器進(jìn)程數(shù)據(jù)和WEB服務(wù)器性能數(shù)據(jù)。進(jìn)程數(shù)據(jù)描述了WEB服務(wù)器上的系統(tǒng)關(guān)鍵進(jìn)程是否運(yùn)行。只有當(dāng)負(fù)載均衡器收到某臺(tái)服務(wù)器上所有關(guān)鍵進(jìn)程都正常運(yùn)行的信息時(shí),才認(rèn)為這臺(tái)WEB服務(wù)器可以向用戶提供服務(wù),否則,認(rèn)為服務(wù)器故障,不能提供服務(wù)。服務(wù)器性能數(shù)據(jù)描述了WEB服務(wù)器的性能參數(shù),如CPU使用率、內(nèi)存使用率、每秒硬盤數(shù)據(jù)傳送量、每秒網(wǎng)絡(luò)數(shù)據(jù)傳送量等。負(fù)載均衡器可以根據(jù)收到的各個(gè)工作正常的WEB服務(wù)器的性能參數(shù),利用加權(quán)算法,判定當(dāng)前負(fù)載最輕的服務(wù)器,由它為下一用戶請(qǐng)求提供服務(wù)。系統(tǒng)的功能模塊如圖1所示:為了簡化,圖1中只標(biāo)出一臺(tái)WEB服務(wù)器的模塊圖及其和負(fù)載均衡器之間的通信過程,在實(shí)際集群系統(tǒng)中,有若干臺(tái)相同的WEB服務(wù)器,它們的運(yùn)行方法以及與負(fù)載均衡器之間的通信過程都是完全相同的。而負(fù)載均衡器和WEB服務(wù)器中的本機(jī)進(jìn)程監(jiān)視模塊的作用,是保證本機(jī)的一些重要進(jìn)程可以常駐內(nèi)存,避免用戶的不當(dāng)操作而造成損壞。三、系統(tǒng)完成1.服務(wù)器信息接收模塊為了便于在進(jìn)程之間傳遞數(shù)據(jù),系統(tǒng)使用共享內(nèi)存文件記錄每個(gè)WEB服務(wù)器的運(yùn)行狀態(tài)與性能數(shù)據(jù)。在共享內(nèi)存中定義了一個(gè)無符號(hào)整型變量和一個(gè)服務(wù)器信息表。無符號(hào)整型變量是一個(gè)1-65535的循環(huán)計(jì)數(shù)器。計(jì)數(shù)器初值為1,隨著負(fù)載均衡器上的服務(wù)器信息接收模塊運(yùn)行,計(jì)數(shù)器定時(shí)加1,當(dāng)計(jì)數(shù)器值為65535時(shí),設(shè)定再次加1后,計(jì)數(shù)器值變?yōu)?。服務(wù)器信息表如表1所示,表中每一行記錄了一個(gè)WEB服務(wù)器的各種參數(shù):一個(gè)字符數(shù)組記錄服務(wù)器IP地址,一個(gè)無符號(hào)整型數(shù)記錄服務(wù)器當(dāng)前運(yùn)行狀態(tài)是否正常,一個(gè)整型數(shù)記錄服務(wù)器的CPU使用率,一個(gè)整型數(shù)記錄服務(wù)器的內(nèi)存使用率,一個(gè)長整型數(shù)記錄服務(wù)器的每秒鐘內(nèi)服務(wù)器網(wǎng)絡(luò)傳遞的數(shù)據(jù)包數(shù),一個(gè)長整型數(shù)記錄服務(wù)器的每秒鐘內(nèi)服務(wù)器硬盤做的讀取操作數(shù)。整張表可以記錄集群系統(tǒng)中所有WEB服務(wù)器的性能和狀態(tài)信息。負(fù)載均衡器上的負(fù)載均衡判決模塊啟動(dòng)時(shí),將所有WEB服務(wù)器的IP地址寫入共享內(nèi)存,并將所有的WEB服務(wù)器狀態(tài)數(shù)定為0。服務(wù)器信息接收模塊運(yùn)行時(shí),每隔一段時(shí)間在共享內(nèi)存中讀取循環(huán)計(jì)數(shù)器的值。它的每個(gè)通信子進(jìn)程或線程根據(jù)與之通信的WEB服務(wù)器的IP,在服務(wù)器信息表中對(duì)應(yīng)的服務(wù)器狀態(tài)處寫入一個(gè)值,如果服務(wù)器運(yùn)行正常,寫循環(huán)計(jì)數(shù)器的值,如果服務(wù)器出現(xiàn)故障,則寫零。性能數(shù)據(jù)接收模塊運(yùn)行時(shí),根據(jù)與之通信的WEB服務(wù)器的IP,在共享內(nèi)存中對(duì)應(yīng)的地址寫入服務(wù)器的性能數(shù)據(jù):CPU使用率、內(nèi)存使用率、網(wǎng)絡(luò)數(shù)據(jù)傳送數(shù)、硬盤操作數(shù)。負(fù)載均衡判決模塊定時(shí)從共享內(nèi)存中讀取數(shù)據(jù),選擇運(yùn)行正常并且負(fù)載最輕的WEB服務(wù)器為用戶服務(wù)。2.流式套接字通信系統(tǒng)中使用網(wǎng)絡(luò)套接字(SOCKET)方法實(shí)現(xiàn)負(fù)載均衡器與WEB服務(wù)器節(jié)點(diǎn)之間的通信。SOCKET是建立在傳輸層協(xié)議(主要是TCP和UDP)上的一種通信機(jī)制,它定義了兩臺(tái)計(jì)算機(jī)間進(jìn)行通信的規(guī)范。套接字屏蔽了底層通信軟件和具體操作系統(tǒng)的差異,使得任何兩臺(tái)安裝了TCP協(xié)議軟件和實(shí)現(xiàn)了套接字規(guī)范的計(jì)算機(jī)之間的通信成為可能。套接字規(guī)范最初是在UNIX系統(tǒng)中提出并實(shí)現(xiàn),Linux系統(tǒng)繼承了套接字的通信機(jī)制。之后,微軟的WINDOWSSOCKET規(guī)范(簡稱WINSOCK)對(duì)BERKLEY的套接字規(guī)范進(jìn)行了擴(kuò)展。因此,本系統(tǒng)采用的這種通信方法可以用于大多數(shù)的主流操作系統(tǒng)之中。本系統(tǒng)使用流式套接字進(jìn)行通信,提供了面向連接的、可靠的服務(wù)。在負(fù)載均衡器上的性能數(shù)據(jù)接收模塊和服務(wù)器信息接收模塊分別各運(yùn)行一個(gè)SOCKET的服務(wù)進(jìn)程,它們的工作流程是:調(diào)用函數(shù)SOCKET創(chuàng)建套接字,調(diào)用BIND綁定本機(jī)地址,調(diào)用LISTEN偵聽客戶方的連接請(qǐng)求,調(diào)用ACCEPT創(chuàng)建一個(gè)新的套接字為這個(gè)客戶服務(wù),之后生成一個(gè)子進(jìn)程或線程專門與此客戶通信:調(diào)用SEND發(fā)送同步信號(hào),調(diào)用RECV接收客戶傳來的數(shù)據(jù),當(dāng)客戶結(jié)束連接時(shí),結(jié)束子進(jìn)程。同時(shí)如果有其他WEB服務(wù)器請(qǐng)求連接,則生成其他的套接字和進(jìn)程與其通信,方法相同,不再贅述。在每個(gè)WEB服務(wù)器上的性能監(jiān)視模塊和進(jìn)程監(jiān)視模塊分別運(yùn)行一個(gè)SOCKET的客戶進(jìn)程。它們的工作流程是:調(diào)用函數(shù)SOCKET創(chuàng)建套接字,調(diào)用CONNECT建立與服務(wù)進(jìn)程的連接,接收同步信號(hào),計(jì)算本機(jī)性能(性能監(jiān)視模塊),檢查本機(jī)運(yùn)行是否正常(服務(wù)器狀態(tài)監(jiān)視模塊),并將得到的結(jié)果傳遞給負(fù)載均衡器。3.狀態(tài)監(jiān)視模塊在集群系統(tǒng)中,負(fù)載均衡器需要監(jiān)督WEB服務(wù)器節(jié)點(diǎn)是否運(yùn)行正常,當(dāng)發(fā)現(xiàn)節(jié)點(diǎn)已經(jīng)失效時(shí),重新配置系統(tǒng)并且將工作負(fù)載交給那些運(yùn)行正常的節(jié)點(diǎn)來完成,以此保證系統(tǒng)的高可用性。負(fù)載均衡器中的服務(wù)器信息接收模塊和WEB服務(wù)器的狀態(tài)監(jiān)視模塊共同實(shí)現(xiàn)這個(gè)功能。服務(wù)器信息接收模塊定時(shí)發(fā)送同步信號(hào)。狀態(tài)監(jiān)視模塊接收到這個(gè)信號(hào)后,先判斷本機(jī)運(yùn)行是否正常,方法是枚舉進(jìn)程(在windows系統(tǒng)中,可以調(diào)用系統(tǒng)APIEnumProcesses實(shí)現(xiàn),在UNIX或linux系統(tǒng)中,可以調(diào)用PS命令或讀取進(jìn)程信息文件PROC文件實(shí)現(xiàn)),觀測提供WEB服務(wù)所必需的若干關(guān)鍵進(jìn)程是否正在運(yùn)行,如果有一個(gè)或更多的關(guān)鍵進(jìn)程沒有運(yùn)行,則認(rèn)為本節(jié)點(diǎn)出現(xiàn)故障;反之,如果所有關(guān)鍵進(jìn)程都在運(yùn)行,則認(rèn)為本機(jī)正常,可以提供服務(wù)。之后狀態(tài)監(jiān)視模塊將本機(jī)能否正常運(yùn)行的信息發(fā)送給服務(wù)器信息接收模塊。如果在一定時(shí)間內(nèi),服務(wù)器信息接收模塊收到某WEB服務(wù)器運(yùn)行正常的信息,在共享內(nèi)存文件的表中對(duì)應(yīng)的地址寫入循環(huán)計(jì)數(shù)器的當(dāng)前值;如果接收到服務(wù)器故障的信息或者無法收到WEB服務(wù)器的狀態(tài)信息,則寫入零。負(fù)載均衡器上的負(fù)載均衡判決模塊周期性地讀取共享內(nèi)存中的循環(huán)計(jì)數(shù)器和服務(wù)器信息表的值。如果一個(gè)WEB服務(wù)器狀態(tài)數(shù)的值與循環(huán)計(jì)數(shù)器值相同,認(rèn)為此服務(wù)器工作正常,如果不同,認(rèn)為此節(jié)點(diǎn)失效,將它的狀態(tài)數(shù)值寫成零,并將其從系統(tǒng)中除去。由此,系統(tǒng)中只要有一個(gè)WEB服務(wù)器正常運(yùn)行,用戶的WEB請(qǐng)求都可以得到服務(wù),用戶不會(huì)看到集群節(jié)點(diǎn)的故障,實(shí)現(xiàn)了系統(tǒng)的高可用性。4.性能數(shù)據(jù)接收模塊目前常用的負(fù)載均衡算法有輪循調(diào)度(Round-Robin)、目的地址哈希調(diào)度(DestinationHashing)、最小連接數(shù)調(diào)度(Least-Connection)、動(dòng)態(tài)負(fù)載均衡算法等。本系統(tǒng)采取了動(dòng)態(tài)負(fù)載均衡算法。每個(gè)WEB服務(wù)器定時(shí)采集本機(jī)的負(fù)載信息,在此選取了CPU使用率、內(nèi)存使用率、網(wǎng)絡(luò)數(shù)據(jù)傳送數(shù)、硬盤操作數(shù)四個(gè)參數(shù)。在WINDOWS系統(tǒng)中調(diào)用系統(tǒng)API函數(shù)方法得到參數(shù)值,在UNIX系統(tǒng)中,通過系統(tǒng)調(diào)用方法取得參數(shù)值,在LINUX系統(tǒng)中,通過讀取proc文件的方法取得參數(shù)值。性能數(shù)據(jù)傳送模塊定時(shí)將得到的性能參數(shù)通過SOCKET傳遞給負(fù)載均衡器上的性能數(shù)據(jù)接收模塊。性能數(shù)據(jù)接收模塊定時(shí)將性能參數(shù)寫入負(fù)載均衡器的服務(wù)器信息表中。負(fù)載均衡判決模塊定時(shí)讀取服務(wù)器信息表中的信息。將所有運(yùn)行正常的WEB服務(wù)器的性能參數(shù)和性能參數(shù)的基準(zhǔn)值進(jìn)行加權(quán)比較。公式如下:0.4×CPU使用率/CPU使用率基準(zhǔn)值+0.4×內(nèi)存使用率/CPU內(nèi)存使用率基準(zhǔn)值+0.1×網(wǎng)絡(luò)數(shù)據(jù)傳送數(shù)/網(wǎng)絡(luò)數(shù)據(jù)傳送數(shù)基準(zhǔn)值+0.1×硬盤操作數(shù)/硬盤操作數(shù)基準(zhǔn)值由此判定所得結(jié)果最小的WEB服務(wù)器的負(fù)載最輕,為下一個(gè)用戶的瀏覽請(qǐng)求服務(wù)。當(dāng)用戶的客戶端瀏覽程序運(yùn)行時(shí),首先連接的是負(fù)載均衡器,負(fù)載均衡器選取系統(tǒng)中負(fù)載最輕的服務(wù)器IP發(fā)送給用戶的客戶端程序,客戶端程序再自動(dòng)連接到那個(gè)服務(wù)器上,之后他的所有瀏覽請(qǐng)求都由該服務(wù)器為其服務(wù)。由此系統(tǒng)實(shí)現(xiàn)了粒度為用戶的負(fù)載均衡。5.監(jiān)視進(jìn)程運(yùn)行監(jiān)控系統(tǒng)中有關(guān)負(fù)載均衡和高可用性的關(guān)鍵進(jìn)程是常駐內(nèi)存的,它們必須一直保持正常運(yùn)行的狀態(tài),如果這些進(jìn)程一旦出現(xiàn)故障會(huì)造成整個(gè)系統(tǒng)的癱瘓。由于WEB服務(wù)的特殊性,服務(wù)軟件的運(yùn)行時(shí)間可能長達(dá)數(shù)月。在這么漫長的時(shí)間中,由于計(jì)算機(jī)系統(tǒng)軟硬件條件的限制,不能始終提供穩(wěn)定的運(yùn)行環(huán)境,可能導(dǎo)致關(guān)鍵進(jìn)程終止或出錯(cuò)。同時(shí),軟件用戶的不當(dāng)操作也會(huì)致使關(guān)鍵進(jìn)程出錯(cuò)或者終止運(yùn)行。在計(jì)算機(jī)的實(shí)際運(yùn)行中,不能依靠用戶手動(dòng)解決這樣的問題,必須運(yùn)用軟件或硬件監(jiān)督保證進(jìn)程的正常運(yùn)行。系統(tǒng)中使用本機(jī)進(jìn)程監(jiān)視模塊實(shí)現(xiàn)此項(xiàng)功能。本機(jī)進(jìn)程監(jiān)視模塊使用了雙進(jìn)程技術(shù),保證關(guān)鍵內(nèi)存的常駐內(nèi)存。模塊中運(yùn)行常駐內(nèi)存的一個(gè)進(jìn)程WATCH,在WATCH進(jìn)程的主循環(huán)體中,每次循環(huán)都要看一下被監(jiān)視的所有關(guān)鍵進(jìn)程是否運(yùn)行,如果某個(gè)關(guān)鍵進(jìn)程出錯(cuò)或者退出運(yùn)行了,立即重啟這個(gè)關(guān)鍵進(jìn)程。同時(shí),在關(guān)鍵進(jìn)程中選取一個(gè)進(jìn)程監(jiān)控WATCH進(jìn)程的運(yùn)行。同樣,在這個(gè)進(jìn)程的主循環(huán)體中,每次循環(huán)都要看一下WATCH進(jìn)程是否運(yùn)行,如果WATCH進(jìn)程出錯(cuò)或者退出運(yùn)行了,立即重啟WATCH進(jìn)程。使用這種方法,可以保證在系統(tǒng)運(yùn)行過程中,所有關(guān)鍵進(jìn)程和WATCH進(jìn)程的常駐內(nèi)存。即使有某個(gè)進(jìn)程出錯(cuò)或終止,也可以在幾秒鐘內(nèi)迅速重啟。監(jiān)視某個(gè)軟件是否運(yùn)行有很多種方法,本系統(tǒng)采取了效率較高、占用資源較少的方法。在WINDOWS系統(tǒng)中,使用系統(tǒng)內(nèi)核對(duì)象互斥量監(jiān)視進(jìn)程是否運(yùn)行:當(dāng)被監(jiān)視的進(jìn)程運(yùn)行時(shí)首

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論