黨 飛,江銘炎,袁東風(fēng)
(山東大學(xué) 信息科學(xué)與工程學(xué)院,濟(jì)南 山東250100)
云計(jì)算的提出為信息技術(shù)學(xué)術(shù)界和產(chǎn)業(yè)界的發(fā)展提供了一個(gè)全新的思路。虛擬化作為云計(jì)算IaaS層的關(guān)鍵技術(shù),近年來(lái)也得到了迅速發(fā)展。20世紀(jì)60年代,IBM就開(kāi)始研究虛擬化技術(shù),使得大型機(jī)的資源能得被多用戶使用[1]。經(jīng)過(guò)幾十年的發(fā)展,虛擬化技術(shù)已經(jīng)日漸成熟,誕生了如vmware,virtual PC[2],Xen和 KVM (kernel based virtual machine)等一批成熟的虛擬化產(chǎn)品。與其他虛擬化產(chǎn)品相比,KVM的最大優(yōu)勢(shì)是完全開(kāi)源。KVM是基于內(nèi)核的完全虛擬化,在與其他虛擬化產(chǎn)品效率對(duì)比中表現(xiàn)出色[3],但是其管理系統(tǒng)仍然只有C/S架構(gòu)的,C/S架構(gòu)本身的缺點(diǎn)造成了系統(tǒng)資源的浪費(fèi)。而且用戶進(jìn)行管理工作之前,需要預(yù)先安裝管理軟件;而且不同的管理軟件對(duì)操作系統(tǒng)和硬件資源還有不同的要求。相比起來(lái),B/S模式的管理系統(tǒng)就靈活很多,只要有瀏覽器的終端都可以用來(lái)進(jìn)行管理工作,提高了管理效率,節(jié)省了客戶端資源占用。
本文實(shí)現(xiàn)了一個(gè)基于KVM虛擬化產(chǎn)品的B/S架構(gòu)的虛擬化管理系統(tǒng)。通過(guò)調(diào)用KVM的libvirt開(kāi)發(fā)接口,利用J2EE技術(shù),系統(tǒng)管理員可在任何地方通過(guò)瀏覽器登陸系統(tǒng),進(jìn)行虛擬機(jī)和虛擬存儲(chǔ)的管理工作。最后通過(guò)實(shí)際測(cè)試表明B/S架構(gòu)的優(yōu)越性。
基于KVM的虛擬化管理系統(tǒng),主要包括客戶端、Web服務(wù)器、虛擬化服務(wù)器集群和共享存儲(chǔ)服務(wù)器4個(gè)模塊。其中客戶端是具有瀏覽器的上網(wǎng)設(shè)備,操作系統(tǒng)可以是Linux、Windows甚至嵌入式操作系統(tǒng);Web服務(wù)器上安裝Web容器tomcat,操作系統(tǒng)采用Linux或 Windows,將完成管理工作的J2EE工程放在Web容器里;虛擬化服務(wù)器集群上統(tǒng)一安裝Linux操作系統(tǒng),KVM虛擬化軟件和libvirt接口,并與Web服務(wù)器建立ssh無(wú)密碼連接;共享存儲(chǔ)服務(wù)器是一個(gè)磁盤(pán)陣列,安裝freenas后通過(guò)ip網(wǎng)絡(luò)向虛擬化集群提供數(shù)據(jù)存儲(chǔ)服務(wù)。
用戶通過(guò)jsp頁(yè)面登陸后進(jìn)行相關(guān)操作,操作參數(shù)傳遞給web服務(wù)器,web服務(wù)器與管理目標(biāo)服務(wù)器建立ssh連接,通過(guò)調(diào)用libvirt接口進(jìn)行虛擬化集群的管理工作,并將操作結(jié)果通過(guò)jsp頁(yè)面呈現(xiàn)給用戶。用戶還可以通過(guò)調(diào)用spice插件,用圖形界面的方式查看虛擬機(jī)的工作情況。整個(gè)系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)架構(gòu)
KVM即基于內(nèi)核的虛擬化,依賴于Linux內(nèi)核,其性能優(yōu)越,接近單機(jī)操作系統(tǒng)。由于其優(yōu)越的性能和開(kāi)源性,得到業(yè)界的一致認(rèn)可并在近年來(lái)取得很大的發(fā)展[4]。KVM使用軟件模擬的方式實(shí)現(xiàn)完全虛擬化,通過(guò)將客戶操作系統(tǒng)的I/O指令提交給宿主操作系統(tǒng) (即Linux操作系統(tǒng))上的QEMU,QEMU將操作指令轉(zhuǎn)換為對(duì)宿主機(jī)的I/O操作這種方式來(lái)實(shí)現(xiàn)虛擬化,然后宿主操作系統(tǒng)調(diào)用驅(qū)動(dòng)程序訪問(wèn)硬件。通過(guò)這種方式對(duì)硬件進(jìn)行了模擬,實(shí)現(xiàn)起來(lái)比較簡(jiǎn)潔,而且效率較高[5-6]。
spice是一個(gè)開(kāi)源的遠(yuǎn)程桌面協(xié)議,可以用于在服務(wù)器、遠(yuǎn)程計(jì)算機(jī)和瘦客戶端等設(shè)備上部署虛擬桌面,與微軟的 Remote Desktop Protocol相似,支持 Windows和Linux操作系統(tǒng)。
spice包括兩部分:spice server和spice client。通過(guò)在虛擬機(jī)里安裝spice Server進(jìn)行相應(yīng)的配置后,就可以在客戶端通過(guò)spice client插件遠(yuǎn)程鏈接該虛擬機(jī),以圖形界面形式進(jìn)行操作。
Libvirt是一套開(kāi)源的、用C語(yǔ)言開(kāi)發(fā)的支持虛擬化函數(shù)庫(kù)編程接口,用一種單一方式管理不同的虛擬化提供方式和管理工具,適用于主流虛擬化工具包括Xen、KVM和vmware等,支持與Java、python、C/C++等開(kāi)發(fā)語(yǔ)言的綁定。Linux下常用的虛擬化管理工具Virt-manager和virtinstall都是基于libvirt開(kāi)發(fā)[7]。
FreeNAS是一款免費(fèi)的NAS(網(wǎng)絡(luò)附加存儲(chǔ))服務(wù)器軟件,它能將普通PC或服務(wù)器的硬盤(pán)資源變成網(wǎng)絡(luò)存儲(chǔ)服務(wù)器。該軟件基于FreeBSD,Samba及PHP,支持FTP/NFS/RSYNC/CIFS/AFP/UNISON/SSH 協(xié)議及 web界面的設(shè)定工具。Freenas還可以被安裝在移動(dòng)存儲(chǔ)設(shè)備中,使用方便靈活,在組建網(wǎng)絡(luò)存儲(chǔ)服務(wù)器方面應(yīng)用廣泛[8]。
系統(tǒng)實(shí)現(xiàn)的核心是完成管理工作并和用戶交互的J2EE工程。J2EE工程架構(gòu)如圖2所示。
圖2 J2EE工程架構(gòu)
客戶層實(shí)現(xiàn)用戶和系統(tǒng)的交互,用戶通過(guò)Web瀏覽器登錄系統(tǒng),并通過(guò)頁(yè)面提交操作參數(shù)。瀏覽器負(fù)責(zé)用戶請(qǐng)求接收和服務(wù)器返回信息的顯示。
Struts控制器負(fù)責(zé)接收和處理用戶請(qǐng)求,并將相應(yīng)請(qǐng)求轉(zhuǎn)發(fā)到業(yè)務(wù)邏輯層,然后從業(yè)務(wù)邏輯層接收結(jié)果并返回給客戶層進(jìn)行顯示。
業(yè)務(wù)邏輯層是J2EE工程的核心,負(fù)責(zé)接收struts傳遞的用戶請(qǐng)求,調(diào)用底層libvirt API完成相應(yīng)的操作,并將處理結(jié)果經(jīng)Web層展現(xiàn)給用戶。
將管理虛擬化的J2EE工程放在中心服務(wù)器 (即Web服務(wù)器)的tomcat容器里,這臺(tái)Web服務(wù)器應(yīng)該與虛擬化集群在同一局域網(wǎng)中以保證連接速度。用戶通過(guò)前臺(tái)jsp頁(yè)面登陸管理系統(tǒng),Web服務(wù)器接收到用戶的請(qǐng)求參數(shù)后,與管理目標(biāo)服務(wù)器通過(guò)ssh建立連接,用戶即可進(jìn)行相關(guān)的管理操作。在Web服務(wù)器接收到用戶管理操作參數(shù)后,將參數(shù)轉(zhuǎn)換為libvirt接口認(rèn)可的xml格式文件的參數(shù),然后發(fā)送給管理目標(biāo)服務(wù)器,目標(biāo)服務(wù)器接收到參數(shù)后調(diào)用libvirt接口,執(zhí)行相關(guān)操作。具體實(shí)現(xiàn)過(guò)程如下:
用戶提交請(qǐng)求參數(shù):用戶登錄成功后,可以進(jìn)行如下四方面管理:用戶管理、存儲(chǔ)磁盤(pán)、虛擬機(jī)管理和集群管理。通過(guò)用戶管理可以修改用戶登錄密碼,定期修改密碼可以增強(qiáng)安全性;通過(guò)存儲(chǔ)管理可以添加或刪除資源池,查看、刪除或者新建虛擬磁盤(pán);通過(guò)虛擬機(jī)管理,可以查看和修改虛擬機(jī)信息,并通過(guò)spice查看虛擬機(jī)圖形界面;集群管理可以查看集群中的物理機(jī)信息,并可以將虛擬機(jī)遷移到另一臺(tái)物理機(jī)上。用戶操作通過(guò)表單形式提交給Web服務(wù)器。
Web服務(wù)器轉(zhuǎn)換請(qǐng)求參數(shù)并發(fā)送給目標(biāo)服務(wù)器:Web服務(wù)器通過(guò)servlet接收到用戶請(qǐng)求參數(shù),轉(zhuǎn)換為字符串,然后將參數(shù)組合為xml格式的libvirt配置文件,然后與目標(biāo)服務(wù)器建立ssh連接,通過(guò)配置文件將需要進(jìn)行的操作傳遞給目標(biāo)服務(wù)器。
目標(biāo)服務(wù)器進(jìn)行相關(guān)管理操作并向Web服務(wù)器返回結(jié)果:目標(biāo)服務(wù)器收到配置文件參數(shù)后,調(diào)用libvirt接口將操作參數(shù)傳入,進(jìn)行相應(yīng)的操作。然后將操作結(jié)果返回給Web服務(wù)器。
Web服務(wù)器將操作結(jié)果返回給用戶:Web服務(wù)器接收到返回結(jié)果后,進(jìn)行相應(yīng)的封裝后傳遞給前臺(tái)頁(yè)面,顯示給用戶。如果用戶的請(qǐng)求是圖形界面查看虛擬機(jī),則Web服務(wù)器將虛擬機(jī)的參數(shù)傳遞給客戶端后,客戶端與目標(biāo)服務(wù)器直接建立連接。
用戶登錄后可以進(jìn)行如下四方面管理工作:用戶管理、存儲(chǔ)管理、虛擬機(jī)管理和集群管理。系統(tǒng)功能框圖如圖3所示。
用戶名和密碼通過(guò)加密后寫(xiě)在配置文件里,用戶提交登錄請(qǐng)求后Web服務(wù)器讀取配置文件并進(jìn)行登錄驗(yàn)證,驗(yàn)證通過(guò)即可進(jìn)行權(quán)限內(nèi)的相關(guān)管理操作。用戶可以定期修改密碼,以增強(qiáng)安全性。超級(jí)用戶可以對(duì)用戶進(jìn)行管理,包括添加、刪除用戶,為用戶分配權(quán)限等,但是超級(jí)用戶本身不能對(duì)虛擬化集群直接進(jìn)行管理。通過(guò)這種權(quán)限分離的方式提高系統(tǒng)的安全性。
創(chuàng)建虛擬磁盤(pán)之前需要先創(chuàng)建資源池,然后在資源池中創(chuàng)建虛擬磁盤(pán)。虛擬磁盤(pán)就是提供給虛擬機(jī)用的存儲(chǔ)空間,是位于共享存儲(chǔ)之上的虛擬邏輯磁盤(pán)空間。用戶登錄之后,存儲(chǔ)管理界面提供的管理操作包括:新建和刪除資源池,新建和刪除虛擬磁盤(pán)。新建和刪除虛擬磁盤(pán)的時(shí)候,將虛擬磁盤(pán)名作為參數(shù)傳遞給Web服務(wù)器,創(chuàng)建虛擬磁盤(pán)時(shí)提交表單包括磁盤(pán)名稱和磁盤(pán)大小。表單提交給servlet進(jìn)行處理。
圖3 系統(tǒng)功能結(jié)構(gòu)
創(chuàng)建虛擬機(jī)之后,KVM會(huì)給每個(gè)虛擬機(jī)分配一個(gè)UUID (universally unique identifier),用于唯一標(biāo)識(shí)該虛擬機(jī)。KVM每次啟動(dòng)的時(shí)候,都會(huì)為每個(gè)虛擬機(jī)分配一個(gè)ID。通過(guò)UUID或者ID都可以唯一找到該虛擬機(jī)。
虛擬機(jī)管理進(jìn)行的操作包括:新建和刪除虛擬機(jī),查看和修改虛擬機(jī)配置信息,啟動(dòng)、掛起和關(guān)閉虛擬機(jī),導(dǎo)出虛擬機(jī)模板,從模板創(chuàng)建虛擬機(jī),顯示虛擬機(jī)界面(spice)。本系統(tǒng)將虛擬機(jī)的ID作為參數(shù)進(jìn)行傳遞。首先用戶將操作指令和虛擬機(jī)ID傳遞給Web服務(wù)器,Web服務(wù)器封裝后傳遞給目標(biāo)服務(wù)器,然后接受目標(biāo)服務(wù)器執(zhí)行后的返回結(jié)果,再傳遞給用戶顯示。
在調(diào)用spice通過(guò)圖形界面方式查看虛擬機(jī)中,首先檢測(cè)spice插件是否正確安裝,如果沒(méi)有正確安裝,提示用戶下載并安裝。如果正確安裝,在攔截到查看指令后,從網(wǎng)頁(yè)啟動(dòng)spice插件。并將虛擬機(jī)參數(shù)傳遞給spice,輸入密碼即可查看虛擬機(jī)的界面。其效果如圖4所示。
集群管理包括物理主機(jī)管理和集群調(diào)度。物理機(jī)管理包括向虛擬化集群添加和刪除物理機(jī),通過(guò)SNMP(simple network management protocol)協(xié)議收集物理機(jī)信息,維護(hù)活動(dòng)物理機(jī)列表;集群調(diào)度采用虛擬機(jī)遷移來(lái)實(shí)現(xiàn),采用中心任務(wù)調(diào)度算法,根據(jù)管理節(jié)點(diǎn)服務(wù)器 (即 Web服務(wù)器)通過(guò)SNMP協(xié)議收集到的主機(jī)狀態(tài)信息,在物理機(jī)負(fù)載過(guò)高時(shí),將其上的部分虛擬機(jī)遷移到其他物理機(jī)上,也可以將負(fù)載量很小的物理機(jī)上的虛擬機(jī)遷移到其他主機(jī)上,然后關(guān)閉該物理機(jī)以節(jié)省電能。
圖4 spice查看虛擬機(jī)
系統(tǒng)中用到建立ssh連接的地方比較多,因此通過(guò)對(duì)連接類進(jìn)行封裝可以有效減少代碼量,提高可讀性。
封裝ssh連接類需要用到兩個(gè)類:org.libvirt包下的Connect和LibvirtException類。實(shí)現(xiàn)封裝的類如下:
考慮到不同的用戶同時(shí)對(duì)一臺(tái)服務(wù)器進(jìn)行管理的可能性,本系統(tǒng)在向服務(wù)器讀取數(shù)據(jù)的時(shí)候都是實(shí)時(shí)讀取的,這就要用到Ajax技術(shù)。
Ajax即異步JavaScript和XML,是一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)。其工作原理是,在用戶和服務(wù)器之間增加了了一個(gè)中間層——Ajax引擎.使用戶操作與服務(wù)器響應(yīng)異步化,部分操作由Ajax直接完成,無(wú)需向服務(wù)器提交數(shù)據(jù)。在用戶需要從服務(wù)器讀取新數(shù)據(jù)時(shí)由Ajax引擎代為向服務(wù)器提交請(qǐng)求,然后將讀取結(jié)果發(fā)送給用戶。在使用Ajax擎后,用戶從感覺(jué)上幾乎所有的操作都會(huì)很快響應(yīng)沒(méi)有頁(yè)面重載的等待,也沒(méi)有頁(yè)面跳轉(zhuǎn)[9]。其工作原理如圖5所示。
圖5 Ajax工作原理
在創(chuàng)建虛擬機(jī)的時(shí)候,將圖形設(shè)備選擇為spice,添加spice server并設(shè)置端口號(hào),將顯卡設(shè)備選擇為視頻卡QXL設(shè)備[10]。Web服務(wù)器在接收到查看圖形界面請(qǐng)求后,首先進(jìn)行客戶操作系統(tǒng)的判斷,并檢測(cè)用戶是否正確安裝spice,如果沒(méi)有安裝則根據(jù)用戶操作系統(tǒng)提示用戶下載安裝spice包。
如果spice正確安裝,則通過(guò)網(wǎng)頁(yè)啟動(dòng)spice,并將相應(yīng)參數(shù)傳入,即可打開(kāi)虛擬機(jī)的圖形界面。
為了使管理的步驟更加清晰和兼顧用戶使用習(xí)慣,本系統(tǒng)設(shè)計(jì)類似應(yīng)用軟件的用戶交互界面。首先將操作拆分成各個(gè)步驟,并為每一步驟設(shè)計(jì)一個(gè)jsp頁(yè)面,然后使用CSS+div建立一個(gè)可拖動(dòng)的層,然后采用iframe技術(shù)將操作步驟對(duì)應(yīng)的jsp頁(yè)面加載到層中顯示,用JavaScript控制層中內(nèi)容的切換和數(shù)據(jù)的緩存,需要與服務(wù)器及時(shí)交互的數(shù)據(jù)則采用Ajax技術(shù)實(shí)時(shí)獲取。在一個(gè)操作完成后將表單數(shù)據(jù)整合并提交。
以vmware的vCenter server/vClient為例,與本系統(tǒng)性能做一個(gè)比較,測(cè)試環(huán)境為包含6臺(tái)服務(wù)器的集群。
用pc做客戶端進(jìn)行測(cè)試,CPU為雙核2.9GHz,內(nèi)存為2G,Windows Xp系統(tǒng)使用內(nèi)存約350M。使用的系統(tǒng)資源情況分別如圖6和圖7所示。
由圖可見(jiàn),C/S架構(gòu)客戶端CPU利用率約為50%,內(nèi)存使用為350M左右,而使用B/S架構(gòu)系統(tǒng)的客戶端CPU平均使用率約為20%,內(nèi)存使用為190M左右。
管理節(jié)點(diǎn)采用的是2個(gè)64位CPU,主頻2.5GHz,內(nèi)存8G,硬盤(pán)100G。安裝hyper-V和作web服務(wù)器時(shí)系統(tǒng)資源使用情況見(jiàn)表1。
表1 管理節(jié)點(diǎn)消耗的系統(tǒng)資源對(duì)比
由此可見(jiàn),B/S架構(gòu)管理系統(tǒng)能極大降低系統(tǒng)資源的消耗。這一特點(diǎn)在集群規(guī)模增大時(shí)會(huì)體現(xiàn)的更加明顯,因此對(duì)大規(guī)模虛擬化集群部署有重要的參考價(jià)值。
基于KVM的B/S架構(gòu)虛擬化管理系統(tǒng),將虛擬化管理工作由C/S模式轉(zhuǎn)向了B/S模式,用戶在管理虛擬化集群之前不用先安裝客戶端,直接通過(guò)瀏覽器登陸即可進(jìn)行管理,管理工作不用限定在特定的客戶機(jī)上,也不用限定在特定的網(wǎng)絡(luò)環(huán)境中。由于Web服務(wù)器取代了管理中心服務(wù)器,使系統(tǒng)的資源消耗更少,管理方式更加靈活。本系統(tǒng)在Windows和Linux下經(jīng)過(guò)測(cè)試,運(yùn)行良好。
:
[1]ZHU Changyun.Virtualization technology in the press of information technology [J].Computer Knowledge and Technology,2010,6 (17):4847-4849 (in Chinese). [朱昌云.虛擬化技術(shù)在報(bào)業(yè)信息化建設(shè)中的應(yīng)用 [J].電腦知識(shí)與技術(shù),2010,6 (17):4847-4849.]
[2]DONG Yaozu,ZHOU Zhengwei.X86-based system virtual machine development and application [J].Computer Engineering,2006,32 (13):71-73 (in Chinese). [董耀祖,周正偉.基于X86架構(gòu)的系統(tǒng)虛擬機(jī)技術(shù)與應(yīng)用 [J].計(jì)算機(jī)工程,2006,32 (13):71-73.]
[3]Zhongguancun Online.Three virtualization platform test competition for ubuntu11.10 [EB/OL].[2011-11-05].http://www.enet.com.cn/article/2011/1107/A20111107934270_4.shtml(in Chinese).[中關(guān)村在線.Ubuntu11.10測(cè)試三平臺(tái)虛擬化比拼 [EB/OL].[2011-11-05].http://www.enet.com.cn/article/2011 /1107/A20111107934270_4.shtml.]
[4]HAO Xudong.Intel VT-d technology research and the realization of the virtual machine in KVM [D].Hefei:University of Electronic Science and Technology of China,2009:8-15 (in Chinese).[郝旭東.Intel VT-d技術(shù)的研究及其在KVM虛擬機(jī)上的實(shí)現(xiàn) [D].合肥:電子科技大學(xué),2009:8-15.]
[5]ZHANG Binbin,WANG Xiaolin,YANG Liang,et al.Modifying guest OS to optimize I/O virtualization in KVM [J].Chinese Journal of Computers,2010,33 (12):2312-2320 (in Chinese).[張彬彬,汪小林,楊亮,等.修改客戶操作系統(tǒng)優(yōu)化KVM虛擬機(jī)的I/O性能 [J].計(jì)算機(jī)學(xué)報(bào),2010,33 (12):2312-2320.]
[6]LI Shengzhao,HAO Qinfen,XIAO Liming.Analysis on KVM virtualization Machin.Changsha [J].Computer Engineering & Science,2008,30 (A1):129-132 (in Chinese).[李勝召,郝沁汾,肖利民.KVM虛擬機(jī)分析 [J].計(jì)算機(jī)工程與科學(xué),2008,30 (A1):129-132.]
[7]WIKIPEDIA.Libvirt[EB].[2012-09-15].http://en.wikipedia.org/wiki/Libvirt.
[8]Baidu Baike [DB]. [2012-08-13].http://baike.baidu.com view/1777672.htm (in Chinese). [Freenas.百度百科.Freenas [DB]. [2012-08-13].http://baike.baidu.com/view/1777672.htm.]
[9]YOU Lizhen,GUO Yuchun,LI Chunxi.The principle and application of Ajax engin [J].Control & Automation,2006,22 (2-3):205-207 (in Chinese).[游麗貞,郭宇春,李純喜.Ajax引擎的原理和應(yīng)用 [J].微計(jì)算機(jī)信息,2006,22 (2-3):205-207.]
[10]Red Hat,Inc spice user manual [EB].[2009-09-21].http://spice-space.org/docs/spice_user_manual.pdf.