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