可擴展網(wǎng)絡(luò)附屬存儲系統(tǒng)集群模塊的設(shè)計與實現(xiàn)_第1頁
可擴展網(wǎng)絡(luò)附屬存儲系統(tǒng)集群模塊的設(shè)計與實現(xiàn)_第2頁
可擴展網(wǎng)絡(luò)附屬存儲系統(tǒng)集群模塊的設(shè)計與實現(xiàn)_第3頁
可擴展網(wǎng)絡(luò)附屬存儲系統(tǒng)集群模塊的設(shè)計與實現(xiàn)_第4頁
可擴展網(wǎng)絡(luò)附屬存儲系統(tǒng)集群模塊的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩75頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

研究生畢業(yè)論文(申請工程碩士學(xué)位)可擴展網(wǎng)絡(luò)附屬存儲系統(tǒng)集群模塊的設(shè)計與實現(xiàn)TheDesignandImplementationofClusteringModuleinScalableNetworkAttachedStorage摘要隨著信息技術(shù)的發(fā)展,企業(yè)的生產(chǎn)經(jīng)營對于電子數(shù)據(jù)的依賴越來越大。很多企業(yè)面對大量數(shù)據(jù)存在存儲,管理,使用等一系列問題。網(wǎng)絡(luò)附屬存儲(NetworkAttachedStorage,簡稱NAS)產(chǎn)品在數(shù)據(jù)存儲領(lǐng)域由于具有用途專一,性價比高,支持多種數(shù)據(jù)傳輸協(xié)議的特點而被很多企業(yè)采用。傳統(tǒng)的NAS產(chǎn)品是基于單個節(jié)點,存在先天性的缺陷。其可靠性差,擴展困難等缺點難以適應(yīng)當(dāng)代企業(yè)全天候數(shù)據(jù)服務(wù)的需求。本文將介紹一個可擴展的NAS產(chǎn)品,它是基于IBM公司的通用并行文件系統(tǒng),可以在提供數(shù)據(jù)服務(wù)的同時進行擴展,備份等操作??蓴U展NAS產(chǎn)品提供了基于B/S的管理系統(tǒng),易于部署和管理。此外,企業(yè)可以根據(jù)當(dāng)前數(shù)據(jù)量對節(jié)點數(shù)目進行調(diào)整,可以有效降低采購和運營成本。本文以可擴展NAS產(chǎn)品為項目背景,詳細(xì)介紹了其集群模塊的分析,設(shè)計和實現(xiàn)。本文首先介紹了可擴展NAS產(chǎn)品的背景,以及國內(nèi)外NAS產(chǎn)品發(fā)展的現(xiàn)狀。介紹可擴展NAS產(chǎn)品集群模塊在項目中的作用和地位。介紹了產(chǎn)品網(wǎng)絡(luò)層,數(shù)據(jù)層,服務(wù)層,表現(xiàn)層的四層架構(gòu)。接著本文介紹了在集群模塊開發(fā)過程中使用的技術(shù)和工具。然后,本文在需求分析的基礎(chǔ)上介紹了集群模塊的設(shè)計和實現(xiàn)。詳細(xì)分析了集群模塊的四個主要的功能子模塊,網(wǎng)絡(luò)通信子模塊,節(jié)點管理子模塊,權(quán)限管理子模塊和性能監(jiān)控子模塊。本文對各個子模塊的功能設(shè)計,關(guān)鍵流程設(shè)計進行了闡述,并且詳細(xì)分析了關(guān)鍵的實現(xiàn)細(xì)節(jié)。最后,本文對所做的工作進行了總結(jié),并且指出了集群模塊在節(jié)點管理方面可以繼續(xù)展開的工作。關(guān)鍵詞:可擴展NAS、網(wǎng)絡(luò)通信、Django框架、權(quán)限管理、性能監(jiān)控

AbstractWiththedevelopmentofinformationtechnology,theenterprisesdependonelectronicdatamorethaneverbefore.Theenterpriseshavetosolveaseriesofproblemssuchasdatastorage,managementandusage.Instoragefield,networkattachedstorage(forshort,NAS)productshavealotofadvantages,sotheyareusedalot.Theyareproductsdesignedforaspecialpurposewithlow-priceandfeaturessupportformultipledatatransmissionprotocol.Unfortunately,traditionalNASproductsarebasedonsinglecomputingnode.Theyarehardtoextendandnotreliable,sotheneedofround-the-clockservicecannotbesatisfied. ThispaperwillintroduceascalableNASproduct.ItisaclusterNASbasedonGeneralParallelFileSystemofIBM.Withthefeaturesofdistributedfilesystemandmanagementsystem,thisproductprovidesextentionandmanagementoperationwhileworking.ScalableNASmanagementsystemisbasedonB/Sarchitecture.Theenterprisescanadjustthenumberofcomputingnodesaccordingtothesizeofdata.Thispolicycaneffectivelyreducethepurchaseandoperatingcoses.BasedonthescalableNASproductasbackground,thispaperwillintroducetheayalysis,designandimplementationoftheclustermoduleinthisproject. Firstly,thispaperintroducesthebackgroundofsaclableNASproductandthesituationofresearchinNASarea.Theroleandfunctionsoftheclustermoduleinthisprojectwillbeintroduced.Theproducthas4-layerarchitecture.Frombottomtoup,theorderisnetworklayer,datalayer,servicelayerandpresentationlayer. Secondly,thispaperintroducesthetechnologyandtoolsusedintheproject. Thirdly,thispaperintroducestherequirementanalysisintheproject.Afterthat,thedesignandimplementationofclustermoduleisintroduced.Clustermodulehas4majorsubmodules,thenetworksubmodule,thenodemanagementmodule,theprivilegemanagementsubmoduleandtheperformancemonitoringsubmodule.Inthispaper,functiondesignforeachofthesubmodule,keyprocessoftheproductisdiscussedindetail. Finally,thispapermakesaconclusion,andpointsoutwhattheclustermodulecanbedoneinthefuture,suchasimprovingtheautoload-balance.Keywords:ScalableNAS,NetworkCommunication,Django,AuthorityManagement,PerformanceMonitoring目錄摘要 IAbstract II圖目錄 VII表目錄 IX第一章引言 11.1項目背景 11.2國內(nèi)外相關(guān)領(lǐng)域發(fā)展現(xiàn)狀 21.2.1NAS產(chǎn)品發(fā)展現(xiàn)狀 21.2.2NAS與分布式文件系統(tǒng)的集成 41.3本文主要進行的研究工作 61.4本文的組織結(jié)構(gòu) 6第二章技術(shù)綜述 72.1Django框架 72.1.1MVC設(shè)計模式 72.1.2Django框架概述 82.1.3Django框架的結(jié)構(gòu) 92.1.4Django請求響應(yīng)流程 102.2Python中數(shù)據(jù)處理技術(shù) 112.2.1XML處理 112.2.2數(shù)據(jù)序列化技術(shù) 122.2.3網(wǎng)絡(luò)數(shù)據(jù)傳輸 132.3GPFS文件系統(tǒng) 152.3.1GPFS簡介 152.3.2可擴展NAS中GPFS架構(gòu) 162.3.3GPFS的配置和管理 172.4RRDtool工具 182.4.1RRDtool簡介 182.4.2RRDtool的python調(diào)用 192.5本章小結(jié) 20第三章集群模塊的分析與設(shè)計 213.1可擴展NAS的總體規(guī)劃 213.2集群模塊的需求分析 223.2.1集群模塊的業(yè)務(wù)需求 223.2.2集群模塊的用戶需求 233.2.2集群模塊的功能需求 263.2.3集群模塊的非功能需求 283.3集群模塊的概要設(shè)計 283.4網(wǎng)絡(luò)通信子模塊分析與設(shè)計 303.4.1網(wǎng)絡(luò)通信子模塊流程設(shè)計 303.4.2 元數(shù)據(jù)設(shè)計 333.4.3 網(wǎng)絡(luò)通信子模塊詳細(xì)設(shè)計 343.5節(jié)點管理子模塊分析與設(shè)計 373.5.1 節(jié)點管理子模塊流程設(shè)計 373.5.2 節(jié)點管理子模塊結(jié)構(gòu)設(shè)計 383.6用戶管理子模塊分析與設(shè)計 393.6.1 用戶管理子模塊數(shù)據(jù)庫設(shè)計 393.6.2用戶管理子模塊結(jié)構(gòu)設(shè)計 403.7性能監(jiān)控子模塊分析與設(shè)計 423.7.1 性能監(jiān)控子模塊流程設(shè)計 423.7.2 RRDtool設(shè)計與使用 433.8本章小結(jié) 43第四章集群模塊的實現(xiàn) 444.1網(wǎng)絡(luò)通信子模塊實現(xiàn) 444.1.1 初始化工作實現(xiàn) 444.1.2 網(wǎng)絡(luò)通信機制實現(xiàn) 454.1.3引導(dǎo)界面實現(xiàn) 484.2節(jié)點管理子模塊實現(xiàn) 494.2.1 元數(shù)據(jù)存取實現(xiàn) 494.2.2 節(jié)點管理界面實現(xiàn) 514.3用戶管理子模塊實現(xiàn) 524.4性能監(jiān)控子模塊實現(xiàn) 564.4.1性能圖表生成實現(xiàn) 564.4.2性能圖表展示實現(xiàn) 584.5集群模塊實現(xiàn)效果分析 584.5.1測試環(huán)境及測試用例 584.5.2效果分析 604.6本章小結(jié) 60第五章總結(jié)與展望 615.1總結(jié) 615.2進一步工作展望 61參考文獻 62致謝 65版權(quán)及論文原創(chuàng)性說明 66圖目錄TOC\h\z\t"圖目錄4"\c圖1.1共享存儲集群NAS架構(gòu) 3圖1.2統(tǒng)一文件系統(tǒng)集群NAS架構(gòu) 3圖1.3GPFS特性與NAS需求映射關(guān)系 5圖2.1MVC框架 8圖2.2Django組件結(jié)構(gòu) 9圖2.3DOM樹形結(jié)構(gòu) 11圖2.4使用cPickle進行序列化 12圖2.5使用cPickle進行反序列化 13圖2.6socket連接過程 14圖2.7SocketServer模塊類關(guān)系 14圖2.8RRDtool合并算法 19圖3.1可擴展NAS產(chǎn)品整體架構(gòu) 21圖3.2節(jié)點管理子模塊用例圖 23圖3.3用戶管理子模塊用例圖 24圖3.4性能監(jiān)控子模塊用例圖 25圖3.5popen與shell交互 27圖3.6集群模塊的分層架構(gòu) 29圖3.7系統(tǒng)初始化流程圖 31圖3.8節(jié)點初始化流程圖 32圖3.9元數(shù)據(jù)樹狀結(jié)構(gòu) 33圖3.10網(wǎng)絡(luò)通信子模塊類圖 35圖3.11文件系統(tǒng)相關(guān)類圖 36圖3.12節(jié)點狀態(tài)轉(zhuǎn)移圖 38圖3.13節(jié)點管理子模塊系統(tǒng)結(jié)構(gòu)圖 39圖3.14用戶管理子模塊的實體關(guān)系圖 40圖3.15用戶管理子模塊的系統(tǒng)結(jié)構(gòu)圖 41圖3.16性能監(jiān)控子模塊的泳道圖 42圖4.1節(jié)點初始化腳本 44圖4.2TCPServer實現(xiàn) 46圖4.3發(fā)送端文件傳輸方法 47圖4.4接受端文件傳輸方法 47圖4.5初始化監(jiān)控界面 48圖4.6元數(shù)據(jù)讀取方法 49圖4.7元數(shù)據(jù)保存方法 50圖4.8節(jié)點管理界面 51圖4.9磁盤管理界面 52圖4.10用戶管理界面 52圖4.11UserCreationFrom類對字段的定義 53圖4.12用戶創(chuàng)建頁面 54圖4.13UserCreationFrom類中的save方法 55圖4.14用戶和群組映射關(guān)系管理界面 56圖4.15內(nèi)存圖表的生成方法 57圖4.16性能監(jiān)控頁面效果 58

表目錄TOC\fF\h\z\t"表目錄2"\c表2.1GPFS啟動過程中涉及的命令 17表2.2RRDtool提供的函數(shù) 20表3.1用戶表的字段 40表4.1測試服務(wù)器配置 59第一章引言1.1項目背景信息技術(shù)正在以前所未有的方式改變著人們的工作和生活方式。如何應(yīng)付伴隨著信息的高速增長而帶來的海量數(shù)據(jù)的存儲,成為擺在業(yè)界人士面前的一道難題。為了高效且經(jīng)濟的提供數(shù)據(jù)的統(tǒng)一管理,在存儲領(lǐng)域的各大公司均推出了針對企業(yè)用戶的NAS產(chǎn)品。NAS是一種通過網(wǎng)絡(luò)提供的集中式數(shù)據(jù)訪問服務(wù),計算節(jié)點通過文件傳輸協(xié)議從NAS設(shè)備處獲得數(shù)據(jù)。NAS相比于傳統(tǒng)的文件服務(wù)器而言,有很多優(yōu)點。由于NAS設(shè)備用途更為單一,所以硬件以及軟件配置更為精簡,只提供數(shù)據(jù)訪問以及相應(yīng)的管理功能,可以節(jié)約資金;因為通過標(biāo)準(zhǔn)的協(xié)議獲取數(shù)據(jù),可以達到不同平臺之間的文件共享;可以充分的利用LAN網(wǎng)絡(luò)結(jié)構(gòu),便于存儲系統(tǒng)的升級;通過冗余措施來保障數(shù)據(jù)服務(wù)的可靠性。[張繼波等,2005]現(xiàn)有的NAS產(chǎn)品分為單節(jié)點和多節(jié)點兩種。單節(jié)點NAS架構(gòu)簡單,造價低,被廣大中小企業(yè)采用。缺陷也很明顯,只針對單個設(shè)備導(dǎo)致存儲的可擴展性受限,單純的通過增加磁盤來擴展存儲會使得存儲效率下降,通過增加NAS設(shè)備又破壞了對數(shù)據(jù)的統(tǒng)一管理;單個設(shè)備無法實現(xiàn)動態(tài)的擴容,在增加磁盤時往往需要停止服務(wù);同時基于單個設(shè)備的NAS可靠性不高,節(jié)點的故障會導(dǎo)致數(shù)據(jù)服務(wù)癱瘓。多節(jié)點NAS是近幾年來業(yè)界發(fā)展的新方向,各大存儲設(shè)備廠商紛紛推出該類型NAS產(chǎn)品,例如EMC的ISILON,IBM的SONAS等。多節(jié)點NAS產(chǎn)品可以通過軟件和硬件架構(gòu)解決單節(jié)點NAS的缺陷?,F(xiàn)有的多節(jié)點NAS產(chǎn)品都是面向中高端市場,造價不菲。調(diào)查顯示,隨著時間的推移,可擴展NAS產(chǎn)品相比單節(jié)點NAS提供了更多的成本優(yōu)勢,但是對于評估新的NAS系統(tǒng)的用戶而言,初始成本比可擴展NAS系統(tǒng)的先進特性和功能更重要[Gahmetal.,2010]。很多中小企業(yè)用戶業(yè)務(wù)發(fā)展很快,但是采購時初始需求不高,預(yù)算有限。很多企業(yè)在采購了單節(jié)點NAS之后不久就面臨擴展受限,不得不進行數(shù)據(jù)遷移的境況。在本論文介紹的可擴展的NAS產(chǎn)品,其客戶群體是發(fā)展中的中小企業(yè),特點是可根據(jù)業(yè)務(wù)量調(diào)節(jié)節(jié)點數(shù)目,從而達到低初始投入和高可擴展性的目的。 可擴展NAS產(chǎn)品基于分布式文件系統(tǒng),本身也是一個集群系統(tǒng)。在部署和管理上集群系統(tǒng)存在一系列的問題,包括如何自動化安裝,如何統(tǒng)一權(quán)限管理,如何進行性能監(jiān)控等。通過集群模塊的支持,可以解決上述的缺陷。同時可以充分的利用分布式文件系統(tǒng)的特性,提供安全,穩(wěn)定,可擴展的數(shù)據(jù)服務(wù)。1.2國內(nèi)外相關(guān)領(lǐng)域發(fā)展現(xiàn)狀1.2.1NAS產(chǎn)品發(fā)展現(xiàn)狀面對企業(yè)對存儲需求的快速增長,廣大廠商均給出了NAS系統(tǒng)擴展方案。總體而言,NAS系統(tǒng)的擴展方式有scale-up和scale-out兩種。Scale-up方式是指通過對單個NAS機器進行硬件升級來獲取更高的存取速度,更大的存儲空間和更快的傳輸速度。Scale-out是指通過擴展節(jié)點數(shù)目的方式達到相同的目的?,F(xiàn)有的單節(jié)點NAS升級只能采用Scale-up的方式,產(chǎn)品技術(shù)比較落后?!皺M向擴展存儲將成為匹配性能和容量實現(xiàn)更快投資回報的必然要求?!盵2012,范平]采用scale-out方式進行擴展的NAS產(chǎn)品,其架構(gòu)有兩種方案,一種是多個單節(jié)點產(chǎn)品組成NAS群組,群組外部提供單獨的調(diào)度模塊對數(shù)據(jù)請求進行分配,維持負(fù)載均衡。這種架構(gòu)節(jié)點之間耦合度低,擴展比較方便。缺點是本質(zhì)上這種系統(tǒng)是單個NAS系統(tǒng)的堆疊,單節(jié)點NAS存在的缺陷并沒有消除,同時多個節(jié)點也帶來了管理上的諸多問題。另一種是集群NAS(ClusterNAS)架構(gòu)。集群NAS在多個節(jié)點之間的協(xié)同上進行了軟件或者硬件的支持,提供高效,穩(wěn)定,負(fù)載均衡的NAS服務(wù)。目前的集群NAS有三種架構(gòu):1)共享存儲架構(gòu)。其架構(gòu)如圖1.1所示,局域網(wǎng)中存在兩種節(jié)點,數(shù)據(jù)服務(wù)節(jié)點和存儲節(jié)點。所有的數(shù)據(jù)服務(wù)節(jié)點共享所有的存儲節(jié)點,數(shù)據(jù)服務(wù)節(jié)點對外提供數(shù)據(jù)服務(wù),存儲節(jié)點被隱藏。通過采用高性能的存儲網(wǎng)絡(luò)保障內(nèi)部數(shù)據(jù)傳輸速度,通過擴展存儲節(jié)點增加存儲空間,通過增加數(shù)據(jù)服務(wù)節(jié)點提高數(shù)據(jù)服務(wù)能力。缺點是存儲節(jié)點采用專有存儲設(shè)備,成本比較高,數(shù)據(jù)服務(wù)節(jié)點存儲能力被浪費,配置和管理都比較復(fù)雜。[趙聰,2003]圖1.1共享存儲集群NAS架構(gòu)2)統(tǒng)一文件系統(tǒng)架構(gòu)。其架構(gòu)如圖1.2所示,局域網(wǎng)中所有節(jié)點采用通用服務(wù)器,每個節(jié)點均提供存儲能力和數(shù)據(jù)服務(wù)。所有的服務(wù)器存儲設(shè)備組成一個整體的文件系統(tǒng),在邏輯上統(tǒng)一命名空間。每個節(jié)點都可以通過訪問該文件系統(tǒng)中所有存儲設(shè)備上的文件。節(jié)點之間采用高速網(wǎng)絡(luò)互聯(lián),提高文件系統(tǒng)的數(shù)據(jù)傳輸效率。由于數(shù)據(jù)服務(wù)和存儲設(shè)備共用節(jié)點,可以減少設(shè)備數(shù)量。優(yōu)點是采用通用設(shè)備,成本低,部署簡單。缺點是,設(shè)備很容易故障,需要采用合適的機制保障可靠性,往往需要在安全性和存儲利用率之間采取折中。[謝長生等,2005]圖1.2統(tǒng)一文件系統(tǒng)集群NAS架構(gòu)3)利用對象存儲設(shè)備(Object-basedStorageDevice,OSD)構(gòu)建NAS架構(gòu)。對象存儲設(shè)備可以自動構(gòu)建集群并智能管理數(shù)據(jù)分布,數(shù)據(jù)服務(wù)節(jié)點只需要將I/O數(shù)據(jù)交給OSD設(shè)備處理。[蘇勇等,2007]該架構(gòu)將數(shù)據(jù)通路和控制通路分離,架構(gòu)簡單,性能優(yōu)秀,可擴展極佳。缺點是設(shè)備造價高,而且OSD設(shè)備處于試驗階段,離商業(yè)化產(chǎn)品的出現(xiàn)時間還很長。統(tǒng)一文件系統(tǒng)架構(gòu)采用通用服務(wù)器,價格低,可擴展性高。雖然通用設(shè)備故障率較高,但是通過對元數(shù)據(jù)的備份和恢復(fù),以及分布式文件系統(tǒng)提供的安全策略,可以消除單個存儲設(shè)備或者單個節(jié)點故障對服務(wù)造成的影響。因此在本產(chǎn)品中采用了統(tǒng)一文件系統(tǒng)架構(gòu)方案。1.2.2NAS與分布式文件系統(tǒng)的集成NAS產(chǎn)品的核心功能是數(shù)據(jù)的傳輸和存儲。傳輸數(shù)據(jù)功能體現(xiàn)在各種數(shù)據(jù)服務(wù)器,支持常用的數(shù)據(jù)傳輸協(xié)議,例如FTP,CIFS,NFS等;存儲包括圍繞在數(shù)據(jù)存取周圍的所有功能,包括數(shù)據(jù)分區(qū),備份功能,快照功能等。這些功能構(gòu)架在文件系統(tǒng)之上,需要利用文件系統(tǒng)提供的接口進行實現(xiàn)。文件系統(tǒng)作為一個獨立的產(chǎn)品,具有一定的普適性,除了提供特性之外,一般需要遵守POSIX標(biāo)準(zhǔn)。NAS產(chǎn)品通過調(diào)用POSIX標(biāo)準(zhǔn)接口使用文件系統(tǒng)功能,保證系統(tǒng)的可移植性。缺點是效率較低,無法利用文件系統(tǒng)的特性。本案中可擴展NAS產(chǎn)品底層采用了IBM的GPFS(GeneralParallelFileSystem,通用并行文件系統(tǒng))文件系統(tǒng)。該文件系統(tǒng)是一個分布式文件系統(tǒng),在設(shè)計和實現(xiàn)中都對于數(shù)據(jù)存取進行了獨特的設(shè)計,與集群NAS產(chǎn)品的很多理念高度一致。如圖1.3所示,GPFS提供了fileset的概念可以用于NAS的數(shù)據(jù)分區(qū),GPFS提供基于fileset的備份,快照,也可以直接為NAS產(chǎn)品采用。GPFS提供了統(tǒng)一的邏輯存儲空間,在任何一個節(jié)點上均可訪問所有數(shù)據(jù),在NAS產(chǎn)品元數(shù)據(jù)的備份和恢復(fù)操作上也可以調(diào)用相關(guān)功能。通過與底層文件系統(tǒng)的集成,可擴展NAS產(chǎn)品可以有效的利用文件系統(tǒng)中已有的特性,減少重復(fù)功能的開發(fā),減少工作量的同時提高了整個產(chǎn)品的性能。功能的簡化使得產(chǎn)品的部署難度下降,提高了可擴展性。圖1.3GPFS特性與NAS需求映射關(guān)系在集成過程中,需要解決下述問題:GPFS是面向通用功能開發(fā)的,提供了多種配置選項,需要針對NAS產(chǎn)品的需求將不會用到的特性去除,將配置選項復(fù)雜度降低??蓴U展NAS產(chǎn)品的定位是針對中小企業(yè)的簡單易用的產(chǎn)品,需要引入自動化配置,與文件系統(tǒng)的集成過程自動化是一個難題。在GPFS中使用熱備份技術(shù)或者軟件RAID的方式來保證數(shù)據(jù)安全和服務(wù)可靠性。需要收集節(jié)點的磁盤信息,根據(jù)一定的算法來進行數(shù)據(jù)備份。所以需要動態(tài)采集節(jié)點的磁盤信息。通過不同節(jié)點訪問GPFS系統(tǒng)時,用戶權(quán)限需要保持一致。因此需要在集群間引入統(tǒng)一的權(quán)限機制。NAS產(chǎn)品的性能監(jiān)控非常重要,用戶需要對集群內(nèi)每一個節(jié)點的各項性能指標(biāo)進行統(tǒng)一的監(jiān)控。為了解決上述問題,項目在集群文件系統(tǒng)的架構(gòu)下添加了一個新的集群模塊,該模塊對系統(tǒng)的伸縮性提供支持。集群模塊主要分為四個子模塊,網(wǎng)絡(luò)通信子模塊,節(jié)點管理子模塊,權(quán)限管理子模塊和性能監(jiān)控子模塊。其中網(wǎng)絡(luò)通信子模塊是基礎(chǔ),其中有一套完整的機制來保障集群的建立與運行期間的可靠性,包括主節(jié)點推選機制,節(jié)點整體遷移機制,失效節(jié)點組機制。節(jié)點管理子模塊用于方便用戶管理。網(wǎng)絡(luò)通信子模塊還提供了元數(shù)據(jù)備份,集群中節(jié)點間的數(shù)據(jù)同步和文件傳輸?shù)冉涌冢瑏碇С謾?quán)限管理子模塊和性能監(jiān)控子模塊。權(quán)限管理子模塊包括文件系統(tǒng)的掛載,數(shù)據(jù)服務(wù)的權(quán)限配置,統(tǒng)一用戶權(quán)限管理。性能監(jiān)控子模塊包括性能數(shù)據(jù)的收集,分析與展示。1.3本文主要進行的研究工作本文以可擴展NAS產(chǎn)品項目為背景,介紹了其集群模塊的分析,設(shè)計與實現(xiàn)??蓴U展NAS產(chǎn)品面臨的主要挑戰(zhàn)在兩個方面,一是提供具有伸縮性的集群產(chǎn)品,二是對用戶隱藏集群的復(fù)雜性,提供簡易的管理系統(tǒng)。為解決上述問題,系統(tǒng)中引入了集群模塊。集群模塊實現(xiàn)了基于網(wǎng)絡(luò)通信的集群自動化配置,此外提供了基于Django實現(xiàn)的管理系統(tǒng),方便用戶對集群的管理和監(jiān)控。集群模塊的引入使得可擴展NAS產(chǎn)品更為完整和易用。本文的主要貢獻包括:本文提供了一種基于統(tǒng)一文件系統(tǒng)架構(gòu)的集群NAS的設(shè)計。該產(chǎn)品底層文件系統(tǒng)采用分布式文件系統(tǒng),產(chǎn)品支持用Scale-out的方式進行擴展,隨著節(jié)點數(shù)目的增加可以獲得存儲能力和數(shù)據(jù)服務(wù)能力的同時提升。設(shè)計和實現(xiàn)了集群管理系統(tǒng)對集群的擴展和管理提供支持。管理系統(tǒng)中提供了網(wǎng)絡(luò)通信機制用于節(jié)點信息的收集和傳輸。在信息收集的基礎(chǔ)上提供了基于web的管理界面供用戶進行集群管理和監(jiān)控。集群模塊利用linux系統(tǒng)自帶的定時任務(wù)工具和RRDtool,在網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)幕A(chǔ)上,提供了對Linux集群進行性能監(jiān)控的一種實現(xiàn)。1.4本文的組織結(jié)構(gòu)本文的組織結(jié)構(gòu)如下:第一章引言部分。介紹了項目背景,介紹了NAS在國內(nèi)外的發(fā)展現(xiàn)狀。對論文的工作和組織結(jié)構(gòu)進行了概括。第二章技術(shù)綜述。將項目所要涉及的技術(shù)和框架做了介紹,包括python數(shù)據(jù)處理技術(shù)、Django框架、GPFS文件系統(tǒng)、RRDtool。第三章可擴展NAS產(chǎn)品集群模塊的分析與設(shè)計。提出了產(chǎn)品的總體設(shè)計以及集群模塊的需求。提出項目基本需求,對模塊總體進行了設(shè)計,根據(jù)功能需求劃分了子模塊,對關(guān)鍵流程和數(shù)據(jù)結(jié)構(gòu)進行了設(shè)計。第四章可擴展NAS產(chǎn)品集群模塊的實現(xiàn)。根據(jù)設(shè)計,給出了集群模塊的四個子模塊的實現(xiàn)細(xì)節(jié)。第五章總結(jié)與展望??偨Y(jié)論文期間所做的工作,給出未來工作的展望。第二章技術(shù)綜述本文介紹的集群模塊,提供了管理系統(tǒng)和數(shù)據(jù)管理機制。管理系統(tǒng)使用了基于MVC的Django框架。數(shù)據(jù)收集管理機制中,使用了python標(biāo)準(zhǔn)庫和擴展庫中的數(shù)據(jù)處理模塊進行數(shù)據(jù)的采集,傳輸,存儲。對于性能數(shù)據(jù),系統(tǒng)采用了RRDtool這一專門的工具進行數(shù)據(jù)收集和展示。此外,集群模塊還需要用到GPFS文件系統(tǒng)提供的命令。本章將對集群模塊的設(shè)計和實現(xiàn)中涉及的技術(shù)和工具進行介紹。2.1Django框架可擴展NAS產(chǎn)品提供了基于B/S架構(gòu)的管理系統(tǒng),該系統(tǒng)對業(yè)務(wù)邏輯復(fù)雜度的需求較高,對并發(fā)請求支持的需求不高,因此在開發(fā)中需要選擇一個支持快速開發(fā)的框架。Django是基于python語言開發(fā)的開源框架,并且遵循MVC的分層原則。[Django,2013]2.1.1MVC設(shè)計模式瀏覽器/服務(wù)器結(jié)構(gòu),簡稱B/S結(jié)構(gòu),伴隨著互聯(lián)網(wǎng)的發(fā)展得到了大規(guī)模的應(yīng)用。在B/S結(jié)構(gòu)中,業(yè)務(wù)邏輯部分被放在服務(wù)器端實現(xiàn),瀏覽器負(fù)責(zé)展示數(shù)據(jù)和命令操作,相比于客戶端/服務(wù)器架構(gòu),雖然對服務(wù)器的能力要求較高,但是在程序的維護和升級上更容易操作。HTTP協(xié)議被用作B/S結(jié)構(gòu)中瀏覽器端和服務(wù)器端的雙向通信,它封裝了瀏覽器端到服務(wù)器端的request和從服務(wù)器端到瀏覽器端的response。在這種結(jié)構(gòu)下,程序員只需要關(guān)心瀏覽器端的表現(xiàn)形式和服務(wù)器端的應(yīng)用邏輯,簡化了開發(fā)工作。[王心路等,2004]模型-視圖-控制器設(shè)計模式,即MVC設(shè)計模式,是B/S結(jié)構(gòu)的應(yīng)用中常用的編程范式。在MVC模式中,應(yīng)用程序分為Model,View,Controller三個組成部分。這三個組成部分彼此間相互獨立,遵循MVC模式的應(yīng)用程序可以達到邏輯處理和數(shù)據(jù)表現(xiàn)相互分離的目的。每個組件只關(guān)心內(nèi)部邏輯,達到高內(nèi)聚,低耦合的效果。分層的思想可以有效的提高開發(fā)效率,同時在后期維護時,可擴展性和易維護性的需求都可以得到滿足。[周輝等,2012]MVC設(shè)計模式中視圖層和業(yè)務(wù)層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個應(yīng)用的業(yè)務(wù)流程或者業(yè)務(wù)規(guī)則的改變只需要改動MVC的模型層即可。因為模型與控制器和視圖相分離,所以很容易改變應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)規(guī)則,從而達到低耦合的效果。同時MVC模式允許你使用各種不同樣式的視圖來訪問同一個服務(wù)器端的代碼。由于模型返回的數(shù)據(jù)沒有進行格式化,所以同樣的構(gòu)件能被不同的界面使用。從而便于重用。而分離視圖層和業(yè)務(wù)邏輯層使得WEB應(yīng)用更易于維護和修改。如圖2.1所示,在MVC模式中,業(yè)務(wù)流程是由瀏覽器發(fā)起的,瀏覽器發(fā)出request,控制器獲得請求,與數(shù)據(jù)模型交互,更新數(shù)據(jù)模型。控制器刷新視圖,視圖渲染瀏覽器頁面,用戶得到反饋。圖2.1MVC框架2.1.2Django框架概述在2005年,Django開源之前,已經(jīng)存在很多基于MVC的開發(fā)框架。然而Django迅速得到了業(yè)界的認(rèn)同,成為迄今為止最為成功的基于python的web開發(fā)框架。這是由兩個方面決定的,Django與python語言理念的一致和在設(shè)計之中對快速開發(fā)的支持。[高昂,2009]Django遵循python的普遍原則。“Python的用戶一般都希望盡量清楚地描述問題,并且符合語言自身的理念,即Pythonic。”[Jeff.F,2009]Django中很多理念,比如盡量清楚的描述問題,對每種簡單任務(wù)只有一種正確的做法,不依賴默認(rèn)行為以及不要做重復(fù)性工作,都與python理念保持一致。Django提供了很多組件,應(yīng)用程序員可以根據(jù)項目的需要選擇組件進行組裝,同時Django也允許用戶將內(nèi)置組件換成其他的工具。例如Django內(nèi)置數(shù)據(jù)庫管理組件,調(diào)用該組件可以輕松的進行數(shù)據(jù)持久化的工作,同時Django也提供了對其他數(shù)據(jù)庫的支持,用戶可以根據(jù)自己的喜好自行選擇。由于理念一致,越來越多的python程序員加入到Django的開發(fā),并貢獻了各種組件的源代碼。[王冉陽,2009]Django在設(shè)計之初就充分考慮了快速開發(fā)。Django起源于在線新聞的站點,因此在設(shè)計之初就設(shè)計了一組快速實現(xiàn)業(yè)務(wù)邏輯的組件。在初始化時使用Django的admin組件可以進行自動化的快速部署。admin.py結(jié)合了配置文件,自動化腳本和命令行的功能。通過對該文件修改以及調(diào)用命令可以輕松的完成組件的選擇,數(shù)據(jù)庫的配置等功能。2.1.3Django框架的結(jié)構(gòu) Django遵循了MVC設(shè)計模式,但是在實現(xiàn)上與其他的框架有所不同。其組件結(jié)構(gòu)如圖2.2所示。圖2.2Django組件結(jié)構(gòu)瀏覽器發(fā)出的請求首先交由URL映射器處理。HTTP請求的核心是URL,J2EE,.NET等框架將URL解析過程封裝,對應(yīng)到同名方法中,用戶在方法中進行編程。而在Django中,程序員需要自己定義URL的解析,其遵從正則表達式規(guī)則,更加靈活和直觀。Django接收到請求后,根據(jù)URL配置和urls.py文件里定義的規(guī)則逐條匹配,找到對應(yīng)的視圖方法和視圖模板。 視圖方法不同于MVC中的視圖模板,在視圖方法中封裝了真實的業(yè)務(wù)邏輯。它和URL映射器共同擔(dān)當(dāng)了MVC范式中控制器的角色。URL映射器封裝了URL到視圖方法的映射關(guān)系,視圖方法則將數(shù)據(jù)模型和視圖模板聯(lián)系起來,定義了需要展示的數(shù)據(jù)。在視圖方法中,也支持Ajax技術(shù),允許瀏覽器端的javascript發(fā)出的非順序性的訪問請求。在Django中視圖方法存放在views.py中。 視圖模板是Django抽象出來的一個模塊,如果為每個請求寫一個對應(yīng)的HTML頁面,會造成大量的重復(fù)性工作,并且給后期的維護帶來很大的問題。視圖模板是具有標(biāo)簽的文本,標(biāo)簽允許程序進行動態(tài)的替換,支持簡單的邏輯結(jié)構(gòu),如選擇結(jié)構(gòu)或者循環(huán)結(jié)構(gòu)。多個視圖方法可以調(diào)用同一個視圖模板,使用不同的數(shù)據(jù)并對其進行渲染得到最終的HTML頁面。而且在實際使用中,視圖模板不僅僅支持HTML,甚至是其他格式的文件供用戶下載。在Django中,視圖模板存放在templates文件夾下。 數(shù)據(jù)模型是對真實世界的抽象,數(shù)據(jù)模型實例化的對象保存的是當(dāng)前系統(tǒng)的狀態(tài),視圖方法可以改變數(shù)據(jù)模型的值,同時也需要調(diào)用數(shù)據(jù)模型的值呈現(xiàn)給用戶。數(shù)據(jù)模型需要與數(shù)據(jù)庫中的對象保持一致。在Django中數(shù)據(jù)模型通過manage.pystartapp命令建立,保存在models.py文件中。 ORM組件即對象關(guān)系映射組件,將數(shù)據(jù)庫中的數(shù)據(jù)與程序中的對象進行映射,它封裝了數(shù)據(jù)庫的調(diào)用,將動態(tài)的對象自動與數(shù)據(jù)庫記錄進行狀態(tài)同步,降低了開發(fā)者的工作量。同時pythonDB-API的支持減少了在程序移植時可能出現(xiàn)的數(shù)據(jù)庫兼容的問題。2.1.4Django請求響應(yīng)流程Django對HTTP請求的處理流程如下:服務(wù)器接收到瀏覽器發(fā)出的服務(wù)請求,傳給Django。Django將request轉(zhuǎn)換為請求對象,該對象的結(jié)構(gòu)是Django專門為request設(shè)計的字典結(jié)構(gòu),可以應(yīng)對HTTPCGI的需求。Django在URL配置文件里尋找請求對應(yīng)的views.py里的處理函數(shù)。Django以請求對象為參數(shù)傳入該視圖函數(shù)。視圖函數(shù)創(chuàng)建一個response對象。Django將response對象與Template中的文件結(jié)合,生成HTML文件。Web服務(wù)器將頁面?zhèn)魉徒o客戶端。2.2Python中數(shù)據(jù)處理技術(shù)集群模塊中涉及到對包括XML在內(nèi)的多種數(shù)據(jù)格式處理以及跨節(jié)點的數(shù)據(jù)傳輸。Python作為解釋性語言,對于數(shù)據(jù)處理非常擅長,常常被用于混合編程中的粘合劑[羅霄等,2004]。在Python的標(biāo)準(zhǔn)庫和擴展庫中提供了多個模塊對數(shù)據(jù)處理進行支持。[Python,2013]2.2.1XML處理XML即可擴展標(biāo)記語言,由于XML具有結(jié)構(gòu)化,跨平臺等優(yōu)點,在很多領(lǐng)域XML已經(jīng)成為事實上的信息交換標(biāo)準(zhǔn)。[候要紅等,2007]Python是一種解釋性語言,在處理文本和解析復(fù)雜的數(shù)據(jù)結(jié)構(gòu)方面具有先天性的優(yōu)勢。Python很早就內(nèi)建了對XML的支持。在Python標(biāo)準(zhǔn)庫中附帶了用C語言編寫的Expat解析器,Expat可以直接把XML文件轉(zhuǎn)換為內(nèi)存中的以元素為葉子的樹狀結(jié)構(gòu)。圖2.3DOM樹形結(jié)構(gòu)W3C推薦的對XML和HTML的解析標(biāo)準(zhǔn)是通過文檔對象模型(DocumentObjectModel,簡稱DOM)。[Kamiretal.,2009]“DOM是一種平臺和語言獨立的接口,它允許程序或者腳本動態(tài)的訪問更新文檔的內(nèi)容、結(jié)構(gòu)和樣式。文檔可以被深度處理,并且處理的結(jié)果可以更新原有的文檔.”[W3C,2005]圖2.3展示了一個HTML頁面的DOM的樹形結(jié)構(gòu)。由于Expat只實現(xiàn)了DOM的一個子集,所以Python提供了擴展包PyXML實現(xiàn)了完整的DOM對XML的訪問接口。除此以外PyXML還實現(xiàn)了XML驗證工具。PyXML極大的簡化了XML處理工作,當(dāng)然這種便利性伴隨著性能的下降。[Lutz,2010]在可擴展NAS的集群模塊中,存放節(jié)點信息和磁盤信息的元數(shù)據(jù)對集群中所有節(jié)點是透明的,這部分的信息存在格式固定,讀取頻率遠(yuǎn)大于寫入頻率的特點,因此采用XML格式存儲,項目中采用了PyXML獲得較高的可擴展性。2.2.2數(shù)據(jù)序列化技術(shù)在Python中數(shù)據(jù)是由基本的Python對象組成的,為了避免轉(zhuǎn)換為XML帶來的性能損失,Python提供了序列化功能可以完成對象和字符串之間的相互轉(zhuǎn)化。在可擴展NAS產(chǎn)品的集群模塊中,除了元數(shù)據(jù)以外其他中間狀態(tài)數(shù)據(jù)采用序列化技術(shù)保存在磁盤上或者在節(jié)點之間進行共享。importpickletum1={'d':[1,3.0,4,4+5j],'e':('somestring',u'Unicodestring'),'f':None}reference_list=[‘a(chǎn)’,’b’,’c’]reference_list.append(reference_list)output=open('test.dat','wb')#picklethedata.pickle.dump(tum1,output)pickle.dump(reference_list,output,-1)output.close()圖2.4使用cPickle進行序列化Python提供了marshal模塊進行數(shù)據(jù)的序列化,該模塊提供了dump()和load()兩個方法完成序列化和反序列化。由于marshal模塊僅支持python的基本數(shù)據(jù)類型和它們的組合,同時在不同的發(fā)行版本之間不能保證反序列化的成功。本項目中采用了Pickle模塊,該模塊與marshal作用相近,但是可以獲得更好的版本兼容性??梢孕蛄谢头葱蛄谢痯ython的基本數(shù)據(jù)類型以及類生成的實例。使用C語言實現(xiàn)的cPickle和Pickle具有相同的功能,并且具有更高的效率。圖2.4展示了序列化的過程。cPickle.dump()方法默認(rèn)是使用版本兼容的序列化方法,但是也提供了可選參數(shù)犧牲兼容性達到與marshal模塊相同的序列效率。通過dump()方法得到的字符串可以用于存儲,網(wǎng)絡(luò)傳輸或者加密。只要字符串本身的結(jié)構(gòu)和內(nèi)容沒有發(fā)生改變,都可以被load()方法識別,load()方法會遵守dump()的順序取出對象,在到達末尾時返回EOF標(biāo)志。圖2.5展示了對應(yīng)上文的反序列化的過程。importpickletest_file=open('test.dat','rb')a=pickle.load(test_file)print(a)b=pickle.load(test_file)print(b)test_file.close()圖2.5使用cPickle進行反序列化為了解決采用不同存儲協(xié)議帶來的反序列化問題,Python在存儲時會將協(xié)議和數(shù)據(jù)同時放入文件,Pickle模塊在反序列化的時候,load方法可以檢測出自身需要采用的協(xié)議,傳入的對象參數(shù)只要帶有read()方法即可。同時,Python支持在序列化的同時進行壓縮,保證數(shù)據(jù)在存儲和網(wǎng)絡(luò)傳輸時更有優(yōu)勢。[Martellietal.,2010]2.2.3網(wǎng)絡(luò)數(shù)據(jù)傳輸在可擴展NAS系統(tǒng)集群模塊中,節(jié)點發(fā)現(xiàn)和通信用到了網(wǎng)絡(luò)通信技術(shù)。在基于TCP/IP協(xié)議的網(wǎng)絡(luò)中,數(shù)據(jù)傳輸?shù)幕突就ㄐ艈卧翘捉幼?socket)技術(shù)。[Stevensetal.,2010]應(yīng)用程序可以利用操作系統(tǒng)提供的socket接口,實現(xiàn)在不同進程或者網(wǎng)絡(luò)中不同節(jié)點的數(shù)據(jù)傳輸。圖2.6顯示了建立socket連接的基本過程。Socket通信發(fā)生在服務(wù)器端和客戶端,服務(wù)器端創(chuàng)建socket并且綁定端口,之后進入監(jiān)聽狀態(tài)。請求連接由客戶端發(fā)起,雙方建立TCP或者UDP連接,進行數(shù)據(jù)的傳輸。圖2.6socket連接過程Server端的編程在網(wǎng)絡(luò)通信中比較復(fù)雜,涉及到端口綁定和監(jiān)聽,生命周期控制,并發(fā)處理等問題。在python中,提供了SocketServer模塊簡化了server端的編程工作。圖2.7顯示了SocketServer模塊的類之間的關(guān)系。圖2.7SocketServer模塊類關(guān)系BaseServer是接口類,定義了服務(wù)器需要實現(xiàn)的方法,TCPServer使用TCP協(xié)議傳輸數(shù)據(jù),UDPServer使用UDP協(xié)議,可能會發(fā)生數(shù)據(jù)包順序不一致或者丟失?;诙叩腢nixStreamServer和UnixDatagramServer只被UNIX平臺支持,所以較少使用。BaseRequest定義了請求處理的接口,它的子類需要實現(xiàn)finish,handle,setup接口,定義接收到請求各個步驟的處理方法。Server端一般同時需要處理多個客戶端發(fā)出的請求,TCPServer和UDPServer都是單線程的server,只能同步處理請求,同一時間建立一個socket連接請求,其他的請求需要排隊。為了同時處理多個請求,防止請求超時,SocketServer模塊提供了ForkingMixIn和ThreadingMixIn兩個類,這兩個類的實例和server類的實例可以通過組合得到ThreadingServer,該server接收到socket請求后,啟動一個線程來處理請求,達到并發(fā)的效果。2.3GPFS文件系統(tǒng)2.3.1GPFS簡介GPFS文件系統(tǒng)是IBM公司的一個集群文件系統(tǒng),它可以提供多個節(jié)點對一個文件系統(tǒng)或者多個文件系統(tǒng)集的并發(fā)訪問。[GPFS,2013]這些節(jié)點可以分布在局域網(wǎng)或者廣域網(wǎng)中。這些特性保障了對數(shù)據(jù)的高效訪問,GPFS文件系統(tǒng)支持scale-out擴展方案?!俺酥С滞ㄓ脭?shù)據(jù)存取之外,GPFS文件系統(tǒng)還支持包括數(shù)據(jù)同步,基于存儲管理政策和跨節(jié)點操作等多種特性,GPFS可以基于AIX集群,Linux集群,Windows服務(wù)器集群或者三種平臺的混合集群?!盵IBM,2012]GPFS文件系統(tǒng)作為分布式文件系統(tǒng),有如下的優(yōu)點:GPFS在集群中的節(jié)點之間提供了統(tǒng)一命名空間和共享文件存儲。集群中的任意節(jié)點通過GPFS文件系統(tǒng)的掛載點可以訪問整個文件系統(tǒng)目錄,擴展了存儲空間。GPFS文件系統(tǒng)內(nèi)部提供了鎖機制,避免不同節(jié)點對數(shù)據(jù)并發(fā)訪問帶來的數(shù)據(jù)同步問題。GPFS文件系統(tǒng)提供了高可用性和高可恢復(fù)性,GPFS通過對recoverygroup的定義,把數(shù)據(jù)塊打散,存放在不同的物理磁盤上,允許集群中節(jié)點級別的災(zāi)難恢復(fù)。GPFS對網(wǎng)絡(luò)條件要求不高,可以根據(jù)網(wǎng)絡(luò)環(huán)境進行算法優(yōu)化,達到最優(yōu)的系統(tǒng)性能。GPFS允許不停止服務(wù)的情況下對文件系統(tǒng)進行修改,文件服務(wù)的配置修改不會對服務(wù)本身造成影響。所以GPFS文件系統(tǒng)適應(yīng)對服務(wù)穩(wěn)定性要求高的場合。事實上IBM很多企業(yè)級的服務(wù),包括數(shù)據(jù)庫服務(wù)等都是基于GPFS文件系統(tǒng)。GPFS提供了管理命令,適應(yīng)了大規(guī)模的集群。GPFS的關(guān)于集群的命令在任一節(jié)點上執(zhí)行都可以達到同步執(zhí)行的效果。省去了管理時需要登錄多個子節(jié)點的工作。2.3.2可擴展NAS中GPFS架構(gòu) GPFS的配置可以根據(jù)實際情況采用多種方式,首先GPFS支持多種類型的操作系統(tǒng),包括AIX,Linux,WindowsServer。在網(wǎng)絡(luò)結(jié)構(gòu)上,所有的節(jié)點可以都位于同一個局域網(wǎng)或者幾個局域網(wǎng)和廣域網(wǎng)的組合。同一個節(jié)點可以處于一個或者多個gpfs集群中。一個集群也可以有一個或者多個節(jié)點。在GPFS中定義了兩種節(jié)點,NSDServer和NSDClient。NSDClient往往是計算能力較高的機器,從根據(jù)用戶請求從NSDserver獲取數(shù)據(jù)進行計算,NSDServer直接掛載磁盤,存儲能力強。GPFS一共有四種基本架構(gòu):所有節(jié)點組成一組邏輯單元;通過NSDClient訪問;多個sites組成一個集群;多個集群共享數(shù)據(jù)??蓴U展NAS在選擇架構(gòu)時,需要參考如下的因素:應(yīng)用對I/O性能的要求,NAS是提供數(shù)據(jù)服務(wù)的,對I/O性能要求比較高,所以應(yīng)該采用局域網(wǎng)結(jié)構(gòu),多個節(jié)點共享數(shù)據(jù),防止大規(guī)模數(shù)據(jù)交換帶來的性能下降。對可靠性的需求,單節(jié)點的GPFS系統(tǒng)數(shù)據(jù)的安全性和服務(wù)可靠性不高。用戶在初始時可以考慮,當(dāng)后期有節(jié)點加入時,需要切換到集群配置。切換的同時不能影響數(shù)據(jù)服務(wù)的提供。底層硬件的屬性??蓴U展NAS使用的是通用的服務(wù)器,而且NAS服務(wù)對計算的要求不高,所以全部的機器均扮演NSDServer角色,另外在硬件層面需要提供保障,提高通用服務(wù)器組成集群的網(wǎng)絡(luò)性能。對管理和安全性的考量也會影響GPFS的配置。這些指標(biāo)和性能之間會有沖突,需要達成妥協(xié)。根據(jù)上述的因素,最終選擇了所有節(jié)點組成一組邏輯單元,這種結(jié)構(gòu)中,所有節(jié)點都是對等的,提供存儲服務(wù)和數(shù)據(jù)訪問服務(wù)。同時對擴展的支持較好,可以從單個節(jié)點開始擴展。2.3.3GPFS的配置和管理在可擴展NAS的集群模塊中需要對GPFS進行兩方面的操作,啟動和節(jié)點管理。表2.1展示了啟動和管理過程中需要用到的GPFS命令:表2.1GPFS啟動過程中涉及的命令命令作用mmcrcluster-N{NodeDesc[,NodeDesc...]|NodeFile}–CClusterName–pHostName–rShell–RRemoteCommand創(chuàng)建GPFScluster,并且指定cluste名稱以及用于管理文件系統(tǒng)的shell位置。mmchlicense{server|client}–-accept–N{NodeDesc[,NodeDesc...]|NodeFile}指定接受的協(xié)議類型,以及接受協(xié)議節(jié)點。mmaddnode-N{NodeDesc[,NodeDesc...]|NodeFile}–CClusterName–pHostName–rShell–RRemoteCommand向已經(jīng)存在的GPFScluster中添加節(jié)點。mmdelnode-N{NodeDesc[,NodeDesc...]|NodeFile}刪除GPFS中的節(jié)點。MmcrfsFileSystemName–Fnsdfile–BBlockSize–TMountPoint創(chuàng)建文件系統(tǒng)并且指定文件系統(tǒng)的掛載點。mmcrnsd–Fnsdfile創(chuàng)建NSD格式磁盤。mmdelnsd–Fnsdfile刪除NSD磁盤。mmstartup{-N|-a}在節(jié)點上啟動GPFS。mmshutdown{-N|-a}關(guān)閉GPFS服務(wù)。mmadddiskClusterName–Fnsdfile向GPFS中添加磁盤。mmdeldiskClusterNameNSDName把磁盤中數(shù)據(jù)遷出,并將磁盤移出集群。Mmmount–Fnsdfile刪除NSD磁盤。啟動GPFS包括如下步驟,建立集群。根據(jù)傳入的節(jié)點參數(shù),創(chuàng)立集群。選擇需要接受的GPFS協(xié)議類型,NSDclient或者NSDserver。傳入磁盤參數(shù),將磁盤格式化為gpfs可以識別的NSD(NetworkSharedDisk,即網(wǎng)絡(luò)共享磁盤)。創(chuàng)建文件系統(tǒng)。在所有節(jié)點上啟動GPFS文件系統(tǒng)。將文件系統(tǒng)掛載到節(jié)點的本地目錄下。添加節(jié)點的步驟包括:將節(jié)點加入集群。選擇需要接受的GPFS協(xié)議類型。傳入節(jié)點的磁盤參數(shù),格式化為NSD。在新加入的節(jié)點上啟動文件系統(tǒng)。將文件系統(tǒng)掛載到新加入的節(jié)點的本地目錄下。添加磁盤的步驟包括:將磁盤格式化為NSD類型。將NSD類型磁盤加入到指定的文件系統(tǒng)中。刪除磁盤的步驟包括:從集群中將磁盤刪除,該步驟會將磁盤中的數(shù)據(jù)轉(zhuǎn)移到其他磁盤下。刪除NSD,該步驟會將磁盤格式化為操作系統(tǒng)可以識別的格式。刪除節(jié)點之前需要將該節(jié)點下的磁盤刪除,否則命令將失敗。刪除節(jié)點的步驟包括:在該節(jié)點下停止GPFS文件系統(tǒng)服務(wù)。從集群中刪除節(jié)點。2.4RRDtool工具2.4.1RRDtool簡介RRDtool即RoundRobinDatabase工具,RRDtool是MultiRouterTrafficGrapher(簡稱MTRG)包的組成部分,但是在實際應(yīng)用中,該工具不僅僅用于網(wǎng)絡(luò)流量監(jiān)控,它可以用于收集和存儲,展示各種狀態(tài)信息。RoundRobin結(jié)構(gòu)采用固定大小的循環(huán)鏈表來存儲信息,當(dāng)存儲空間耗盡時,會覆蓋最早存入位置的數(shù)據(jù)。該存儲結(jié)構(gòu)定義為RoundRobinArchieves(簡稱RRA),其優(yōu)點是占用存儲空間小,存儲效率高。缺點是只能保存最近一段時間內(nèi)的原始狀態(tài)信息。[江竟敏,2011]RRD工具的使用非常靈活,在生產(chǎn)中可以通過多個RRA的相互配合以及采集算法和合并算法的共同使用達到需要的監(jiān)控效果。針對單一數(shù)據(jù)源,RRDtool可以同時提供多種粒度的采集算法,記錄在不同的RRA文件中,多種采集算法彼此之間并不相互影響。在系統(tǒng)管理中,原始數(shù)據(jù)有時并不重要,對原始數(shù)據(jù)進行加工得到的數(shù)據(jù)往往更被系統(tǒng)管理員關(guān)心。RRDtool允許用戶自定義存儲策略,可以根據(jù)數(shù)據(jù)特點進行壓縮。在系統(tǒng)監(jiān)控中,平均值和峰值是需要記錄的兩項指標(biāo),假設(shè)系統(tǒng)需要保存過去一天的每小時詳細(xì)數(shù)值和過去一周中每天的峰值和平均值,圖2.8展示了RRDtool針對數(shù)據(jù)源的單一采集算法和多種合并算法。數(shù)據(jù)采集程序每個小時運行一次,將數(shù)值循環(huán)填入數(shù)據(jù)檔案RRA1中,24小時之后第一個小時收集的數(shù)據(jù)將被覆蓋。系統(tǒng)定義了兩個合并算法,MAX()和AVG(),將RRA1中的數(shù)據(jù)進行處理,平均值被記錄到數(shù)據(jù)檔案RRA2中,最大值被記錄到數(shù)據(jù)檔案RRA3中。這樣一來雖然細(xì)粒度的數(shù)據(jù)被丟失,但是系統(tǒng)監(jiān)控需要的數(shù)據(jù)被記錄下來。該系統(tǒng)中時隔一周的峰值和平均值數(shù)據(jù)會被覆蓋。如有需要也可以對這兩個RRA向上提供合并算法。圖2.8RRDtool合并算法RRDtool在數(shù)據(jù)收集和存儲的基礎(chǔ)上還提供了強大的圖表生成能力。允許用戶定義圖表名稱,橫軸,縱軸的名稱和度量單位。在生成圖表時,RRDtool不僅僅支持單個數(shù)據(jù)源,還可以多個相似的數(shù)據(jù)源進行比較。通過自定義折線的顏色提供鮮明的對比。缺點是RRDtool導(dǎo)出的圖表是圖片形式的,如需對數(shù)據(jù)進行更近一步計算,需要根據(jù)API獲取RRA的數(shù)據(jù)。2.4.2RRDtool的python調(diào)用RRD工具是用C語言編寫的,但是針對多種語言提供了調(diào)用支持?!癛RDtool功能可以直接通過python語言調(diào)用,作者通過scratch實現(xiàn)了python封裝?!盵T.Oetiker,2000]在使用中完全遵從RRDtool的操作函數(shù)。在安裝了rrdpython模塊之后,就可以使用python調(diào)用RRDtool提供的函數(shù),這些函數(shù)如表2.2所示。表2.2RRDtool提供的函數(shù)函數(shù)名稱參數(shù)作用rrdtool.create()‘SSAname’;\\檔案名稱‘startsize’;\\檔案大小‘datasource’\\數(shù)據(jù)源‘合并函數(shù)’創(chuàng)建SSArrdtool.update()‘SSAname’;\\檔案名稱‘template|value’更正SSA中某一點的數(shù)值或者SSA結(jié)構(gòu)rrdtool.graph()‘path’;\\輸出路徑‘imageformat’;\\圖片格式‘width’;\\寬帶‘height’;\\長度‘startpoint’\\起始時間‘endpoint’\\終止時間‘Verticallabel’;縱坐標(biāo)‘title’;\\圖片標(biāo)題‘lowerlimit’;\\最低數(shù)值‘outputsource’\\輸出源打印圖表()‘SSAname’顯示檔案信息rrdtool.first();rrrdtool.last()‘SSAname’顯示檔案里最早和最晚的數(shù)據(jù)rrdtool.resize()‘SSAname’‘grow|shrinkrows’變更檔案大小 2.5本章小結(jié)本章總結(jié)了在可擴展NAS系統(tǒng)中,集群模塊的構(gòu)建中使用的技術(shù)以及工具。包括用于構(gòu)建管理界面的Django框架,Python中用于處理數(shù)據(jù)的一些基本模塊和擴展模塊,可擴展NAS底層的GPFS文件系統(tǒng)以及用于性能監(jiān)控的工具RRDtool。

第三章集群模塊的分析與設(shè)計本章首先對可擴展NAS的總體架構(gòu)進行了介紹,分析了集群模塊在系統(tǒng)中的地位和作用。然后對集群模塊進行需求分析,在需求分析的基礎(chǔ)上對集群模塊進行子模塊劃分,并對各個子模塊的詳細(xì)設(shè)計進行了介紹。3.1可擴展NAS的總體規(guī)劃可擴展NAS產(chǎn)品的目標(biāo)是建立一個可以進行Scale-out擴展的NAS系統(tǒng),系統(tǒng)支持節(jié)點數(shù)目1到N的擴展。在系統(tǒng)的建立過程中,有如下幾個目標(biāo):系統(tǒng)中的每個節(jié)點都可以提供數(shù)據(jù)服務(wù)。在單個節(jié)點失效的情況下,數(shù)據(jù)不會丟失,也不會影響集群中其他節(jié)點的正常工作,并且可以快速的重建該節(jié)點。提供統(tǒng)一的管理界面,使用者可以通過該節(jié)面完成所有的NAS管理,包括數(shù)據(jù)服務(wù)管理,用戶管理,集群管理,性能監(jiān)控等。盡量使用GPFS文件系統(tǒng)已經(jīng)提供的功能,避免重復(fù)功能的開發(fā),同時需要對GPFS文件系統(tǒng)的自動化部署提供支持。圖3.1可擴展NAS產(chǎn)品整體架構(gòu)可擴展NAS產(chǎn)品共有三個部分組成,文件系統(tǒng),集群模塊,數(shù)據(jù)服務(wù),其中文件系統(tǒng)使用成熟的的GPFS分布式文件系統(tǒng),數(shù)據(jù)服務(wù)部分由兩個子模塊組成,數(shù)據(jù)服務(wù)器配置模塊和數(shù)據(jù)服務(wù)器管理模塊。集群模塊作為中間模塊銜接了文件系統(tǒng)和數(shù)據(jù)服務(wù)。對底層的文件系統(tǒng)的自動化配置提供支持,同時對數(shù)據(jù)服務(wù)隱藏了集群細(xì)節(jié),使得數(shù)據(jù)服務(wù)模塊專注于自身業(yè)務(wù)邏輯的實現(xiàn)。圖3.1是可擴展NAS產(chǎn)品的整體架構(gòu),該集群現(xiàn)在由三個節(jié)點組成。集群模塊的網(wǎng)絡(luò)通信子模塊會給GPFS文件系統(tǒng)提供節(jié)點的詳細(xì)信息,完成GPFS的自動化部署。數(shù)據(jù)服務(wù)的提供除了依賴數(shù)據(jù)服務(wù)器之外,還需要需要依賴集群模塊提供的用戶信息和節(jié)點信息。3.2集群模塊的需求分析在集群NAS中,每個節(jié)點都需要提供數(shù)據(jù)服務(wù)。如果每個節(jié)點單獨提供配置管理系統(tǒng),管理員對系統(tǒng)進行設(shè)置時,需要對每臺機器進行配置。后期維護出現(xiàn)問題,需要首先定位出問題的節(jié)點,之后再登陸該節(jié)點進行維護工作。這對用戶而言是不可以接受的。所以必須提供統(tǒng)一的管理界面。允許用戶登陸系統(tǒng)后可以對所有的節(jié)點進行操作。集群模塊作為中間模塊,需要銜接文件服務(wù)和數(shù)據(jù)服務(wù),同時提供用戶對集群的管理和狀態(tài)監(jiān)控。本小節(jié)從業(yè)務(wù)需求,用戶需求,功能需求和非功能需求幾個角度對集群模塊進行需求分析。3.2.1集群模塊的業(yè)務(wù)需求集群模塊協(xié)對上層的數(shù)據(jù)服務(wù)模塊隱藏了底層文件系統(tǒng)的分布式細(xì)節(jié),因為對于數(shù)據(jù)服務(wù)而言,用戶對集群NAS產(chǎn)品和單節(jié)點NAS產(chǎn)品的需求是一致的,數(shù)據(jù)服務(wù)模塊的設(shè)計實現(xiàn)與單節(jié)點NAS也相差不大。對于底層的文件系統(tǒng)而言,也不會關(guān)心使用的場景,GPFS設(shè)計是為了應(yīng)對大規(guī)模數(shù)據(jù)的情況,具有普遍的適用意義。在GPFS集群建立的時候需要用戶根據(jù)用途和硬件情況進行相應(yīng)的配置。集群模塊的設(shè)計必須考慮到產(chǎn)品整體,滿足其他模塊的要求。因此,集群模塊的業(yè)務(wù)需求如下:收集GPFS自動化部署需要的信息,并且完成系統(tǒng)建立時的自動化部署。針對可擴展NAS產(chǎn)品的用戶需求,將需要的GPFS命令加以組織,以對用戶友好的界面方式呈現(xiàn)給用戶,隱藏GPFS的命令細(xì)節(jié)。為數(shù)據(jù)服務(wù)模塊只提供必須的數(shù)據(jù),包括用戶信息,系統(tǒng)中的節(jié)點信息,隱藏其他的細(xì)節(jié)。產(chǎn)品可以從單節(jié)點開始擴展,GPFS對單節(jié)點和多節(jié)點的配置是不同的,集群模塊需要對切換過程進行支持。對節(jié)點的備份和恢復(fù)提供支持,這就要求節(jié)點信息對于集群中所有節(jié)點是透明的,每個節(jié)點需要了解到集群中所有節(jié)點的實時情況。3.2.2集群模塊的用戶需求集群模塊分為四個子模塊,網(wǎng)絡(luò)通信子模塊,節(jié)點管理子模塊,用戶管理子模塊,性能監(jiān)控子模塊。其中網(wǎng)絡(luò)管理子模塊負(fù)責(zé)為上層的子模塊提供支持,不需要與用戶發(fā)生交互。其余三個子模塊均需要滿足用戶對系統(tǒng)的不同角度的需求。圖3.2節(jié)點管理子模塊用例圖節(jié)點管理子模塊中,用戶需要查看集群中每個節(jié)點的信息,包括節(jié)點名稱,網(wǎng)絡(luò)信息,節(jié)點當(dāng)前的狀態(tài)等。對節(jié)點的操作包括將新發(fā)現(xiàn)節(jié)點加入系統(tǒng),將系統(tǒng)中節(jié)點刪除。用戶除了對節(jié)點操作以外,還可以對節(jié)點中的磁盤進行單獨操作,查看磁盤信息,如磁盤的容量和使用率等,將磁盤加入文件系統(tǒng),將磁盤從文件系統(tǒng)刪除等操作。這些操作都需要批量化的支持。圖3.2是節(jié)點管理子模塊的用例圖。用戶管理子模塊中,用戶需要查看現(xiàn)有系統(tǒng)中已有的用戶信息,包括UID,名稱,權(quán)限,歸屬群組等,對用戶的操作包括添加新用戶,修改用戶信息,凍結(jié)用戶,恢復(fù)用戶權(quán)限,刪除已有用戶等。對群組的操作包括查看群組的權(quán)限,查看群組中用戶列表,添加群組,刪除群組等。用戶管理子模塊的用例圖如圖3.3所示。圖3.3用戶管理子模塊用例圖在性能監(jiān)控子模塊中,用戶可以對系統(tǒng)中所有節(jié)點的性能指標(biāo)進行考量。首先,用戶會關(guān)注系統(tǒng)的整體性能指標(biāo),包括整體的總存儲容量,空間利用率。其次集群中每個節(jié)點的性能指標(biāo),包括CPU使用率,內(nèi)存使用率,網(wǎng)絡(luò)流量,存儲空間大小和使用率都是用戶關(guān)心的。此外,用戶需要在不同的時間粒度上進行考量,度量單位包括,小時,天,星期,月和年。用戶可以在不同時間粒度之間進行切換,直觀的了解過去一段時間系統(tǒng)的各項性能指標(biāo)反映出的情況。用戶還可以在節(jié)點之間進行切換,考察集群中不同節(jié)點的性能指標(biāo)。圖3.4是性能監(jiān)控子模塊的用例圖。圖3.4性能監(jiān)控子模塊用例圖除此以外,在系統(tǒng)初始化階段,需要提供給用戶引導(dǎo)程序,合并簡化配置選項,隱藏GPFS文件系統(tǒng)復(fù)雜的配置信息。3.2.2集群模塊的功能需求針對用戶需求,集群模塊的功能應(yīng)該包括提供支持的網(wǎng)絡(luò)通信機制,節(jié)點管理,用戶管理,性能監(jiān)控。集群模塊根據(jù)功能劃分為4個子模塊,下面是集群的功能需求。在系統(tǒng)初始化時,用戶需要了解初始化的狀態(tài)以及每個配置選項的含義,系統(tǒng)初始化包括如下的步驟:節(jié)點發(fā)現(xiàn)階段,節(jié)點初始化時會執(zhí)行初始化模塊,該模塊通過網(wǎng)絡(luò)通信發(fā)現(xiàn)局域網(wǎng)中的已有集群。系統(tǒng)初始化階段尚無集群存在,所有節(jié)點進行信息交換,推舉主節(jié)點,然后進入等待狀態(tài)。用戶在管理界面可以查看局域網(wǎng)中的節(jié)點,選擇其中一個或者多個節(jié)點,建立集群。系統(tǒng)收集節(jié)點信息和磁盤信息,該信息在集群之中進行共享。同時提供接口給其他模塊讀取使用。GPFS系統(tǒng)根據(jù)節(jié)點和磁盤信息,完成初始化。用戶通過web界面訪問NAS系統(tǒng),進行管理工作。在系統(tǒng)完成初始化的過程中,網(wǎng)絡(luò)通信還需要支持集群級別的操作。首先,需要支持命令在集群上的同時執(zhí)行,在系統(tǒng)中大部分命令都是針對集群中的所有節(jié)點,需要進行同步執(zhí)行,因此需要實現(xiàn)一定機制,支持集群命令。其次,需要實現(xiàn)節(jié)點的心跳檢查,集群中的元數(shù)據(jù)保存了節(jié)點信息,該信息需要進行實時的更新,因此需要定時對集群狀態(tài)進行檢查,當(dāng)節(jié)點沒有反饋,應(yīng)該更新元數(shù)據(jù),并通知上層做出反應(yīng)。然后,還需要實現(xiàn)文件的共享機制,提供接口給上層模塊,允許文件級別的數(shù)據(jù)傳輸。節(jié)點管理子模塊負(fù)責(zé)節(jié)點以及節(jié)點下磁盤的管理,需要支持節(jié)點加入文件系統(tǒng),該過程包括如下幾個步驟:顯示系統(tǒng)中新加入的節(jié)點。新加入的集群的節(jié)點并沒有加入文件系統(tǒng),需要與其他節(jié)點加以區(qū)分。用戶選擇要加入磁盤的節(jié)點,用戶可以一次性加入多個節(jié)點。在每個節(jié)點中選擇要加入文件系統(tǒng)的磁盤,用戶可以選擇性加入節(jié)點中的磁盤,操作系統(tǒng)所在磁盤需要和其他磁盤進行區(qū)別,不允許用戶將操作系統(tǒng)所在磁盤加入文件系統(tǒng),防止錯誤格式化。將選好的節(jié)點和磁盤加入文件系統(tǒng)。對節(jié)點操作還包括將節(jié)點從文件系統(tǒng)系統(tǒng)刪除。該過程的步驟如下:選擇要刪除的節(jié)點。刪除該節(jié)點下所有加入文件系統(tǒng)的磁盤,在刪除磁盤時,GPFS文件系統(tǒng)會將刪除磁盤上的數(shù)據(jù)轉(zhuǎn)移到其他節(jié)點的磁盤上。刪除節(jié)點。這個模塊包含了對文件系統(tǒng)操作的抽象,實際上每個操作都代表了一系列的GPFS命令。對GPFS的操作需要依賴GPFS提供的shell命令。因此python需要通過shell來對GPFS進行操作。因此該模塊功能需求還包括對shell的操作。如圖3.5所示,python通過popen功能獲得與shell的交互。Python中的Popen與標(biāo)準(zhǔn)C中的popen庫函數(shù)是一致的,該函數(shù)封裝了創(chuàng)建管道,fork子進程,以及父子進程之間的管道通信。[趙毅等,2003]圖3.5popen與shell交互用戶管理方面,功能需求是同一個用戶在群組中所有節(jié)點上擁有相同的用戶權(quán)限。所以首先要有統(tǒng)一的用戶管理界面,可擴展NAS對用戶管理采用了類似于Linux系統(tǒng)的機制,引入了用戶和群組的概念。每個群組可以擁有多個用戶,每個用戶可以分屬于多個群組。對用戶操作的功能需求包括添加新用戶,修改用戶信息,刪除用戶。其中用戶的信息包括用戶名,用戶主目錄,用戶所屬的群組。對群組操作的功能需求包括添加新群組,刪除群組,修改群組權(quán)限,修改群組中用戶。用戶和群組的對應(yīng)關(guān)系在兩者的管理模塊都可以進行操作,需要保持一致。用戶通過管理界面制訂的用戶和群組規(guī)則還要被保存和應(yīng)用在集群中的每個節(jié)點上。群組之間的性能監(jiān)控的功能需求包括以下幾個方面:在每個節(jié)點上定義需要采集的性能信息,包括CPU使用率,內(nèi)存使用率,網(wǎng)絡(luò)流量,存儲空間等。定義信息采集的時間間隔,并且在每個時間間隔進行一次信息采集。對采集的信息進行保存,由于對性能信息采集頻率較高,需要采用一定的算法控制性能數(shù)據(jù)的規(guī)模,防止數(shù)據(jù)占用較大的空間。將性能信息進行集中,管理系統(tǒng)需要將所有的性能信息集中到一個節(jié)點上,涉及到網(wǎng)絡(luò)通信。給用戶呈現(xiàn)性能數(shù)據(jù)。就表現(xiàn)形式而言,圖形化的界面是最為直觀的。其次,用戶可以根據(jù)需要查看某個節(jié)點的所有性能數(shù)據(jù),或者單個性能數(shù)據(jù)在不同時間粒度下的表現(xiàn),甚至可以指定多個節(jié)點就某一個性能數(shù)據(jù)進行對比。3.2.3集群模塊的非功能需求集群模塊的非功能需求要求模塊具有可替換性性,可靠性,安全性。模塊與文件系統(tǒng)的交互部分應(yīng)該獨立出來,在集群模塊升級時可以停止管理界面服務(wù),但是不需要停止文件服務(wù)和數(shù)據(jù)服務(wù)。集群中單個節(jié)點停止服務(wù)了,不會對其他節(jié)點產(chǎn)生影響,在管理界面中應(yīng)該提醒管理員節(jié)點失效,并且停止對該節(jié)點進行分配數(shù)據(jù)服務(wù)等操作。元數(shù)據(jù)在保存和傳輸?shù)倪^程中要注意加密,防止信息被更改和破壞。3.3集群模塊的概要設(shè)計可擴展NAS產(chǎn)品的集群模塊采用分層架構(gòu),管理系統(tǒng)采用Django框架實現(xiàn),分為表現(xiàn)層,業(yè)務(wù)層,數(shù)據(jù)層和網(wǎng)絡(luò)通信層。網(wǎng)絡(luò)通信層主要的工作包括集群中節(jié)點之間的通信和元數(shù)據(jù)的采集。集群模塊的分層架構(gòu)如圖3.6所示,圖3.6集群模塊的分層架構(gòu)表現(xiàn)層負(fù)責(zé)與用戶進行交互,用戶通過瀏覽器訪問頁面,頁面給用戶展示信息并提供操作。表現(xiàn)層的設(shè)計實現(xiàn)主要是HTML頁面的制作,為了提供給用戶頁面風(fēng)格的基本一致的網(wǎng)頁,減少重復(fù)勞動,并且減少后期的維護工作。業(yè)務(wù)層主要負(fù)責(zé)用戶需求的實現(xiàn),采用Django的MVT架構(gòu)。不同類型的業(yè)務(wù)被Django識別,根據(jù)URL配置的規(guī)則分發(fā)給不同的業(yè)務(wù)模塊進行處理。對應(yīng)到相應(yīng)子目錄views的處理方法中。在集群模塊中,業(yè)務(wù)層的設(shè)計包括定義views.py中處理方法,定義系統(tǒng)方法調(diào)用等。業(yè)務(wù)層在進行計算時,把用戶請求的內(nèi)容作為參數(shù),同時還需要數(shù)據(jù),這就涉及到與數(shù)據(jù)層的交互。在集群模塊中,數(shù)據(jù)層中包含多種形式的數(shù)據(jù),本地配置信息,集群元數(shù)據(jù),數(shù)據(jù)庫。本地配置信息是不需要與集群中其他節(jié)點共享的信息,用于節(jié)點重啟和恢復(fù)的信息,包括節(jié)點名稱,節(jié)點的類型等,在形式上是python對象的序列化文件。元數(shù)據(jù)是XML形式的,保存了集群信息,具體包括集群中的所有節(jié)點基本信息,節(jié)點當(dāng)前狀態(tài),節(jié)點下磁盤的信息等,元數(shù)據(jù)可以被每個節(jié)點訪問。系統(tǒng)實現(xiàn)了專門的類,處理元數(shù)據(jù)的存取問題。網(wǎng)絡(luò)通信層,通過建立socket請求,網(wǎng)絡(luò)通信層采集元數(shù)據(jù),并且實時更新元數(shù)據(jù),避免出現(xiàn)不一致的情況。初次以外,本層還對GPFS文件系統(tǒng)的調(diào)用進行了封裝,把文件系統(tǒng)抽象成對象,提供業(yè)務(wù)邏輯層調(diào)用的方法。集群模塊在傳統(tǒng)的三層架構(gòu)下面增加了網(wǎng)絡(luò)層,網(wǎng)絡(luò)層通過對數(shù)據(jù)層操作,將與集群有關(guān)的狀態(tài)信息實時更新。避免了在業(yè)務(wù)邏輯層直接去處理復(fù)雜的集群業(yè)務(wù)。分層架構(gòu)也使得模塊化成為可能,因為每一層只對自己的上一層負(fù)責(zé),接口都是公共的,可以根據(jù)功能需求,進行模塊劃分。3.4網(wǎng)絡(luò)通信子模塊分析與設(shè)計網(wǎng)絡(luò)通信模塊向下需要對GPFS的建立和維護提供支持,向上需要需要抽象GPFS的操作,降低上層模塊操作集群的復(fù)雜度。在系統(tǒng)初始化時,每個節(jié)點會運行啟動程序,完成GPFS的配置工作。3.4.1網(wǎng)絡(luò)通信子模塊流程設(shè)計集群中每個節(jié)點上運行代理程序,代理程序通過彼此之間的通信,完成系統(tǒng)的初始化。集群初始化工作的流程如圖3.7所示。使用SSH-KeyGen生成公鑰和密鑰。GPFS系統(tǒng)在建立之前,要求集群中的所有節(jié)點可以實現(xiàn)無密碼直接登陸,通過SSH-KeyGen工具,節(jié)點將其他節(jié)點的公鑰保存在自己的/root/.ssh/authorized_keys文件中,就可以實現(xiàn)節(jié)點的無密碼登陸。[李俊照等,2006]圖3.7系統(tǒng)初始化流程圖建立UDP客戶端,發(fā)送UDP廣播,尋找主節(jié)點。初始狀態(tài)中,局域網(wǎng)中沒有集群,所以不會得到回應(yīng)。節(jié)點啟動HTTPserver,同時建立UDPserver等待連接。用戶選擇一個節(jié)點作為主節(jié)點,通過瀏覽器輸入http://IP:80端口訪問上一步中啟動的HTTPServer,輸入集群的名稱。主節(jié)點建立TCPServer,等待其余節(jié)點建立連接。同時通過UDP客戶端發(fā)出廣播,通知其余節(jié)點。其余節(jié)點停止HTTP服務(wù),建立TCPclient與主節(jié)點建立連接。主節(jié)點在連接過程中,根據(jù)用戶輸入的集群名稱給所有節(jié)點重新命名。并且建立XML格式的元文件,記錄節(jié)點信息和磁盤信息。主節(jié)點收集所有節(jié)點的公鑰信息,生成authorized_keys文件。通過文件同步功能,將元文件和authorized_keys文件同步到所有節(jié)點之上。完成之后,將節(jié)點對象序列化保存在本地,節(jié)點重啟之后會首先從該文件中讀取信息,完成恢復(fù)工作。上述步驟完成之后,GPFS配置需要的環(huán)境已經(jīng)搭建完畢,需要的節(jié)點和磁盤信息也已經(jīng)采集完成。新加入集群的節(jié)點完成初始化的流程圖如圖3.8所示。圖3.8節(jié)點初始化流程圖使用SSH-KeyGen生成公鑰和密鑰。建立UDPclient,發(fā)送UDP廣播,尋找已有集群。主節(jié)點給出回應(yīng)。建立TCPclient,與主節(jié)點之間建立TCP連接。新加入節(jié)點與主節(jié)點交換信息,新加入節(jié)點從主節(jié)點處獲得節(jié)點名稱。并向主節(jié)點發(fā)送自身的磁盤信息,公鑰信息等。主節(jié)點更新元數(shù)據(jù),并重新生成authorized_keys文件。通過文件同步功能,將元文件和authorized_keys文件同步到所有節(jié)點之上。新加入節(jié)點將節(jié)點對象序列化保存在本地,節(jié)點重啟之后會首先從該文件中讀取信息,完成恢復(fù)工作。3.4.2 元數(shù)據(jù)設(shè)計 元數(shù)據(jù)是指集群級別的配置信息,以及集群中所有節(jié)點的信息和每個節(jié)點下面的磁盤信息。元數(shù)據(jù)是對所有的節(jié)點共享的,采用XML格式進行保存。圖3.9展示了元數(shù)據(jù)的樹狀結(jié)構(gòu)。圖3.9元數(shù)據(jù)樹狀結(jié)構(gòu)根節(jié)點的子節(jié)點包括:ClusterName記錄集群名稱,即用戶在初始化界面輸入的字符串。NodePolicy記錄集群對新加入節(jié)點的政策。在配置界面中用戶可以選擇三種節(jié)點加入政策。不加入,集群發(fā)現(xiàn)新的節(jié)點之后,只完成節(jié)點的初始化工作,不把節(jié)點加入集群之中。用戶在節(jié)點管理界面可以看到該節(jié)點,對其進行操作。加入集群,但是不把磁盤加入集群。用戶可以在節(jié)點管理界面可以對節(jié)點下的磁盤進行操作,有選擇的加入一個或多個磁盤進入文件系統(tǒng)。將節(jié)點自動加入集群,將磁盤加入文件系統(tǒng)。會自動將新加入節(jié)點除操作系統(tǒng)所在磁盤以外的所有磁盤加入,自動化程度最高。Network即網(wǎng)絡(luò)信息,在可擴展NAS中,所有的節(jié)點都位于同一個局域網(wǎng)中,除了IP之外,其他的網(wǎng)絡(luò)信息都一致,這里記錄了包括netmask,gateway等信息。Nodes記錄了節(jié)點信息。子節(jié)點是集群中所有的節(jié)點。節(jié)點信息包括:NodeName,記錄了節(jié)點名稱,節(jié)點的命名規(guī)則是集群名稱_n,n代表了節(jié)點加入的先后順序。NodeType,節(jié)點類型分為masternode和slavenode。運行管理系統(tǒng)的節(jié)點是masternode。兩種節(jié)點在恢復(fù)時,流程是不同的。NodeIP,記錄了節(jié)點的IP地址。NodeState,節(jié)點的狀態(tài)包括以下狀態(tài):Synchronized,節(jié)點同步完成,但是還沒加入集群。nsd-client,節(jié)點進入

溫馨提示

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

評論

0/150

提交評論