專(zhuān)利名稱:虛擬機(jī)的分布式虛擬磁盤(pán)系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)科學(xué)中的虛擬機(jī)領(lǐng)域,特別是涉及虛擬機(jī)中利用網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)磁盤(pán)數(shù)據(jù) 的分布式存儲(chǔ)機(jī)制。
背景技術(shù):
虛擬機(jī)是一種物理機(jī)器的軟件實(shí)現(xiàn),能夠使程序在虛擬機(jī)上像在實(shí)際主機(jī)上一樣運(yùn)行。 位于主機(jī)硬件和操作系統(tǒng)之間的系統(tǒng)級(jí)虛擬機(jī)軟件能夠提供一個(gè)完全的虛擬硬件資源環(huán)境, 在這個(gè)虛擬硬件環(huán)境上運(yùn)行的客戶操作系統(tǒng)所面對(duì)的不是實(shí)際的物理硬件設(shè)備。因此,實(shí)際 物理設(shè)備的實(shí)現(xiàn)對(duì)操作系統(tǒng)來(lái)說(shuō)是透明的,可以用不同的方法實(shí)現(xiàn)虛擬機(jī)的物理設(shè)備來(lái)給操 作系統(tǒng)提供統(tǒng)一的虛擬硬件環(huán)境。
通過(guò)網(wǎng)絡(luò)為虛擬機(jī)提供虛擬存儲(chǔ)在實(shí)際應(yīng)用中得到了廣泛的應(yīng)用,本發(fā)明把通過(guò)網(wǎng)絡(luò)向 虛擬機(jī)提供存儲(chǔ)的方式稱之為虛擬磁盤(pán),因?yàn)樵谔摂M機(jī)上的客戶操作系統(tǒng)看來(lái),這種存儲(chǔ)方 式就像是連接在本機(jī)設(shè)備上的磁盤(pán)一樣。當(dāng)前,利用已有的網(wǎng)絡(luò)存儲(chǔ)協(xié)議,為虛擬機(jī)提供存 儲(chǔ)的具體實(shí)施方案主要有
(1) 利用NBD (Network Block Device)為虛擬機(jī)提供網(wǎng)絡(luò)存儲(chǔ)
在Linux系統(tǒng)中,NBD是一個(gè)設(shè)備節(jié)點(diǎn),它的數(shù)據(jù)內(nèi)容由位于網(wǎng)絡(luò)上的服務(wù)器提供,所以 NBD是用來(lái)訪問(wèn)位于遠(yuǎn)程主機(jī)上實(shí)際物理存儲(chǔ)設(shè)備的本地設(shè)備節(jié)點(diǎn)。NBD由兩部分構(gòu)成,在 NBD工作的客戶主機(jī)上,NBD內(nèi)核模塊控制設(shè)備??蛻糁鳈C(jī)上所有對(duì)NBD設(shè)備節(jié)點(diǎn)的訪問(wèn)請(qǐng)求 被這個(gè)模塊轉(zhuǎn)發(fā)到實(shí)際存儲(chǔ)數(shù)據(jù)的服務(wù)器主機(jī)。另一部分運(yùn)行在提供物理存儲(chǔ)的服務(wù)器上, 與NBD交互提供對(duì)物理存儲(chǔ)設(shè)備的訪問(wèn)。
(2) 利用iSCSI(internet SCSI)為虛擬機(jī)提供網(wǎng)絡(luò)存儲(chǔ)
iSCSI協(xié)議中,客戶端將SCSI命令發(fā)送給位于遠(yuǎn)程服務(wù)器上的存儲(chǔ)設(shè)備,在IP網(wǎng)上通過(guò) 兩臺(tái)主機(jī)協(xié)商交換SCSI命令來(lái)獲取和同步數(shù)據(jù)。因此,iSCSI在廣域網(wǎng)上模擬了一個(gè)高性能 的本地存儲(chǔ)總線。利用iSCSI協(xié)議,在虛擬機(jī)中使從網(wǎng)絡(luò)上獲取數(shù)據(jù)的過(guò)程對(duì)運(yùn)行在虛擬機(jī) 上面的操作系統(tǒng)透明,從而為其提供網(wǎng)絡(luò)存儲(chǔ)服務(wù)。
(3) 利用網(wǎng)絡(luò)文件系統(tǒng)為虛擬機(jī)提供網(wǎng)絡(luò)存儲(chǔ)網(wǎng)絡(luò)文件系統(tǒng)是一種在網(wǎng)絡(luò)上支持文件共享的文件系統(tǒng),如NFS (Network File System), AFS(Andrew File System)等。對(duì)用戶而言,在終端計(jì)算機(jī)上通過(guò)網(wǎng)絡(luò)訪問(wèn)文件,這些網(wǎng)絡(luò)存 儲(chǔ)設(shè)備就像是連接在本地的磁盤(pán)一樣。因此,網(wǎng)絡(luò)文件系統(tǒng)對(duì)應(yīng)用程序來(lái)說(shuō)是透明的,應(yīng)用 程序不知道操作的是本地文件還是遠(yuǎn)程的文件,由網(wǎng)絡(luò)文件系統(tǒng)來(lái)負(fù)責(zé)定位文件并進(jìn)行傳輸。
根據(jù)所面對(duì)的數(shù)據(jù)類(lèi)型不同,(1)和(2)是基于塊的網(wǎng)絡(luò)存儲(chǔ)方案。它們操作的數(shù)據(jù)是 磁盤(pán)上的一個(gè)數(shù)據(jù)塊序列,不關(guān)注這些數(shù)據(jù)塊序列上的邏輯組織結(jié)構(gòu)。因此實(shí)現(xiàn)方案跟上層 的文件系統(tǒng)類(lèi)型無(wú)關(guān)。(3)是基于文件系統(tǒng)的網(wǎng)絡(luò)存儲(chǔ)方案,它操作的數(shù)據(jù)對(duì)象是文件。
這些網(wǎng)絡(luò)存儲(chǔ)方式都提供了多用戶并發(fā)情況下文件共享的通用功能,能夠滿足通過(guò)網(wǎng)絡(luò) 為虛擬機(jī)提供存儲(chǔ)的一般性需求。但由于網(wǎng)絡(luò)存儲(chǔ)需求的多樣性和通過(guò)網(wǎng)絡(luò)為虛擬機(jī)提供虛 擬磁盤(pán)的特殊需求,在實(shí)際應(yīng)用中,往往需要將服務(wù)器上存儲(chǔ)設(shè)備不同的部分提供給特定的 虛擬機(jī)作為其實(shí)際的存儲(chǔ)設(shè)備。此外,為了增加服務(wù)器端數(shù)據(jù)管理的靈活性,往往需要在將 數(shù)據(jù)提供給虛擬機(jī)之前做一些處理,從而獲得一些特殊的功能。因此,本申請(qǐng)針對(duì)這些特殊 需求,發(fā)明了一種通過(guò)網(wǎng)絡(luò)為虛擬機(jī)提供虛擬磁盤(pán)的方法。
發(fā)明內(nèi)容
本發(fā)明以通過(guò)網(wǎng)絡(luò)為虛擬機(jī)提供存儲(chǔ)為目標(biāo),設(shè)計(jì)并實(shí)現(xiàn)了一種滿足虛擬機(jī)存儲(chǔ)特殊需
求的虛擬磁盤(pán)。具體包括
1. 在虛擬機(jī)運(yùn)行的終端上提供一個(gè)負(fù)責(zé)數(shù)據(jù)轉(zhuǎn)發(fā)的虛擬磁盤(pán)驅(qū)動(dòng)和守護(hù)進(jìn)程。這個(gè)守護(hù) 進(jìn)程從虛擬機(jī)獲得數(shù)據(jù)請(qǐng)求,并將這個(gè)請(qǐng)求轉(zhuǎn)發(fā)給提供數(shù)據(jù)存儲(chǔ)服務(wù)的服務(wù)器。從服務(wù)器獲 得請(qǐng)求的數(shù)據(jù)以后,轉(zhuǎn)發(fā)給請(qǐng)求數(shù)據(jù)的虛擬機(jī)。為了提高性能,對(duì)從服務(wù)器獲得的數(shù)據(jù)進(jìn)行 緩存。同時(shí),為了減少數(shù)據(jù)請(qǐng)求時(shí)延,該進(jìn)程具有"預(yù)取"功能。這樣,即使虛擬機(jī)沒(méi)有請(qǐng) 求,守護(hù)進(jìn)程也從服務(wù)器獲取未被緩存的數(shù)據(jù)并進(jìn)行緩存,以備將來(lái)虛擬機(jī)請(qǐng)求時(shí)直接從緩 存中獲取數(shù)據(jù)。
2. 服務(wù)器端虛擬磁盤(pán)映像維護(hù)及表示。服務(wù)器端根據(jù)虛擬機(jī)的用戶身份為每個(gè)虛擬機(jī)組 織并管理它的實(shí)際物理存儲(chǔ)。在服務(wù)器上, 一個(gè)虛擬機(jī)的磁盤(pán)被分成若干部分,每個(gè)部分是 一個(gè)磁盤(pán)映像文件。服務(wù)器端通過(guò)用戶身份、請(qǐng)求數(shù)據(jù)的地址和磁盤(pán)類(lèi)型進(jìn)行尋址,定位是 哪個(gè)文件中的哪個(gè)數(shù)據(jù)塊,然后將物理存儲(chǔ)的數(shù)據(jù)發(fā)送給請(qǐng)求方。因此,服務(wù)器提供給虛擬 機(jī)存儲(chǔ)設(shè)備的視圖是一個(gè)統(tǒng)一的數(shù)據(jù)磁盤(pán),但實(shí)際上物理存儲(chǔ)的方式和這種視圖截然不同。
3. 磁盤(pán)映像的傳輸和同步。在虛擬機(jī)和服務(wù)器之間,數(shù)據(jù)以塊為單位進(jìn)行傳輸。這樣,
與實(shí)際磁盤(pán)的文件系統(tǒng)無(wú)關(guān)。本發(fā)明采用位圖機(jī)制在虛擬機(jī)運(yùn)行終端的緩存和服務(wù)器的物理存儲(chǔ)設(shè)備之間進(jìn)行數(shù)據(jù)同步,以保證經(jīng)過(guò)修改的數(shù)據(jù)被寫(xiě)回到服務(wù)器上,從而保證每一次虛 擬機(jī)獲取數(shù)據(jù)的一致性。
與現(xiàn)有技術(shù)相比較,本發(fā)明的創(chuàng)新之處在于根據(jù)虛擬機(jī)的特殊存儲(chǔ)需求,設(shè)計(jì)針對(duì)性 很強(qiáng)的網(wǎng)絡(luò)存儲(chǔ)方案,更好地滿足通過(guò)網(wǎng)絡(luò)為虛擬機(jī)提供存儲(chǔ)的需求。另外,在服務(wù)器端增 加了虛擬磁盤(pán)映射機(jī)制,來(lái)達(dá)到節(jié)省存儲(chǔ)空間、方便系統(tǒng)維護(hù)的目的。具體體現(xiàn)在
1. 本發(fā)明中,為每個(gè)虛擬機(jī)分配一片獨(dú)占的存儲(chǔ)空間,對(duì)他們共享的存儲(chǔ)空間只允許讀。 現(xiàn)有的網(wǎng)絡(luò)存儲(chǔ)技術(shù)目的是為了實(shí)現(xiàn)網(wǎng)絡(luò)上存儲(chǔ)的共享,因此,同一片存儲(chǔ)區(qū)域允許多個(gè)實(shí) 例并發(fā)訪問(wèn)。但對(duì)于虛擬機(jī)來(lái)講,它的存儲(chǔ)空間就是它的系統(tǒng)數(shù)據(jù)磁盤(pán),讀寫(xiě)只能由它上面 的客戶操作系統(tǒng)進(jìn)行。如果被別的虛擬機(jī)修改后,那么會(huì)導(dǎo)致系統(tǒng)數(shù)據(jù)的不一致,嚴(yán)重的話 會(huì)導(dǎo)致運(yùn)行在虛擬機(jī)上的^^戶操作系統(tǒng)崩潰。
2. 本發(fā)明中對(duì)每個(gè)虛擬機(jī)的存儲(chǔ)空間進(jìn)行分塊,可以在不同的塊上有不同的訪問(wèn)權(quán)限和 操作方式。通過(guò)映射的機(jī)制,服務(wù)器將這些塊整合成一個(gè)統(tǒng)一的虛擬磁盤(pán),并提供給虛擬機(jī) 作為它的虛擬磁盤(pán)。
圖1為虛擬磁盤(pán)的體系結(jié)構(gòu);圖2為虛擬磁盤(pán)終端I/0驅(qū)動(dòng)處理邏輯;圖3為虛擬磁盤(pán) 映像映射機(jī)制(在圖3中,VSI表示"虛擬磁盤(pán)映像";S表示"系統(tǒng)映像文件";Ui表示"用 戶映像文件";Ai表示"輔助映像文件";Si表示"虛擬系統(tǒng)映像");圖4為位圖-塊狀 態(tài)記錄方法;圖5為數(shù)據(jù)傳輸交互命令格式。
具體實(shí)施例方式
請(qǐng)參閱圖1,本發(fā)明由兩部分構(gòu)成(1)在終端,如圖l(a),以虛擬磁盤(pán)驅(qū)動(dòng)為核心,
為虛擬機(jī)提供虛擬磁盤(pán)I/0請(qǐng)求處理服務(wù)。(2)在服務(wù)器端,如圖l(b),是一個(gè)層次化結(jié)構(gòu)
的磁盤(pán)映像處理方法,為虛擬機(jī)在網(wǎng)絡(luò)上提供實(shí)際的存儲(chǔ)服務(wù)。圖中的系統(tǒng)映像或磁盤(pán)映像,
是一個(gè)系統(tǒng)中以文件形式存在的所有數(shù)據(jù)的集合,其中包括操作系統(tǒng)或應(yīng)用程序的文件、用
戶個(gè)人文件等。在存儲(chǔ)的形式上,磁盤(pán)映像是一個(gè)大的映像文件。映像文件中數(shù)據(jù)的邏輯組
織格式與磁盤(pán)的文件系統(tǒng)(ext3、 NTFS等)相同,因此,這個(gè)磁盤(pán)映像就是一個(gè)按照磁盤(pán)存儲(chǔ)
數(shù)據(jù)的格式存儲(chǔ)數(shù)據(jù)的大文件,也是一個(gè)系統(tǒng)必不可少的數(shù)據(jù)存儲(chǔ)映像。如圖1所示,實(shí)際的數(shù)據(jù)內(nèi)容存儲(chǔ)在服務(wù)器上,(1)負(fù)責(zé)根據(jù)虛擬機(jī)的需求,從本地文件系統(tǒng)或(2)上獲取數(shù) 據(jù)并提供給虛擬機(jī)。如果數(shù)據(jù)來(lái)自服務(wù)器,為了增加訪問(wèn)的速度,(1)同時(shí)對(duì)這些數(shù)據(jù)進(jìn)行 緩存。虛擬機(jī)對(duì)磁盤(pán)的讀寫(xiě)都發(fā)生在本地,當(dāng)本地緩存數(shù)據(jù)被虛擬機(jī)修改后,會(huì)造成與存儲(chǔ) 在服務(wù)器上的數(shù)據(jù)不一致。因此,還需要增加同步功能進(jìn)行存儲(chǔ)數(shù)據(jù)的管理。下面,首先分 別具體介紹(1)、 (2)的具體工作機(jī)制,最后,介紹(1)和(2)之間的數(shù)據(jù)傳輸和同步機(jī) 制。
在這里,虛擬磁盤(pán)主要針對(duì)Xen虛擬機(jī)設(shè)計(jì)。(1)中,Xen虛擬機(jī)上可以創(chuàng)建多個(gè)客戶操 作系統(tǒng),其中有一個(gè)稱為域O的特殊客戶操作系統(tǒng),其它稱為域U的客戶操作系統(tǒng)都是普通 客戶操作系統(tǒng)。利用Xen的block t印接口,設(shè)計(jì)了一個(gè)用戶態(tài)的虛擬磁盤(pán)驅(qū)動(dòng)程序模塊。 該模塊用來(lái)在Xen中為一個(gè)域U創(chuàng)建一個(gè)作為其磁盤(pán)的虛擬塊設(shè)備。block t印接口能夠?qū)?來(lái)自虛擬機(jī)的塊I/O請(qǐng)求發(fā)送到用戶態(tài)的磁盤(pán)驅(qū)動(dòng)程序。這樣,利用block tap,驅(qū)動(dòng)程序 就可以處理來(lái)自域U的I/0請(qǐng)求。如發(fā)送一個(gè)數(shù)據(jù)塊、更新一個(gè)數(shù)據(jù)塊、創(chuàng)建一個(gè)數(shù)據(jù)塊等。 這里的塊是一個(gè)數(shù)據(jù)處理的單位, 一個(gè)塊由若干字節(jié)構(gòu)成,這里采用的塊大小是512字節(jié)。 所以,本發(fā)明的虛擬磁盤(pán)是數(shù)據(jù)塊級(jí)的實(shí)現(xiàn),而不是文件系統(tǒng)級(jí)的。數(shù)據(jù)塊級(jí)的實(shí)現(xiàn)能夠?yàn)?存儲(chǔ)提供一個(gè)更加底層的接口,從而屏蔽各個(gè)不同版本操作系統(tǒng)之間的差別。
請(qǐng)參考圖1 (a),終端提供的虛擬磁盤(pán)包括兩個(gè)部分,分別是臨時(shí)存儲(chǔ)區(qū)域和虛擬機(jī)的文 件系統(tǒng)(系統(tǒng)映像緩存)。存儲(chǔ)在緩存中的系統(tǒng)映像是域U操作系統(tǒng)的文件系統(tǒng)。在計(jì)算機(jī)系 統(tǒng)運(yùn)行過(guò)程中,有些保存在磁盤(pán)上的臨時(shí)數(shù)據(jù)是不需要永久保存的,如Web緩存頁(yè)。因此, 在終端的存儲(chǔ)設(shè)備上,開(kāi)辟一定的臨時(shí)存儲(chǔ)區(qū)域用來(lái)存儲(chǔ)這些數(shù)據(jù),當(dāng)機(jī)器關(guān)閉時(shí),直接丟 棄這些數(shù)據(jù),從而減少數(shù)據(jù)維護(hù)量,增加處理性能。而對(duì)于系統(tǒng)映像,虛擬機(jī)對(duì)磁盤(pán)的操作 都直接在系統(tǒng)映像緩存上進(jìn)行。具體操作邏輯如下
如圖2所示,虛擬機(jī)的I/0請(qǐng)求到達(dá)磁盤(pán)驅(qū)動(dòng)后,"I/0請(qǐng)求處理"邏輯根據(jù)請(qǐng)求類(lèi)型(讀 或?qū)?分別進(jìn)行處理。本發(fā)明中采用位圖記錄緩存中的每個(gè)數(shù)據(jù)塊的狀態(tài),根據(jù)其狀態(tài)對(duì)每個(gè) 數(shù)據(jù)塊分別進(jìn)行操作,位圖的具體方法在稍后數(shù)據(jù)傳輸和同歩過(guò)程介紹。(1)若是虛擬機(jī)的 讀請(qǐng)求,首先根據(jù)請(qǐng)求地址從位圖中査詢所請(qǐng)求數(shù)據(jù)塊的當(dāng)前狀態(tài)。如果所請(qǐng)求的所有數(shù)據(jù) 塊己經(jīng)在緩存中,則直接從緩存中讀取請(qǐng)求數(shù)據(jù),并將這些數(shù)據(jù)發(fā)送回給"I/0請(qǐng)求處理", 再由"I/O請(qǐng)求處理"發(fā)送給虛擬機(jī)。如果所請(qǐng)求數(shù)據(jù)塊在相應(yīng)位圖中狀態(tài)是未被緩存,這 表明需要到服務(wù)器上去獲取請(qǐng)求數(shù)據(jù),這時(shí),磁盤(pán)驅(qū)動(dòng)將讀請(qǐng)求發(fā)送給數(shù)據(jù)轉(zhuǎn)發(fā)守護(hù)進(jìn)程。 數(shù)據(jù)轉(zhuǎn)發(fā)守護(hù)進(jìn)程收到讀請(qǐng)求后,與服務(wù)器連接并轉(zhuǎn)發(fā)讀請(qǐng)求給服務(wù)器。從服務(wù)器獲得數(shù)據(jù) 后,再轉(zhuǎn)發(fā)給磁盤(pán)驅(qū)動(dòng)。磁盤(pán)驅(qū)動(dòng)收到請(qǐng)求的數(shù)據(jù)后,立即發(fā)回給"I/0請(qǐng)求處理",同時(shí),將這些數(shù)據(jù)寫(xiě)入緩存中,并在位圖中將相應(yīng)的位置為"己緩存"。下一次虛擬機(jī)再讀取這些數(shù) 據(jù)的時(shí)候,就可以直接從緩存中讀取數(shù)據(jù)。(2)若請(qǐng)求是寫(xiě)請(qǐng)求,磁盤(pán)驅(qū)動(dòng)直接將數(shù)據(jù)寫(xiě)入 到緩存中,并將位圖中相應(yīng)的位置為"己修改",表明當(dāng)前緩存中的數(shù)據(jù)是最新的。執(zhí)行完寫(xiě) 操作后,立即向"I/0請(qǐng)求處理"返回寫(xiě)響應(yīng)。
在服務(wù)器端,如圖l(b)所示,磁盤(pán)映像提供邏輯為多個(gè)用戶維護(hù)并提供系統(tǒng)磁盤(pán)映像。 每一個(gè)用戶對(duì)應(yīng)一個(gè)磁盤(pán)映像,但用戶在終端從服務(wù)器上最終獲取的系統(tǒng)磁盤(pán)映像并不是物
理上實(shí)際存在的磁盤(pán)映像,而是虛擬磁盤(pán)映像(VSI)。磁盤(pán)映像提供邏輯通過(guò)一個(gè)對(duì)用戶透明 的映射過(guò)程為用戶提供虛擬磁盤(pán)映像。磁盤(pán)映像提供邏輯由物理存儲(chǔ)層(磁盤(pán)映像文件倉(cāng)庫(kù))、 磁盤(pán)映射層和磁盤(pán)映像表示層三層構(gòu)成。物理存儲(chǔ)層負(fù)責(zé)實(shí)際磁盤(pán)映像文件的存儲(chǔ),磁盤(pán)映 像映射層完成從物理存儲(chǔ)的磁盤(pán)映像文件到用戶最終獲得的虛擬磁盤(pán)映像的映射過(guò)程,而磁 盤(pán)映像表示層則在網(wǎng)絡(luò)上提供用戶對(duì)其虛擬磁盤(pán)映像的訪問(wèn),用戶在網(wǎng)絡(luò)上對(duì)虛擬磁盤(pán)映像 的訪問(wèn)都是通過(guò)磁盤(pán)映像表示層完成的。在磁盤(pán)映像的管理中,本發(fā)明采用基于用戶的管理 方式。因?yàn)榉?wù)器要為多個(gè)用戶在網(wǎng)絡(luò)上提供存儲(chǔ)服務(wù),每個(gè)用戶唯一標(biāo)識(shí)一個(gè)虛擬磁盤(pán)映
像。物理存在的映像文件包括三種(1)系統(tǒng)映像文件,(2)輔助系統(tǒng)映像文件和(3)用戶
映像文件。 一個(gè)用戶的虛擬磁盤(pán)映像最終由這三種實(shí)際存在的磁盤(pán)映像文件構(gòu)成,每種一個(gè)。 系統(tǒng)文件映像對(duì)應(yīng)于安裝有某種版本操作系統(tǒng)的系統(tǒng)磁盤(pán),因此,每個(gè)虛擬磁盤(pán)映像必須基 于一個(gè)系統(tǒng)文件映像,作為終端虛擬機(jī)上運(yùn)行的客戶操作系統(tǒng)的系統(tǒng)磁盤(pán)。在本發(fā)明的系統(tǒng) 中,每個(gè)具體的操作系統(tǒng)只有一個(gè)系統(tǒng)文件映像,因此一個(gè)系統(tǒng)文件映像可能被多個(gè)用戶所 共享。這種方法可以節(jié)省服務(wù)器上的存儲(chǔ)空間,同時(shí)也有利于系統(tǒng)的更新。這樣做的代價(jià)是 需要將各個(gè)用戶的虛擬磁盤(pán)映像與一個(gè)特定的系統(tǒng)文件映像進(jìn)行映射。 一個(gè)用戶對(duì)共享的系 統(tǒng)文件映像的修改可能會(huì)導(dǎo)致用戶之間的沖突,為了避免這種沖突,本發(fā)明中為每個(gè)虛擬磁 盤(pán)映像增加了一個(gè)輔助系統(tǒng)文件映像。每個(gè)用戶對(duì)系統(tǒng)文件映像的所有修改都要寫(xiě)入用戶的 輔助系統(tǒng)文件映像中。用戶文件映像用來(lái)存儲(chǔ)每個(gè)用戶自己的數(shù)據(jù)。
圖3顯示了如何將三種不同類(lèi)型的文件映像通過(guò)映射為用戶提供一個(gè)虛擬磁盤(pán)映像。一 個(gè)虛擬磁盤(pán)映像表示的是一個(gè)虛擬磁盤(pán),虛擬磁盤(pán)的塊地址是從0開(kāi)始到虛擬磁盤(pán)所有塊數(shù) 的連續(xù)地址, 一個(gè)塊地址對(duì)應(yīng)虛擬磁盤(pán)中的一個(gè)數(shù)據(jù)塊。系統(tǒng)映像文件和用戶映像文件是虛 擬磁盤(pán)映像中的兩個(gè)分區(qū),用戶映像文件是每個(gè)用戶自己的存儲(chǔ)區(qū),用戶可以對(duì)其進(jìn)行任意 讀寫(xiě)。系統(tǒng)映像文件是被多個(gè)用戶共享的,因此,每個(gè)用戶對(duì)系統(tǒng)映像文件只有讀權(quán)限。當(dāng) 用戶要對(duì)系統(tǒng)映像文件進(jìn)行寫(xiě)操作的時(shí)候,需要在該系統(tǒng)映像文件對(duì)應(yīng)的輔助系統(tǒng)映像文件中相同的地址上進(jìn)行。每個(gè)用戶都有一個(gè)和系統(tǒng)映像文件地址空間大小相同的輔助系統(tǒng)映像 文件。為了記錄系統(tǒng)映像文件和輔助系統(tǒng)映像文件之間的對(duì)應(yīng)關(guān)系,為每個(gè)用戶添加一個(gè)映 射表(Sd表)用來(lái)記錄其系統(tǒng)映像文件中每個(gè)數(shù)據(jù)塊的狀態(tài),映射表中的每一位表示系統(tǒng) 映像中每一個(gè)數(shù)據(jù)塊的狀態(tài)。在初始狀態(tài)下,映射表所有位都為0,表示用戶沒(méi)有對(duì)系統(tǒng)映 像進(jìn)行過(guò)修改。當(dāng)用戶對(duì)系統(tǒng)映像文件中的某個(gè)塊地址的數(shù)據(jù)進(jìn)行寫(xiě)操作時(shí),該操作被重定 向到輔助系統(tǒng)映像文件上,數(shù)據(jù)將被寫(xiě)到輔助系統(tǒng)映像文件的相同地址上。同時(shí),將映射表 中該塊對(duì)應(yīng)的位被置為l,表示對(duì)用戶而言,當(dāng)前這個(gè)塊的數(shù)據(jù)存在輔助系統(tǒng)映像文件中。 對(duì)虛擬磁盤(pán)映像的讀寫(xiě)如圖3所示,系統(tǒng)磁盤(pán)請(qǐng)求轉(zhuǎn)發(fā)器負(fù)責(zé)根據(jù)請(qǐng)求者的用戶身份將
數(shù)據(jù)塊請(qǐng)求分發(fā)到相應(yīng)虛擬磁盤(pán)映像,并將獲得的請(qǐng)求數(shù)據(jù)發(fā)回給請(qǐng)求者。圖中s (系統(tǒng)映
像文件),[/,(用戶映像文件)和4 (輔助系統(tǒng)映像文件)是實(shí)際存在的映像文件,其中的
數(shù)據(jù)是數(shù)據(jù)塊序列。每個(gè)請(qǐng)求地址對(duì)應(yīng)一個(gè)S, C/,或^中的數(shù)據(jù)塊。當(dāng)一個(gè)地址為t/addr.的 請(qǐng)求到達(dá)以后,通過(guò)下列映射方式映射到實(shí)際的物理磁盤(pán)映像上
a. 系統(tǒng)磁盤(pán)請(qǐng)求轉(zhuǎn)發(fā)器接受到地址為tZaddr.的請(qǐng)求,根據(jù)當(dāng)前用戶和用戶配置信息,將請(qǐng) 求轉(zhuǎn)發(fā)到一個(gè)VSIi ;
b. 在VSIi中,如果地址t/addr.中t的類(lèi)型是系統(tǒng)映像文件請(qǐng)求,就將請(qǐng)求轉(zhuǎn)發(fā)到S,(虛擬 系統(tǒng)映像),否則就在i7,的塊地址addr.上執(zhí)行請(qǐng)求的操作;
c. 在&中,檢查S.^4表是否有一項(xiàng)將塊地址addr.從S映射到4。如果有這樣的項(xiàng),則在 4中和S所對(duì)應(yīng)的地址同為addr.的塊上執(zhí)行操作,否則在S中地址addr.所對(duì)應(yīng)的塊中執(zhí)行請(qǐng)
求的操作。如果請(qǐng)求是讀請(qǐng)求,則讀數(shù)據(jù)塊,否則在4中創(chuàng)建一個(gè)數(shù)據(jù)塊,在這個(gè)塊上執(zhí)行 請(qǐng)求的操作,并在Sd表中增加一條記錄將S中地址addr.上的操作映射到剛剛創(chuàng)建的4中的 數(shù)據(jù)塊上。
d. 系統(tǒng)磁盤(pán)請(qǐng)求轉(zhuǎn)發(fā)器將請(qǐng)求的數(shù)據(jù)發(fā)送給請(qǐng)求方。
上面介紹了終端與虛擬機(jī)1/0請(qǐng)求方法以及服務(wù)器端磁盤(pán)映像的維護(hù)方法,下面介紹兩 者之間數(shù)據(jù)的傳輸和同步。圖l(a)中,域O中的數(shù)據(jù)轉(zhuǎn)發(fā)守護(hù)進(jìn)程與服務(wù)器中的磁盤(pán)映像表 示層交互,從而獲取用戶磁盤(pán)映像的數(shù)據(jù),并將用戶的修改發(fā)送到服務(wù)器。傳輸磁盤(pán)映像是 系統(tǒng)中最耗時(shí)間的操作。為了接近本地訪問(wèn)性能,守護(hù)進(jìn)程獲取磁盤(pán)映像數(shù)據(jù)的同時(shí)在本地存儲(chǔ)設(shè)備中緩存這些數(shù)據(jù)。緩存也是一個(gè)映像文件,其中的每個(gè)數(shù)據(jù)塊對(duì)應(yīng)于VSI中的相應(yīng) 數(shù)據(jù)塊。每個(gè)塊或許被緩存了,或者被修改了,如前所述,為了表示緩存中每個(gè)數(shù)據(jù)塊的當(dāng) 前狀態(tài),本發(fā)明中使用位圖來(lái)記錄當(dāng)前每個(gè)數(shù)據(jù)塊的狀態(tài)。如圖4所示,緩存映像文件中的 每個(gè)數(shù)據(jù)塊對(duì)應(yīng)位圖中的2位,因此每個(gè)數(shù)據(jù)塊在位圖中共有四種狀態(tài)來(lái)表示0, 1, 2, 3。 各自表示的意義是
0:該數(shù)據(jù)塊沒(méi)有被緩存;
1:該數(shù)據(jù)塊應(yīng)經(jīng)被緩存;
2:該數(shù)據(jù)塊正在被獲?。?br>
3:該數(shù)據(jù)塊的內(nèi)容已經(jīng)被更新。
在本發(fā)明的設(shè)計(jì)中,采用了一種稱為"按需"的方法從服務(wù)器獲取數(shù)據(jù)。域U中虛擬機(jī) 的操作系統(tǒng)可以在所有的系統(tǒng)映像數(shù)據(jù)被緩存之前啟動(dòng),因此,可能系統(tǒng)映像中的關(guān)鍵數(shù)據(jù) 沒(méi)有被緩存在本地緩存映像文件中。這種情況發(fā)生時(shí)(數(shù)據(jù)塊在位圖中對(duì)應(yīng)狀態(tài)為O),如前
所述,虛擬磁盤(pán)驅(qū)動(dòng)將i/o請(qǐng)求轉(zhuǎn)發(fā)到數(shù)據(jù)轉(zhuǎn)發(fā)守護(hù)進(jìn)程,并暫時(shí)將虛擬機(jī)阻塞。接著數(shù)據(jù)
轉(zhuǎn)發(fā)守護(hù)進(jìn)程從服務(wù)器請(qǐng)求指定的數(shù)據(jù),獲得數(shù)據(jù)后保存在緩存映像文件中,并將位圖中相 應(yīng)的位置為l (數(shù)據(jù)塊已緩存)。如果請(qǐng)求的數(shù)據(jù)塊當(dāng)前位圖中的狀態(tài)是2 (正在獲取中),則 守護(hù)進(jìn)程不再重復(fù)從服務(wù)器請(qǐng)求數(shù)據(jù)。1/0請(qǐng)求過(guò)程中,往往連續(xù)地址的數(shù)據(jù)塊在同一時(shí)間 被請(qǐng)求,因此,在一個(gè)請(qǐng)求操作過(guò)程中可以獲取幾個(gè)連續(xù)的數(shù)據(jù)塊。當(dāng)數(shù)據(jù)轉(zhuǎn)發(fā)守護(hù)進(jìn)程空 閑時(shí),從服務(wù)器中提前預(yù)取未被緩存的系統(tǒng)映像關(guān)鍵數(shù)據(jù)能很大程度上增加系統(tǒng)性能。
虛擬機(jī)對(duì)它的虛擬磁盤(pán)的操作,最終都會(huì)被解釋為對(duì)緩存映像文件上相應(yīng)數(shù)據(jù)塊的操作。
為了保持緩存映像文件和服務(wù)器vsi中相應(yīng)數(shù)據(jù)塊之間狀態(tài)的一致性,虛擬磁盤(pán)驅(qū)動(dòng)程序需 要記錄所有被虛擬機(jī)更新過(guò)的數(shù)據(jù)塊(位圖狀態(tài)置為3),并在虛擬機(jī)關(guān)閉之前,將更新過(guò)的 數(shù)據(jù)寫(xiě)回到服務(wù)器上VSI中對(duì)應(yīng)的位置上。寫(xiě)回以后,這些塊在位圖中的狀態(tài)必須重新置為 1,從而避免重復(fù)寫(xiě)回。數(shù)據(jù)轉(zhuǎn)發(fā)守護(hù)進(jìn)程對(duì)寫(xiě)回操作的優(yōu)先級(jí)較低,但是,所有這些操作在 虛擬機(jī)停止運(yùn)行前必須被完成。
圖5給出了數(shù)據(jù)轉(zhuǎn)發(fā)守護(hù)進(jìn)程和服務(wù)器磁盤(pán)映像表示層之間交互傳輸數(shù)據(jù)的命令格式。
(a)是一般格式, 一個(gè)交互命令由操作命令、命令長(zhǎng)度和可變長(zhǎng)的數(shù)據(jù)部分構(gòu)成。操作 命令給出了一個(gè)交互命令的類(lèi)型和操作方法,可變長(zhǎng)的數(shù)據(jù)部分是一個(gè)命令的操作數(shù),因此 是可變長(zhǎng)的,命令長(zhǎng)度給出一個(gè)命令的實(shí)際長(zhǎng)度。這些命令中,(b) - (f)是數(shù)據(jù)轉(zhuǎn)發(fā)守護(hù) 進(jìn)程發(fā)送給服務(wù)器磁盤(pán)映像表示層的,(g)和(h)是服務(wù)器磁盤(pán)映像表示層發(fā)送給守護(hù)進(jìn)程 的響應(yīng),它們各自的實(shí)際意義如下(b) VND—NET_CREATE命令是請(qǐng)求在服務(wù)器上創(chuàng)建一個(gè)用戶的VSI,該用戶及VSI的信息 在數(shù)據(jù)部分給出。用戶名和密碼是用戶信息,操作系統(tǒng)類(lèi)型'對(duì)應(yīng)一個(gè)指定的系統(tǒng)映像文件, 用戶磁盤(pán)大小用來(lái)創(chuàng)建用戶映像文件。
(c) VND一NETLSETUP命令是守護(hù)進(jìn)程向表示層請(qǐng)求建立一個(gè)連接。用戶名和密碼是用戶 信息,分區(qū)類(lèi)型指定要連接VSI中的是系統(tǒng)映像分區(qū)(S)還是用戶映像分區(qū)([/,.)。
(d) VND_NET_CL0SE,關(guān)閉建立起來(lái)的連接。
(e) VND—NET_READ,讀取若干數(shù)據(jù)塊的請(qǐng)求命令。第一個(gè)塊地址是要讀取的連續(xù)塊中第 一個(gè)塊的地址,塊數(shù)量表示連續(xù)讀幾個(gè)塊的數(shù)量。
(f) VND_NET_WRITE,寫(xiě)若干個(gè)數(shù)據(jù)塊到服務(wù)器。第一個(gè)塊地址是要寫(xiě)的連續(xù)塊中第一 個(gè)塊的地址,塊數(shù)量表示連續(xù)寫(xiě)幾個(gè)塊的數(shù)量,數(shù)據(jù)部分是連續(xù)幾個(gè)塊的數(shù)據(jù)內(nèi)容。
下面兩條命令是服務(wù)器磁盤(pán)映像表示層發(fā)送給數(shù)據(jù)轉(zhuǎn)發(fā)守護(hù)進(jìn)程的響應(yīng)命令。
(g) VND一NET一ACK,給守護(hù)進(jìn)程發(fā)回的處理響應(yīng),處理結(jié)果表示操作是否成功。
(h) VND一NET一RES,給守護(hù)進(jìn)程讀請(qǐng)求發(fā)回的處理響應(yīng),其中的數(shù)據(jù)部分是守護(hù)進(jìn)程讀 請(qǐng)求地址所指定的數(shù)據(jù)內(nèi)容。
權(quán)利要求
1、一種為虛擬機(jī)提供分布式存儲(chǔ)的系統(tǒng),將位于網(wǎng)絡(luò)上服務(wù)器中的存儲(chǔ)設(shè)備分配給多個(gè)運(yùn)行在各自終端主機(jī)上的虛擬機(jī),從而為終端主機(jī)上運(yùn)行的虛擬機(jī)提供數(shù)據(jù)存儲(chǔ)服務(wù),每個(gè)虛擬機(jī)作為一個(gè)用戶,每個(gè)用戶唯一標(biāo)識(shí)一個(gè)虛擬磁盤(pán)映像,其特征在于,該系統(tǒng)包括虛擬磁盤(pán)驅(qū)動(dòng)、數(shù)據(jù)轉(zhuǎn)發(fā)守護(hù)進(jìn)程、磁盤(pán)映像文件倉(cāng)庫(kù)、磁盤(pán)映像映射層和磁盤(pán)映像表示層,其中虛擬磁盤(pán)驅(qū)動(dòng)設(shè)置在終端主機(jī)上,用于創(chuàng)建一個(gè)作為磁盤(pán)的虛擬塊設(shè)備,該虛擬磁盤(pán)驅(qū)動(dòng)處理虛擬機(jī)中的I/O請(qǐng)求,并將I/O請(qǐng)求進(jìn)一步發(fā)送給數(shù)據(jù)轉(zhuǎn)發(fā)守護(hù)進(jìn)程;數(shù)據(jù)轉(zhuǎn)發(fā)守護(hù)進(jìn)程設(shè)置在終端主機(jī)上,用于從虛擬磁盤(pán)驅(qū)動(dòng)獲得所述I/O請(qǐng)求,并將該I/O請(qǐng)求轉(zhuǎn)發(fā)給提供數(shù)據(jù)存儲(chǔ)服務(wù)的服務(wù)器,請(qǐng)求服務(wù)器上的系統(tǒng)映像數(shù)據(jù),系統(tǒng)映像是終端主機(jī)所看到的服務(wù)器上磁盤(pán)映像表示層提供的虛擬磁盤(pán)映像,從服務(wù)器獲得請(qǐng)求的數(shù)據(jù)以后,通過(guò)虛擬磁盤(pán)驅(qū)動(dòng)轉(zhuǎn)發(fā)給請(qǐng)求數(shù)據(jù)的虛擬機(jī);磁盤(pán)映像文件倉(cāng)庫(kù)設(shè)置在服務(wù)器上,負(fù)責(zé)物理映像文件的存儲(chǔ)和維護(hù),物理映像文件包括系統(tǒng)映像文件、輔助系統(tǒng)映像文件和用戶映像文件,多個(gè)用戶共享系統(tǒng)文件映像,每個(gè)用戶具有一個(gè)輔助系統(tǒng)映像文件和一個(gè)用戶映像文件,每個(gè)用戶對(duì)系統(tǒng)文件映像的修改寫(xiě)入輔助系統(tǒng)文件映像中,用戶映像文件用來(lái)存儲(chǔ)每個(gè)用戶的數(shù)據(jù);磁盤(pán)映像映射層設(shè)置在服務(wù)器上,完成從物理映像文件到用戶最終獲得的虛擬磁盤(pán)映像的映射過(guò)程,虛擬磁盤(pán)映像是提供給終端主機(jī)的邏輯視圖,對(duì)一個(gè)虛擬磁盤(pán)映像,分為系統(tǒng)數(shù)據(jù)區(qū)和用戶數(shù)據(jù)區(qū),用戶數(shù)據(jù)區(qū)對(duì)應(yīng)于所述用戶映像文件,而系統(tǒng)數(shù)據(jù)區(qū)對(duì)應(yīng)于所述系統(tǒng)映像文件和所述輔助系統(tǒng)映像文件;磁盤(pán)映像表示層設(shè)置在服務(wù)器上,其包括系統(tǒng)磁盤(pán)請(qǐng)求轉(zhuǎn)發(fā)器,磁盤(pán)映像表示層從數(shù)據(jù)轉(zhuǎn)發(fā)守護(hù)進(jìn)程收到虛擬機(jī)的I/O請(qǐng)求后,交給系統(tǒng)磁盤(pán)請(qǐng)求轉(zhuǎn)發(fā)器,系統(tǒng)磁盤(pán)轉(zhuǎn)發(fā)器根據(jù)請(qǐng)求者的用戶身份將數(shù)據(jù)塊請(qǐng)求對(duì)應(yīng)到相應(yīng)虛擬磁盤(pán)映像文件,根據(jù)請(qǐng)求類(lèi)型和請(qǐng)求數(shù)據(jù)的地址通過(guò)磁盤(pán)映像映射層的映射機(jī)制在相應(yīng)的物理映像文件上執(zhí)行請(qǐng)求的操作,并將獲得的請(qǐng)求數(shù)據(jù)發(fā)回給請(qǐng)求者。
2. 如權(quán)利要求1所述的系統(tǒng),其特征在于終端提供存儲(chǔ)區(qū),其包括兩個(gè)部分,臨時(shí)存儲(chǔ)區(qū) 域和系統(tǒng)映像緩存,臨時(shí)存儲(chǔ)區(qū)域用來(lái)存儲(chǔ)臨時(shí)數(shù)據(jù),當(dāng)機(jī)器關(guān)閉時(shí),直接丟棄這些數(shù)據(jù);存儲(chǔ)在系統(tǒng)映像緩存中的系統(tǒng)映像緩存數(shù)據(jù)為客戶操作系統(tǒng)的文件系統(tǒng)數(shù)據(jù)。
3. 如權(quán)利要求2所述的系統(tǒng),其特征在于系統(tǒng)映像緩存文件與服務(wù)器之間通過(guò)增加一個(gè)位圖表示系統(tǒng)映像緩存文件中每個(gè)數(shù)據(jù)塊的狀態(tài)來(lái)實(shí)現(xiàn)同步。
4、 如權(quán)利要求2所述的系統(tǒng),其特征在于如果虛擬機(jī)所請(qǐng)求的數(shù)據(jù)在系統(tǒng)映像緩存中,則直接從系統(tǒng)映像緩存中讀取請(qǐng)求數(shù)據(jù);如果虛擬機(jī)所請(qǐng)求的數(shù)據(jù)不在系統(tǒng)映像緩存中,則要從服務(wù)器獲取所請(qǐng)求的數(shù)據(jù),虛擬磁盤(pán)驅(qū)動(dòng)收到請(qǐng)求的數(shù)據(jù)后,將這些數(shù)據(jù)寫(xiě)入系統(tǒng)映像緩 存中。
5、 如權(quán)利要求1和2所述的系統(tǒng),其特征在于所述虛擬機(jī)是Xen虛擬機(jī)。
6、 如權(quán)利要求1所述的系統(tǒng),其特征在于為了記錄系統(tǒng)映像文件和輔助映像系統(tǒng)文件之間的 對(duì)應(yīng)關(guān)系,為每個(gè)用戶添加一個(gè)映射表來(lái)記錄其系統(tǒng)映像文件每個(gè)數(shù)據(jù)塊的狀態(tài),映射表中 的每一位表示系統(tǒng)映像文件中每一個(gè)數(shù)據(jù)塊的狀態(tài),當(dāng)有一個(gè)請(qǐng)求到達(dá)時(shí),根據(jù)映射表中的 狀態(tài)決定該請(qǐng)求是在系統(tǒng)映像文件上執(zhí)行,還是在輔助系統(tǒng)映像文件上執(zhí)行。
全文摘要
一種通過(guò)為虛擬機(jī)構(gòu)建存儲(chǔ)的系統(tǒng),將位于網(wǎng)絡(luò)上服務(wù)器中的存儲(chǔ)設(shè)備分配給多個(gè)運(yùn)行在各自終端主機(jī)上的虛擬機(jī),作為它們的虛擬磁盤(pán)。虛擬機(jī)運(yùn)行的主機(jī)上提供一個(gè)虛擬磁盤(pán)驅(qū)動(dòng)和數(shù)據(jù)轉(zhuǎn)發(fā)守護(hù)進(jìn)程,將來(lái)自虛擬機(jī)的I/O請(qǐng)求轉(zhuǎn)發(fā)給提供實(shí)際數(shù)據(jù)的服務(wù)器。服務(wù)器上維護(hù)虛擬機(jī)的系統(tǒng)映像,并響應(yīng)來(lái)自虛擬機(jī)的I/O請(qǐng)求。系統(tǒng)映像的維護(hù)采用一種映射機(jī)制,實(shí)現(xiàn)物理存儲(chǔ)的數(shù)據(jù)到虛擬機(jī)所需系統(tǒng)映像之間的轉(zhuǎn)化。為了提高性能,在終端提供了緩存和預(yù)取功能,減少網(wǎng)絡(luò)上數(shù)據(jù)傳輸量。同時(shí),利用同步機(jī)制保證緩存和服務(wù)器系統(tǒng)映像之間的一致性。
文檔編號(hào)G06F3/06GK101419535SQ200810226649
公開(kāi)日2009年4月29日 申請(qǐng)日期2008年11月19日 優(yōu)先權(quán)日2008年11月19日
發(fā)明者巨燕文, 白躍彬 申請(qǐng)人:北京航空航天大學(xué)