本發(fā)明實(shí)施例涉及存儲(chǔ)技術(shù)領(lǐng)域,特別是一種遠(yuǎn)程數(shù)據(jù)復(fù)制方法及系統(tǒng)。
背景技術(shù):
數(shù)據(jù)容災(zāi),又稱為遠(yuǎn)程數(shù)據(jù)復(fù)制技術(shù),是指建立一個(gè)異地的數(shù)據(jù)系統(tǒng),該系統(tǒng)是本地?cái)?shù)據(jù)的一個(gè)可用復(fù)制。在本地?cái)?shù)據(jù)及整個(gè)應(yīng)用系統(tǒng)出現(xiàn)災(zāi)難時(shí),系統(tǒng)至少在異地保存有一份可用的關(guān)鍵業(yè)務(wù)的數(shù)據(jù)。
典型的數(shù)據(jù)容災(zāi)系統(tǒng)包括生產(chǎn)中心和災(zāi)備中心。在生產(chǎn)中心,部署有主機(jī)、存儲(chǔ)陣列,用于正常的業(yè)務(wù)運(yùn)行;在災(zāi)備中心,部署有主機(jī)、存儲(chǔ)陣列,用于在生產(chǎn)中心發(fā)生災(zāi)難后,接管其業(yè)務(wù)。在某些應(yīng)用場(chǎng)景下,生產(chǎn)中心和災(zāi)備中心的存儲(chǔ)陣列均包含文件系統(tǒng)。生產(chǎn)中心的業(yè)務(wù)產(chǎn)生的數(shù)據(jù)寫入生產(chǎn)陣列后,可以經(jīng)容災(zāi)鏈路復(fù)制到災(zāi)備中心,寫入災(zāi)備陣列。在現(xiàn)有技術(shù)中,遠(yuǎn)程數(shù)據(jù)復(fù)制是基于塊語義的。也就是說,復(fù)制的時(shí)候可以不用考慮數(shù)據(jù)塊上層的文件,直接將生產(chǎn)陣列的硬盤中所有的數(shù)據(jù)復(fù)制到災(zāi)備陣列中。這些數(shù)據(jù)不僅包括了業(yè)務(wù)數(shù)據(jù),還包括描述業(yè)務(wù)數(shù)據(jù)的元數(shù)據(jù),例如業(yè)務(wù)數(shù)據(jù)的屬性以及業(yè)務(wù)數(shù)據(jù)在硬盤中的物理布局等。這就會(huì)導(dǎo)致容災(zāi)鏈路的負(fù)擔(dān)較重。
技術(shù)實(shí)現(xiàn)要素:
本實(shí)施例提供了一種遠(yuǎn)程數(shù)據(jù)復(fù)制方法和存儲(chǔ)系統(tǒng),能夠減輕生產(chǎn)陣列和災(zāi)備陣列之間的容災(zāi)鏈路的負(fù)擔(dān)。
第一方面,提供了一種遠(yuǎn)程數(shù)據(jù)復(fù)制方法。在該方法中,生產(chǎn)陣列向?yàn)?zāi)備陣列發(fā)送數(shù)據(jù)復(fù)制請(qǐng)求。所述數(shù)據(jù)復(fù)制請(qǐng)求包括源對(duì)象的標(biāo)識(shí)以及所述源對(duì)象對(duì)應(yīng)的數(shù)據(jù)塊,所述源對(duì)象包括用于承載文件或者目錄的數(shù)據(jù)容器,所述數(shù)據(jù)塊保存在所述生產(chǎn)陣列的硬盤的物理空間中,所述數(shù)據(jù)塊保存在所述生產(chǎn)陣列的物理空間中的地址為源物理地址。所述災(zāi)備陣列接收所述數(shù)據(jù)復(fù)制請(qǐng)求,確定所述災(zāi)備陣列沒有包括與所述源對(duì)象的標(biāo)識(shí)相同的對(duì)象時(shí),創(chuàng)建目標(biāo)對(duì)象。所述目標(biāo)對(duì)象與所述災(zāi)備陣列的硬盤的一段或幾段物理空間對(duì)應(yīng),所述目標(biāo)對(duì)象的標(biāo)識(shí)和所述源對(duì)象的標(biāo)識(shí)相同。所述災(zāi)備陣列將所述數(shù)據(jù)塊寫入所述物理空間中,所述數(shù)據(jù)塊保存在所述物理空間中的地址為目標(biāo)物理地址,所述目標(biāo)物理地址與所述源物理地址不同。
利用本實(shí)施例第一方面提供的遠(yuǎn)程數(shù)據(jù)復(fù)制方法,生產(chǎn)陣列將源對(duì)象的標(biāo)識(shí)以及源對(duì)象對(duì)應(yīng)的數(shù)據(jù)塊發(fā)送給災(zāi)備陣列。若災(zāi)備陣列確定沒有包括與源對(duì)象的標(biāo)識(shí)相同的對(duì)象時(shí),創(chuàng)建目標(biāo)對(duì)象,將所述源對(duì)象對(duì)應(yīng)的數(shù)據(jù)塊寫入所述目標(biāo)對(duì)象中。所謂寫入所述目標(biāo)對(duì)象是指將所述數(shù)據(jù)塊寫入與所述目標(biāo)對(duì)象對(duì)應(yīng)的物理空間中。與現(xiàn)有技術(shù)不同的是,本實(shí)施例中所述數(shù)據(jù)塊保存災(zāi)備陣列中的物理地址與所述數(shù)據(jù)塊保存在生產(chǎn)陣列中的物理地址不相同。因此,災(zāi)備陣列在存儲(chǔ)所述數(shù)據(jù)塊時(shí)相對(duì)比較靈活,生產(chǎn)陣列不需要將描述數(shù)據(jù)塊保存在生產(chǎn)陣列中的物理地址,以及描述數(shù)據(jù)塊在生產(chǎn)陣列中的物理地址與對(duì)象的標(biāo)識(shí)之間的對(duì)應(yīng)關(guān)系的數(shù)據(jù)復(fù)制到災(zāi)備陣列,節(jié)省了生產(chǎn)陣列與災(zāi)備陣列之間的帶寬開銷。
另外,第一方面還可以有其他實(shí)現(xiàn)方式。例如,目標(biāo)對(duì)象的標(biāo)識(shí)與源對(duì)象的標(biāo)識(shí)不相同,所述災(zāi)備陣列為所述目標(biāo)對(duì)象分配標(biāo)識(shí)之后,保存目標(biāo)對(duì)象的標(biāo)識(shí)與源對(duì)象的標(biāo)識(shí)之間的對(duì)應(yīng)關(guān)系,然后將所述對(duì)應(yīng)關(guān)系發(fā)送給所述生產(chǎn)陣列。采用這種方式,災(zāi)備陣列在創(chuàng)建目標(biāo)對(duì)象時(shí)可以更加靈活,不要求目標(biāo)對(duì)象的標(biāo)識(shí)與源對(duì)象的標(biāo)識(shí)相同。
在第一方面的一種具體實(shí)現(xiàn)中,所述數(shù)據(jù)復(fù)制請(qǐng)求還包括所述數(shù)據(jù)塊的邏輯地址,所述邏輯地址為所述數(shù)據(jù)塊位于源對(duì)象內(nèi)的位置;所述數(shù)據(jù)塊保存在所述目標(biāo)對(duì)象內(nèi)的位置與所述數(shù)據(jù)塊位于源對(duì)象內(nèi)的位置相同。
在上述具體實(shí)現(xiàn)中,所述災(zāi)備陣列保存所述邏輯地址與所述目標(biāo)物理地址的對(duì)應(yīng)關(guān)系,以及所述目標(biāo)對(duì)象的標(biāo)識(shí)與所述目標(biāo)物理地址的對(duì)應(yīng)關(guān)系,所述邏輯地址與所述目標(biāo)物理地址的對(duì)應(yīng)關(guān)系不同于所述邏輯地址與所述源物理地址的對(duì)應(yīng)關(guān)系,并且所述目標(biāo)對(duì)象的標(biāo)識(shí)與所述目標(biāo)物理地址的對(duì)應(yīng)關(guān)系不同于所述源對(duì)象的標(biāo)識(shí)與所述源物理地址的對(duì)應(yīng)關(guān)系。正是由于邏輯地址與目標(biāo)物理地址的對(duì)應(yīng)關(guān)系不同于所述邏輯地址與所述源物理地址的對(duì)應(yīng)關(guān)系,并且所述目標(biāo)對(duì)象的標(biāo)識(shí)與所述目標(biāo)物理地址的對(duì)應(yīng)關(guān)系不同于所述源對(duì)象的標(biāo)識(shí)與所述源物理地址的對(duì)應(yīng)關(guān)系,所以災(zāi)備陣列可以相對(duì)靈活地在硬盤中布局所述目標(biāo)對(duì)象。生產(chǎn)陣列也避免了將描述這些對(duì)應(yīng)關(guān)系的數(shù)據(jù)發(fā)送給災(zāi)備陣列,減輕了鏈路負(fù)擔(dān)。
在上述任一種具體實(shí)現(xiàn)中,所述生產(chǎn)陣列向所述災(zāi)備陣列發(fā)送增量數(shù)據(jù)復(fù)制請(qǐng)求,所述增量數(shù)據(jù)復(fù)制請(qǐng)求包括增量數(shù)據(jù)以及所述增量數(shù)據(jù)的地址信息,所述增量數(shù)據(jù)是用于對(duì)所述數(shù)據(jù)塊進(jìn)行更新的數(shù)據(jù)塊,所述增量數(shù)據(jù)的地址信息包括所述源對(duì)象的標(biāo)識(shí)以及所述邏輯地址。當(dāng)生產(chǎn)陣列對(duì)源對(duì)象中的數(shù)據(jù)塊有更新時(shí),也需要將用于更新所述數(shù)據(jù)塊的增量數(shù)據(jù)發(fā)送給災(zāi)備陣列,以實(shí)現(xiàn)災(zāi)備陣列對(duì)目標(biāo)對(duì)象的同步更新。
在上面的具體實(shí)現(xiàn)中,所述災(zāi)備陣列接收所述增量數(shù)據(jù)復(fù)制請(qǐng)求,根據(jù)所述增量數(shù)據(jù)的地址信息中的所述源對(duì)象的標(biāo)識(shí),確定所述增量數(shù)據(jù)對(duì)應(yīng)的對(duì)象是所述目標(biāo)對(duì)象;根據(jù)所述增量數(shù)據(jù)的地址信息中的邏輯地址確定所述增量數(shù)據(jù)待寫入的目標(biāo)對(duì)象內(nèi)的位置,將所述增量數(shù)據(jù)寫入所述目標(biāo)對(duì)象的所述邏輯地址中。由此,災(zāi)備陣列實(shí)現(xiàn)了對(duì)目標(biāo)對(duì)象的更新。并且,生產(chǎn)陣列在將增量數(shù)據(jù)發(fā)送給災(zāi)備陣列時(shí)也不需要將描述所述增量數(shù)據(jù)在硬盤上如何布局的元數(shù)據(jù)發(fā)送給災(zāi)備陣列,而是由災(zāi)備陣列在將所述增量數(shù)據(jù)寫入時(shí)重新生成布局元數(shù)據(jù)。因此,節(jié)省了生產(chǎn)陣列端與災(zāi)備陣列端之間的帶寬開銷。
本實(shí)施例第二方面還提供了一種存儲(chǔ)系統(tǒng),包括生產(chǎn)陣列和災(zāi)備陣列,分別用于執(zhí)行第一方面的遠(yuǎn)程數(shù)據(jù)復(fù)制方法。
本實(shí)施例第三方面還提供了一種存儲(chǔ)設(shè)備,包括控制器和硬盤,源文件系統(tǒng)和目標(biāo)文件系統(tǒng)構(gòu)建于所述硬盤上,其中源文件系統(tǒng)包括源對(duì)象,所述源對(duì)象包括用于承載文件或者目錄的數(shù)據(jù)容器,所述源對(duì)象對(duì)應(yīng)的數(shù)據(jù)塊保存在源文件系統(tǒng)對(duì)應(yīng)的物理空間中,所述源對(duì)象對(duì)應(yīng)的數(shù)據(jù)塊保存在物理空間中的地址為源物理地址。所述控制器用于確定目標(biāo)文件系統(tǒng)中沒有包括與所述源對(duì)象的標(biāo)識(shí)相同的對(duì)象時(shí),創(chuàng)建目標(biāo)對(duì)象。為所述目標(biāo)在目標(biāo)文件系統(tǒng)對(duì)應(yīng)的物理空間中分配物理空間。所述目標(biāo)對(duì)象的標(biāo)識(shí)與所述源對(duì)象的標(biāo)識(shí)相同。所述控制器將所述數(shù)據(jù)塊寫入為所述目標(biāo)對(duì)象分配的物理空間中,所述數(shù)據(jù)塊保存在為所述目標(biāo)對(duì)象分配的物理空間中的地址為目標(biāo)物理地址,所述目標(biāo)物理地址與所述源物理地址不同。
另外,第三方面還可以有其他實(shí)現(xiàn)方式。例如,目標(biāo)對(duì)象的標(biāo)識(shí)與源對(duì)象的標(biāo)識(shí)不相同,所述控制器為所述目標(biāo)對(duì)象分配標(biāo)識(shí)之后,保存目標(biāo)對(duì)象的標(biāo)識(shí)與源對(duì)象的標(biāo)識(shí)之間的對(duì)應(yīng)關(guān)系。
在第三方面的一種具體實(shí)現(xiàn)中,所述控制器具體用于根據(jù)所述數(shù)據(jù)塊位于源對(duì)象中的邏輯地址將所述數(shù)據(jù)塊寫入為所述目標(biāo)對(duì)象分配的物理空間中,所述數(shù)據(jù)塊保存在所述目標(biāo)對(duì)象內(nèi)的位置與所述數(shù)據(jù)塊位于源對(duì)象內(nèi)的位置相同。
本實(shí)施例第四方面還提供了一種數(shù)據(jù)備份方法,用于第三方面提供的存儲(chǔ)設(shè)備中。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹。
圖1是本發(fā)明實(shí)施例提供的系統(tǒng)架構(gòu)示意圖;
圖2是本發(fā)明實(shí)施例提供的生產(chǎn)陣列的結(jié)構(gòu)圖;
圖3是本發(fā)明實(shí)施例提供的災(zāi)備陣列的結(jié)構(gòu)圖;
圖4是本發(fā)明實(shí)施例提供的遠(yuǎn)程數(shù)據(jù)復(fù)制方法的流程示意圖。
具體實(shí)施方式
本發(fā)明實(shí)施例提出了一種遠(yuǎn)程數(shù)據(jù)復(fù)制方法及系統(tǒng),能夠減輕生產(chǎn)陣列和災(zāi)備陣列之間的容災(zāi)鏈路的負(fù)擔(dān)。
圖1為本發(fā)明實(shí)施例提供的遠(yuǎn)程數(shù)據(jù)復(fù)制方法的系統(tǒng)架構(gòu)示意圖,如圖1所示,生產(chǎn)中心包括生產(chǎn)主機(jī)、連接設(shè)備和生產(chǎn)陣列20;災(zāi)備中心的系統(tǒng)架構(gòu)與生產(chǎn)中心類似,包括災(zāi)備主機(jī)、連接設(shè)備和災(zāi)備陣列30。在本發(fā)明實(shí)施例中,災(zāi)備中心可以不止一個(gè)。其中,生產(chǎn)中心與災(zāi)備中心可以通過IP(Internet Protocol)或者FC(Fiber Chanel)或者其他協(xié)議進(jìn)行數(shù)據(jù)傳輸。生產(chǎn)中心和災(zāi)備中心之間可以有一個(gè)控制中心,所述控制中心可以部署在生產(chǎn)中心側(cè),也可以部署在災(zāi)備中心側(cè),還可以部署在生產(chǎn)中心和災(zāi)備中心之間的第三方設(shè)備中。所述控制中心用于當(dāng)生產(chǎn)陣列20發(fā)生故障時(shí),向?yàn)?zāi)備陣列30發(fā)出信號(hào)讓其接替生產(chǎn)陣列20處理主機(jī)業(yè)務(wù)。
生產(chǎn)主機(jī)和災(zāi)備主機(jī)均可以是任何計(jì)算設(shè)備,如服務(wù)器、臺(tái)式計(jì)算機(jī)等等。在主機(jī)內(nèi)部,安裝有操作系統(tǒng)以及其他應(yīng)用程序。
連接設(shè)備可以是存儲(chǔ)設(shè)備和主機(jī)之間的任何接口,如光纖交換機(jī),或者其他現(xiàn)當(dāng)前技術(shù)已知有的交換機(jī)。
生產(chǎn)陣列20和災(zāi)備陣列30均可以是存儲(chǔ)設(shè)備,如獨(dú)立硬盤冗余陣列(Redundant Arrays of Inexpensive Disks,RAID)、硬盤簇(Just a Bunch Of Disks,JBOD)、直接存取存儲(chǔ)器(Direct Access Storage Device,DASD)的一個(gè)或多個(gè)互連的硬盤驅(qū)動(dòng)器,諸如磁帶庫、一個(gè)或多個(gè)存儲(chǔ)單元的磁帶存儲(chǔ)設(shè)備。
本實(shí)施例中的生產(chǎn)陣列20和災(zāi)備陣列30均是具有文件系統(tǒng)的存儲(chǔ)設(shè)備,也就是說,存儲(chǔ)介質(zhì)中保存的數(shù)據(jù)是以文件為單位進(jìn)行管理和訪問的。文件系統(tǒng)是一種存儲(chǔ)和組織數(shù)據(jù)的方法,它使得對(duì)數(shù)據(jù)的訪問和查找變得容易,文件系統(tǒng)使用文件和樹形目錄的抽象邏輯概念代替了硬盤等物理設(shè)備使用的數(shù)據(jù)塊的概念。生產(chǎn)陣列20在使用文件系統(tǒng)來保存數(shù)據(jù)后,用戶不必關(guān)心數(shù)據(jù)實(shí)際保存在硬盤的地址為多少的數(shù)據(jù)塊上,只需要記住這個(gè)文件的所屬目錄和文件名。同樣的,在寫入新數(shù)據(jù)之前,用戶不必關(guān)心硬盤上的那個(gè)塊地址沒有被使用,硬盤上的存儲(chǔ)空間管理(分配和釋放)功能由文件系統(tǒng)自動(dòng)完成,用戶只需要記住數(shù)據(jù)被寫入到了哪個(gè)文件中。需要說明的是,雖然存儲(chǔ)在生產(chǎn)陣列20中的數(shù)據(jù)是以文件的形式呈現(xiàn)給用戶的,然而文件在硬盤31中存儲(chǔ)的單位仍然是數(shù)據(jù)塊。因此,一個(gè)文件可以包含多個(gè)數(shù)據(jù)塊。另外,本實(shí)施例引入了“對(duì)象”的概念,對(duì)象是用于存儲(chǔ)文件或者目錄的容器。每個(gè)對(duì)象在文件系統(tǒng)內(nèi)具有唯一的標(biāo)識(shí)(例如,ID)。
生產(chǎn)陣列20和災(zāi)備陣列30的硬件結(jié)構(gòu)是相同的。圖2是本發(fā)明實(shí)施例生產(chǎn)陣列20的結(jié)構(gòu)示意圖,圖3是本發(fā)明實(shí)施例災(zāi)備陣列30的結(jié)構(gòu)示意圖。
如圖2所示,生產(chǎn)陣列20包括控制器21和若干個(gè)硬盤31??刂破?1可以包括任何計(jì)算設(shè)備,如服務(wù)器、臺(tái)式計(jì)算機(jī)等等。在控制器內(nèi)部,安裝有文件系統(tǒng)以及其他應(yīng)用程序??刂破?1用于執(zhí)行和對(duì)象相關(guān)的各種操作,例如創(chuàng)建文件、創(chuàng)建目錄、讀文件操作、寫文件操作、發(fā)送數(shù)據(jù)復(fù)制請(qǐng)求等等。生產(chǎn)陣列20包含的若干個(gè)硬盤31用于提供存儲(chǔ)空間保存文件。
控制器21主要包括處理器(processor)118、緩存(cache)120、存儲(chǔ)器(memory)122、通信總線(簡(jiǎn)稱總線)126以及通信接口(Communication Interface)128。處理器118、緩存120、存儲(chǔ)器122以及通信接口128通過通信總線126完成相互間的通信。
通信接口128,用于與生產(chǎn)主機(jī)、災(zāi)備陣列以及硬盤31通信。
存儲(chǔ)器122,用于存放程序124,存儲(chǔ)器122可能包含高速RAM存儲(chǔ)器,也可能還包括非易失性存儲(chǔ)器(non-volatile memory),例如至少一個(gè)硬盤存儲(chǔ)器??梢岳斫獾氖?,存儲(chǔ)器122可以為隨機(jī)存儲(chǔ)器(Random-Access Memory,RAM)、磁碟、硬盤、光盤、固態(tài)硬盤(Solid State Disk,SSD)或者非易失性存儲(chǔ)器等各種可以存儲(chǔ)程序代碼的非短暫性的(non-transitory)機(jī)器可讀介質(zhì)。
程序124可以包括程序代碼,所述程序代碼包括上面描述的文件系統(tǒng)以及其他程序代碼。
緩存120(Cache)用于緩存從生產(chǎn)主機(jī)接收的數(shù)據(jù)或從硬盤中讀取的數(shù)據(jù)。緩存120可以是RAM、ROM、閃存(Flash memory)或固態(tài)硬盤(Solid State Disk,SSD)等各種可以存儲(chǔ)數(shù)據(jù)的非短暫性的(non-transitory)機(jī)器可讀介質(zhì),在此不做限定。
另外,存儲(chǔ)器122和緩存120可以合設(shè)或者分開設(shè)置,本發(fā)明實(shí)施例對(duì)此不做限定。
處理器118可能是一個(gè)中央處理器CPU,或者是特定集成電路ASIC(Application Specific Integrated Circuit),或者是被配置成實(shí)施本發(fā)明實(shí)施例的一個(gè)或多個(gè)集成電路。
如圖3所示,災(zāi)備陣列30包括控制器41和若干個(gè)硬盤51??刂破?1可以包括任何計(jì)算設(shè)備,如服務(wù)器、臺(tái)式計(jì)算機(jī)等等。在控制器41內(nèi)部,安裝有文件系統(tǒng)以及其他應(yīng)用程序??刂破?1用于執(zhí)行和對(duì)象相關(guān)的各種操作,例如創(chuàng)建文件、創(chuàng)建目錄、讀文件操作、寫文件操作等等。災(zāi)備陣列30包含的若干個(gè)硬盤51用于提供存儲(chǔ)空間保存文件。
控制器41主要包括處理器(processor)218、緩存(cache)220、存儲(chǔ)器(memory)222、通信總線(簡(jiǎn)稱總線)226以及通信接口(Communication Interface)228。處理器218、緩存220、存儲(chǔ)器222以及通信接口228通過通信總線226完成相互間的通信。
通信接口228,用于與生產(chǎn)陣列、災(zāi)備主機(jī)以及硬盤51通信。
存儲(chǔ)器222,用于存放程序224,存儲(chǔ)器222可能包含高速RAM存儲(chǔ)器,也可能還包括非易失性存儲(chǔ)器(non-volatile memory),例如至少一個(gè)硬盤存儲(chǔ)器??梢岳斫獾氖牵鎯?chǔ)器222可以為隨機(jī)存儲(chǔ)器(Random-Access Memory,RAM)、磁碟、硬盤、光盤、固態(tài)硬盤(Solid State Disk,SSD)或者非易失性存儲(chǔ)器等各種可以存儲(chǔ)程序代碼的非短暫性的(non-transitory)機(jī)器可讀介質(zhì)。
程序224可以包括程序代碼,所述程序代碼包括上面描述的文件系統(tǒng)以及其他程序代碼。
緩存220(Cache)用于緩存從生產(chǎn)陣列接收的數(shù)據(jù)或從硬盤中讀取的數(shù)據(jù)。緩存220可以是RAM、ROM、閃存(Flash memory)或固態(tài)硬盤(Solid State Disk,SSD)等各種可以存儲(chǔ)數(shù)據(jù)的非短暫性的(non-transitory)機(jī)器可讀介質(zhì),在此不做限定。
另外,存儲(chǔ)器222和緩存220可以合設(shè)或者分開設(shè)置,本發(fā)明實(shí)施例對(duì)此不做限定。
處理器218可能是一個(gè)中央處理器CPU,或者是特定集成電路ASIC(Application Specific Integrated Circuit),或者是被配置成實(shí)施本發(fā)明實(shí)施例的一個(gè)或多個(gè)集成電路。
下面結(jié)合圖1、圖2和圖3,描述本發(fā)明實(shí)施例一種遠(yuǎn)程數(shù)據(jù)復(fù)制方法。該方法應(yīng)用在圖1所示的異步遠(yuǎn)程復(fù)制的場(chǎng)景中,由生產(chǎn)陣列20和災(zāi)備陣列30執(zhí)行。如圖3所述,所述方法可以包括以下步驟:
步驟1:生產(chǎn)陣列20向?yàn)?zāi)備陣列30發(fā)送數(shù)據(jù)復(fù)制請(qǐng)求。所述數(shù)據(jù)復(fù)制請(qǐng)求包括對(duì)象的ID,以及所述對(duì)象對(duì)應(yīng)的數(shù)據(jù)塊。
對(duì)象是指用于承載文件或者目錄的數(shù)據(jù)容器。對(duì)象在生產(chǎn)陣列20的硬盤31上面對(duì)應(yīng)一段或幾段物理空間。可以理解的是,將對(duì)象對(duì)應(yīng)的數(shù)據(jù)塊寫入該對(duì)象實(shí)際上是將所述數(shù)據(jù)塊寫入所述物理空間。而對(duì)于外部設(shè)備而言,所述物理空間是不可見的,只能看到所述數(shù)據(jù)塊位于一個(gè)數(shù)據(jù)容器中。在本實(shí)施例中,將數(shù)據(jù)塊寫入的所述物理空間的地址稱為物理地址。需要說明的是,本實(shí)施例中的物理地址并不一定是數(shù)據(jù)塊位于硬盤中的實(shí)際地址,只要是對(duì)外部設(shè)備屏蔽,反映物理空間的地址都稱之為物理地址。與物理地址相對(duì)應(yīng)的,數(shù)據(jù)塊還具有邏輯地址。所述邏輯地址是指外部設(shè)備可以訪問的,反映數(shù)據(jù)塊在所述對(duì)象內(nèi)的位置的地址。對(duì)象的元數(shù)據(jù)可以包括所述對(duì)象ID、所述對(duì)象對(duì)應(yīng)的數(shù)據(jù)塊的邏輯地址、所述數(shù)據(jù)塊的物理地址、所述對(duì)象ID與物理地址的對(duì)應(yīng)關(guān)系以及所述邏輯地址與物理地址的對(duì)應(yīng)關(guān)系。在實(shí)際應(yīng)用中,如果一個(gè)對(duì)象較大,那么該對(duì)象也可能對(duì)應(yīng)硬盤31上面的幾段物理空間。
由于生產(chǎn)陣列20和災(zāi)備陣列30都保存有對(duì)象,為了區(qū)分兩端保存的對(duì)象,在本實(shí)施例中,將生產(chǎn)陣列20中的對(duì)象稱為源對(duì)象,將災(zāi)備陣列30的對(duì)象稱為目標(biāo)對(duì)象。同樣的,源對(duì)象的邏輯地址稱為源邏輯地址,源對(duì)象的物理地址稱為源物理地址,目標(biāo)對(duì)象的邏輯地址稱為目標(biāo)邏輯地址,目標(biāo)對(duì)象的物理地址稱為目標(biāo)物理地址。
另外,本實(shí)施例中所描述的遠(yuǎn)程數(shù)據(jù)復(fù)制是指異步遠(yuǎn)程復(fù)制。生產(chǎn)陣列20周期性地向?yàn)?zāi)備陣列30發(fā)送數(shù)據(jù)復(fù)制請(qǐng)求,遠(yuǎn)程復(fù)制的周期可以控制中心設(shè)置。例如,在控制中心中設(shè)置一個(gè)計(jì)時(shí)器(timer)。當(dāng)預(yù)定時(shí)間達(dá)到時(shí),控制中心給生產(chǎn)陣列20發(fā)送指令,指示生產(chǎn)陣列20執(zhí)行數(shù)據(jù)復(fù)制任務(wù)。
在步驟1中,生產(chǎn)陣列20向?yàn)?zāi)備陣列30發(fā)送的數(shù)據(jù)復(fù)制請(qǐng)求可以包括對(duì)象的ID,以及所述對(duì)象對(duì)應(yīng)的數(shù)據(jù)塊。在某些實(shí)施方式中,所述數(shù)據(jù)復(fù)制請(qǐng)求還可以包括數(shù)據(jù)塊的邏輯地址。需要說明的是,生產(chǎn)陣列20并不需要將所述數(shù)據(jù)塊的布局元數(shù)據(jù)發(fā)送給災(zāi)備陣列30。所謂數(shù)據(jù)塊的布局元數(shù)據(jù)是指所述數(shù)據(jù)塊的源物理地址、源對(duì)象的ID與源物理地址的對(duì)應(yīng)關(guān)系以及源邏輯地址與源物理地址的對(duì)應(yīng)關(guān)系。這意味著災(zāi)備陣列30接收所述數(shù)據(jù)塊之后,并不需要按照與生產(chǎn)陣列30相同的布局方式來存儲(chǔ)所述數(shù)據(jù)塊。所述數(shù)據(jù)塊存儲(chǔ)在災(zāi)備陣列30的目標(biāo)物理地址與所述數(shù)據(jù)塊存儲(chǔ)在生產(chǎn)陣列20的源物理地址不相同。
具體的,步驟1可以由生產(chǎn)陣列20中的處理器118來執(zhí)行。
在步驟2中,災(zāi)備陣列30接收所述數(shù)據(jù)復(fù)制請(qǐng)求。災(zāi)備陣列30可以根據(jù)所述數(shù)據(jù)復(fù)制請(qǐng)求中攜帶的對(duì)象的ID判斷其本地是否存在于與源對(duì)象的ID相同的對(duì)象。若存在ID相同的對(duì)象,那么所述數(shù)據(jù)復(fù)制請(qǐng)求是一個(gè)增量數(shù)據(jù)復(fù)制請(qǐng)求,接下來執(zhí)行步驟6。所述增量數(shù)據(jù)復(fù)制請(qǐng)求用于更新所述對(duì)象。若判斷的結(jié)果是不存在ID相同的對(duì)象,那么災(zāi)備陣列30就需要所述數(shù)據(jù)復(fù)制請(qǐng)求中創(chuàng)建一個(gè)目標(biāo)對(duì)象,如步驟3所示。
在步驟3中,災(zāi)備陣列30創(chuàng)建所述目標(biāo)對(duì)象。所述目標(biāo)對(duì)象的ID與所述源對(duì)象的ID可以相同,也可以不相同。若ID相同,那么無論對(duì)生產(chǎn)陣列20還是災(zāi)備陣列30而言都相對(duì)更容易查找到與源對(duì)象相對(duì)應(yīng)的目標(biāo)對(duì)象,或者與目標(biāo)對(duì)象相對(duì)應(yīng)的源對(duì)象。若ID不同,那么災(zāi)備陣列30在設(shè)定目標(biāo)對(duì)象的ID之后,還需要保存源對(duì)象的ID與目標(biāo)對(duì)象的ID之間的對(duì)應(yīng)關(guān)系,并且將所述對(duì)應(yīng)關(guān)系通知生產(chǎn)陣列20。采用這種方式,雖然查找起來相對(duì)復(fù)雜一點(diǎn),但是災(zāi)備陣列30在創(chuàng)建目標(biāo)對(duì)象時(shí)更為靈活。所以兩者各有優(yōu)勢(shì)。另外,如前面對(duì)對(duì)象的描述可知,目標(biāo)對(duì)象是邏輯上用于承載文件或者目錄的數(shù)據(jù)容器,在災(zāi)備陣列30的硬盤上對(duì)應(yīng)一段或幾段物理空間。所述物理空間是創(chuàng)建所述目標(biāo)對(duì)象時(shí),為其分配的。
在步驟4中,災(zāi)備陣列30將所述數(shù)據(jù)復(fù)制請(qǐng)求中攜帶的數(shù)據(jù)塊寫入所述物理空間中。所述數(shù)據(jù)塊保存在所述物理空間中的地址為目標(biāo)物理地址,目標(biāo)物理地址與源物理地址不同。
具體的,生產(chǎn)陣列20向?yàn)?zāi)備陣列30發(fā)送的所述數(shù)據(jù)復(fù)制請(qǐng)求中還可以包括所述數(shù)據(jù)塊的邏輯地址。所述邏輯地址對(duì)于生產(chǎn)陣列20和災(zāi)備陣列30而言都是適用的。這意味著,所述數(shù)據(jù)塊位于源對(duì)象的位置與所述數(shù)據(jù)塊位于目標(biāo)對(duì)象的位置相同。因此,災(zāi)備陣列30在將所述數(shù)據(jù)塊寫入所述物理空間時(shí)可以根據(jù)所述數(shù)據(jù)塊的邏輯地址寫入所述物理空間??梢岳斫獾氖?,所述數(shù)據(jù)塊實(shí)際占用的物理空間可以是為所述目標(biāo)對(duì)象分配的物理空間的一部分,也可以是全部。
在步驟5中,災(zāi)備陣列30在將所述數(shù)據(jù)塊寫入物理空間之后,生成并保存所述數(shù)據(jù)塊的布局元數(shù)據(jù)。所述布局元數(shù)據(jù)包括目標(biāo)對(duì)象的ID與目標(biāo)物理地址的對(duì)應(yīng)關(guān)系,以及邏輯地址與所述目標(biāo)物理地址的對(duì)應(yīng)關(guān)系。由于目標(biāo)物理地址與源物理地址不同,那么相應(yīng)的,災(zāi)備陣列端的布局元數(shù)據(jù)和生產(chǎn)陣列端的布局元數(shù)據(jù)也不相同。
在執(zhí)行步驟5之后,災(zāi)備陣列30可以向生產(chǎn)陣列20發(fā)送一個(gè)響應(yīng)請(qǐng)求,以指示所述數(shù)據(jù)復(fù)制請(qǐng)求執(zhí)行成功。至此,本實(shí)施例實(shí)現(xiàn)了將生產(chǎn)陣列中的對(duì)象以及所述對(duì)象對(duì)應(yīng)的數(shù)據(jù)塊復(fù)制到災(zāi)備陣列中。由于所述數(shù)據(jù)塊存儲(chǔ)在災(zāi)備陣列30中的目標(biāo)物理地址與所述數(shù)據(jù)塊存儲(chǔ)在生產(chǎn)陣列20中的源物理地址不相同,生產(chǎn)陣列20并不需要指示災(zāi)備陣列30存儲(chǔ)所述數(shù)據(jù)塊的物理地址,因此生產(chǎn)陣列20也不需要將布局元數(shù)據(jù)發(fā)給災(zāi)備陣列30,節(jié)省了生產(chǎn)陣列與災(zāi)備陣列之間的帶寬開銷。
具體的,步驟2-步驟5可以由災(zāi)備陣列30中的處理器218來執(zhí)行。
下面介紹增量數(shù)據(jù)復(fù)制請(qǐng)求的處理。
在步驟2中,如果災(zāi)備陣列30判斷出所述目標(biāo)對(duì)象已經(jīng)存在,那么步驟2中的數(shù)據(jù)復(fù)制請(qǐng)求就是一個(gè)增量數(shù)據(jù)復(fù)制請(qǐng)求。另外,在步驟5之后,在步驟6中(即創(chuàng)建所述目標(biāo)對(duì)象之后)災(zāi)備陣列30也可能接收增量數(shù)據(jù)復(fù)制請(qǐng)求。所述增量數(shù)據(jù)復(fù)制請(qǐng)求用于對(duì)目標(biāo)對(duì)象中的數(shù)據(jù)塊進(jìn)行更新。
具體的,在完成一次復(fù)制任務(wù)之后生產(chǎn)陣列20可能會(huì)接收來自生產(chǎn)主機(jī)的增量數(shù)據(jù),用于源對(duì)象對(duì)應(yīng)的數(shù)據(jù)塊進(jìn)行更新。為了保持兩端的數(shù)據(jù)的一致性,生產(chǎn)陣列20需要將所述增量數(shù)據(jù)發(fā)送給災(zāi)備陣列30。所述增量數(shù)據(jù)復(fù)制請(qǐng)求包括所述增量數(shù)據(jù)、源對(duì)象的標(biāo)識(shí)(例如,ID)以及邏輯地址。與數(shù)據(jù)復(fù)制請(qǐng)求類似,增量數(shù)據(jù)復(fù)制請(qǐng)求也是周期性發(fā)送的,其周期可以和遠(yuǎn)程復(fù)制的周期相同。
在實(shí)際應(yīng)用中,生產(chǎn)陣列20在接收增量數(shù)據(jù)之后,可以保存為增量日志。所述增量日志可以描述為“源對(duì)象的ID+邏輯地址”。當(dāng)復(fù)制任務(wù)觸發(fā)時(shí),生產(chǎn)陣列20根據(jù)所述增量日志讀取所述增量數(shù)據(jù),并將所述增量數(shù)據(jù)與所述邏輯地址發(fā)送給災(zāi)備陣列30。當(dāng)生產(chǎn)陣列20中保存有多條增量日志時(shí),生產(chǎn)陣列20可以將一個(gè)遠(yuǎn)程復(fù)制周期內(nèi)的多條增量日志,一次性地或者分別發(fā)送給災(zāi)備陣列30,以實(shí)現(xiàn)災(zāi)備陣列端和生產(chǎn)陣列端數(shù)據(jù)的一致性。
例如,在步驟6中,生產(chǎn)陣列20向?yàn)?zāi)備陣列30發(fā)送增量數(shù)據(jù)復(fù)制請(qǐng)求,災(zāi)備陣列30接收所述增量數(shù)據(jù)復(fù)制請(qǐng)求之后,根據(jù)源對(duì)象的ID查找待更新的目標(biāo)對(duì)象。示例性的,目標(biāo)對(duì)象的ID可以和源對(duì)象的ID相同,這種情況下,災(zāi)備陣列30可以直接根據(jù)所述源對(duì)象的ID查找到目標(biāo)對(duì)象。另外,在其他實(shí)施方式中,目標(biāo)對(duì)象的ID可以和源對(duì)象的ID不相同,那么災(zāi)備陣列30就需要根據(jù)所述源對(duì)象的ID和本地保存的目標(biāo)對(duì)象的ID與源對(duì)象的ID之間的對(duì)應(yīng)關(guān)系,查找到目標(biāo)對(duì)象。
在步驟7中,災(zāi)備陣列30根據(jù)所述增量數(shù)據(jù)復(fù)制請(qǐng)求中攜帶的邏輯地址確定所述目標(biāo)對(duì)象內(nèi)待更新的數(shù)據(jù)塊的位置,將所述增量數(shù)據(jù)復(fù)制請(qǐng)求中攜帶的數(shù)據(jù)塊寫入該位置。災(zāi)備陣列30在將所述增量數(shù)據(jù)寫入為所述目標(biāo)對(duì)象對(duì)應(yīng)的物理空間之后,生成并保存目標(biāo)物理地址與所述邏輯地址之間的對(duì)應(yīng)關(guān)系,以及所述目標(biāo)物理地址與所述目標(biāo)對(duì)象的ID之間的對(duì)應(yīng)關(guān)系。
具體的,步驟6-步驟7可以由災(zāi)備陣列30中的處理器218來執(zhí)行。
通過步驟6和步驟7,災(zāi)備陣列30完成了對(duì)目標(biāo)對(duì)象的更新。并且,生產(chǎn)陣列20在將增量數(shù)據(jù)發(fā)送給災(zāi)備陣列30時(shí)也不需要將描述所述增量數(shù)據(jù)在硬盤上如何布局的元數(shù)據(jù)發(fā)送給災(zāi)備陣列30,而是由災(zāi)備陣列30在將所述增量數(shù)據(jù)寫入時(shí)重新生成布局元數(shù)據(jù)。因此,節(jié)省了生產(chǎn)陣列端與災(zāi)備陣列端之間的帶寬開銷。
在實(shí)際應(yīng)用中,生產(chǎn)陣列20可能刪除某個(gè)文件或者某個(gè)目錄,或者截?cái)嗄硞€(gè)文件,從而導(dǎo)致該文件或者目錄所在的對(duì)象被刪除,或者該對(duì)象的部分?jǐn)?shù)據(jù)被刪除,使對(duì)象實(shí)際占用的物理空間變小。這種場(chǎng)景下,生產(chǎn)陣列20也需要將刪除文件或者目錄、或截?cái)辔募男畔⑼街翞?zāi)備陣列30。
示例性的,生產(chǎn)陣列20接收刪除、截?cái)嘀噶钪螅鶕?jù)刪除、截?cái)嘀噶钪械倪壿嫷刂穼⒃撨壿嫷刂返臄?shù)據(jù)塊釋放,并且保存刪除日志。所述刪除日志可以描述為“源對(duì)象的ID+邏輯地址”。當(dāng)復(fù)制任務(wù)觸發(fā)時(shí),生產(chǎn)陣列20根據(jù)所述刪除日志讀取對(duì)應(yīng)位置的數(shù)據(jù),若該位置對(duì)應(yīng)的數(shù)據(jù)塊被釋放,則讀取不到有效數(shù)據(jù),在這種情況下,生產(chǎn)陣列將數(shù)據(jù)內(nèi)容替換為某種特殊標(biāo)記(如標(biāo)記為全0),該標(biāo)記的含義代表對(duì)應(yīng)的邏輯地址的數(shù)據(jù)塊需要被釋放,并將所述含有特殊標(biāo)記的數(shù)據(jù)、所述邏輯地址以及源對(duì)象的ID發(fā)送給災(zāi)備陣列30。
災(zāi)備陣列30檢測(cè)到接收的數(shù)據(jù)中含有特殊標(biāo)記,根據(jù)源對(duì)象的ID確定待修改的目標(biāo)對(duì)象,將所述目標(biāo)對(duì)象的邏輯地址的數(shù)據(jù)塊釋放,從而實(shí)現(xiàn)刪除對(duì)象、或刪除對(duì)象的部分?jǐn)?shù)據(jù),即達(dá)到在目標(biāo)文件系統(tǒng)中刪除文件或目錄,截?cái)辔募男Ч?/p>
另外,本實(shí)施例還可以用于陣列內(nèi)部源文件系統(tǒng)與目標(biāo)文件系統(tǒng)之間的數(shù)據(jù)復(fù)制。在具體實(shí)現(xiàn)上,可以由陣列內(nèi)部的控制器(參見圖2所示的結(jié)構(gòu)圖)執(zhí)行。
例如,當(dāng)源文件系統(tǒng)中的一個(gè)對(duì)象需要備份到目標(biāo)文件系統(tǒng)時(shí),控制器判斷目標(biāo)文件系統(tǒng)中是否有與源對(duì)象ID相同的目標(biāo)對(duì)象,若沒有則創(chuàng)建一個(gè)目標(biāo)對(duì)象,所述目標(biāo)對(duì)象的ID與源對(duì)象的ID相同,所述目標(biāo)對(duì)象對(duì)應(yīng)硬盤上的一段或幾段物理空間。與圖4所示的實(shí)施例不同之處在于,陣列內(nèi)的備份,源對(duì)象和目標(biāo)對(duì)象所對(duì)應(yīng)的物理空間都位于該陣列內(nèi)。而圖4所示的實(shí)施例由于陣列間的數(shù)據(jù)復(fù)制,源對(duì)象對(duì)應(yīng)的物理空間位于生產(chǎn)陣列中,目標(biāo)對(duì)象對(duì)應(yīng)的物理空間位于災(zāi)備陣列中。在目標(biāo)對(duì)象創(chuàng)建完成之后,控制器再將所述源對(duì)象對(duì)應(yīng)的數(shù)據(jù)塊寫入目標(biāo)對(duì)象對(duì)應(yīng)的物理空間中。
示例性的,控制器可以根據(jù)所述數(shù)據(jù)塊位于所述源對(duì)象的邏輯地址將所述數(shù)據(jù)塊寫入目標(biāo)對(duì)象對(duì)應(yīng)的物理空間中,以保證所述數(shù)據(jù)塊在目標(biāo)對(duì)象中保存的位置與源對(duì)象中保存的位置一致。
其余的步驟,例如當(dāng)源對(duì)象對(duì)應(yīng)的數(shù)據(jù)有更新時(shí),增量數(shù)據(jù)也需要備份給目標(biāo)對(duì)象。具體的實(shí)施方式與圖4所示的實(shí)施例類似,這里不再贅述。
在某些基于文件語義的數(shù)據(jù)備份技術(shù)中,源文件系統(tǒng)將接收的數(shù)據(jù)記錄到日志中。日志中按順序記錄所有的文件語義寫操作和寫數(shù)據(jù),如創(chuàng)建文件、刪除文件、移動(dòng)文件、對(duì)文件寫入數(shù)據(jù)、修改文件屬性、創(chuàng)建目錄、刪除目錄等。文件語義寫操作具有順序依賴性,例如,創(chuàng)建文件前,該文件所屬的目錄必須先存在,所以必須先創(chuàng)建目錄,再創(chuàng)建文件。由于順序依賴性的存在,使得備份時(shí)必須按照一系列的規(guī)則進(jìn)行,從而使得基于文件語義的數(shù)據(jù)備份技術(shù)實(shí)現(xiàn)起來比較復(fù)雜。或者,周期性地對(duì)源文件系統(tǒng)創(chuàng)建快照,通過對(duì)比前后快照的差異,推導(dǎo)出兩次快照之間源文件系統(tǒng)發(fā)生哪些文件語義寫操作和寫數(shù)據(jù)。然后,后臺(tái)任務(wù)獲取該記錄,以文件語義寫操作的形式發(fā)送給目標(biāo)文件系統(tǒng)。目標(biāo)文件系統(tǒng)按照類似于應(yīng)用程序在災(zāi)備陣列的文件系統(tǒng)上重新執(zhí)行的方式執(zhí)行該寫操作。這種方式導(dǎo)致災(zāi)備陣列在執(zhí)行文件語義復(fù)制時(shí),需要對(duì)每個(gè)文件執(zhí)行相應(yīng)的操作(例如open操作或者close操作),導(dǎo)致很多額外的開銷,使得備份效率較低。而本發(fā)明實(shí)施例在實(shí)現(xiàn)時(shí),不用考慮寫操作之間的順序依賴性。只需要將對(duì)象對(duì)應(yīng)的數(shù)據(jù)塊由源文件系統(tǒng)備份到目標(biāo)文件系統(tǒng),數(shù)據(jù)塊之間沒有依賴關(guān)系,不用考慮備份數(shù)據(jù)塊的先后順序,降低了方案復(fù)雜度。并且,在備份時(shí),可以直接執(zhí)行對(duì)對(duì)象的讀取和寫入,不需要執(zhí)行額外的操作(例如open操作或者close操作),降低了系統(tǒng)開銷,提高了備份效率。
另外,在基于塊語義的備份中,文件系統(tǒng)必須構(gòu)建于卷上。卷提供的是塊(block)語義的訪問接口和地址空間,該語義只有讀一段地址和寫一段地址,沒有復(fù)雜的文件操作。所以,基于塊語義的備份,本質(zhì)上是利用卷的復(fù)制方法實(shí)現(xiàn)。該方法周期性地對(duì)生產(chǎn)陣列中的源卷創(chuàng)建快照,比較前后快照之間哪些數(shù)據(jù)塊發(fā)生了變化。然后,獲取發(fā)生變化的數(shù)據(jù)塊以及數(shù)據(jù)塊的地址,發(fā)送給目標(biāo)文件系統(tǒng)。目標(biāo)文件系統(tǒng)將數(shù)據(jù)塊寫入相同地址的目標(biāo)卷中。然而,基于塊語義的備份,必須依賴于文件系統(tǒng)構(gòu)建于卷上的基礎(chǔ)架構(gòu),若不是基于這種架構(gòu)則無法采用該技術(shù)。本發(fā)明實(shí)施例擺脫了文件系統(tǒng)需要構(gòu)建于卷上的依賴,無論文件系統(tǒng)構(gòu)建于何種物理空間之上,都可以實(shí)現(xiàn)文件的備份。
需要說明的是,上述兩段話中的源文件系統(tǒng)和目標(biāo)文件系統(tǒng)可以是指一個(gè)陣列內(nèi)的兩個(gè)文件系統(tǒng),也可以分別是兩個(gè)陣列中的文件系統(tǒng)。
最后應(yīng)說明的是:以上各實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制。