新聞中心
虛擬化在線遷移優(yōu)化實踐(一):KVM虛擬化跨機遷移原理
作者:大U的技術(shù)課堂 2017-05-25 11:08:20
云計算
虛擬化 在線遷移技術(shù)的本質(zhì)就是在虛擬機不停機的情況下,不同物理機之間進行在線跨機遷移。本文主要介紹KVM虛擬化跨機遷移原理。

成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的平谷網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
前言
當前,云計算技術(shù)的飛速發(fā)展對企業(yè)降低IT投入成本、減少系統(tǒng)運維開銷、加速業(yè)務(wù)交付速度、動態(tài)調(diào)整業(yè)務(wù)規(guī)模以及保障業(yè)務(wù)可靠性具有重要意義。
目前,云計算帶來的這些好處依賴于底層虛擬化技術(shù)將服務(wù)器資源虛擬出多份可供用戶使用的計算資源,從而方便云計算提供商為企業(yè)用戶提供高效、彈性、高可靠和可維護的底層IT基礎(chǔ)架構(gòu)。其中,虛擬機在線遷移技術(shù)正是構(gòu)建虛擬機技術(shù)上述優(yōu)點的重要組成部分,該技術(shù)可以簡化系統(tǒng)維護復(fù)雜度、實現(xiàn)業(yè)務(wù)負載均衡、優(yōu)化服務(wù)器能源消耗并增強云計算可靠性。
作為國內(nèi)領(lǐng)先的公有云服務(wù)提供商,UCloud對其云平臺在線遷移方案進行了深入的優(yōu)化,通過實踐證明這些優(yōu)化能夠很好的應(yīng)對線上各種遷移場景,為用戶業(yè)務(wù)的穩(wěn)定與可靠提供了重要保障。
原理
在線遷移技術(shù)的本質(zhì)就是在虛擬機不停機的情況下,不同物理機之間進行在線跨機遷移。首先是在目標物理機建立相同配置的虛擬機,然后進行各類數(shù)據(jù)遷移,最終快速切換到目標端新虛擬機。由于整個遷移過程中,絕大多數(shù)時間內(nèi)用戶虛擬機都能保持正常運行,且***階段的切換過程非常短暫,不會造成用戶業(yè)務(wù)中斷,對用戶運行在虛擬機中的業(yè)務(wù)幾乎沒有影響,因此在線遷移技術(shù)在實現(xiàn)云平臺資源動態(tài)調(diào)整以及故障處理方面具有重要意義。
因為云計算平臺除了核心的底層虛擬化技術(shù)外,還包括SDN網(wǎng)絡(luò)、分布式存儲和運維管理系統(tǒng)等,所以在線遷移方案不僅要包括跨機遷移技術(shù)本身,還包括遷移前后虛擬機的管理信息以及網(wǎng)絡(luò)和磁盤配置信息的切換等工作。為此,本文將在線遷移過程劃分為三個階段:準備階段、遷移階段和切換階段。
考慮到UCloud云計算平臺采用KVM虛擬化技術(shù)實現(xiàn)虛擬化底層方案,同時共享存儲的在線遷移僅是非共享存儲的一個特例,因此本節(jié)將以非共享存儲為例,詳細介紹UCloud底層KVM虛擬化技術(shù)如何進行虛擬機的在線遷移。其中,遷移環(huán)境為虛擬化底層KVM+Qemu、虛擬化管理Libvirt、虛擬化網(wǎng)絡(luò)Openvswitch。
假設(shè)將源物理機SourceHost的一個虛擬機VM 遷移到目標物理機DestHost,非共享存儲虛擬機在線遷移過程的具體步驟如下:
準備階段
Step.1 選擇一臺具有足夠磁盤和內(nèi)存資源的物理機DestHost,并在DestHost上創(chuàng)建VM對應(yīng)的系統(tǒng)盤和數(shù)據(jù)盤,同時選定接收遷移數(shù)據(jù)的tcp端口(如圖 1-1所示),這兩個磁盤在DestHost和SourceHost上的路徑必須完全一致。不同的是,DestHost上初始創(chuàng)建的只是空盤,上面沒有真實數(shù)據(jù)。
圖 1-1 在目標端新建虛擬機鏡像
Step.2 通過虛擬化管理軟件Libvirt在DestHost上創(chuàng)建一個和VM同樣配置的虛擬機VM’,系統(tǒng)盤和數(shù)據(jù)盤使用Step.1中創(chuàng)建的系統(tǒng)盤和數(shù)據(jù)盤(如圖 1-2所示)。VM’當前是paused狀態(tài),虛擬機VM’的vcpu處于暫停狀態(tài),同時虛擬機VM’會通過監(jiān)聽一個內(nèi)網(wǎng)的tcp端口來接收遷移數(shù)據(jù)。
圖 1-2 在目標端創(chuàng)建新虛擬機
遷移階段
Step.3 虛擬化管理層Libvirt給VM對應(yīng)的Qemu進程發(fā)出一個遷移指令,并指定參數(shù),例如指定DestHost為目標、需要遷移塊設(shè)備、***停機時間、遷移帶寬限制等,然后遷移數(shù)據(jù)就會通過指定tcp鏈路傳輸給DestHost上的VM’。需要注意,遷移數(shù)據(jù)的網(wǎng)絡(luò)包不是經(jīng)過 vswitch,而是直接從SourceHost的ethx網(wǎng)卡出,進到DestHost的ethx,因為VM’對應(yīng)Qemu進程正作為DestHost一個用戶態(tài)進程,監(jiān)聽在ethx對應(yīng)的內(nèi)網(wǎng)ip(如圖 1-3所示)。
圖 1-3 虛擬機遷移數(shù)據(jù)
Step.4 經(jīng)過前面三步,虛擬機的數(shù)據(jù)就正式開始遷移,剩下的挑戰(zhàn)是如何保證數(shù)據(jù)遷移的一致性,因為此時VM處于運行狀態(tài),里面時刻發(fā)生內(nèi)存更新、磁盤io操作和設(shè)備狀態(tài)變更,而VM’是paused狀態(tài),只通過一個線程接收VM進程發(fā)過來的數(shù)據(jù)。
為此,在遷移過程中各種數(shù)據(jù)如何有序遷移?首先,Libvirt會發(fā)送qmp_dirve_mirror命令來通知Qemu進行虛擬機磁盤數(shù)據(jù)遷移,從而在源端和目標端直接同步磁盤數(shù)據(jù)。然后,Libvirt會再次發(fā)送qmp_migrate命令通知Qemu進行虛擬機內(nèi)存數(shù)據(jù)遷移,進一步完成虛擬機主要數(shù)據(jù)的遷移。***,由于設(shè)備狀態(tài)對應(yīng)的數(shù)據(jù)量很少,在遷移***階段會通過一次性同步,將Qemu里每個設(shè)備注冊的狀態(tài)同步到目標端。
另外,遷移過程中發(fā)生變更的數(shù)據(jù)如何遷移?如果不遷移變更的數(shù)據(jù),那數(shù)據(jù)必然不一致,也表明遷移還不能結(jié)束,因此Qemu一般通過數(shù)據(jù)遷移準備、數(shù)據(jù)遷移、數(shù)據(jù)遷移收尾三個步驟來完成。
循環(huán)調(diào)用磁盤和內(nèi)存遷移函數(shù)也是按階段來分別調(diào)用的。首先,循環(huán)調(diào)用磁盤和內(nèi)存遷移函數(shù)的遷移數(shù)據(jù)準備功能,即前期準備工作,例如把磁盤按block為單位組織成一個數(shù)組,并設(shè)置記錄臟塊機制;把內(nèi)存所有頁全部設(shè)置為臟頁,并發(fā)送開始遷移的標志到VM’的進程。
圖 1-4 全量數(shù)據(jù)遷移示意圖
緊接著,需要進行真正的數(shù)據(jù)遷移,Qemu在這個階段調(diào)用磁盤和內(nèi)存遷移函數(shù)的第二步驟功能,并且要求必須等磁盤數(shù)據(jù)遷移完成后才會執(zhí)行內(nèi)存數(shù)據(jù)遷移。如圖 1-4所示,Qemu首先會進行磁盤(內(nèi)存)的全量數(shù)據(jù)遷移,依次將每個block(頁)遷移到目標端DestHost。
圖 1-5 增量數(shù)據(jù)遷移示意圖
然后再通過多次迭代,將遷移過程中虛擬機產(chǎn)生的新數(shù)據(jù)遷移到目標端DestHost(如圖 1-5所示)。這一迭代過程是收斂的,收斂依據(jù)與之前設(shè)置的帶寬、***停機時間有關(guān)。同時,在迭代過程中,Qemu將邊遷移邊記錄剩下的臟數(shù)據(jù)大小,并與停機時間進行比較,如果這個值比停機時間大,那么繼續(xù)遷移,如果比停機時間小,那么源端Qemu進程就會暫停,從而避免產(chǎn)生新的臟數(shù)據(jù),以便進行遷移收尾工作。
在虛擬機暫停之后,進入第三步遷移收尾工作,源端Qemu進程會把磁盤、內(nèi)存臟數(shù)據(jù)和設(shè)備狀態(tài)一次性同步到目標端,完成時VM和VM’的數(shù)據(jù)將會一致。這時,上層管理軟件會把VM關(guān)閉,并把VM’的vcpu恢復(fù)運行狀態(tài),整個虛擬機的數(shù)據(jù)遷移就完成了。
切換階段
Step.5 數(shù)據(jù)遷移完成后,VM關(guān)閉,VM’作為它的一個完全拷貝,在DestHost上運行著,但網(wǎng)絡(luò)還是不通的(如圖 1-2所示)。VM’通過DestHost的vswitch 連接到物理機網(wǎng)卡,vswitch相當于一個虛擬交換機,而VM從SourceHost遷移到DestHost,在網(wǎng)絡(luò)上相當于把網(wǎng)線從一個交換機拔下插到另一個交換機上,此時就需要一次arp廣播,告知VM的mac地址已經(jīng)變更到另外一臺交換機的某個端口。
這就是遷移完成后的網(wǎng)絡(luò)切換,由于切換時間很短,少于tcp的超時重傳時間,因此對于原VM上跑著網(wǎng)絡(luò)服務(wù)程序幾乎是無感知的。此后,如圖 1-6所示,目標端DestHost虛擬機就具備和用戶直接進行交互的能力,而源端SourceHost虛擬機此時就可以刪除。
圖 1-6 完成虛擬機遷移示意圖
總結(jié)
通過以上遷移步驟,可以在KVM虛擬化平臺上實現(xiàn)虛擬機的跨越遷移,進而方便實現(xiàn)云平臺負載均衡與系統(tǒng)運維,并確保用戶虛擬機性能的可靠性。同時,從用戶角度來看,這個過程并不需要關(guān)心虛擬機在源端SourceHost還是目標端DestHost,但可以持續(xù)與虛擬機進行交互,整個遷移過程對用戶來說是透明的。
雖然,當前KVM虛擬化在線遷移能夠滿足大多數(shù)情況下的用戶虛擬機遷移,但還存在以下問題:
- 在磁盤和內(nèi)存負載高的情況下,存在遷移無法完成的情況;
- 跨機遷移存在網(wǎng)絡(luò)中斷時間長的問題;
- 跨存儲類型的場景下如何進行遷移;
- 如何應(yīng)用遷移進行虛擬機組件的更新。
【本文是51CTO專欄機構(gòu)作者“大U的技術(shù)課堂”的原創(chuàng)文章,轉(zhuǎn)載請通過微信公眾號(ucloud2012)聯(lián)系作者】
戳這里,看該作者更多好文
當前題目:虛擬化在線遷移優(yōu)化實踐(一):KVM虛擬化跨機遷移原理
新聞來源:http://www.dlmjj.cn/article/dpeoghd.html


咨詢
建站咨詢
