黨 飛,江銘炎,袁東風(fēng)
(山東大學(xué) 信息科學(xué)與工程學(xué)院,濟南 山東250100)
云計算的提出為信息技術(shù)學(xué)術(shù)界和產(chǎn)業(yè)界的發(fā)展提供了一個全新的思路。虛擬化作為云計算IaaS層的關(guān)鍵技術(shù),近年來也得到了迅速發(fā)展。20世紀(jì)60年代,IBM就開始研究虛擬化技術(shù),使得大型機的資源能得被多用戶使用[1]。經(jīng)過幾十年的發(fā)展,虛擬化技術(shù)已經(jīng)日漸成熟,誕生了如vmware,virtual PC[2],Xen和 KVM (kernel based virtual machine)等一批成熟的虛擬化產(chǎn)品。與其他虛擬化產(chǎn)品相比,KVM的最大優(yōu)勢是完全開源。KVM是基于內(nèi)核的完全虛擬化,在與其他虛擬化產(chǎn)品效率對比中表現(xiàn)出色[3],但是其管理系統(tǒng)仍然只有C/S架構(gòu)的,C/S架構(gòu)本身的缺點造成了系統(tǒng)資源的浪費。而且用戶進行管理工作之前,需要預(yù)先安裝管理軟件;而且不同的管理軟件對操作系統(tǒng)和硬件資源還有不同的要求。相比起來,B/S模式的管理系統(tǒng)就靈活很多,只要有瀏覽器的終端都可以用來進行管理工作,提高了管理效率,節(jié)省了客戶端資源占用。
本文實現(xiàn)了一個基于KVM虛擬化產(chǎn)品的B/S架構(gòu)的虛擬化管理系統(tǒng)。通過調(diào)用KVM的libvirt開發(fā)接口,利用J2EE技術(shù),系統(tǒng)管理員可在任何地方通過瀏覽器登陸系統(tǒng),進行虛擬機和虛擬存儲的管理工作。最后通過實際測試表明B/S架構(gòu)的優(yōu)越性。
基于KVM的虛擬化管理系統(tǒng),主要包括客戶端、Web服務(wù)器、虛擬化服務(wù)器集群和共享存儲服務(wù)器4個模塊。其中客戶端是具有瀏覽器的上網(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ù)器是一個磁盤陣列,安裝freenas后通過ip網(wǎng)絡(luò)向虛擬化集群提供數(shù)據(jù)存儲服務(wù)。
用戶通過jsp頁面登陸后進行相關(guān)操作,操作參數(shù)傳遞給web服務(wù)器,web服務(wù)器與管理目標(biāo)服務(wù)器建立ssh連接,通過調(diào)用libvirt接口進行虛擬化集群的管理工作,并將操作結(jié)果通過jsp頁面呈現(xiàn)給用戶。用戶還可以通過調(diào)用spice插件,用圖形界面的方式查看虛擬機的工作情況。整個系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)架構(gòu)
KVM即基于內(nèi)核的虛擬化,依賴于Linux內(nèi)核,其性能優(yōu)越,接近單機操作系統(tǒng)。由于其優(yōu)越的性能和開源性,得到業(yè)界的一致認可并在近年來取得很大的發(fā)展[4]。KVM使用軟件模擬的方式實現(xiàn)完全虛擬化,通過將客戶操作系統(tǒng)的I/O指令提交給宿主操作系統(tǒng) (即Linux操作系統(tǒng))上的QEMU,QEMU將操作指令轉(zhuǎn)換為對宿主機的I/O操作這種方式來實現(xiàn)虛擬化,然后宿主操作系統(tǒng)調(diào)用驅(qū)動程序訪問硬件。通過這種方式對硬件進行了模擬,實現(xiàn)起來比較簡潔,而且效率較高[5-6]。
spice是一個開源的遠程桌面協(xié)議,可以用于在服務(wù)器、遠程計算機和瘦客戶端等設(shè)備上部署虛擬桌面,與微軟的 Remote Desktop Protocol相似,支持 Windows和Linux操作系統(tǒng)。
spice包括兩部分:spice server和spice client。通過在虛擬機里安裝spice Server進行相應(yīng)的配置后,就可以在客戶端通過spice client插件遠程鏈接該虛擬機,以圖形界面形式進行操作。
Libvirt是一套開源的、用C語言開發(fā)的支持虛擬化函數(shù)庫編程接口,用一種單一方式管理不同的虛擬化提供方式和管理工具,適用于主流虛擬化工具包括Xen、KVM和vmware等,支持與Java、python、C/C++等開發(fā)語言的綁定。Linux下常用的虛擬化管理工具Virt-manager和virtinstall都是基于libvirt開發(fā)[7]。
FreeNAS是一款免費的NAS(網(wǎng)絡(luò)附加存儲)服務(wù)器軟件,它能將普通PC或服務(wù)器的硬盤資源變成網(wǎng)絡(luò)存儲服務(wù)器。該軟件基于FreeBSD,Samba及PHP,支持FTP/NFS/RSYNC/CIFS/AFP/UNISON/SSH 協(xié)議及 web界面的設(shè)定工具。Freenas還可以被安裝在移動存儲設(shè)備中,使用方便靈活,在組建網(wǎng)絡(luò)存儲服務(wù)器方面應(yīng)用廣泛[8]。
系統(tǒng)實現(xiàn)的核心是完成管理工作并和用戶交互的J2EE工程。J2EE工程架構(gòu)如圖2所示。
圖2 J2EE工程架構(gòu)
客戶層實現(xiàn)用戶和系統(tǒng)的交互,用戶通過Web瀏覽器登錄系統(tǒng),并通過頁面提交操作參數(shù)。瀏覽器負責(zé)用戶請求接收和服務(wù)器返回信息的顯示。
Struts控制器負責(zé)接收和處理用戶請求,并將相應(yīng)請求轉(zhuǎn)發(fā)到業(yè)務(wù)邏輯層,然后從業(yè)務(wù)邏輯層接收結(jié)果并返回給客戶層進行顯示。
業(yè)務(wù)邏輯層是J2EE工程的核心,負責(zé)接收struts傳遞的用戶請求,調(diào)用底層libvirt API完成相應(yīng)的操作,并將處理結(jié)果經(jīng)Web層展現(xiàn)給用戶。
將管理虛擬化的J2EE工程放在中心服務(wù)器 (即Web服務(wù)器)的tomcat容器里,這臺Web服務(wù)器應(yīng)該與虛擬化集群在同一局域網(wǎng)中以保證連接速度。用戶通過前臺jsp頁面登陸管理系統(tǒng),Web服務(wù)器接收到用戶的請求參數(shù)后,與管理目標(biāo)服務(wù)器通過ssh建立連接,用戶即可進行相關(guān)的管理操作。在Web服務(wù)器接收到用戶管理操作參數(shù)后,將參數(shù)轉(zhuǎn)換為libvirt接口認可的xml格式文件的參數(shù),然后發(fā)送給管理目標(biāo)服務(wù)器,目標(biāo)服務(wù)器接收到參數(shù)后調(diào)用libvirt接口,執(zhí)行相關(guān)操作。具體實現(xiàn)過程如下:
用戶提交請求參數(shù):用戶登錄成功后,可以進行如下四方面管理:用戶管理、存儲磁盤、虛擬機管理和集群管理。通過用戶管理可以修改用戶登錄密碼,定期修改密碼可以增強安全性;通過存儲管理可以添加或刪除資源池,查看、刪除或者新建虛擬磁盤;通過虛擬機管理,可以查看和修改虛擬機信息,并通過spice查看虛擬機圖形界面;集群管理可以查看集群中的物理機信息,并可以將虛擬機遷移到另一臺物理機上。用戶操作通過表單形式提交給Web服務(wù)器。
Web服務(wù)器轉(zhuǎn)換請求參數(shù)并發(fā)送給目標(biāo)服務(wù)器:Web服務(wù)器通過servlet接收到用戶請求參數(shù),轉(zhuǎn)換為字符串,然后將參數(shù)組合為xml格式的libvirt配置文件,然后與目標(biāo)服務(wù)器建立ssh連接,通過配置文件將需要進行的操作傳遞給目標(biāo)服務(wù)器。
目標(biāo)服務(wù)器進行相關(guān)管理操作并向Web服務(wù)器返回結(jié)果:目標(biāo)服務(wù)器收到配置文件參數(shù)后,調(diào)用libvirt接口將操作參數(shù)傳入,進行相應(yīng)的操作。然后將操作結(jié)果返回給Web服務(wù)器。
Web服務(wù)器將操作結(jié)果返回給用戶:Web服務(wù)器接收到返回結(jié)果后,進行相應(yīng)的封裝后傳遞給前臺頁面,顯示給用戶。如果用戶的請求是圖形界面查看虛擬機,則Web服務(wù)器將虛擬機的參數(shù)傳遞給客戶端后,客戶端與目標(biāo)服務(wù)器直接建立連接。
用戶登錄后可以進行如下四方面管理工作:用戶管理、存儲管理、虛擬機管理和集群管理。系統(tǒng)功能框圖如圖3所示。
用戶名和密碼通過加密后寫在配置文件里,用戶提交登錄請求后Web服務(wù)器讀取配置文件并進行登錄驗證,驗證通過即可進行權(quán)限內(nèi)的相關(guān)管理操作。用戶可以定期修改密碼,以增強安全性。超級用戶可以對用戶進行管理,包括添加、刪除用戶,為用戶分配權(quán)限等,但是超級用戶本身不能對虛擬化集群直接進行管理。通過這種權(quán)限分離的方式提高系統(tǒng)的安全性。
創(chuàng)建虛擬磁盤之前需要先創(chuàng)建資源池,然后在資源池中創(chuàng)建虛擬磁盤。虛擬磁盤就是提供給虛擬機用的存儲空間,是位于共享存儲之上的虛擬邏輯磁盤空間。用戶登錄之后,存儲管理界面提供的管理操作包括:新建和刪除資源池,新建和刪除虛擬磁盤。新建和刪除虛擬磁盤的時候,將虛擬磁盤名作為參數(shù)傳遞給Web服務(wù)器,創(chuàng)建虛擬磁盤時提交表單包括磁盤名稱和磁盤大小。表單提交給servlet進行處理。
圖3 系統(tǒng)功能結(jié)構(gòu)
創(chuàng)建虛擬機之后,KVM會給每個虛擬機分配一個UUID (universally unique identifier),用于唯一標(biāo)識該虛擬機。KVM每次啟動的時候,都會為每個虛擬機分配一個ID。通過UUID或者ID都可以唯一找到該虛擬機。
虛擬機管理進行的操作包括:新建和刪除虛擬機,查看和修改虛擬機配置信息,啟動、掛起和關(guān)閉虛擬機,導(dǎo)出虛擬機模板,從模板創(chuàng)建虛擬機,顯示虛擬機界面(spice)。本系統(tǒng)將虛擬機的ID作為參數(shù)進行傳遞。首先用戶將操作指令和虛擬機ID傳遞給Web服務(wù)器,Web服務(wù)器封裝后傳遞給目標(biāo)服務(wù)器,然后接受目標(biāo)服務(wù)器執(zhí)行后的返回結(jié)果,再傳遞給用戶顯示。
在調(diào)用spice通過圖形界面方式查看虛擬機中,首先檢測spice插件是否正確安裝,如果沒有正確安裝,提示用戶下載并安裝。如果正確安裝,在攔截到查看指令后,從網(wǎng)頁啟動spice插件。并將虛擬機參數(shù)傳遞給spice,輸入密碼即可查看虛擬機的界面。其效果如圖4所示。
集群管理包括物理主機管理和集群調(diào)度。物理機管理包括向虛擬化集群添加和刪除物理機,通過SNMP(simple network management protocol)協(xié)議收集物理機信息,維護活動物理機列表;集群調(diào)度采用虛擬機遷移來實現(xiàn),采用中心任務(wù)調(diào)度算法,根據(jù)管理節(jié)點服務(wù)器 (即 Web服務(wù)器)通過SNMP協(xié)議收集到的主機狀態(tài)信息,在物理機負載過高時,將其上的部分虛擬機遷移到其他物理機上,也可以將負載量很小的物理機上的虛擬機遷移到其他主機上,然后關(guān)閉該物理機以節(jié)省電能。
圖4 spice查看虛擬機
系統(tǒng)中用到建立ssh連接的地方比較多,因此通過對連接類進行封裝可以有效減少代碼量,提高可讀性。
封裝ssh連接類需要用到兩個類:org.libvirt包下的Connect和LibvirtException類。實現(xiàn)封裝的類如下:
考慮到不同的用戶同時對一臺服務(wù)器進行管理的可能性,本系統(tǒng)在向服務(wù)器讀取數(shù)據(jù)的時候都是實時讀取的,這就要用到Ajax技術(shù)。
Ajax即異步JavaScript和XML,是一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。其工作原理是,在用戶和服務(wù)器之間增加了了一個中間層——Ajax引擎.使用戶操作與服務(wù)器響應(yīng)異步化,部分操作由Ajax直接完成,無需向服務(wù)器提交數(shù)據(jù)。在用戶需要從服務(wù)器讀取新數(shù)據(jù)時由Ajax引擎代為向服務(wù)器提交請求,然后將讀取結(jié)果發(fā)送給用戶。在使用Ajax擎后,用戶從感覺上幾乎所有的操作都會很快響應(yīng)沒有頁面重載的等待,也沒有頁面跳轉(zhuǎn)[9]。其工作原理如圖5所示。
圖5 Ajax工作原理
在創(chuàng)建虛擬機的時候,將圖形設(shè)備選擇為spice,添加spice server并設(shè)置端口號,將顯卡設(shè)備選擇為視頻卡QXL設(shè)備[10]。Web服務(wù)器在接收到查看圖形界面請求后,首先進行客戶操作系統(tǒng)的判斷,并檢測用戶是否正確安裝spice,如果沒有安裝則根據(jù)用戶操作系統(tǒng)提示用戶下載安裝spice包。
如果spice正確安裝,則通過網(wǎng)頁啟動spice,并將相應(yīng)參數(shù)傳入,即可打開虛擬機的圖形界面。
為了使管理的步驟更加清晰和兼顧用戶使用習(xí)慣,本系統(tǒng)設(shè)計類似應(yīng)用軟件的用戶交互界面。首先將操作拆分成各個步驟,并為每一步驟設(shè)計一個jsp頁面,然后使用CSS+div建立一個可拖動的層,然后采用iframe技術(shù)將操作步驟對應(yīng)的jsp頁面加載到層中顯示,用JavaScript控制層中內(nèi)容的切換和數(shù)據(jù)的緩存,需要與服務(wù)器及時交互的數(shù)據(jù)則采用Ajax技術(shù)實時獲取。在一個操作完成后將表單數(shù)據(jù)整合并提交。
以vmware的vCenter server/vClient為例,與本系統(tǒng)性能做一個比較,測試環(huán)境為包含6臺服務(wù)器的集群。
用pc做客戶端進行測試,CPU為雙核2.9GHz,內(nèi)存為2G,Windows Xp系統(tǒng)使用內(nèi)存約350M。使用的系統(tǒng)資源情況分別如圖6和圖7所示。
由圖可見,C/S架構(gòu)客戶端CPU利用率約為50%,內(nèi)存使用為350M左右,而使用B/S架構(gòu)系統(tǒng)的客戶端CPU平均使用率約為20%,內(nèi)存使用為190M左右。
管理節(jié)點采用的是2個64位CPU,主頻2.5GHz,內(nèi)存8G,硬盤100G。安裝hyper-V和作web服務(wù)器時系統(tǒng)資源使用情況見表1。
表1 管理節(jié)點消耗的系統(tǒng)資源對比
由此可見,B/S架構(gòu)管理系統(tǒng)能極大降低系統(tǒng)資源的消耗。這一特點在集群規(guī)模增大時會體現(xiàn)的更加明顯,因此對大規(guī)模虛擬化集群部署有重要的參考價值。
基于KVM的B/S架構(gòu)虛擬化管理系統(tǒng),將虛擬化管理工作由C/S模式轉(zhuǎn)向了B/S模式,用戶在管理虛擬化集群之前不用先安裝客戶端,直接通過瀏覽器登陸即可進行管理,管理工作不用限定在特定的客戶機上,也不用限定在特定的網(wǎng)絡(luò)環(huán)境中。由于Web服務(wù)器取代了管理中心服務(wù)器,使系統(tǒng)的資源消耗更少,管理方式更加靈活。本系統(tǒng)在Windows和Linux下經(jīng)過測試,運行良好。
:
[1]ZHU Changyun.Virtualization technology in the press of information technology [J].Computer Knowledge and Technology,2010,6 (17):4847-4849 (in Chinese). [朱昌云.虛擬化技術(shù)在報業(yè)信息化建設(shè)中的應(yīng)用 [J].電腦知識與技術(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)虛擬機技術(shù)與應(yīng)用 [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測試三平臺虛擬化比拼 [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虛擬機上的實現(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虛擬機的I/O性能 [J].計算機學(xué)報,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].計算機工程與科學(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].微計算機信息,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.