Hyper-V動態(tài)遷移原理詳解
為了追趕上VMware虛擬化霸主的腳步,微軟從Hyper-V 2.0開始支持物理機(jī)與虛擬機(jī)之間的動態(tài)遷移。動態(tài)遷移對于實驗室來說,需求可能并不高;但對于企業(yè)來說,這卻是虛擬化成熟度的一個分水嶺。
在開始之前,需要明確一個概念。
動態(tài)遷移(Hyper-V Live Migration)并非故障狀態(tài)下的非計劃宕機(jī)。
該應(yīng)用場景僅用于升級、硬件更換等計劃宕機(jī)。
動態(tài)遷移步驟:
• 在源和目標(biāo)計算機(jī)之間建議連接
• 傳送虛擬機(jī)配置及設(shè)備信息
• 傳送虛擬機(jī)內(nèi)存
• 暫停(掛起)源虛擬機(jī)并傳送狀態(tài)
• 恢復(fù)目標(biāo)虛擬機(jī)
一、在源和目標(biāo)計算機(jī)之間建議連接
該部分的通信涉及到兩個WMI對群集中兩個dll的調(diào)用:
clusres.dll
群集資源管理dll(基本的網(wǎng)絡(luò)、存儲、WINS、DHCP、腳本。。)
vmclusres.dll
虛擬機(jī)群集資源管理dll
Live Migration從本質(zhì)上來說還是群集的一種實現(xiàn)方式。
通信的速度與效率與源服務(wù)器和目標(biāo)服務(wù)器的負(fù)載有關(guān)。
在源服務(wù)器或目標(biāo)服務(wù)器負(fù)載過高情況下會出現(xiàn)WMI調(diào)用clusres.dll超時失敗的情況。
該場景出現(xiàn)在PRO調(diào)用Live Migration過程中,將會造成第4步,即暫停(掛起)源虛擬機(jī)并傳送狀態(tài)卡死,導(dǎo)致虛擬機(jī)長時間處于掛起狀態(tài)。
錯誤信息如下:
錯誤 (12711)
由于出現(xiàn)錯誤 [MSCluster_Resource.Name="SCVMM XXX01 Configuration"] ,找不到元素,VMM 無法在服務(wù)器 HOST01.contoso.com 上完成 WMI 操作。
詳細(xì)信息 (找不到元素(0x490))
微軟提供的相關(guān)的補丁,需要在所有節(jié)點上部署:
http://support.microsoft.com/kb/974930
二、傳送虛擬機(jī)配置及設(shè)備信息
這里值得注意的是,該部分傳送的并非虛擬機(jī)目錄中的XML配置文件,僅僅是注冊表中的信息。
以上兩步完成的是遷移的準(zhǔn)備工作,告知了目標(biāo)服務(wù)器虛擬機(jī)所需的資源,并分配所需資源。
三、傳送虛擬機(jī)內(nèi)存
該部分是遷移的核心技術(shù)部分。不論是VMware還是Hyper-V來做遷移,都是無法逃避的問題。
那些銷售所謂的服務(wù)不會斷線,不過是傳說。從技術(shù)的角度來說只是斷線的時間由秒這個級別降低到了毫秒級而已。
我們來詳細(xì)描述一下內(nèi)存?zhèn)魉偷倪^程:
1、鎖定Guest主機(jī)內(nèi)存,并將該部分的信息傳送到目標(biāo)服務(wù)器。
2、Guest主機(jī)繼續(xù)運行,在Host主機(jī)中開啟一個新的內(nèi)存分區(qū)為Guest主機(jī)提供服務(wù)。該區(qū)域僅保存變更的內(nèi)容。
3、新內(nèi)存分區(qū)將繼續(xù)分片鎖定,并傳送。
4、重復(fù)2~3,保證原HOST服務(wù)器與目標(biāo)HOST服務(wù)器變更內(nèi)存的差異在一個極小的時鐘周期之內(nèi),直至操作1中的內(nèi)存?zhèn)魉屯瓿伞?/p>
四、暫停(掛起)源虛擬機(jī)并傳送狀態(tài)
這部分包含3個操作:
1、掛起源虛擬機(jī)
2、傳送***的源虛擬機(jī)內(nèi)存變更片段
3、通知存儲,將存儲掛載至目標(biāo)服務(wù)器
第四步是遷移時間消耗的關(guān)鍵。
而關(guān)鍵的關(guān)鍵是實時內(nèi)存狀態(tài)的保存。
在Hyper-V 1.0中Quick Migration采取的方式是掛起源虛擬機(jī),再處理內(nèi)存的方式。
所以在遷移過程中會發(fā)現(xiàn)宕機(jī)的時間與虛擬機(jī)所消耗的內(nèi)存量成正比。
而在Live Migration中,宕機(jī)時間不再由所遷移虛擬機(jī)消耗的內(nèi)存來決定。
決定宕機(jī)時間的關(guān)鍵點內(nèi)存大小是一個相對較小的變更內(nèi)存片段。
根據(jù)實測,在Live Migration操作中,ping包監(jiān)視根據(jù)系統(tǒng)負(fù)載不同在丟包為2~6之間。
完全可以滿足一般企業(yè)高可用的需求。
五、恢復(fù)目標(biāo)虛擬機(jī)
這個部分與普通的恢復(fù)相同。不做詳細(xì)說明。