中圖分類號(hào):TP392 文獻(xiàn)標(biāo)識(shí)碼:A
摘要:本文介紹了KVM的相關(guān)理論,探討了在服務(wù)器端的內(nèi)核級(jí)虛擬化管理平臺(tái) KVM的實(shí)現(xiàn)細(xì)節(jié),研究了用于 PC 平臺(tái)模擬的虛擬化軟件QEMU和支持 QEMU 設(shè)備驅(qū)動(dòng)的 Libvirt 虛擬化環(huán)境管理套件實(shí)現(xiàn)途徑。
關(guān)鍵詞:服務(wù)器虛擬化;KVM ;QEMU
1.KVM 虛擬化技術(shù)
虛擬化就是將原本運(yùn)行在真實(shí)環(huán)境下的計(jì)算機(jī)系統(tǒng)或組件運(yùn)行在虛擬出來(lái)的環(huán)境中,是一種調(diào)配計(jì)算資源的方法,它利用軟件將不同層面,比如硬件、軟件、數(shù)據(jù)、網(wǎng)絡(luò)、存儲(chǔ)等隔離開來(lái),使得層與層之間的改動(dòng)更容易被實(shí)施,帶來(lái)的直接效果就是高效管理以能更有效地利用IT資源并方便提供合適的計(jì)算資源。
與桌面虛擬化、存儲(chǔ)虛擬化和網(wǎng)絡(luò)虛擬化不同,當(dāng)利用軟件在服務(wù)器上創(chuàng)建一個(gè)虛擬機(jī)來(lái)模擬底層硬件的服務(wù)和功能,使得它能在一臺(tái)機(jī)器上運(yùn)行多個(gè)操作系統(tǒng)時(shí)被稱為服務(wù)器虛擬技術(shù)。虛擬服務(wù)器端實(shí)現(xiàn)的功能模塊主要包括內(nèi)核級(jí)虛擬化管理平臺(tái)KVM,用于PC 平臺(tái)模擬的虛擬化軟件QEMU ,支持設(shè)備驅(qū)動(dòng)的虛擬化環(huán)境管理套件Libvirt 。
KVM(Kernel-based Virtual Machine) 是一款基于GPL 授權(quán)方式的開源虛擬機(jī)軟件,由AviKivity 開發(fā)和維護(hù),現(xiàn)歸RedHat 公司所有。KVM 是在Linux 系統(tǒng)中使用基于Intel VT 技術(shù)采用底層硬件的虛擬化支持來(lái)提供完整的原生虛擬化,只要底層硬件虛擬化支持,就能較好地將不同的操作系統(tǒng)和特殊硬件設(shè)備加以利用,從而能夠降低不同系統(tǒng)間維護(hù)的復(fù)雜度。
KVM只提供了一個(gè)虛擬化框架,還需要一種用戶空間工具來(lái)提供環(huán)境仿真能力,因此使用了QEMU 。QEMU 是一個(gè)平臺(tái)虛擬化解決方案,在KVM之前就已經(jīng)存在,可以仿真一個(gè)具有處理器和包括圖形適配器、磁盤、網(wǎng)絡(luò)設(shè)備等外圍設(shè)備的完整計(jì)算機(jī)系統(tǒng)。在客戶操作系統(tǒng)上執(zhí)行的功能是由QEMU 提供的,客戶操作系統(tǒng)所生成的任何請(qǐng)求都會(huì)被中途截獲,并重新發(fā)送到進(jìn)程模擬的用戶模式中[1]。
Libvirt 是管理虛擬機(jī)和其他虛擬化功能的軟件集合。這些軟件包括一個(gè)API 庫(kù)、一個(gè)daemon 和一個(gè)命令行工具,用于實(shí)現(xiàn)一種單一的方式管理多種不同的虛擬化提供方式和hypervisor 虛擬化平臺(tái)。libvirt 通過(guò)一種特定于虛擬機(jī)監(jiān)控程序的機(jī)制與每個(gè)有效虛擬機(jī)監(jiān)控程序進(jìn)行通信,以完成API 請(qǐng)求,并通過(guò)QEMU 來(lái)實(shí)現(xiàn)該功能。
Libvirt 分為L(zhǎng)ibvirtd 和Driver 兩部分,Libvirtd 是一個(gè)守護(hù)服務(wù)進(jìn)程(Daemon Service) ,打開一個(gè)服務(wù)器可配偵聽端口號(hào),偵聽從Libvirt 客戶端發(fā)出的URI 請(qǐng)求并解析該請(qǐng)求,然后調(diào)用Driver 向具體的虛擬機(jī)發(fā)出命令。
Libvirt 支持QEMU 虛擬環(huán)境,相應(yīng)地支持QEMU 的設(shè)備驅(qū)動(dòng)。QEMU 的命令都可以通過(guò)Libvirt QEMU Driver 調(diào)用。Libvirt QEMU Driver 通過(guò)CLI 命令行方式發(fā)起對(duì)QEMU 的請(qǐng)求。Libvirt Driver 與QEMU 之間的通訊通過(guò)Linux PIPE 實(shí)現(xiàn),也就是Libvirt Driver 打開一個(gè)寫通道,QEMU 打開一個(gè)讀通道[2]。
Libvirt 的主要功能是進(jìn)行虛擬機(jī)管理、遠(yuǎn)程機(jī)器支持、存儲(chǔ)管理、網(wǎng)絡(luò)接口管理和虛擬NAT和基于路由的網(wǎng)絡(luò)。
virsh 構(gòu)建于libvirt 之上,它是一種虛擬shell 。virt-install 可用于從多個(gè)操作系統(tǒng)發(fā)行版供應(yīng)新域,virt-clone 可用于復(fù)制一個(gè)VM為新的VM ,virt-manager 是多用途桌面管理工具,virt-viewer 是安全連接到VM圖形控制臺(tái)的輕量級(jí)工具。
構(gòu)建于libvirt 之上的一種最重要的工具名為VirtIO 。VirtIO VM 管理應(yīng)用程序旨在管理單個(gè)節(jié)點(diǎn)上的單個(gè)VM 或多個(gè)主機(jī)上的大量VM。除了可以簡(jiǎn)化大量主機(jī)和VM的管理之外,它還可用于跨平臺(tái)和架構(gòu)自動(dòng)化集群,負(fù)載平衡和工作[3]。
2.高校實(shí)現(xiàn)服務(wù)器虛擬化的優(yōu)勢(shì)
服務(wù)器虛擬化架構(gòu)具有靈活多變的組織形式,非常適合于像高校這種頻繁更換OS系統(tǒng)平臺(tái)、機(jī)房、教學(xué)中心等大規(guī)模的、需求多變的應(yīng)用場(chǎng)景。
2.1提高服務(wù)器部署效率和利用率。
部署虛擬化服務(wù)器平臺(tái)之后,若某個(gè)系部或教師需要使用服務(wù)器進(jìn)行教學(xué)科研或其他應(yīng)用活動(dòng),網(wǎng)管中心管理員在短時(shí)間內(nèi)就可以從虛擬化服務(wù)器平臺(tái)中按照需求劃分出滿足要求的虛擬服務(wù)器以供使用,盡最大能力合理分配服務(wù)器資源,當(dāng)某個(gè)服務(wù)器不再使用時(shí),管理員可以隨時(shí)將虛擬機(jī)撤銷,計(jì)算資源立即被釋放,然后這部分被釋放的計(jì)算資源可再次劃分為另一臺(tái)虛擬服務(wù)器,供另一個(gè)部門使用,避免造成資源浪費(fèi)。
2.2提高網(wǎng)絡(luò)教學(xué)上機(jī)環(huán)境統(tǒng)一部署效率。
在典型的網(wǎng)絡(luò)教學(xué)環(huán)境中,教師除了授課之外,最大的困難在于為數(shù)十臺(tái)或上百臺(tái)學(xué)生機(jī)部署上機(jī)環(huán)境和經(jīng)常出現(xiàn)的由于硬件故障導(dǎo)致多個(gè)學(xué)生無(wú)法使用計(jì)算機(jī)的情況?;诜?wù)器虛擬化后可以使用RDP 、SPICE 等桌面顯示協(xié)議虛擬桌面環(huán)境解決方案,將傳統(tǒng)網(wǎng)絡(luò)教學(xué)環(huán)境下的學(xué)生機(jī)轉(zhuǎn)換為瘦客戶端,其所有軟件環(huán)境全部部署在后端數(shù)據(jù)中心虛擬桌面服務(wù)器上,實(shí)現(xiàn)快速的實(shí)驗(yàn)環(huán)境模擬、重建,且使用瘦客戶端避免了學(xué)生機(jī)的硬件損壞,提高了授課中設(shè)備的正常使用率。
2.3極強(qiáng)的服務(wù)遷移和擴(kuò)展能力。
在進(jìn)行服務(wù)器應(yīng)用遷移的時(shí)候,只需要將這個(gè)包含了操作系統(tǒng)和應(yīng)用程序的虛擬機(jī)文件通過(guò)拷貝的方式復(fù)制到另外一臺(tái)服務(wù)器上面,如果對(duì)虛擬機(jī)文件進(jìn)行復(fù)制操作,立刻就可以將一個(gè)虛擬機(jī)變成兩份完全一樣的虛擬機(jī),極易部署和遷移。
若需提高虛擬化服務(wù)器平臺(tái)的處理能力,只需要增加更多的物理服務(wù)器數(shù)量來(lái)增強(qiáng)整個(gè)虛擬化平臺(tái)的處理能力,并將一部分應(yīng)用遷移到其上運(yùn)行即可,整個(gè)過(guò)程不會(huì)對(duì)正在運(yùn)行的虛擬機(jī)產(chǎn)生任何影響。
2.4高可用性和節(jié)能環(huán)保。
部署虛擬化服務(wù)器平臺(tái)之后,所有的服務(wù)器就構(gòu)建成一個(gè)統(tǒng)一的硬件處理平臺(tái),任何一臺(tái)服務(wù)器的故障不會(huì)對(duì)整個(gè)系統(tǒng)造成任何影響,運(yùn)行在其上的虛擬機(jī)以及運(yùn)行在虛擬機(jī)上的業(yè)務(wù)不會(huì)因?yàn)橐慌_(tái)物理服務(wù)器或虛擬機(jī)的故障而停機(jī),相當(dāng)于為所有的服務(wù)器都構(gòu)建了高可用的系統(tǒng),任何一臺(tái)服務(wù)器的故障不會(huì)對(duì)運(yùn)行在其上的虛擬機(jī)造成影響。
通過(guò)整合減少服務(wù)器數(shù)量,可減少服務(wù)器占用機(jī)房空間,降低發(fā)熱量,從而降低在制冷設(shè)備方面的投入及散熱成本。耗電量的減少及線纜維護(hù)工作量的減少,大大降低網(wǎng)管工作量和運(yùn)營(yíng)成本。
3.服務(wù)器虛擬化的實(shí)現(xiàn)過(guò)程
選用IBMx3650 服務(wù)器,安裝基于linux3.2.0 內(nèi)核的Ubuntu Server 12.04 x86_64 位操作系統(tǒng),基于KVM對(duì)服務(wù)器進(jìn)行虛擬化,設(shè)置CPU 、內(nèi)存、硬盤、網(wǎng)絡(luò)等硬件環(huán)境,安裝操作系統(tǒng)及應(yīng)用,實(shí)現(xiàn)完整的服務(wù)器虛擬化解決方案。
3.1環(huán)境檢查及軟件安裝
KVM是基于CPU 硬件虛擬化基礎(chǔ)之上的,在安裝KVM 之前必須確認(rèn)硬件層CPU 是否支持虛擬化技術(shù)。使用如下命令進(jìn)行檢測(cè),有輸出結(jié)果說(shuō)明CPU 支持虛擬化。
3.2建立虛擬磁盤鏡像并安裝虛擬機(jī)
此步驟和傳統(tǒng)安裝方式一致。
3.3虛擬網(wǎng)絡(luò)的配置
默認(rèn)設(shè)置是使用SLIRP 協(xié)議的用戶模式連接,它通過(guò)網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT) 透過(guò)宿主機(jī)和外部網(wǎng)絡(luò)進(jìn)行通信,虛擬機(jī)操作系統(tǒng)內(nèi)網(wǎng)卡采用內(nèi)部DHCP 方式獲取私有IP 地址與外部網(wǎng)絡(luò)通訊,但虛擬機(jī)不能向外提供服務(wù),也不能與主機(jī)進(jìn)行通信。
為了使外部主機(jī)可以直接連接到虛擬服務(wù)器上,需要配置網(wǎng)橋(bridge) ,網(wǎng)橋是一個(gè)接口,與eth0 不同的是它由多個(gè)接口共同構(gòu)成。網(wǎng)橋使虛擬接口通過(guò)物理接口連接到外部網(wǎng)絡(luò),對(duì)網(wǎng)絡(luò)中的其他主機(jī)來(lái)說(shuō),虛擬機(jī)看起來(lái)就像一臺(tái)普通的服務(wù)器主機(jī)。
網(wǎng)橋模式是將物理網(wǎng)卡eht0 虛擬成一個(gè)虛擬網(wǎng)橋brx 和虛擬網(wǎng)卡tapx ,然后將虛擬網(wǎng)卡tapx 和物理網(wǎng)卡ethx 加入網(wǎng)橋,設(shè)置成網(wǎng)橋端口并激活虛擬網(wǎng)卡tapx 。libvirt 每啟動(dòng)一個(gè)VM 時(shí),就為這個(gè)VM 創(chuàng)建一個(gè)tap 設(shè)備,稱為vnetx ,然后將這塊虛擬網(wǎng)卡加入橋設(shè)備brx ,網(wǎng)橋IP 設(shè)置成原主機(jī)IP 地址,這時(shí)主機(jī)操作系統(tǒng)就可正常通訊。
3.3虛擬機(jī)的優(yōu)化和管理
利用構(gòu)建于libvirt 之上的虛擬shell 程序virsh 以交互方式使用多個(gè)libvirt 功能。首先是要定義libvirt 屬性多樣化域配置文件。利用該域配置文件修改QEMU 域要使用的一些基本元數(shù)據(jù),包括域名、最大內(nèi)存、初始可用內(nèi)存以及該域可用的虛擬處理器數(shù)量以及上述bridge 網(wǎng)絡(luò)參數(shù),然后啟動(dòng)新域,使用內(nèi)的命令列出給定主機(jī)上的活動(dòng)域。
4.結(jié)論
虛擬化后隨著服務(wù)器的數(shù)量減少,故障率明顯降低,故障修復(fù)周期也大幅縮短,保障了教學(xué)資源的穩(wěn)定運(yùn)行。部署新服務(wù)器工作周期的縮短極大地降低部署復(fù)雜程度,提高了工作效率。
參考文獻(xiàn):
[1]崔澤永,趙會(huì)群.基于KVM 的虛擬化研究及應(yīng)用[J]. 計(jì)算機(jī)技術(shù)與發(fā)展,2011(6):108.
[2]敖青云,蔣文蓉.基于和的虛擬桌面系統(tǒng)的實(shí)現(xiàn)與應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件2012(11):218.
[3]崔澤永.基于的虛擬機(jī)調(diào)度方法研究.北方工業(yè)大學(xué)工程碩士論文
[4]徐燕雯.基于KVM 的桌面虛擬化架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)[D]. 上海交通大學(xué)工程碩士專業(yè)學(xué)位論文,2012,6:28.
[5]Tim Jones M.Libvirt.虛擬化庫(kù)剖析━━針對(duì)簡(jiǎn)單的Linux 虛擬化的API[EB/OL].http://www.ibm.com/developerworks/cn/ linux/l-libvirt/. Realization of the KVM Based Sever Virtualization EnvironmentLI Bin, HU Yi-feng (Sanmenxia Polytechnic, Sanmenxia 472000, China)