虛擬化技術的明珠 VMotion實時遷移詳解
出處:pconline 2009年06月30日 作者:小蟻 責任編輯:heyaorong
虛擬化正在改變人們對計算機的認識,說起虛擬化,VMotion估計是給人印象深刻的諸多亮點中的一個。VMware公司一直在虛擬化技術中佔據領先的地位。因此VMware VMotion就好像站在了VMware這個巨人的肩膀上一樣,在實時遷移技術領域,立於高峯之巔。
VMware VMotion概述
VMware VMotion能夠在兩臺正在運行的服務器之間進行實時遷移,具有零停機性能,能夠大幅度提高了服務器的可用性,保證交易數據的完整性。VMotion是創建動態,自動優化數據中心的關鍵因素,對完善服務器虛擬化,存儲器虛擬化和網絡虛擬化等技術產生重大的影響。
VMware VMotion的遷移示意圖
VMware VMotion的功能
對於服務器管理員來說,VMotion允許管理員:1、在資源庫中不斷地自動分配虛擬機;2、在不中斷業務運作的情況下進行各項維修工作,從而令服務器獲得最高的可用性。
對於用戶來說,VMotion允許用戶:1、自動優化和分配資源庫,從而大大地提高了硬件的利用率,靈活性和可用性。2、進行定期的硬件設備維護操作,但卻不需要預先設定停機時間。3、在服務器發生故障或者表現不佳之前,進行遷移。
VMotion中運用的技術
VMotion從一臺物理服務器將虛擬機遷移到另外一臺虛擬機要用到下述三項技術:
1. 虛擬機的全部狀態信息被壓縮在一套存儲於共享存儲器的文件中。作爲載體的存儲器類型可以是光纖通道(Fibre Channel),iSCSI存儲區域網絡(iSCSI Storage Area Network,SAN)或者網絡附加存儲器(Network Attached Storage,NAS)。VMware的羣集虛擬機系統(VMFS)允許多臺ESX服務器同時訪問同一個虛擬機文件。
2. 虛擬機的動態內存和執行狀態在一個高速的網絡上進行快速傳輸,允許虛擬機即時地在源ESX服務器和目標ESX服務器之間進行信息交換。在遷移過程中,VMotion只是在點陣圖裏對信息交換進行監控,所以整個轉移過程對用戶來說是透明的。一旦整個內存和系統狀態全部複製到目標ESX服務器中,VMotion就會自動終止源虛擬機,同時將點陣圖轉移到目標ESX服務器中,並在目標ESX服務器中重新啓動虛擬機。上述整個操作假如是在一個千兆以太網絡中進行,那麼不用兩秒的時間就可以完成。
3. 虛擬機使用的網絡同樣也會被目標ESX服務器虛擬化,確保在實時遷移之後,虛擬機的網絡身份和連接能夠得到保留。VMotion將MAC地址作爲進程的一部分來進行管理。一旦目標機被激活,VMotion會檢查網絡路由器來確保它能識別虛擬機MAC地址新的物理位置。由於虛擬機使用VMotion來進行實時遷移,它的執行狀態,網絡身份和動態鏈接都能夠得到保護,所以對於用戶來說,整個遷移過程並沒有引起服務器停機或者網絡中斷。
VMware VMotion的關鍵特點
可靠性:自從2004年推出了該產品之後,在成千上萬的用戶的支持下,VMotion一直不斷地爲最可靠的實時遷移性能調整標準。
高可用性:最終用戶無法覺察到實時遷移所帶來的服務器的停機。CPU和網絡資源的最大利用確保了實時遷移迅速和有效地進行。
互操作性:無論虛擬機運行在什麼操作系統上,實時遷移都可以在任何類型的硬件設備和網絡上進行,只要VMware ESX服務器支持該設備和網絡。支持由管線通信連接的存儲區域網絡(SAN)。實行的實時遷移的虛擬機利用帶寬高達4GB的光纖通道連接的存儲區域網絡系統(SAN)。
支持網絡附屬存儲(NAS)和iSCSI的存儲區域網絡(SAN)。實行實時遷移的虛擬機花費更低的成本,使用更容易管理的存儲器。可自定義的CPU兼容性設置。確保虛擬機可以在不同版本的硬件設備上進行遷移,以便虛擬機可以永遠處於最新的CPU革新浪潮之中。
易操作:遷移向導。通過遷移向導提供的即時信息,可以爲一臺虛擬機快速辨別最好的轉移對象。
多個並行遷移。在整個IT工作環境中,進行多個並行遷移,來持續不斷的優化虛擬機的佈局。
優先等級。爲每一個實時遷移操作分配一個優先等級,確保當前最需要進行的遷移可以及時反問它們所需要的資源。
安排遷移任務。在每個預定好的時間點上,不需要管理員在場啓動,遷移就能夠自發進行。
遷移檢查追蹤。每次遷移都有一份詳細的操作報告,包括日期/時間和管理程序初始化遷移的回覆信息。
VMotion的具體操作
使用VMotion進行實時遷移允許虛擬機在不中斷工作進程的情況下進行。虛擬機的所有狀態信息連同它的配置文件都會被遷移到新的主機上。然而與之相連接的虛擬磁盤將會保留在兩主機共享的存儲器中。在虛擬機的狀態信息全部錢一到替換的主機上之後,虛擬機就可以在新的主機上運行了。
需要遷移的狀態信息包括當前的內存內容以及所有能夠定義和識別該虛擬機的信息。其中,內存信息包括交換數據,操作系統的位數以及存儲在內存中的應用程序。而虛擬機的定義和識別信息包括所有映射到虛擬機硬件上的數據,比如BIOS,設備,CPU, 網卡的MAC地址 ,芯片的設置狀態等。另外,作爲替換的主機還必須滿足兼容性要求。
使用VMotion來進行實時遷移一般要經歷下述三個步驟:
1. 當VMotion收到實時遷移的請求時,vCenter服務器就會檢查當前主機上的虛擬機是否處於穩定的狀態。
2. 假如VMotion通過了實時遷移請求,那麼虛擬機的所有狀態信息(包括內存,註冊表和網絡連接)就會被複制到目標主機上。
3. 信息複製完畢之後,虛擬機將在新的主機上重新啓動,投入運作。
VMware VMotion操作界面
如果在遷移過程中發生了錯誤,那麼虛擬機將會自動恢復到原來的狀態和位置。
VMware VMotion錯誤提示界面
vSphere 4中的VMotion
近日,VMware公佈了新一代服務器虛擬化軟件,其產品名稱由VMware Infrastructure 3改爲VMware vSphere 4,這表明了VMware對於服務器虛擬化已經從一個虛擬化的基礎平臺,走向一個由虛擬化建構起來的資料中心。VMotion在vSphere 4中也得到了很大的改進。最明顯的特點就是能夠將一臺正在運行的虛擬機從一臺物理ESX主機上遷移到一臺虛擬ESX主機上。
物理ESX主機和虛擬ESX主機之間的遷移
從ESX 3.5升級到vSphere 4的過程中,ESX 3.5的VMotion可以不需要做任何改變就也可適用於vSphere 4。但是,如果使用的是不同的處理器芯片,並且還需要開啓以太網虛連接(EVC),那麼就需要做一點小變動,而且EVC的連接可能還會有停機的危險。另外,vSphere 4的VMotion卻無法兼容ESX 3.5版本的主機。
Storage VMotion
Storage VMotion功能只存在於ESX 3.5和vCenter 2.5以及以上版本。是ESX系列的一個重要的改進。很到人可能會以爲Storage VMotion是VMotion中的一項功能,事實上並非如此,兩者其實是並行的。VMotion針對的是服務器中虛擬機的遷移,而Storage VMotion針對的是虛擬機中存儲信息的遷移,主要是移動虛擬機的個人主目錄,配置文件(vmx),日誌,交換文件(VSWP),快照,磁盤或者邏輯硬盤(vmdk),操作系統磁盤,數據盤以及所有跟該虛擬機相關的文件。
Storage VMotion操作示意圖
Storage VMotion的性能要求
Storage VMotion的性能要求要比VMotion嚴格得多:
安裝帶有VMware VMotion 許可證的VMware vCenter;VMware VMotion在ESX服務器上必須被激活並且進行了適當的配置(可以參考VMware管理員基礎指南)。
1. 虛擬機不能使用任何VMotion禁用的設備(比如軟盤,CD-ROM)。
2. Storage VMotion並不要求一定要連接上物理網絡。
ESX服務器必須擁有足夠的資源來完成Storage Vmotion的完整操作。
虛擬機的磁盤必須通過快找技術創建一個子磁盤,用來將原有磁盤的數據複製到新的節點上。如果沒有這項功能,Storage VMotion將無法正常工作。
ESX服務器必須能夠訪問員服務器和目標服務器的存儲器。
Storage VMotion一次最多可以在同一個數據存儲器中同時執行四個遷移操作。
只支持光纖通道和iSCSI存儲序列。
虛擬機要求Storage VMotion不能與內部虛擬交換機的網絡相連接。
虛擬機要求Storage VMotion不能跟其他虛擬機有羣級關係,特別是使用微軟羣集服務器或者Sun羣集器的時候。
在同一臺虛擬機上不允許同時使用Storage VMotion和VMotion。一臺虛擬機的數據存儲中心必須先使用Storage VMotion搬移到目標服務器的存儲器中。然後虛擬機纔可以使用VMotion遷移到目標ESX服務器上。兩者的遷移順序並沒有限制。
Storage VMotion的操作步驟
1. 複製虛擬機的個人主目錄到新的節點。這個步驟使用近距離無線通信技術(NFC)複製器來將文件複製的到新的節點上。
虛擬機主目錄拷貝
2. 自我遷移(Self-VMotion)到新的虛擬機主目錄上。Self-VMotion的進程跟正常的VMotion是一樣的。這一步使用新的轉換文件,並重新打開其他複製文件,比如虛擬機配置文件以及其他類似的文件。
自我遷移
3. 對磁盤進行快照處理。這一步驟創建了一個子磁盤,用來記錄所有虛擬機數據上的變化。
子磁盤的創建
4. 複製虛擬機磁盤到目標服務器。
虛擬機磁盤的拷貝
5. 將步驟四創建的子磁盤整合進拷貝磁盤中。
子磁盤的結合
6. 刪除原來虛擬機的主目錄和磁盤,並將新的拷貝磁盤的狀態設置爲可讀。
移除源虛擬機
vSphere 4中的Storage VMotion
在vSphere 4中可以使用圖形用戶界面(GUI)來運行Storage VMotion。整個操作過程因爲可視化的操作界面而變得非常簡單。Storage VMotion的所有功能都集成在vCenter中,不需要任何外部插件。
Storage VMotion操作界面
在第一個界面中選擇修改數據存儲(Change datastore)。值得注意的是,選項一是用於虛擬機之間的VMotion,選項三只能在虛擬機的電源被斷開之後纔可用。
Storage VMotion操作界面
選擇合適的數據存儲中心來遷移你的信息,並且點擊繼續。
Storage VMotion操作界面
確認前已成功之後,就選擇你所需要的選項。第一個選項是用來保留虛擬機之前的配置。第二個選項是進入thin provisioned模式。點擊下一步(next),開始進行Storage VMotion操作。對於管理員來說,這個功能可以大大地簡化Storage VMotion的進程。
虛擬機遷移技術漫談,第 1 部分
如何在虛擬機和物理機以及虛擬機和虛擬機之間的遷移系統
簡介: 虛擬機遷移技術爲服務器虛擬化提供了便捷的方法。目前流行的虛擬化工具如 VMware,Xen,HyperV,KVM 都提供了各自的遷移組件。儘管商業的虛擬軟件功能比較強大,但是開源虛擬機如 Linux 內核虛擬機 KVM 和 XEN 發展迅速,遷移技術日趨完善。本系列文章介紹了虛擬機遷移的三種方式 P2V、V2V 和 V2P,及他們在內核虛擬機 KVM 上的實現方法,分成五個部分。本文是第一部分,全面介紹了虛擬機遷移的各種方法和相應的遷移工具 , 並且着重分析了 Linux 平臺上開源的虛擬化工具 KVM 和 XEN 實時遷移中的的內存預拷貝技術。
本文的標籤: 虛擬技術
系統的遷移是指把源主機上的操作系統和應用程序移動到目的主機,並且能夠在目的主機上正常運行。在沒有虛擬機的時代,物理機之間的遷移依靠的是系統備份和恢復技術。在源主機上實時備份操作系統和應用程序的狀態,然後把存儲介質連接到目標主機上,最後在目標主機上恢復系統。隨着虛擬機技術的發展,系統的遷移更加靈活和多樣化。
本系列文章全面介紹了虛擬機遷移的三種方式 P2V、V2V 和 V2P,及他們在內核虛擬機 KVM 上的實現方法,分成五個部分。第一部分,介紹虛擬機遷移的各種方法和相應的遷移工具,並且着重分析 Linux 平臺上開源的虛擬化工具 KVM 和 XEN 實時遷移中的的內存預拷貝技術;
第二部分介紹 KVM 虛擬機之間的 V2V 遷移技術,包括離線遷移和在線遷移;第三部分介紹基於 VMware 或 XEN 的虛擬機如何遷移到基於 KVM 的虛擬機;第四部分介紹物理機到虛擬機遷移 P2V 和虛擬機到物理機遷移 V2P 在 KVM 虛擬機上的實現;第五部分介紹和虛擬機遷移密切相關的虛擬機克隆、快照和備份技術。
遷移服務器可以爲用戶節省管理資金、維護費用和升級費用。以前的 x86 服務器,體積比較“龐大”;而現在的服務器,體積已經比以前小了許多,遷移技術使得用戶可以用一臺服務器來同時替代以前的許多臺服務器,這樣就節省了用戶大量的機房空間。另外,虛擬機中的服務器有着統一的“虛擬硬件資源”,不像以前的服務器有着許多不同的硬件資源(如主板芯片組不同,網卡不同,硬盤,RAID 卡,顯卡不同)。遷移後的服務器,不僅可以在一個統一的界面中進行管理,而且通過某些虛擬機軟件,如 VMware 提供的高可用性工具,在這些服務器因爲各種故障停機時,可以自動切換到網絡中另外相同的虛擬服務器中,從而達到不中斷業務的目的。總之,遷移的優勢在於簡化系統維護管理, 提高系統負載均衡,增強系統錯誤容忍度和優化系統電源管理。
一個優秀的遷移工具,目標是最小化整體遷移的時間和停機時間,並且將遷移對於被遷移主機上運行服務的性能造成的影響降至最低。當然,這幾個因素互相影響,實施者需要根據遷移針對的應用的需求在其中進行衡量,選用合適的工具軟件。虛擬機遷移的性能指標包括以下三個方面:
- 整體遷移時間:從源主機開始遷移到遷移結束的時間
- 停機時間:遷移過程中,源主機、目的主機同時不可用的時間
- 對應用程序的性能影響:遷移對於被遷移主機上運行服務性能的的影響程度。
物理機到虛擬機的遷移(Physical-to-Virtual)
P2V 指遷移物理服務器上的操作系統及其上的應用軟件和數據到 VMM(Virtual Machine Monitor)管理的虛擬服務器中。這種遷移方式,主要是使用各種工具軟件,把物理服務器上的系統狀態和數據“鏡像”到 VMM 提供的虛擬機中,並且在虛擬機中“替換”物理服務器的存儲硬件與網卡驅動程序。只要在虛擬服務器中安裝好相應的驅動程序並且設置與原來服務器相同的地址(如 TCP/IP 地址等),在重啓虛擬機服務器後,虛擬服務器即可以替代物理服務器進行工作。
P2V 遷移方法
- 手動遷移:手動完成所有遷移操作,需要對物理機系統和虛擬機環境非常瞭解。
-
-
- 關閉原有的物理機上的服務和操作系統,並且從其他媒質上啓動一個新的系統。比如從 LiveCD 上啓動一個新的光盤系統。大部分的發行版都會帶有 LiveCD。
- 把物理機系統的磁盤做成虛擬機鏡像文件,如有多個磁盤則需要做多個鏡像,並且拷貝鏡像到虛擬主機上。
- 爲虛擬機創建虛擬設備,加載鏡像文件
- 啓動虛擬機,調整系統設置,並開啓服務。
-
- 半自動遷移:利用專業工具輔助 P2V 的遷移,把某些手動環節進行自動化。比如將物理機的磁盤數據轉換成虛擬機格式,這一向是相當耗時的工作,你可以選擇專業的工具來完成這個步驟。這裏有大量的工具可以使用,如 RedHat 的開源工具 virt-p2v,Microsoft Virtual Server Migration Toolkit 等。
- P2V 熱遷移:遷移中避免宕機 。大部分 P2V 工具也有一個很大的限制:在整個遷移過程中,物理機不可用。在運行關鍵任務的環境或有 SLA(服務水平協議)的地方,這種工具不可選。幸運的是隨着 P2V 技術的發展,VMware vCenter Converter 和 Microsoft Hyper-V 已經能夠提供熱遷移功能,避免宕機。目前,P2V 熱遷移僅在 Windows 物理服務器可用,未來將添加對 Linux 的支持。
虛擬機到虛擬機的遷移(Virtual-to-Virtual)
V2V 遷移是在虛擬機之間移動操作系統和數據,照顧主機級別的差異和處理不同的虛擬硬件。虛擬機從一個物理機上的 VMM 遷移到另一個物理機的 VMM,這兩個 VMM 的類型可以相同,也可以不同。如 VMware 遷移到 KVM, KVM 遷移到 KVM。可以通過多種方式將虛擬機從一個 VM Host 系統移動到另一個 VM Host 系統。
V2V 離線遷移
離線遷移(offline migration):也叫做常規遷移、靜態遷移。在遷移之前將虛擬機暫停,如果共享存儲,則只拷貝系統狀態至目的主機,最後在目的主機重建虛擬機狀態,恢復執行。如果使用本地存儲,則需要同時拷貝虛擬機鏡像和狀態到目的主機。到這種方式的遷移過程需要顯示的停止虛擬機的運行。從用戶角度看,有明確的一段服務不可用的時間。這種遷移方式簡單易行,適用於對服務可用性要求不嚴格的場合。
V2V 在線遷移
在線遷移(online migration):又稱爲實時遷移 (live migration)。是指在保證虛擬機上服務正常運行的同時,虛擬機在不同的物理主機之間進行遷移,其邏輯步驟與離線遷移幾乎完全一致。不同的是,爲了保證遷移過程中虛擬機服務的可用,遷移過程僅有非常短暫的停機時間。遷移的前面階段,服務在源主機運行,當遷移進行到一定階段,目的主機已經具備了運行系統的必須資源,經過一個非常短暫的切換,源主機將控制權轉移到目的主機,服務在目的主機上繼續運行。對於服務本身而言,由於切換的時間非常短暫,用戶感覺不到服務的中斷,因而遷移過程對用戶是透明的。在線遷移適用於對服務可用性要求很高的場景。
目前主流的在線遷移工具,如 VMware 的 VMotion,XEN 的 xenMotion,都要求物理機之間採用 SAN(storage area network), NAS(network-attached storage)之類的集中式共享外存設備,因而在遷移時只需要考慮操作系統內存執行狀態的遷移,從而獲得較好的遷移性能。
另外,在某些沒有使用共享存儲的場合,可以使用存儲塊在線遷移技術來實現 V2V 的虛擬機在線遷移。相比較基於共享存儲的在線遷移,數據塊在線遷移的需要同時遷移虛擬機磁盤鏡像和系統內存狀態,遷移性能上打了折扣。但是他使得在採用分散式本地存儲的環境下,仍然能夠利用遷移技術轉移計算機環境,並且保證遷移過程中操作系統服務的可用性,擴展了虛擬機在線遷移的應用範圍。V2V 在線遷移技術消除了軟硬件相關性,是進行軟硬件系統升級,維護等管理操作的有力工具。
V2V 內存遷移技術
對於 VM 的內存狀態的遷移,XEN 和 KVM 都採用了主流的的預拷貝(pre-copy)的策略。遷移開始之後,源主機 VM 仍在運行,目的主機 VM 尚未啓動。遷移通過一個循環,將源主機 VM 的內存數據發送至目的主機 VM。循環第一輪發送所有內存頁數據,接下來的每一輪循環發送上一輪預拷貝過程中被 VM 寫過的髒頁內存 dirty pages。直到時機成熟,預拷貝循環結束,進入停機拷貝階段,源主機被掛起,不再有內存更新。最後一輪循環中的髒頁被傳輸至目的主機 VM。預拷貝機制極大的減少了停機拷貝階段需要傳輸的內存數據量,從而將停機時間大大縮小。
然而,對於更新速度非常快的內存部分,每次循環過程都會變髒,需要重複 pre-copy,同時也導致循環次數非常多,遷移的時間變長。針對這種情況,KVM 虛擬機建立了三個原則:集中原則,一個循環內的 dirty pages 小於等於 50;不擴散原則, 一個循環內傳輸的 dirty pages 少於新產生的;有限循環原則,循環次數必須少於 30。在實現上,就是採取了以下措施:
- 有限循環:循環次數和效果受到控制,對每輪 pre-copy 的效果進行計算,若 pre-copy 對於減少不一致內存數量的效果不顯著,或者循環次數超過了上限,循環將中止,進入停機拷貝階段。
- 在被遷移 VM 的內核設置一個內存訪問的監控模塊。在內存 pre-copy 過程中,VM 的一個進程在一個被調度運行的期間,被限制最多執行 40 次內存寫操作。這個措施直接限制了 pre-copy 過程中內存變髒的速度,其代價是對 VM 上的進程運行進行了一定的限制。
KVM 的預拷貝在線遷移過程詳解:
- 系統驗證目標服務器的存儲器和網絡設置是否正確,並預保留目標服務器虛擬機的資源。
圖 1. 源服務器和目標服務器簡圖
- 當虛擬機還在源服務器上運轉時,第一個循環內將全部內存鏡像複製到目標服務器上。在這個過程中,KVM 依然會監視內存的任何變化。
圖 2. 內存鏡像複製示意圖
- 以後的循環中,檢查上一個循環中內存是否發生了變化。 假如發生了變化,那麼 VMM 會將發生變化的內存頁即 dirty pages 重新複製到目標服務器中,並覆蓋掉先前的內存頁。在這個階段,VMM 依然會繼續監視內存的變化情況。
圖 3. 進行有變化的內存複製
- VMM 會持續這樣的內存複製循環。隨着循環次數的增加,所需要複製的 dirty pages 就會明顯減少,而複製所耗費的時間就會逐漸變短,那麼內存就有可能沒有足夠的時間發生變化。最後,當源服務器與目標服務器之間的差異達到一定標準時,內存複製操作纔會結束,同時暫停源系統。
圖 4. 所需複製的數據在減少
- 在源系統和目標系統都停機的情況下,將最後一個循環的 dirty-pages 和源系統設備的工作狀態複製到目標服務器。
圖 5. 狀態信息的複製
- 然後,將存儲從源系統上解鎖,並鎖定在目標系統上。啓動目標服務器,並與存儲資源和網絡資源相連接。
圖 6. 停止源服務器,啓動目標服務器
Virtual-to-Physical 虛擬機到物理機的遷移
V2P 指把一個操作系統、應用程序和數據從一個虛擬機中遷移到物理機的主硬盤上,是 P2V 的逆操作。它可以同時遷移虛擬機系統到一臺或多臺物理機上。儘管虛擬化的基本需求是整合物理機到虛擬機中,但這並不是虛擬化的唯一的應用。比如有時虛擬機上的應用程序的問題需要在物理機上驗證,以排除虛擬環境帶來的影響。另外,配置新的工作站是件令 IT 管理者頭痛的事情,但虛擬化的應用可以幫助他解決這個難題。先配置好虛擬機,然後運用硬盤克隆工具複製數據至工作站硬件,比如賽門鐵克的 Save & Restore (Ghost)。不過這種克隆方法有兩個侷限:一個鏡像只能運用在同種硬件配置的機器上;要想保存配置的修改,只能重做新的鏡像。
V2P 的遷移可以通過確定目標的物理環境來手動完成,如把一個特定的硬盤加載到虛擬系統中,然後在虛擬環境中安裝操作系統、應用程序和數據,最後手動修改系統配置和驅動程序。這是一個乏味且不確定的過程,特別是在新的環境比舊的環境包含更多大量不同的硬件的情況下。爲了簡化操作,我們可以利用專門的遷移工具以自動的方式來完成部分或全部遷移工作。目前支持 V2P 轉換的工具有 PlateSpin Migrate 和 EMC HomeBase。使用這樣的工具使得 V2P 轉換過程更簡易,並且比使用第三方磁盤鏡像工具更快捷。
V2P 遷移方法
V2P 的不確定性導致自動化工具不多,目前主要有以下幾種解決方案:
- VMware 官方推薦的是使用 Ghost+sysprep 來實現半自動化的遷移。
- 基於備份和恢復操作系統的解決方案。這個方案利用了現成的系統備份恢復工具,沒有體現虛擬機和物理機的差別,類似於 P2P(Physical-to-Physical 物理機到物理機遷移)。注意備份工具能夠恢復系統到異構硬件平臺上。
- 開源工具的解決方案。適合 Linux/Unix 系統,使用開源工具和腳本,手動遷移系統。這個方案難度較大,適合有經驗的管理員。
通常我們期望虛擬機的遷移能夠全部自動化或者部分自動化完成,但實際上 Linux 系統在 P2V 和 V2V 的遷移中可能遇到一些困難。本節列舉了 Linux 遷移中需要注意的地方。
-
- 磁盤分區名被硬編碼。當我們做磁盤虛擬化時,可能會使用不同類型的虛擬磁盤設備,這將會導致磁盤名字的變化。比如 Xen 虛擬機中的半虛擬化設備使用 /dev/xvda 而標準的 Linux 半虛擬化設備使用 /dev/vda。準備遷移的 Linux 系統中存在對 /dev/hd* 和 /dev/sd* 磁盤分區名分散的關聯,比如在 /etc/fstab 文件,啓動初始化文件系統 ramfs 和一些解析磁盤設備的開機啓動腳本文件中。V2V 遷移工具需要在整個磁盤上查找並修改這些關聯。有一個簡單的方法來避免這種情況: Linux 系統上主流的文件系統和交換分區類型可以使用 Lables 或 UUID 作爲分區名。遷移時這些信息是被重點保護的,系統應該小心使用這些信息,一定不要使用設備作爲分區名。另外,LVM 分區名和設備無關,在遷移中也不受影響。
- 網絡硬件設備的改變。當系統遷移時,網絡設備很可能產生變化。比如虛擬網絡設備和物理網絡設備的轉化或者不同類型的網絡設備之間的轉變。但是是他們的 MAC 地址沒有變化。MAC 地址是 IEEE 分配給物理設備製造商的,兩個物理設備不會有相同的 MAC 地址;然而虛擬網絡設備可能出現這種情況。所以在做虛擬機遷移時,你必須記錄每一個網絡設備的 MAC 地址,保證 MAC 地址和網絡設備的對應關係。
- 內核不支持某些虛擬設備。某些 Linux 發行版沒有 virtio 虛擬設備的驅動,可能是因爲 Linux 發行版早於虛擬設備發佈了;或者虛擬設備的驅動是閉源的;或者是在系統編譯時去掉了。因此,有時我們另外需要一個完全不同的內核(比如 Xen 早期的版本就是這樣的)。無論如何,在客戶機上安裝一個新的內核並且使之可以啓動是一個很大的冒險,最好避免這樣做。
- Xwindow 需要重新配置。與磁盤、網絡設備一樣,系統遷移後顯示設備也會變化。理想的情況是 Xwindow 會自動處理這個的變化,探測所有的顯示設備並且使用它發現的第一個設備。但是這不意味着所有的 Linux 發行版都會以這種方式工作。
- 網絡環境的變化。靜態 IP 地址和靜態 DNS 解析在虛擬機遷移中
是
一個麻煩的事情。儘管不是必須的,但是最好配置系統從 DHCP 服務器自動獲得所有的網絡配置信息。 - CPU 的擴展指令集發生變化。遷移後的系統中,新的虛擬 CPU 或主板和舊的會有一些不同。CPU 的擴展指令集如 SSE,Vectors, NX 可能被加入或去掉。CPU 的型號和製造商信息可能被改變。因此,如果你想要優化虛擬系統上的軟件,這可能是浪費時間並且導致系統崩潰。最好是使用通用的軟件,讓程序在每次啓動的時候檢查運行環境和是否需要優化。實際上,實時遷移的狀況比這個還要複雜,因爲處理器可能在程序的運行的過程中被改變。目前爲止還沒有一個方案能很好的解決這個問題。
如你所見,P2V 和 V2V 最大的問題在於硬件的改變。Linux 發行版本身應該可以處理所有的硬件變化:在系統啓動的時候去檢查所有的硬件,操作系統內核識別新的設備並尋找新的驅動處理它們 ,所有應用軟件都不要和硬件綁定,設計一個很好的模式來應對突然的環境變化。
虛擬機所呈現出來的虛擬硬件通常與原始服務器上的物理硬件不同。P2V 遷移工具是這樣解決這個問題的:
- VMware vCenter Converter:支持從諸如物理機、VMware 和 Microsoft 虛擬機格式以及某些第三方磁盤映像格式的源進行轉換。他替代了舊的遷移工具 VMware Workstation Importer 和 VMware P2V Assistant。VMware vCenter Converter 可以支持和識別大多數服務器硬件類型。VMware vCenter Converter 提供以下兩種克隆機制:熱克隆(實時遷移)和冷克隆(使用 BootCD 的克隆)。使用熱克隆時,VMware vCenter Converter 直接與源物理機上運行的操作系統通信,因此沒有直接的硬件級別依賴性;使用冷克隆時,VMware vCenter Converter BootCD 提供一個可支持最新硬件的 Windows PE 引導環境,因此可以識別大多數物理服務器系統硬件。目前只支持基於 Microsoft Windows 的物理機遷移。
- XenConvert:是 XenServer 物理機到虛擬機的遷移工具。不僅可以遷移 Window 物理機到 XenServer 管理的虛擬機,而且可以導入 VMware 虛擬機 VMDK 格式和 OVF 包。
- Virtual Machine Manager 2008: 提供基於任務的嚮導,將自動執行大部分轉換過程,以此來簡化 P2V 轉換。由於可通過編寫腳本來完成 P2V 轉換過程,因此可以通過 Windows PowerShell 命令行進行大規模的 P2V 轉換。VMM2008 同時支持聯機轉換和脫機轉換。
- Symantec Ghost:製作鏡像文件和把鏡像文件恢復到虛擬機。用來把需要遷移的服務器的硬盤通過網絡做成鏡像文件,然後通過網絡把鏡像文件恢復到虛擬機。
- Virt-p2v:RedHat 的開源遷移工具。
支持 V2V 遷移是虛擬機的管理工具的重要功能,所以各種虛擬化軟件都提供了實現 V2V 遷移的模塊或工具。V2V 在線遷移大大的減少了虛擬機的遷移的停機時間。這使動態遷移成了用戶在需要不間斷工作時遷移虛擬機的首選。通常的在線遷移方案,是虛擬機使用共享存儲,遷移時只拷貝虛擬機的內存。原理參見前面的小節“V2V 內存遷移技術”。
VMware VMotion
VMware 的在線遷移是由 VMotion 這個組件實現的 。Vmotion 的實時解決方案的特點是有其自己的 Cluster File System: VMFS,此外也支持 NFS。Vmotion 把整個虛擬機包括其完整狀態封裝在幾個文件中,存放在 SAN/NAS 等共享存儲中。遷移的過程是把內存和運行狀態通過高速網從源複製到目標。
Citrix XenMotion
XenMotion 是 XenServer 的一項功能,能夠將正在運行的虛擬機從一臺 XenServer 主機上遷移到另外一臺,而不帶有停機的危險。這就意味着在整個遷移過程中,被移動的虛擬機在任意時刻都可以訪問。XenMotion 的主要目的是在某臺服務器進行計劃維修時,使終端用戶覺察不到應用程序出現過極短暫的中斷,令整個服務過程正常順暢。
Microsoft Hyper-V
微軟的 Hyper-V 從 2.0 開始支持了動態遷移技術。利用 Hyper-V 動態遷移,在不中斷任何服務或者不允許停機的前提下,將一個運行中的虛擬機從一個 Hyper-V 物理主機移動到另外一個上面,通過預複製遷移的虛擬機中的內存到目的主機。管理員或者腳本在啓動動態遷移的時候控制選擇此次遷移的目標計算機,客戶使用被遷移系統時是不會感覺到遷移在進行的。
QEMU-KVM/Libvirt
內核虛擬機 KVM 技術的原創公司 Qumranet 在 2008 年被 RedHat 收購以後,得到了全面快速的發展。在 2009 年發佈的 Redhat Enterprise Linux 5.4 全面支持了 KVM 虛擬機,其中已經包含了離線遷移和在線遷移的技術。2010 年發佈的 Redhat Enterprise Linux 5.5 和 Suse Linux Enterprise Server 11 Service Pack 1 中集成了圖形化的 KVM 虛擬機管理工具 virt-manager,使虛擬機的遷移更加直觀和方面。在本系列文章的下一篇中將詳細介紹如何遷移 KVM 虛擬機。
目前許多企業都已將包括 CPU、內存、I/O、存儲、網絡在內的數據中心設備進行了虛擬化,如何更好管理和利用這些虛擬的和物理的資源,已經成爲數據中心異構虛擬化時期急需解決的問題。P2V 遷移工具使物理資源虛擬化、數據中心轉移更加簡單;V2V 遷移工具使虛擬資源達到最優化配置;而 V2P 遷移工具可以快速部署虛擬機到物理機。在不遠的將來,P2V/V2P/V2V 工具都會失去原有的意義,所有功能的實現都集成到一個智能化、自動化、自治化數據中心的優化系統中去。 高度自動化的監測模塊將 24 小時掃描整個數據中心,尋找過載和閒賦的虛擬機;規劃模塊根據監測報告和收集的信息選擇最好的遷移工具進行資源優化,遷移過程將在應用程序正常運行的狀況下自動執行。那時,整個環境就像液體一樣可以自由流動,負載不停地在各服務器上保持着均衡,虛擬環境與物理環境對用戶將再無差別。
雲計算就是以服務的形式提供計算資源。雲計算背後最重要的概念之一就是可伸縮性,而實現它的關鍵則是虛擬化。虛擬化在一臺共享計算機上聚集多個操作系統和應用程序,以便更好地利用服務器。虛擬化還允許在線遷移,因此,當一個服務器超載時,可以將其中一個操作系統以及它的應用程序遷移到一個新的、不繁忙的服務器上。在雲中,可以在多個操作系統和應用程序之間共享虛擬化服務器,從而減少服務器的數量。更少的服務器意味着需要更少的空間(減少數據中心佔用的空間)和更少用於製冷的電力(減少碳污染)。 IBM 認爲,虛擬化是未來雲計算架構的關鍵組成模塊,而衡量一家 IT 企業的“雲”能力的關鍵也正是其虛擬化實施能力。虛擬化技術正在普及,也許不用太久,我們每天都會與虛擬機打交道。
本文介紹了虛擬機遷移的各種方法及工具,分析了內存預拷貝技術的原理,還列舉了虛擬機遷移中應該注意的問題。不僅對於系統管理員全面瞭解遷移方法和策略,進行虛擬機遷移規劃有參考意義;而且對於虛擬機的開發和測試人員也有指導意義。本系列後面的文章中,將具體介紹在 KVM 虛擬機上,如何操作和實現系統遷移。
KVM 虛擬機在物理主機之間遷移的實現
如何從一臺物理主機上遷移 KVM 虛擬機到另一臺物理主機
簡介: 虛擬機的遷移使資源配置更加靈活,尤其是在線遷移技術,提高了虛擬服務器的可用性和可靠性。本文是虛擬機遷移技術漫談系列的第二部分,詳細介紹 KVM 虛擬機在物理主機之間的靜態遷移和在線遷移特性,而且包括基於數據塊的在線遷移實現。
本文的標籤: kvm虛擬機遷移, linux_virtualization
虛擬機的遷移技術爲服務器的虛擬化提供簡便的方法。目前流行的虛擬化產品 VMware,Xen,Hyper-V,KVM 都提供各自的遷移工具。其中 Linux 平臺上開源的虛擬化工具 KVM 發展迅速,基於 KVM 的虛擬機的遷移特性也日趨完善。本文全面介紹 KVM 虛擬機在不同的應用環境下的靜態遷移(離線遷移)和動態遷移(在線遷移),並且在最新發布的 Suse Linux Enterprise Edition 11 SP1 上分別演示如何應用 libvirt/virt-manager 圖形化工具和基於命令行的 qemu-kvm 工具進行遷移操作。
V2V 虛擬機的遷移是指在 VMM(Virtual Machine Monitor)上運行的虛擬機系統,能夠被轉移到其他物理主機上的 VMM 上運行。VMM 對硬件資源進行抽象和隔離,屏蔽了底層硬件細節。而遷移技術的出現,使得操作系統能在不同的主機之間動態的轉移,進一步解除軟,硬件資源之間的相關性。本系列的第一篇文章“虛擬機遷移技術漫談”中,介紹了 V2V 遷移的三種方式,本文將更加詳細的說明三種方式的不同和實現方法。
靜態遷移
靜態遷移:也叫做常規遷移、離線遷移(Offline Migration)。就是在虛擬機關機或暫停的情況下從一臺物理機遷移到另一臺物理機。因爲虛擬機的文件系統建立在虛擬機鏡像上面,所以在虛擬機關機的情況下,只需要簡單的遷移虛擬機鏡像和相應的配置文件到另外一臺物理主機上;如果需要保存虛擬機遷移之前的狀態,在遷移之前將虛擬機暫停,然後拷
貝狀態至目的主機,最後在目的主機重建虛擬機狀態,恢復執行。這種方式的遷移過程需要顯式的停止虛擬機的運行。從用戶角度看,有明確的一段停機時間,虛擬機上的服務不可用。這種遷移方式簡單易行,適用於對服務可用性要求不嚴格的場合。
共享存儲的動態遷移
動態遷移(Live Migration):也叫在線遷移(Online Migration)。就是在保證虛擬機上服務正常運行的同時,將一個虛擬機系統從一個物理主機移動到另一個物理主機的過程。該過程不會對最終用戶造成明顯的影響,從而使得管理員能夠在不影響用戶正常使用的情況下,對物理服務器進行離線維修或者升級。與靜態遷移不同的是,爲了保證遷移過程中虛擬機服務的可用,遷移過程僅有非常短暫的停機時間。遷移的前面階段,服務在源主機的虛擬機上運行,當遷移進行到一定階段,目的主機已經具備了運行虛擬機系統的必須資源,經過一個非常短暫的切換,源主機將控制權轉移到目的主機,虛擬機系統在目的主機上繼續運行。對於虛擬機服務本身而言,由於切換的時間非常短暫,用戶感覺不到服務的中斷,因而遷移過程對用戶是透明的。動態遷移適用於對虛擬機服務可用性要求很高的場合。
目前主流的動態遷移工具,VMware 的 VMotion,Citrix 的 XenMotion,他們都依賴於物理機之間採用 SAN(storage area network)或 NAS(network-attached storage)之類的集中式共享外存設備,因而在遷移時只需要進行虛擬機系統內存執行狀態的遷移,從而獲得較好的遷移性能。
圖 1. 共享存儲的動態遷移示意圖
如圖 1 中所示的動態遷移,爲了縮短遷移時間和服務中斷時間,源主機和目的主機共享了 SAN 存儲。這樣,動態遷移只需要考慮虛擬機系統內存執行狀態的遷移,從而獲得較好的性能。
本地存儲的動態遷移
動態遷移基於共享存儲設備,爲的是加速遷移的過程,儘量減少宕機時間。但是在某些情況下需要進行基於本地存儲的虛擬機的動態遷移,這就需要存儲塊動態遷移技術,簡稱塊遷移。
- 比如某些服務器沒有使用 SAN 存儲,而且遷移的頻率很小,虛擬機上的服務對遷移時間的要求不嚴格,則可以使用存儲塊動態遷移技術;另一方面,SAN 存儲的價格比較高,儘管 SAN 存儲能夠提高遷移性能和系統的穩定性,對於中小企業僅僅爲了加快遷移速度而配置昂貴的 SAN 存儲,性價比不高。
- 在集中式共享外部存儲的環境下,基於共享存儲的動態遷移技術無疑能夠工作得很好。但是,考慮到目前一些計算機集羣並沒有採用共享式外存,而是各自獨立擁有本地外存的物理主機構成。基於共享存儲的遷移技術在這種場合下受到限制,虛擬機遷移到目的主機後,不能訪問其原有的外存設備,或者需要源主機爲其外存訪問提供支持。
爲了拓寬動態遷移技術的應用範圍,有必要實現一個包括虛擬機外存遷移在內的全系統動態遷移方案。使得在採用分散式本地存儲的計算機集羣環境下,仍然能夠利用遷移技術轉移虛擬機環境,並且保證遷移過程中虛擬機系統服務的可用性。
圖 2. 本地存儲的動態遷移示意圖
相比較基於共享存儲的動態遷移,數據塊動態遷移的需要同時遷移虛擬機磁盤鏡像和虛擬機系統內存狀態,延長了遷移時間,在遷移性能上打了折扣。
準確來說,KVM 僅僅是 Linux 內核的一個模塊。管理和創建完整的 KVM 虛擬機,需要更多的輔助工具。
- QEMU-KVM:在 Linux 系統中,首先我們可以用 modprobe 系統工具去加載 KVM 模塊,如果用 RPM 安裝 KVM 軟件包,系統會在啓動時自動加載模塊。加載了模塊後,才能進一步通過其他工具創建虛擬機。但僅有 KVM 模塊是遠遠不夠的,因爲用戶無法直接控制內核模塊去做事情,還必須有一個用戶空間的工具。關於用戶空間的工具,KVM 的開發者選擇了已經成型的開源虛擬化軟件 QEMU。QEMU 是一個強大的虛擬化軟件,它可以虛擬不同的 CPU 構架。比如說在 x86 的 CPU 上虛擬一個 Power 的 CPU,並利用它編譯出可運行在 Power 上的程序。KVM 使用了 QEMU 的基於 x86 的部分,並稍加改造,形成可控制 KVM 內核模塊的用戶空間工具 QEMU-KVM。所以 Linux 發行版中分爲 kernel 部分的 KVM 內核模塊和 QEMU-KVM 工具。這就是 KVM 和 QEMU 的關係。
- Libvirt、virsh、virt-manager:儘管 QEMU-KVM 工具可以創建和管理 KVM 虛擬機,RedHat 爲 KVM 開發了更多的輔助工具,比如 libvirt、libguestfs 等。原因是 QEMU 工具效率不高,不易於使用。Libvirt 是一套提供了多種語言接口的 API,爲各種虛擬化工具提供一套方便、可靠的編程接口,不僅支持 KVM,而且支持 Xen 等其他虛擬機。使用 libvirt,你只需要通過 libvirt 提供的函數連接到 KVM 或 Xen 宿主機,便可以用同樣的命令控制不同的虛擬機了。Libvirt 不僅提供了 API,還自帶一套基於文本的管理虛擬機的命令—— virsh,你可以通過使用 virsh 命令來使用 libvirt 的全部功能。但最終用戶更渴望的是圖形用戶界面,這就是 virt-manager。他是一套用 python 編寫的虛擬機管理圖形界面,用戶可以通過它直觀地操作不同的虛擬機。Virt-manager 就是利用 libvirt 的 API 實現的。
以上這些就是 Linux 系統上 KVM 虛擬化技術的大致架構了。本文正是演示瞭如何使用這些工具實現了 KVM 虛擬機的遷移操作。
本文中的 KVM 虛擬機軟件基於 Novell 公司的 Suse Linux Enterprise Server 11 Service Pack 1 發行版。SLES11 SP1 發佈於 2010 年 5 月 19 日,基於 Linux 內核 2.6.32.12,包含了 kvm-0.12.3,libvirt-0.7.6,virt-manager-0.8.4,全面支持 KVM 虛擬機。本文中的物理服務器和外部共享存儲配置如下表:
表 1. 硬件配置
物理主機 | 硬件配置 | Host OS | Host Name | IP Address |
---|---|---|---|---|
源主機 Source Host |
Xeon(R) E5506 x 4 core MEM: 10GB |
SLES11 SP1 | vicorty3 | 192.168.0.73 |
目的主機 Destination Host |
Xeon(R) E5506 x 8 core MEM: 18GB |
SLES11 SP1 | victory4 | 192.168.0.74 |
NFS Server | Pentium(R) D x 2 core MEM: 2G |
SLES11 SP1 | server17 | 192.168.0.17 |
遷移虛擬機之前,我們需要創建虛擬機。創建虛擬機可以使用 QEMU-KVM 命令或者通過 virt-manager 圖形化管理工具。
- QEMU-KVM 創建虛擬機鏡像文件:見本文的參考資源“KVM 虛擬機在 IBM System x 上應用”。
- virt-manager 創建虛擬機:參考 virt-manager 幫助手冊。
靜態遷移由於允許中斷虛擬機的運行,所以相對簡單。首先在源主機上關閉虛擬機,然後移動虛擬機的存儲鏡像和配置文件到目的主機,最後在目的主機上啓動虛擬機,恢復服務。根據虛擬機鏡像存儲方式的不同,靜態遷移的實現方法稍有不同。
如果源主機和目的主機都能夠訪問虛擬機的鏡像,則只需要遷移虛擬機配置文件。比如在本例中的 SLES11 SP1 系統,virt-manager 管理的虛擬機配置文件在 /etc/libvirt/qemu/”your vm name.xml”。拷貝 XML 配置文件到目的主機的相同目錄後,進行適當的修改,比如:與源主機相關的文件或路徑等。無論你何時在 /etc/libvirt/qemu/ 中修改了虛擬機的 XML 文件,必須重新運行 define 命令,以激活新的虛擬機配置文件。
清單 1. 激活虛擬機配置文件
# virsh define /etc/libvirt/qemu/”your vm name.xml” |
本地存儲是指虛擬機的文件系統建立在本地硬盤上,可以是文件或者磁盤分區。
- 本地文件存儲:如果虛擬機是基於鏡像文件,直接從源主機拷貝鏡像文件和 XML 配置文件到目的主機中,然後對 XML 進行適當的修改並激活。
- 本地磁盤分區:如果虛擬機使用了磁盤分區(物理分區或者邏輯分區)爲存儲設備,首先用 dump 工具把磁盤分區轉換成鏡像文件再拷貝到目的主機。在目的主機恢復虛擬機時,把鏡像文件恢復到目的主機的磁盤分區中去。對於虛擬機系統使用了多個磁盤分區的,需要每個分區單獨 dump 成鏡像文件。例如使用“/dev/VolGroup00/lv001” LVM 邏輯卷作爲存儲設備,可以使用下面的命令輸出成鏡像文件:
清單 2. 轉換邏輯卷爲鏡像文件
dd if=/dev/VolGroup00/lv001 of=lv001.img bs=1M |
靜態遷移虛擬的過程中,虛擬機系統處於關機狀態,這樣虛擬機關機前的運行狀態不會保留。如果希望保留遷移前的系統狀態,並且在遷移後能夠恢復,需要對虛擬機做快照備份或者以休眠的方式關閉系統,詳細內容和實現方法將在本系列文章的第五部分介紹。
本文前面“V2V 遷移方式的分類”小節中介紹過,跟據虛擬機連接存儲方式的不同,動態遷移分爲基於共享存儲的動態遷移和基於本地存儲的存儲塊遷移。本小節實現了目前使用最廣泛的基於共享存儲的動態遷移。實現這種實時遷移的條件之一就是把虛擬機存儲文件存放在公共的存儲空間。因此需要設定一個共享存儲空間,讓源主機和目的主機都能夠連接到共享存儲空間上的虛擬媒體文件,包括虛擬磁盤、虛擬光盤和虛擬軟盤。否則,即使遷移完成以後,也會因爲無法連接虛擬設備,導致無法啓動遷移後的虛擬機。
動態遷移實際上是把虛擬機的配置封裝在一個文件中,然後通過高速網絡,把虛擬機配置和內存運行狀態從一臺物理機迅速傳送到另外一臺物理機上,期間虛擬機一直保持運行狀態。現有技術條件下,大多虛擬機軟件如 VMware、Hyper-V、Xen 進行動態遷移都需要共享存儲的支持。典型的共享存儲包括 NFS 和 SMB/CIFS 協議的網絡文件系統,或者通過 iSCSI 連接到 SAN 網絡。選用哪一種網絡文件系統,需要根據具體情況而定。本文的實驗採用了 NFS 文件系統作爲源主機和目的主機之間的共享存儲。
圖 3. 共享存儲的動態遷移實驗配置圖
-
- 確保網絡連接正確,源主機、目的主機和 NFS 服務器之間可以互相訪問。
- 確保源主機和目的主機上的 VMM 運行正常。
- 設置 NFS 服務器的共享目錄。本文的 NFS 服務器也安裝了 SLES11 SP1 操作系統。
清單 3. 配置 NFS 服務
修改 /etc/exports 文件,添加 /home/image *(rw,sync,no_root_squash) rw:可讀寫的權限; ro:只讀的權限; no_root_squash:登入到 NFS 主機的用戶如果是 ROOT 用戶,他就擁有 ROOT 權限,此參數很不安全,建議不要使用。 sync:資料同步寫入存儲器中。 async:資料會先暫時存放在內存中,不會直接寫入硬盤。 重新啓動 nfsserver 服務 # service nfsserver restart |
virt-manager 是基於 libvirt 的圖像化虛擬機管理軟件,請注意不同的發行版上 virt-manager 的版本可能不同,圖形界面和操作方法也可能不同。本文使用了 SLES11 SP1 發行版上的 virt-manager-0.8.4。
首先在源主機和目的主機上添加共享存儲。這裏以源主機爲例,目的主機做相同的配置。
- 添加 NFS 存儲池到源主機和目的主機的 vit-manager 中。點擊 Edit menu->Host Details->Storage tab。
圖 4. 存儲池配置圖
- 添加一個新的存儲池。點擊左下角的“+”號,彈出一個新的窗口。輸入以下參數:
-
- Name:存儲池的名字。
- Type:選擇 netfs:Network Exported Directory。因爲本文使用了 NFS 作爲共享存儲協議。
圖 5. 添加共享存儲池
- 點擊“Forward”後,輸入以下參數:
-
- Target Path:共享存儲在本地的映射目錄。本文中這個目錄在源主機和目的主機上必須一致。
- Format:選擇存儲類型。這裏必須是 nfs。
- Host Name:輸入共享存儲服務器,也就是 NFS 服務器的 IP 地址或 hostname。
- Source Path:NFS 服務器上輸出的共享目錄。
圖 6. 存儲池設置
- 點擊”Finish”後,共享存儲添加成功。此時在物理機上查看 Linux 系統的文件系統列表,可以看到共享存儲映射的目錄。
源主機上創建基於共享存儲的 KVM 虛擬機。
- 選擇共享存儲池,點擊”New Volume”創建新的存儲卷。
- 輸入存儲卷參數。本例爲虛擬機創建了大小爲 10G,格式爲 qcow2 的存儲卷。
圖 7. 添加存儲卷
- 在這個共享存儲捲上創建虛擬機。本文創建了一個基於 Window 2008 R2 系統的虛擬機。創建虛擬機的具體步驟見本文前面“創建 KVM 虛擬機“小節。
連接遠程物理主機上的 VMM。這裏以源主機爲例,目的主機做相同的配置。
- 在源主機上打開 virt-manager 應用程序,連接 localhost 本機虛擬機列表。點擊 File->Add Connection,彈出添加連接窗口,輸入以下各項:
-
- Hypervisor:選擇 QEMU。
- Connection:選擇連接方式 。本文選擇 SSH 連接。
- Hostname:輸入將要連接的主機名或 IP 地址,這裏填寫目的主機名 victory4。
圖 8. 添加遠程 VMM 連接
- 點擊 Connect,輸入 SSH 連接的密碼後,將顯示源主機和目的主機上的虛擬機列表。
圖 9. 管理遠程 VMM
從源主機動態遷移 KVM 虛擬機到目的主機。
- 在源主機上啓動虛擬機 Windwos 2008 R2。
- 在虛擬機中,開啓實時網絡服務(用來驗證遷移過程中服務的可用性)。
-
- 開啓遠程連接服務 remote access,在其他主機上遠程連接此虛擬機。
- 開啓網絡實時服務。例如打開瀏覽器並且播放一個實時網絡視頻。
- 準備動態遷移,確保所有的虛擬存儲設備此時是共享的,包括 ISO 和 CDROM。
- 在源主機的 virt-manager 窗口中,右鍵點擊等待遷移的虛擬機,選擇“Migrate ”。
- New host:選擇目的主機的 hostname。
- Address:填入目的主機的 IP 地址。
- Port and Bandwith:指定連接目的主機的端口和傳輸帶寬,本文中沒有設定,使用默認設置。
圖 10. 虛擬機遷移設置
- 點擊“Migrate”和“Yes”開始動態遷移虛擬機。
圖 11. 虛擬機遷移進度
- 動態遷移的時間與網絡帶寬、物理主機的性能和虛擬機的配置相關。本實驗中的網絡連接基於 100Mbps 的以太網,整個遷移過程大約耗時 150 秒。使用 RDC(Remote Desktop Connection)遠程連接虛擬機在遷移過程中沒有中斷;虛擬機中播放的實時網絡視頻基本流暢,停頓的時間很短,只有 1 秒左右。如果採用 1000Mbps 的以太網或者光纖網絡,遷移時間將會大大減少,而虛擬機服務停頓的時間幾乎可以忽略不計。
- 遷移完成後,目的主機的 VMM 中自動創建了一個同名的 Windows 2008 R2 虛擬機,並且繼續提供遠程連接服務和播放在線視頻。源主機上的虛擬機變爲暫停狀態,不再提供服務。至此,動態遷移勝利完成。
從 qemu-kvm-0.12.2 版本,引入了 Block Migration (塊遷移)的特性。上一小節“基於共享存儲的動態遷移”中,爲了實現動態遷移,源主機和目的主機需要連接共享存儲服務。有了塊遷移技術以後,可以在動態遷移過程中,把虛擬磁盤文件從源主機遷移至目的主機。QEMU-KVM 有了這個特性以後,共享存儲不再是動態遷移的必要條件,從而降低了動態遷移的難度,擴大了動態遷移的應用範圍。SLES11 SP1 集成了 kvm-0.12.3,支持塊遷移特性。但是 SLES11 SP1 上的 libvirt-0.7.6、virt-manager-0.8.4 暫時沒有引入塊遷移的功能。所以本文下面的塊遷移實驗僅基於 QEMU-KVM 的命令行模式。
塊遷移過程中,虛擬機只使用本地存儲,因此物理環境非常簡單。只需要源主機和目的主機通過以太網連接,如”圖 2. 本地存儲的動態遷移示意圖”所示。
QEMU 的控制終端和遷移命令
QEMU 控制終端的開啓,可以在 QEMQ-KVM 的命令中加參數“-monitor”。
- -monitor stdio: 輸出到文本控制檯。
- -monitor vc: 輸出到圖形控制檯。
- 圖形控制檯和虛擬機 VNC 窗口的切換命令是:
- Ctrl+Alt+1: VNC window
- Ctrl+Alt+2: monitor console
- Ctrl+Alt+3: serial0 console
- Ctrl+Alt+4: parallel0 console
QEMU-KVM 提供了的“-incoming”參數在指定的端口監聽遷移數據。目的主機上需要此參數接收來自源主機的遷移數據。
清單 4. 遷移相關的 QEMU 命令
(qemu) help migrate migrate [-d] [-b] [-i] uri -- migrate to URI (using -d to not wait for completion) -b for migration without shared storage with full copy of disk -i for migration without shared storage with incremental copy of disk (base image shared between src and destination) |
在源主機上創建和啓動虛擬機。
- 在本地磁盤上創建虛擬機鏡像文件。本文創建了大小爲 10G,qcow2 格式的本地鏡像文件。
清單 5. 源主機上創建虛擬機victory3:~ # qemu-img create -f qcow2 /var/lib/kvm/images/sles11.1ga/disk0.qcow2 10G
- 在鏡像文件上安裝虛擬機。本文在虛擬機中安裝了 SLES11SP1 系統。
清單 6. 源主機上安裝虛擬機victory3:~ # /usr/bin/qemu-kvm -enable-kvm -m 512 -smp 4 -name sles11.1ga -monitor stdio -boot c -drive file=/var/lib/kvm/images/sles11.1ga/disk0.qcow2, if=none,id=drive-virtio-disk0,boot=on -device virtio-blk-pci,bus=pci.0, addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0 -drive file=/media/83/software/Distro/SLES-11-SP1-DVD-x86_64-GM-DVD1.iso, if=none,media=cdrom,id=drive-ide0-1-0 -device ide-drive,bus=ide.1, unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -device virtio-net-pci,vlan=0, id=net0,mac=52:54:00:13:08:96 -net tap -vnc 127.0.0.1:3
- 虛擬機安裝完畢後,以下列命令啓動虛擬機。添加了“-monitor stdio”是爲了開啓文本控制檯;去掉了虛擬光驅中的 ISO 文件是爲了保證遷移時,源主機和目的主機上虛擬設備的一致性。如果你在目的主機的相同路徑下存在相同名字的 ISO 文件,則可以在遷移時保留 ISO 文件參數。
清單 7. 源主機上啓動虛擬機victory3:~ # /usr/bin/qemu-kvm -enable-kvm -m 512 -smp 4 -name sles11.1ga -monitor stdio -boot c -drive file=/var/lib/kvm/images/sles11.1ga/disk0.qcow2, if=none,id=drive-virtio-disk0,boot=on -device virtio-blk-pci,bus=pci.0,addr=0x4, drive=drive-virtio-disk0,id=virtio-disk0 -drive if=none,media=cdrom, id=drive-ide0-1-0 -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0, id=ide0-1-0 -device virtio-net-pci,vlan=0,id=net0,mac=52:54:00:13:08:96 -net tap -vnc 127.0.0.1:3
在目的主機上創建和啓動虛擬機。
- 在目的主機上爲遷移後的系統創建鏡像文件,文件的大小必須大於或等於源主機的鏡像文件大小。
清單 8. 目的主機上創建虛擬機victory4:~ # qemu-img create -f qcow2 dest.img 20G Formatting 'dest.img', fmt=qcow2 size=21474836480 encryption=off cluster_size=0
- 使用與源主機上相同的 qemu-kvm 參數,更改鏡像文件爲目的主機上創建的鏡像文件,加上 -incoming 參數指定動態遷移所使用的協議、IP 地址和端口號。因爲 -incoming 參數的作用是監聽端口,所以目的主機上的虛擬機一啓動就處於 paused 狀態,等待源主機上虛擬機開始遷移。本例中塊遷移使用 TCP 協議,目的主機上的監聽端口是 8888 端口。
清單 9. 目的主機上的遷移命令victory4:~ # /usr/bin/qemu-kvm -enable-kvm -m 512 -smp 4 -name sles11.1ga -monitor stdio -boot c -drive file=/root/dest.img,if=none,id=drive-virtio-disk0, boot=on -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0, id=virtio-disk0 -drive if=none,media=cdrom,id=drive-ide0-1-0 -device ide-drive, bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -device virtio-net-pci,vlan=0, id=net0,mac=52:54:00:13:08:96 -net tap -vnc 127.0.0.1:8 -incoming tcp:0:8888 QEMU 0.12.3 monitor - type 'help' for more information (qemu) info status VM status: paused
遷移源主機上的虛擬機到目的主機。
- 回到源主機上,在等待遷移的虛擬機中開啓一些實時服務以驗證動態遷移不會中斷服務的運行。本例中在虛擬機的終端窗口中用“top -d 1“命令開啓 TOP 服務,每秒刷新一次系統進程的信息。
圖 12. 等待遷移的虛擬機中開啓 TOP 服務
- 在源主機的 QEMU 控制檯中輸入以下遷移命令,遷移開始。
清單 10. 源主機遷移命令(qemu) migrate -d -b tcp:victory4:8888 -d 可以在遷移的過程中查詢遷移狀態,否則只能在遷移結束後查詢。 -b 遷移虛擬機存儲文件 tcp:ivctory4:8888 數據遷移的協議、目的主機和端口。協議和端口必須和目的主機上虛擬機的 -incoming 參數一致。
- 動態遷移期間,源主機的虛擬機繼續運行,TOP 服務沒有中斷。同時可以在源主機的 QEMU 控制檯查詢遷移的狀態。目的主機的虛擬機處於 paused 狀態,從目的主機的 QEMU 控制檯可以看到遷移進度的百分比。
清單 11. 監視虛擬機遷移過程源主機 QEMU 控制檯顯示正在遷移的數據 (qemu) info migrate Migration status: active transferred ram: 52 kbytes remaining ram: 541004 kbytes total ram: 541056 kbytes transferred disk: 2600960 kbytes remaining disk: 5787648 kbytes total disk: 8388608 kbytes 目的主機 QEMU 控制檯顯示遷移完成的百分比 (qemu) Receiving block device images Completed 28 %
- 直到動態遷移完成,源主機的虛擬機變成 paused 狀態而目的主機上的虛擬機由 paused 狀態變成運行狀態,TOP 服務繼續運行且沒有中斷。
- 關閉源主機的虛擬機,所有服務已經遷移到了目的主機,至此遷移完成。
本文實現了在 Suse Linux Enterprise Server 11 SP1 發行版上 KVM 虛擬機的靜態遷移和動態遷移,特別是基於數據塊的動態遷移,使虛擬機的資源配置更加靈活。在其他支持 KVM 的 Linux 發行版上如 Ubuntu、Fedora 也可以完成類似的遷移操作。KVM 虛擬機在不斷的增強和完善中,開源社區和 Linux 的系統集成商也在開發各種各樣的基於 KVM 的管理工具,將來的 KVM 遷移工具會在性能,功能,可操作性和自動化程度上大大增強。