潘力
摘 要:針對(duì)云計(jì)算環(huán)境下在線遷移的問題,文章提出了一種基于內(nèi)核虛擬機(jī)的在線遷移優(yōu)化方案,研究目的是在KVM虛擬化平臺(tái)中實(shí)現(xiàn)虛擬機(jī)跨越遷移,保證數(shù)據(jù)的兩端一致性,從而實(shí)現(xiàn)各種大型云平臺(tái)負(fù)載平衡、系統(tǒng)的實(shí)現(xiàn)運(yùn)行和維護(hù)、保證虛擬機(jī)性能的穩(wěn)定性和可靠性。實(shí)踐證明提出的優(yōu)化方案能夠很好地解決線上各種遷移場(chǎng)景轉(zhuǎn)換,為遷移工作的穩(wěn)定與可靠提供了重要技術(shù)支持。
關(guān)鍵詞:KVM;虛擬化;在線遷移
云計(jì)算是針對(duì)如何通過互聯(lián)網(wǎng)對(duì)虛擬化硬件計(jì)算資源池進(jìn)行訪問的一種計(jì)算模型。用戶可以在線支付相關(guān)費(fèi)用使用云計(jì)算資源及相關(guān)服務(wù),同時(shí)可以參與開發(fā)各種基于虛擬資源的擴(kuò)展插件。云計(jì)算的核心技術(shù)主要指虛擬化技術(shù),通過耦合技術(shù)實(shí)現(xiàn)底層硬件和上層軟件服務(wù)分離,最終目的是通過云計(jì)算的虛擬化技術(shù)實(shí)現(xiàn)本地物理資源的云端和異地重新整合與分配,降低存儲(chǔ)成本,提高本地和云端資源的使用效率[1]。云計(jì)算服務(wù)包括虛擬機(jī)在線遷移技術(shù)服務(wù),服務(wù)內(nèi)容主要包括云計(jì)算資源和服務(wù)供應(yīng)商統(tǒng)一管理大規(guī)模的云計(jì)算資源,云存儲(chǔ)資源,實(shí)現(xiàn)高效的運(yùn)營(yíng)管理成本及效率。虛擬化在線遷移過程中需要?jiǎng)?wù)必保證虛擬機(jī)服務(wù)應(yīng)用程序的持續(xù)安全運(yùn)行,不能意外中斷。虛擬化在線遷移指的是通過云端虛擬機(jī)從一個(gè)本地的具體的物理主機(jī)將虛擬機(jī)數(shù)據(jù)磁盤,內(nèi)存數(shù)據(jù)和設(shè)備狀態(tài)遷移到另一個(gè)異地的物理主機(jī),但是,由于虛擬機(jī)在線遷移過程中的數(shù)據(jù)傳輸需要占用相當(dāng)一部分硬件資源,導(dǎo)致虛擬機(jī)在線遷移服務(wù)在整個(gè)過程中將受到影響,特別是當(dāng)虛擬機(jī)的運(yùn)行占用較高、內(nèi)存不足時(shí),虛擬機(jī)上的應(yīng)用程序?qū)⒖赡軐?dǎo)致諸多意外的中斷[2]。因此,虛擬機(jī)在線遷移時(shí)間的優(yōu)化已成為研究熱點(diǎn)。
1 KVM虛擬化技術(shù)
通過虛擬交換機(jī)(Kernel-based Virtual Machine,KVM)模塊上的內(nèi)存和處理器虛擬化使客戶端在虛擬環(huán)境中運(yùn)行并支持這些客戶虛擬機(jī)的運(yùn)行即可實(shí)現(xiàn)KVM完全虛擬化。完成基于Linux內(nèi)核在線虛擬化遷移解決方案完全有必要借助于一款免費(fèi)且開源的系統(tǒng),如KVM[3]。KVM體系結(jié)構(gòu)如圖1所示,基于架構(gòu)的設(shè)計(jì)模塊和思路發(fā)現(xiàn),最初的設(shè)計(jì)是基于內(nèi)核的模塊化設(shè)計(jì)主要是指開源且免費(fèi)的KVM內(nèi)核。隨著Linux內(nèi)核的不斷擴(kuò)展,更多復(fù)雜的高集成度的虛擬化功能聚合到一起,所以KVM逐漸發(fā)展成為Hyperbivisor虛擬監(jiān)視器模式。在KVM中,虛擬機(jī)基于Linux內(nèi)核,運(yùn)行進(jìn)程收Linux受指令控制,KVM虛擬機(jī)是通過多個(gè)QemuI/O來模擬完成的,服務(wù)于多個(gè)用戶。
2 在線遷移
在線遷移,是將源主機(jī)上的虛擬機(jī)(Virtual Machine,VM)(此處為源VM)遷移到目的主機(jī),在遷移完成后目標(biāo)主機(jī)上的VM(即目標(biāo)VM)需要繼續(xù)運(yùn)行源VM上的應(yīng)用服務(wù)。因此,需要保證源VM和目標(biāo)VM之間的信息狀態(tài)完全一致,為了實(shí)現(xiàn)源VM和目標(biāo)VM間的完全同步,在遷移中需要向目的服務(wù)器傳送源VM的各種信息,包括中央處理器(Central Processing Unit,CPU)寄存器的狀態(tài)、內(nèi)存中加載運(yùn)行的頁面數(shù)據(jù)、磁盤的文件系統(tǒng)和I/O設(shè)備的使用狀態(tài)[4]。由于各部分信息所包含的數(shù)據(jù)量不同,以及對(duì)虛擬機(jī)運(yùn)行的重要性不同,遷移處理的方式也不完全相同。
3 技術(shù)模塊
當(dāng)CPU開始在線虛擬化進(jìn)程時(shí),首先KVM模塊需要初始化VM中的內(nèi)存數(shù)據(jù),檢測(cè)處理器運(yùn)行狀態(tài),一切檢測(cè)符合設(shè)置時(shí),運(yùn)行計(jì)算機(jī)進(jìn)行初步虛擬化操作。接著,打開本地和異地的VM主機(jī)是實(shí)現(xiàn)虛擬化第二步,緊接著通過一連串的進(jìn)程指令創(chuàng)建必備的虛擬化系統(tǒng)文件。在虛擬機(jī)的創(chuàng)建和運(yùn)行的后臺(tái)運(yùn)行模式種,務(wù)必需要保證用戶模擬器(QEMU)和KVM兩個(gè)模塊的持續(xù)不間斷的安全運(yùn)行。虛擬化過程中,系統(tǒng)設(shè)定是通過設(shè)計(jì)好的設(shè)備狀態(tài)和運(yùn)行文件保證KVM模塊和用戶模擬器之間信息交互式訪問和請(qǐng)求實(shí)現(xiàn)。在最初的KVM設(shè)計(jì)中,只需要在設(shè)備中寫入dev和KVM兩個(gè)參數(shù)文件,實(shí)現(xiàn)第一個(gè)虛擬機(jī)的初步的創(chuàng)建完成。在實(shí)現(xiàn)虛擬化在線遷移的過程中,常常遇到的一個(gè)難題就是如何更好地實(shí)現(xiàn)內(nèi)存的可用性,即將內(nèi)存虛擬化有效聚合到KVM模塊中。在最新的技術(shù)解決方案中,在KVM模塊中添加進(jìn)了一種多維應(yīng)答機(jī)制,首先記錄虛擬內(nèi)存首次請(qǐng)求訪問時(shí)間,記錄下來,并且反向追蹤兩個(gè)地理位置編碼及位置編碼,可以方便地將需要虛擬物理地址同實(shí)際物理地址進(jìn)行對(duì)調(diào),同時(shí)隱藏地址信息。
通過軟件編程及圖形化界面展示的用戶模擬器具有兩個(gè)最突出的優(yōu)點(diǎn):第一個(gè)優(yōu)點(diǎn)是在支持編譯和操作的編譯環(huán)境或者軟件平臺(tái)上可以實(shí)現(xiàn)在線虛擬化;第二個(gè)優(yōu)點(diǎn)是支持各種異構(gòu)系統(tǒng)模式。最新的用戶模擬器已經(jīng)實(shí)現(xiàn)了全硬件的技術(shù)支持,同時(shí)可以支持多終端的控制以及多模式自動(dòng)切換,增加了WINDOWS系統(tǒng)的支持。傳統(tǒng)的運(yùn)行模式需要用戶首先切換到系統(tǒng)默認(rèn)的仿真模式環(huán)境中,然后等待系統(tǒng)調(diào)用內(nèi)核完成后,依賴于Linux的指令實(shí)現(xiàn)進(jìn)程一步步運(yùn)行。一個(gè)更超前的的虛擬機(jī)設(shè)計(jì)計(jì)劃已經(jīng)被諸多云計(jì)算服務(wù)商嘗試于用戶模擬器中,第一階段的代碼實(shí)現(xiàn)了外設(shè)虛擬化的接入,同時(shí)完整地嵌入了全部CPU以及完整的內(nèi)存,這種先進(jìn)的設(shè)計(jì)逐步被眾多技術(shù)員與用戶所接受。隨著技術(shù)的改進(jìn)和代碼的優(yōu)化,更多基于KVM模塊的用戶模擬器優(yōu)化方案被提出來,例如在虛擬機(jī)運(yùn)行過程中時(shí),使用KVM模塊將用戶模擬器優(yōu)先調(diào)用到Linux內(nèi)核中,并將用戶模擬器置于相應(yīng)的運(yùn)行模式,而不是傳統(tǒng)的模式。每當(dāng)虛擬機(jī)處理輸入和輸出操作請(qǐng)求時(shí),由用戶模擬器決定是否需要調(diào)用KVM獲取上一次的接入信息調(diào)用并反饋給用戶模擬器。進(jìn)一步理解,用戶模擬器使用KVM模塊的目的是提供基于全硬件資源下的虛擬化加速,從而將虛擬機(jī)的處理效率和內(nèi)存占用控制在一個(gè)合理的閾值內(nèi)。換句話說,我們將在用戶模擬器的代碼寫入一個(gè)共享的設(shè)備文件中,同時(shí)加載入KVM模塊中的代碼文件,兩者的代碼可以互相調(diào)用并檢測(cè)運(yùn)行狀態(tài),這樣用戶模擬器可以根據(jù)設(shè)備文件的返回參數(shù)決定是否有必要更改當(dāng)前的環(huán)境設(shè)置或者直接停止并調(diào)用備用虛擬加速資源。綜合當(dāng)前主流技術(shù),KVM完全可以聚合任何選擇支持的模擬程序,但是實(shí)際運(yùn)行結(jié)果顯示目前最成熟的案例還是用戶模擬器與KVM的匹配模式。endprint
Libvirt是支持Linux環(huán)境下的免費(fèi)、開源的最主流的虛擬化工具的C函數(shù)庫,可以為不同類型的虛擬機(jī)監(jiān)視器比如Hyperbivisor虛擬監(jiān)視器分享一個(gè)統(tǒng)一的圖形化管理模式。 Libvirt不是Tools,而僅僅是為虛擬化技術(shù)服務(wù)提供管理工具的API庫。Libvirt除了支持監(jiān)視器服務(wù)外,最主要的任務(wù)是方便管理員管理虛擬機(jī)和虛擬機(jī)上運(yùn)行參數(shù)控制包括磁盤存儲(chǔ)空間的分配與管理,網(wǎng)絡(luò)狀態(tài)的控制,內(nèi)存占用控制和最關(guān)鍵的虛擬化遷移進(jìn)程保證等。
在線遷移包括3個(gè)階段:準(zhǔn)備階段,遷移階段和轉(zhuǎn)換階段,介紹了基于KVM虛擬化技術(shù)的在線遷移方案。同時(shí),研究如何通過UCloud底層KVM虛擬化技術(shù)優(yōu)化虛擬機(jī)的在線遷移[5-7]。其中,遷移環(huán)境為虛擬化的底層KVM + Qemu,虛擬化管理Libvirt,虛擬化網(wǎng)絡(luò)Openvstack。
4 結(jié)語
通過上述的在線遷移優(yōu)化步驟,可以在KVM虛擬化平臺(tái)中實(shí)現(xiàn)虛擬機(jī)跨越遷移,保證數(shù)據(jù)的兩端一致性,從而實(shí)現(xiàn)各種大型云平臺(tái)負(fù)載平衡和系統(tǒng)的實(shí)現(xiàn)運(yùn)行和維護(hù)保證虛擬機(jī)性能的穩(wěn)定性和可靠性。同時(shí),從用戶的角度來看,可以持續(xù)與虛擬機(jī)交互,整個(gè)遷移過程對(duì)用戶來說是透明的。目前的KVM虛擬化在線遷移可以適應(yīng)大多數(shù)用戶虛擬機(jī)遷移,避免繁瑣的步驟,并減少數(shù)據(jù)丟失的可能性。
[參考文獻(xiàn)]
[1]楊坤.基于Xen的虛擬機(jī)遷移的研究及應(yīng)用[D].蘭州:西北師范大學(xué),2013.
[2] 周揚(yáng),龔暢,徐平平.基于動(dòng)態(tài)目標(biāo)遺傳算法的云計(jì)算工作流調(diào)度方法[J].湘潭大學(xué)自然科學(xué)學(xué)報(bào),2017(1):123-126.
[3]張博.基于Xen的虛擬化在線遷移技術(shù)的研究與實(shí)現(xiàn)[D].沈陽:中國(guó)科學(xué)院研究生院(沈陽計(jì)算技術(shù)研究所),2016.
[4]張翔.虛擬機(jī)性能優(yōu)化和遷移關(guān)鍵技術(shù)研究[D].北京:中國(guó)科學(xué)院研究生院(中國(guó)科學(xué)院大學(xué)),2011.
[5]賀佰元.面向電信業(yè)務(wù)的Xen虛擬機(jī)遷移的研究及優(yōu)化[D].北京:北京郵電大學(xué),2013.
[6]沈曉茹.基于虛擬集群在線遷移的虛擬化資源整合算法研究[D].長(zhǎng)春:吉林大學(xué),2014.
[7]蔣本立.基于“微課”建設(shè)的移動(dòng)云平臺(tái)的設(shè)計(jì)[J].湘潭大學(xué)自然科學(xué)學(xué)報(bào),2016(1):120-122.endprint