本發(fā)明涉及云環(huán)境的部署領(lǐng)域,具體涉及一種虛擬機(jī)遷移過程中的數(shù)據(jù)流自適應(yīng)調(diào)整系統(tǒng)及相應(yīng)的調(diào)整方法,屬于對遷移機(jī)制的修改。
背景技術(shù):
近年云計(jì)算、云部署在技術(shù)上不斷取得進(jìn)展,在此基礎(chǔ)上衍生出各類云平臺的應(yīng)用和研究。虛擬化技術(shù)是云平臺的基礎(chǔ)技術(shù),長期發(fā)展下已經(jīng)有不少成熟的虛擬機(jī)產(chǎn)品。除了盡可能提高物理機(jī)的資源利用率,盡可能開發(fā)虛擬機(jī)帶來的擴(kuò)展性和部署的靈活性也日漸成為研究重點(diǎn)。
大部分虛擬機(jī)遷移實(shí)施方案在“停機(jī)-重啟”這個(gè)環(huán)節(jié)中忽略了對后續(xù)到達(dá)原物理機(jī)的數(shù)據(jù)包的處理,造成在網(wǎng)絡(luò)環(huán)境中不得不通過網(wǎng)絡(luò)協(xié)議的重傳機(jī)制找回丟失的數(shù)據(jù)內(nèi)容。然而在有些場景中,數(shù)據(jù)包無法重傳或者重傳的代價(jià)很大,導(dǎo)致數(shù)據(jù)包很容易丟失。
技術(shù)實(shí)現(xiàn)要素:
發(fā)明目的:為了解決虛擬機(jī)在遷移時(shí)會產(chǎn)生較多丟包的問題,本發(fā)明提供了一種虛擬機(jī)遷移過程中的數(shù)據(jù)流自適應(yīng)調(diào)整系統(tǒng)以及相應(yīng)的數(shù)據(jù)流自適應(yīng)調(diào)整方法,能夠使得虛擬機(jī)在遷移過程幾乎不丟失數(shù)據(jù)包。
技術(shù)方案:為解決上述技術(shù)問題,本發(fā)明中虛擬機(jī)遷移過程中的數(shù)據(jù)流自適應(yīng)調(diào)整系統(tǒng),包括:
重定向數(shù)據(jù)包的發(fā)送端,位于虛擬機(jī)遷移前的宿主機(jī),用于在虛擬機(jī)停機(jī)時(shí)重定向后續(xù)到達(dá)虛擬機(jī)的數(shù)據(jù)包,進(jìn)而將收到的數(shù)據(jù)包轉(zhuǎn)發(fā)到重發(fā)數(shù)據(jù)包的接收端;
重發(fā)數(shù)據(jù)包的接收端,位于虛擬機(jī)遷移后的宿主機(jī),一方面用于緩存虛擬機(jī)停機(jī)階段從發(fā)送端發(fā)來的數(shù)據(jù)包,另一方面用于緩存遷移結(jié)束交換機(jī)改變數(shù)據(jù)流向后遠(yuǎn)程主機(jī)發(fā)給虛擬機(jī)的數(shù)據(jù)包,并將緩存的數(shù)據(jù)包按順序發(fā)送給宿主機(jī)上新啟動的虛擬機(jī)。
其中,所述發(fā)送端重定向后續(xù)到達(dá)虛擬機(jī)的數(shù)據(jù)包包括對遠(yuǎn)程主機(jī)發(fā)送給虛擬機(jī)的數(shù)據(jù)包進(jìn)行攔截、改寫數(shù)據(jù)包的地址信息、拆分?jǐn)?shù)據(jù)包。
本發(fā)明中的虛擬機(jī)遷移過程中的數(shù)據(jù)流自適應(yīng)調(diào)整方法,基于xen虛擬機(jī)平臺的熱遷移機(jī)制,將虛擬機(jī)遷移前的宿主機(jī)作為重定向數(shù)據(jù)包的發(fā)送端,將虛擬機(jī)遷移后的宿主機(jī)作為虛擬機(jī)重啟后重發(fā)數(shù)據(jù)包的接收端,包括以下步驟:
(1)在遷移開始階段,發(fā)送端模擬出第一虛擬網(wǎng)卡,并通過廣播數(shù)據(jù)包向網(wǎng)絡(luò)環(huán)境內(nèi)其他機(jī)器通知該網(wǎng)卡的位置及物理地址;接收端模擬出第二虛擬網(wǎng)卡,并通過廣播數(shù)據(jù)包向網(wǎng)絡(luò)環(huán)境內(nèi)其他機(jī)器通知該網(wǎng)卡的位置及物理地址;所述第一虛擬網(wǎng)卡、第二虛擬網(wǎng)卡的物理地址均不同與網(wǎng)絡(luò)環(huán)境內(nèi)其他機(jī)器的物理地址;
(2)發(fā)送端攔截遠(yuǎn)程主機(jī)發(fā)送給虛擬機(jī)的數(shù)據(jù)包,并對數(shù)據(jù)包進(jìn)行重定向處理后發(fā)送給接收端,發(fā)送端重復(fù)這樣的收包-發(fā)包動作直至接收到接收端發(fā)送來的通知數(shù)據(jù)包,向接收端發(fā)送回應(yīng)數(shù)據(jù)包;
(3)接收端接收發(fā)送端發(fā)送的重定向數(shù)據(jù)包并進(jìn)行緩存,重復(fù)這樣的收包-緩存包動作,在遷移過程結(jié)束后,接收端向發(fā)送端發(fā)送通知數(shù)據(jù)包,待接收到發(fā)送端發(fā)來的回應(yīng)數(shù)據(jù)包后結(jié)束收包-緩存包動作;
遷移過程結(jié)束后,接收端接收從遠(yuǎn)程主機(jī)直接發(fā)送的數(shù)據(jù)包并進(jìn)行緩存;
(4)接收端收到回應(yīng)數(shù)據(jù)包后發(fā)送arp數(shù)據(jù)包測試虛擬機(jī)是否可以響應(yīng)外界請求,若是,則按順序向虛擬機(jī)發(fā)送緩存的數(shù)據(jù)包;否則,繼續(xù)發(fā)送arp數(shù)據(jù)包直到虛擬機(jī)可以響應(yīng)外界請求為止。
其中,發(fā)送端對接收到的數(shù)據(jù)包進(jìn)行解析,根據(jù)其源物理地址和目標(biāo)物理地址判斷該數(shù)據(jù)包是遠(yuǎn)程主機(jī)發(fā)送給虛擬機(jī)的數(shù)據(jù)包還是接收端發(fā)送來的通知數(shù)據(jù)包;接收端通過對接收到的數(shù)據(jù)包進(jìn)行解析,根據(jù)其目標(biāo)物理地址判斷該數(shù)據(jù)包為遠(yuǎn)程主機(jī)發(fā)送給虛擬機(jī)的數(shù)據(jù)包還是發(fā)送端發(fā)送的數(shù)據(jù)包,對于發(fā)送端發(fā)送的數(shù)據(jù)包,再根據(jù)數(shù)據(jù)包的字段類型判斷該數(shù)據(jù)包是重定向數(shù)據(jù)包還是回應(yīng)數(shù)據(jù)包。
其中,步驟(2)中發(fā)送端對數(shù)據(jù)包進(jìn)行重定向處理,包括以下步驟:
若數(shù)據(jù)包大小不超過以太網(wǎng)數(shù)據(jù)幀的最大字節(jié)數(shù),則對該數(shù)據(jù)包加上以太網(wǎng)幀頭,源物理地址填第一虛擬網(wǎng)卡的物理地址,目標(biāo)物理地址填接收端虛擬網(wǎng)卡的物理地址,設(shè)定第一重定向數(shù)據(jù)包類型字段,發(fā)送給接收端;
若數(shù)據(jù)包大小超過以太網(wǎng)數(shù)據(jù)幀的最大字節(jié)數(shù),將該數(shù)據(jù)包分成兩部分,前半部分的字節(jié)數(shù)為最大字節(jié)數(shù),對兩部分分別加上以太網(wǎng)幀頭,對前半部分設(shè)置第二重定向數(shù)據(jù)包類型字段,對后半部分設(shè)置第三重定向數(shù)據(jù)包類型字段,發(fā)送給接收端。
其中,步驟(3)中接收端對接收到的重定向數(shù)據(jù)包進(jìn)行緩存,具體為:
若數(shù)據(jù)包的字段類型為第一重定向數(shù)據(jù)包,則直接將數(shù)據(jù)包緩存到預(yù)設(shè)的緩存器里;若數(shù)據(jù)包的字段類型為第二重定向數(shù)據(jù)包或第三重定向數(shù)據(jù)包,則將兩個(gè)相應(yīng)的數(shù)據(jù)包組裝成一個(gè)數(shù)據(jù)包緩存到預(yù)設(shè)的緩存器里。
有益效果:本發(fā)明中虛擬機(jī)遷移過程中的數(shù)據(jù)流自適應(yīng)系統(tǒng)以及數(shù)據(jù)流自適應(yīng)調(diào)整方法通過在虛擬機(jī)遷移前的宿主機(jī)、虛擬機(jī)遷移后的宿主機(jī)之間建立數(shù)據(jù)通信系統(tǒng),在虛擬機(jī)遷移的過程中讓數(shù)據(jù)流自適應(yīng)調(diào)整,能夠使得虛擬機(jī)在遷移過程幾乎不丟失數(shù)據(jù)包,且對數(shù)據(jù)包帶來的延遲在幾百毫秒以內(nèi),在某些應(yīng)用場景,例如網(wǎng)絡(luò)功能虛擬化(networkfunctionvirtualization,nfv)中可以帶來極大的方便。
附圖說明
圖1是本發(fā)明中虛擬機(jī)遷移過程中的數(shù)據(jù)流自適應(yīng)系統(tǒng)的結(jié)構(gòu)示意圖;
圖2是本發(fā)明中虛擬機(jī)遷移過程中的數(shù)據(jù)流自適應(yīng)調(diào)整方法的流程圖。
具體實(shí)施方式
下面結(jié)合實(shí)施例對本發(fā)明做進(jìn)一步的詳細(xì)說明,本實(shí)施列對本發(fā)明不構(gòu)成限定。
如圖1所示,虛擬機(jī)遷移過程涉及到的物理裝置有:虛擬機(jī)遷移前的宿主機(jī)(物理機(jī))、虛擬機(jī)遷移后的宿主機(jī)、遠(yuǎn)程主機(jī)和交換機(jī),兩臺宿主機(jī)連在同一個(gè)交換機(jī)上。遠(yuǎn)程主機(jī)通過交換機(jī)向虛擬機(jī)發(fā)送數(shù)據(jù)包,交換機(jī)將數(shù)據(jù)包轉(zhuǎn)發(fā)給虛擬機(jī)所在的宿主機(jī),宿主機(jī)再利用虛擬化技術(shù)發(fā)送數(shù)據(jù)包給虛擬機(jī)。在虛擬機(jī)“停機(jī)-重啟”階段,虛擬機(jī)會從一個(gè)宿主機(jī)完整地遷移到另一個(gè)宿主機(jī)上,此時(shí),交換機(jī)在遷移過程還沒有結(jié)束時(shí)仍然向遷移前的宿主機(jī)發(fā)送數(shù)據(jù)包。
本發(fā)明中虛擬機(jī)遷移過程中的數(shù)據(jù)流自適應(yīng)系統(tǒng)以及數(shù)據(jù)自適應(yīng)方法主要應(yīng)用于該階段,本發(fā)明中虛擬機(jī)遷移過程中的數(shù)據(jù)流自適應(yīng)系統(tǒng)包括:
重定向數(shù)據(jù)包的發(fā)送端,簡稱發(fā)送端,位于遷移前的宿主機(jī),用于在虛擬機(jī)停機(jī)時(shí)重定向后續(xù)到達(dá)虛擬機(jī)的數(shù)據(jù)包,包括攔截本應(yīng)該發(fā)給虛擬機(jī)的數(shù)據(jù)包、改寫數(shù)據(jù)包的地址信息、拆分?jǐn)?shù)據(jù)包等,進(jìn)而將收到的數(shù)據(jù)包轉(zhuǎn)發(fā)到目標(biāo)物理機(jī)的接收端,即重發(fā)數(shù)據(jù)包的接收端。
重發(fā)數(shù)據(jù)包的接收端,簡稱接收端,位于遷移后的宿主機(jī),一方面用于緩存虛擬機(jī)停機(jī)階段從發(fā)送端發(fā)來的數(shù)據(jù)包,另一方面用于緩存遷移結(jié)束交換機(jī)改變數(shù)據(jù)流向后遠(yuǎn)程主機(jī)發(fā)給虛擬機(jī)的數(shù)據(jù)包,通過發(fā)送arp(地址解析協(xié)議)等手段確保虛擬機(jī)啟動以及網(wǎng)絡(luò)組織結(jié)構(gòu)調(diào)整完畢,并將以上緩存的兩部分?jǐn)?shù)據(jù)包按順序發(fā)送給宿主機(jī)上新啟動的虛擬機(jī)。
本發(fā)明中數(shù)據(jù)包在發(fā)送端和接收端之間采用的轉(zhuǎn)移機(jī)制為:發(fā)送端和接收端通過添加以太網(wǎng)幀頭的方式相互進(jìn)行通信,用通知-回應(yīng)的方式標(biāo)記轉(zhuǎn)發(fā)數(shù)據(jù)流的結(jié)束。
相應(yīng)地,本發(fā)明中虛擬機(jī)遷移過程中的數(shù)據(jù)流自適應(yīng)調(diào)整方法,采用基于xen虛擬機(jī)平臺的熱遷移機(jī)制,通過修改這種熱遷移機(jī)制在遷移過程中的不同階段對后續(xù)到達(dá)的數(shù)據(jù)包進(jìn)行處理,來達(dá)到轉(zhuǎn)發(fā)數(shù)據(jù)包的目的,從而在虛擬機(jī)層面看來數(shù)據(jù)包不會丟失。
熱遷移是xen下實(shí)現(xiàn)的一種遷移機(jī)制,從代碼層面看其實(shí)就是幾個(gè)主要函數(shù)的調(diào)用。函數(shù)調(diào)用前和函數(shù)調(diào)用后分別代表著遷移的開始和結(jié)束,在代碼實(shí)現(xiàn)時(shí),通過往這兩個(gè)地方插入代碼可以通知其他程序遷移的開始和結(jié)束。
具體地,本發(fā)明中虛擬機(jī)遷移過程中的數(shù)據(jù)流自適應(yīng)調(diào)整方法包括以下步驟:
(1)遷移開始階段的發(fā)送端和接收端初始化
發(fā)送端模擬出一塊虛擬網(wǎng)卡,為該網(wǎng)卡定義一個(gè)不同于網(wǎng)絡(luò)環(huán)境內(nèi)其他機(jī)器地址的mac地址(物理地址),并通過廣播數(shù)據(jù)包向網(wǎng)絡(luò)環(huán)境內(nèi)其他機(jī)器通知該網(wǎng)卡的位置及其mac地址;
接收端模擬出一塊虛擬網(wǎng)卡,為該網(wǎng)卡定義一個(gè)不同于網(wǎng)絡(luò)環(huán)境內(nèi)其他機(jī)器地址的mac地址,并通過廣播數(shù)據(jù)包向網(wǎng)絡(luò)環(huán)境內(nèi)其他機(jī)器通知該網(wǎng)卡的位置及其mac地址。(2)在遷移快結(jié)束時(shí),即xen熱遷移最后一次拷貝開始前,修改數(shù)據(jù)包流向
發(fā)送端修改宿主機(jī)內(nèi)部的虛擬網(wǎng)絡(luò),攔截本應(yīng)該發(fā)給虛擬機(jī)的數(shù)據(jù)包,進(jìn)入收包-發(fā)包循環(huán),直到收到接收端發(fā)來的通知數(shù)據(jù)包,回收各種資源,并發(fā)送一個(gè)回應(yīng)數(shù)據(jù)包給接收端;
接收端進(jìn)行收包-緩存包循環(huán),在遷移結(jié)束時(shí)發(fā)送通知數(shù)據(jù)包給發(fā)送端,直到收到發(fā)送端發(fā)來的回應(yīng)數(shù)據(jù)包;遷移過程結(jié)束后,接收端接收從遠(yuǎn)程主機(jī)直接發(fā)送的數(shù)據(jù)包并進(jìn)行緩存;接收端收到回應(yīng)數(shù)據(jù)包后發(fā)送arp數(shù)據(jù)包測試虛擬機(jī)是否可以響應(yīng)外界請求,若是,則接收端按順序發(fā)送緩存的數(shù)據(jù)包(buffer1和buffer2),之后回收資源,結(jié)束;否則,繼續(xù)發(fā)送arp數(shù)據(jù)包直到虛擬機(jī)可以響應(yīng)外界請求為止。
上述發(fā)送端修改宿主機(jī)內(nèi)部的虛擬網(wǎng)絡(luò),指的是:宿主機(jī)里有虛擬網(wǎng)橋,虛擬網(wǎng)橋上連接著實(shí)際網(wǎng)卡和虛擬機(jī)的虛擬網(wǎng)卡,虛擬機(jī)通過該虛擬網(wǎng)橋可以與外部機(jī)器進(jìn)行通信。將發(fā)送端進(jìn)程模擬出的虛擬網(wǎng)卡也橋接在同一個(gè)虛擬網(wǎng)橋上,修改該虛擬網(wǎng)橋的轉(zhuǎn)發(fā)規(guī)則將本來要發(fā)給虛擬機(jī)的數(shù)據(jù)包轉(zhuǎn)發(fā)給發(fā)送端即可實(shí)現(xiàn)對數(shù)據(jù)包的攔截。
如圖2左半部分,上述發(fā)送端進(jìn)行收包-發(fā)包循環(huán),具體為:
發(fā)送端從其虛擬網(wǎng)卡獲取數(shù)據(jù)包,對數(shù)據(jù)包進(jìn)行解析,并根據(jù)其源物理地址和目標(biāo)物理地址確定數(shù)據(jù)包的來源,若數(shù)據(jù)包是發(fā)送給虛擬機(jī)的數(shù)據(jù)包,即以太網(wǎng)幀的目標(biāo)mac與分配給虛擬機(jī)的mac地址相吻合,則對數(shù)據(jù)包進(jìn)行重定向;若數(shù)據(jù)包是接收端發(fā)送的通知數(shù)據(jù)包,即源mac地址為虛擬機(jī)地址,目標(biāo)地址為發(fā)送端虛擬mac地址,則向接收端發(fā)送回應(yīng)數(shù)據(jù)包,結(jié)束循環(huán)。
上述對數(shù)據(jù)包進(jìn)行重定向,具體為:
根據(jù)以太網(wǎng)的數(shù)據(jù)幀格式,若數(shù)據(jù)包大小不超過1500個(gè)字節(jié)(以太網(wǎng)數(shù)據(jù)幀的最大字節(jié)數(shù)),加上14個(gè)字節(jié)的以太網(wǎng)幀頭,源mac地址填發(fā)送端虛擬網(wǎng)卡的mac地址,目標(biāo)mac地址填接收端虛擬網(wǎng)卡的mac地址,類型字段(2字節(jié))填99,發(fā)送給接收端;
若數(shù)據(jù)包大小超過1500字節(jié),將該數(shù)據(jù)包的分成1500字節(jié)和后半部分,對兩部分分別加上以太網(wǎng)幀頭,對第一個(gè)部分的數(shù)據(jù)包類型字段填97,第二個(gè)部分的數(shù)據(jù)包類型字段填98。
上述回應(yīng)數(shù)據(jù)包的類型字段填96。
如圖2右半部分,上述接收端進(jìn)行收包-緩存包循環(huán)具體為:
接收端從其虛擬網(wǎng)卡獲取數(shù)據(jù)包,對數(shù)據(jù)包進(jìn)行解析,首先根據(jù)其源物理地址和目標(biāo)物理地址確定數(shù)據(jù)包的來源,若數(shù)據(jù)包是發(fā)送端發(fā)來的數(shù)據(jù)包,則按數(shù)據(jù)包的類型做進(jìn)一步處理;若數(shù)據(jù)包是交換機(jī)直接轉(zhuǎn)發(fā)過來的遠(yuǎn)程主機(jī)發(fā)給虛擬機(jī)的數(shù)據(jù)包,則緩存數(shù)據(jù)包到buffer2。
上述對于發(fā)送端發(fā)來的數(shù)據(jù)包,則按數(shù)據(jù)包的類型做進(jìn)一步處理,具體為:
查看類型字段,若類型字段是99,直接將該數(shù)據(jù)包緩存起來到buffer1;
若類型字段是97或者是98,組裝成一個(gè)數(shù)據(jù)包緩存起來到buffer1;
若類型字段是96,表明接收端已經(jīng)收到一個(gè)從發(fā)送端發(fā)來的回應(yīng)數(shù)據(jù)包,開始用arp檢測數(shù)據(jù)包檢測虛擬機(jī)是否能對外響應(yīng),若能響應(yīng),則發(fā)送buffer1和buffer2,否則繼續(xù)檢測。
以下對通知數(shù)據(jù)包,回應(yīng)數(shù)據(jù)包以及arp檢測數(shù)據(jù)包的作用進(jìn)一步說明。
通知數(shù)據(jù)包是接收端在遷移結(jié)束后發(fā)出的,其源mac地址是虛擬機(jī)網(wǎng)卡的mac地址(為虛擬機(jī)分配的mac地址是配置文件設(shè)置的,遷移前后都不變,因此發(fā)送端和接收端在初始化時(shí)就能知道這個(gè)地址),目的mac地址是發(fā)送端的虛擬網(wǎng)卡mac地址。通知數(shù)據(jù)包其實(shí)就是接收端“冒充”虛擬機(jī)發(fā)送給發(fā)送端一個(gè)報(bào)文。其作用有兩個(gè):
一是該數(shù)據(jù)包會經(jīng)過兩臺宿主機(jī)相連的同一個(gè)交換機(jī),告知交換機(jī)該虛擬機(jī)已經(jīng)處在另一個(gè)端口,促使接下來從遠(yuǎn)處主機(jī)發(fā)送給虛擬機(jī)的流量從該端口送出,進(jìn)而到達(dá)遷移后的宿主機(jī)由接收端保存。
二是標(biāo)記需要轉(zhuǎn)發(fā)的數(shù)據(jù)流的結(jié)束。發(fā)送端轉(zhuǎn)發(fā)數(shù)據(jù)包的時(shí)候,無法知道什么時(shí)候在鏈路上的數(shù)據(jù)流會結(jié)束。而通知數(shù)據(jù)包由于在經(jīng)過交換機(jī)時(shí)就促使交換機(jī)改變了流量端口,在它被原宿主機(jī)上的發(fā)送端接收的時(shí)候,肯定是從交換機(jī)到原宿主機(jī)這條鏈路上需要處理的最后一個(gè)數(shù)據(jù)包了。
回應(yīng)數(shù)據(jù)包是對通知數(shù)據(jù)包的回應(yīng),其源mac地址是發(fā)送端的虛擬網(wǎng)卡地址,目的mac地址是接收端的虛擬網(wǎng)卡地址。該數(shù)據(jù)包其實(shí)就是發(fā)送端檢測到轉(zhuǎn)發(fā)流結(jié)束后給接收端發(fā)的一個(gè)通知,通知接收端buffer1已經(jīng)不需要再等待緩存其他數(shù)據(jù)包,即如果buffer1當(dāng)前的數(shù)據(jù)包發(fā)送完畢,可以直接開始發(fā)送buffer2的數(shù)據(jù)包了。
轉(zhuǎn)發(fā)數(shù)據(jù)包(在本文中又稱重定向數(shù)據(jù)包)、回應(yīng)數(shù)據(jù)包的類型99,98,97,96等是對不同類型數(shù)據(jù)包的區(qū)分,只要不是以太網(wǎng)已經(jīng)定義的類型可以替換成其他數(shù)字。
arp檢測數(shù)據(jù)包是遷移后宿主機(jī)內(nèi)部對虛擬機(jī)能否響應(yīng)的檢測。雖然通知數(shù)據(jù)包是在遷移結(jié)束后發(fā)出的,但是遷移結(jié)束和虛擬機(jī)能夠?qū)ν忭憫?yīng)中間有一段時(shí)間差(環(huán)境重新部署,檢測正確性等帶來的時(shí)間損耗)。若在遷移結(jié)束但是虛擬機(jī)還沒能對外響應(yīng)時(shí)就釋放buffer1和buffer2的數(shù)據(jù)包,這些數(shù)據(jù)包將會被丟棄。