優(yōu)先權主張
本申請主張2015年2月26日提交的新加坡專利申請no.10201501440t的優(yōu)先權。
本發(fā)明總體上涉及用于具有主動存儲裝置的陣列的存儲系統(tǒng)中的數(shù)據(jù)存儲的方法和設備,并且更特別地,涉及用于具有主動存儲裝置的陣列的存儲系統(tǒng)內的數(shù)據(jù)分條、奇偶校驗計算、數(shù)據(jù)分配和重構的方法和設備。
背景技術:
具有主動存儲裝置的陣列的存儲系統(tǒng)包含硬盤驅動器(hdd)和主動存儲單元。理想地,數(shù)據(jù)存儲系統(tǒng)中發(fā)生故障的數(shù)據(jù)存儲裝置中數(shù)據(jù)的數(shù)據(jù)重構作為離線重構進行,其中存儲系統(tǒng)停止依賴于任何客戶端/應用服務器以便允許數(shù)據(jù)重構過程以全速運行。然而,該情景在大多數(shù)生產環(huán)境中是不現(xiàn)實的,因為大多數(shù)存儲系統(tǒng)即便在它們正從盤故障恢復時也需要提供不間斷的數(shù)據(jù)服務。
當在系統(tǒng)中存在裝置故障時,糾刪碼保護數(shù)據(jù)。與利用數(shù)據(jù)復制相比,利用糾刪碼來提高系統(tǒng)可靠性更經濟。實施的糾刪碼可以保護hdd和包括主動控制器板(acb)和hdd的主動存儲單元免遭故障。在另一方面,復制需要高得多的冗余數(shù)據(jù)量,其與原始數(shù)據(jù)一樣大或者大小是原始數(shù)據(jù)的好多倍。然而,復制具有短得多的恢復等式(recoveryequation),意味著在盤故障之后其具有更高的恢復效率。
因此,所需要的是一種用于具有主動存儲裝置的陣列的存儲系統(tǒng)內的數(shù)據(jù)分條、奇偶校驗計算、數(shù)據(jù)分配和數(shù)據(jù)重構的方法和設備,其至少部分克服現(xiàn)有方法的缺點并且提供提高的數(shù)據(jù)存取性能和縮短的故障重構時間。另外,結合附圖和本公開的該背景技術進行考慮,根據(jù)后續(xù)的詳細描述和隨附的權利要求,其他可取特征和特性將變得明了。
技術實現(xiàn)要素:
根據(jù)本發(fā)明的至少一個實施例,提供了一種用于主動驅動存儲系統(tǒng)中的數(shù)據(jù)分條、分配和重構的方法,所述主動驅動存儲系統(tǒng)包括多個主動對象存儲裝置,所述多個主動對象存儲裝置中的每一個包括一個或多個存儲裝置和控制器。所述方法包括下述步驟:所述多個主動對象存儲裝置中的所述被識別的一個的控制器將接收的數(shù)據(jù)分段成多個數(shù)據(jù)塊并且響應于所述多個數(shù)據(jù)塊生成一個或多個奇偶校驗塊。所述方法還包括下述步驟:所述多個主動對象存儲裝置中的所述被識別的一個的控制器響應于所述多個數(shù)據(jù)塊的數(shù)量和接收的數(shù)據(jù)要被存儲到其中的所述多個主動對象存儲裝置中的一個或多個的數(shù)量重組所述多個數(shù)據(jù)塊和所述一個或多個奇偶校驗塊。最后,所述方法包括下述步驟:所述多個主動對象存儲裝置中的所述被識別的一個的控制器將所述多個數(shù)據(jù)塊和所述一個或多個奇偶校驗塊存儲到所述多個主動對象存儲裝置中的一個或多個中。
根據(jù)本發(fā)明的至少一個實施例的另一方面,提供了一種用于在主動驅動存儲系統(tǒng)中的數(shù)據(jù)分條、分配和重構的方法,所述主動驅動存儲系統(tǒng)包括耦接到一個或多個應用服務器的多個主動對象存儲裝置。所述方法包括下述步驟:接收數(shù)據(jù)以存儲在所述多個主動對象存儲裝置中的一個或多個中,并且在所述一個或多個應用服務器處將接收的數(shù)據(jù)分段成多個數(shù)據(jù)塊。所述方法還包括下述步驟:所述一個或多個應用服務器響應于所述多個數(shù)據(jù)塊生成一個或多個奇偶校驗塊;以及響應于所述多個數(shù)據(jù)塊的數(shù)量和接收的數(shù)據(jù)要存儲到其中的所述多個主動對象存儲裝置中的一個或多個的數(shù)量,重組所述多個數(shù)據(jù)塊和所述一個或多個奇偶校驗塊。最后,所述方法包括:所述一個或多個應用服務器中的一個將所述多個數(shù)據(jù)塊和所述一個或多個奇偶校驗塊存儲到所述多個主動對象存儲裝置中的一個或多個中。
根據(jù)本公開的至少一個實施例的另一方面,提供了一種用于根據(jù)主動驅動存儲系統(tǒng)中的主動對象存儲裝置的故障進行故障恢復的方法,所述主動驅動存儲系統(tǒng)包括多個主動對象存儲裝置,所述多個主動對象存儲裝置中的每一個屬于多個群組中的一個,并且所述多個主動對象存儲裝置中的每一個包括一個或多個存儲裝置和控制器。所述方法包括下述步驟:為發(fā)生故障的主動對象存儲裝置已經加入的多個群組中的每一個選擇恢復列表構造器,以及每個恢復列表構造器為其群組構造需要被構造的數(shù)據(jù)列表。所述方法包括下述步驟:每個恢復列表構造器將用于其群組的需要被構造的數(shù)據(jù)列表發(fā)送到被指派為用于群組的恢復主機的替換主動對象存儲裝置,并且每個恢復主機調度群組的重構,其包括下述中的一個或多個:發(fā)送請求以存取數(shù)據(jù)和相應的奇偶校驗數(shù)據(jù)、響應于存取的數(shù)據(jù)和相應的奇偶校驗數(shù)據(jù)計算恢復的數(shù)據(jù)以及將恢復的數(shù)據(jù)寫入到恢復主機。然后,所述方法包括下述步驟:恢復主機充當替換主動對象存儲裝置。
附圖說明
附圖用于示意各種實施例并說明根據(jù)本實施例的各種原理和優(yōu)點,在附圖中相同的參考標號指示前后單獨的視圖中相同或功能上相似的元件,并且附圖和下面的詳細描述一起并入在說明書中并且形成說明書的一部分。
圖1示意了根據(jù)本實施例的用于主動存儲陣列的機箱殼體的前右上透視圖。
圖2示意了根據(jù)本實施例的向各種應用服務器提供存儲服務的主動存儲陣列的框圖。
圖3示意了根據(jù)本實施例的圖2的主動存儲陣列的框圖,描繪了在主動控制器板(acb)中實施的數(shù)據(jù)分條和分布。
圖4示意了根據(jù)本實施例的圖2的主動存儲陣列的框圖,描繪了在應用服務器中實施的數(shù)據(jù)分條和分布。
圖5示意了根據(jù)本實施例的五位int碼的tanner圖結構。
圖6示意了根據(jù)本實施例的主動存儲裝置的陣列中的包括acb和硬盤驅動器(hdd)的主動存儲單元(asu)的圖。
圖7示意了根據(jù)本實施例的主動存儲裝置的陣列中的數(shù)據(jù)分條和分布過程的圖。
圖8示意了根據(jù)本實施例的主動存儲陣列中的數(shù)據(jù)寫入過程的流程圖。
圖9示意了根據(jù)本實施例的主動存儲陣列中的部分數(shù)據(jù)寫入和數(shù)據(jù)更新過程的流程圖。
圖10示意了根據(jù)本實施例的主動存儲陣列中的數(shù)據(jù)讀出過程的流程圖。
圖11示意了根據(jù)本實施例的主動存儲陣列中的讀出故障恢復過程的流程圖。
圖12示意了根據(jù)本實施例的主動存儲陣列中的裝置故障恢復過程的流程圖。以及
圖13示意了根據(jù)本實施例的描繪了主動存儲陣列中的恢復列表構造和恢復主機的圖。
技術人員將理解,出于清楚和簡要示意了附圖中的元件,并且不必按照比例來描繪附圖中的元件。例如,圖2、3、4、6、7和13的示意是根據(jù)本實施例的主動存儲陣列的各種元件的關系和結構的表示。
具體實施方式
下面的詳細描述本質上僅是示例性的并且不打算限制發(fā)明或發(fā)明的應用和使用。另外,沒有打算受在發(fā)明的前面的背景中或下面的詳細描述中提出的任何理論束縛。本實施例的意圖是為了提出用于具有主動存儲裝置的陣列的存儲系統(tǒng)的數(shù)據(jù)分條、奇偶校驗計算、數(shù)據(jù)分配和重構的架構和處理。還提出了數(shù)據(jù)讀出和寫入以及更新程序、讀出故障和節(jié)點/裝置故障重構過程,其允許通過提出的方法和系統(tǒng)的高并行性極大地提高數(shù)據(jù)存取性能并且縮短讀出故障重構時間。因此,根據(jù)本實施例,提出了用于數(shù)據(jù)分條、奇偶校驗計算、分組和分配的過程;讀出和寫入并且更新數(shù)據(jù)的過程;在遭遇讀出故障時重構數(shù)據(jù)的過程;以及在系統(tǒng)故障之后重構節(jié)點的過程。
參考圖1,示出根據(jù)本實施例的機箱殼體102的前右上透視圖100,機箱殼體102充當用于主動存儲裝置的陣列的存儲裝置外殼。單個主動存儲單元(asu)104、106裝配到機箱殼體102的主動混合隔區(qū)中并且由一個主動控制器板(acb)108和六個硬盤驅動器(hdd)110構成。本領域技術人員將會意識到,一個acb對六個hdd的比率僅是示意性的acb對hdd的其他比率也是可以的。另外,本領域技術人員將會意識到,主動控制器板可以是板(例如,圖1中描繪的板108),其還可以是與機箱102或hdd110中的一個或多個整合或者與這些裝置分離的子系統(tǒng)或其他部件,其充當用于控制hdd110的控制器。在機箱殼體102中有三十個隔區(qū)。隔區(qū)中的二十九個被配置為接收基本與asu106相同的asu,asu106由一個acb和六個hdd構成。這二十九個asu用于數(shù)據(jù)存儲。最后一個隔區(qū)配置為接收由兩個acb和兩個hdd構成的特殊單元104。單元104用于管理和/或網(wǎng)關控制。另外,本領域技術人員將會意識到,機箱中隔區(qū)的數(shù)量屬于設計選擇并且此處所述的三十個隔區(qū)的選擇僅是示例性的。因此,根據(jù)機箱殼體102中可用的空間,可以添加主動存儲單元(asu)106。
根據(jù)本實施例,每個acb伴隨有非易失性存儲器(nvm),例如快閃存儲器或sttmram存儲器裝置、芯片上系統(tǒng)(soc)存儲裝置、dram存儲器裝置或其他存儲部件。nvm存儲元數(shù)據(jù)和經常使用的數(shù)據(jù)。每個acb可以將多達六個hdd連接到asu中。每個hdd可以均為一個主動對象存儲裝置(activeobjectstoragedevice,aosd)。因此,在一個asu中,存在最多六個aosd,并且在一個機箱中,存在最多174個aosd。
系統(tǒng)的軟件安裝/嵌入在acb中。根據(jù)本實施例,軟件的主要功能是管理存儲,包括nvm和hdd中的存儲,并且管理存儲集群/分布式存儲以使得能夠擴展到超過一個機箱的整個系統(tǒng)能夠自管理并且能夠自愈。
機箱102可以安裝在數(shù)據(jù)中心的機架中并且連接到各種應用服務器以提供存儲服務。參考圖2,描繪了主動存儲陣列202的框圖200。根據(jù)本實施例,主動存儲陣列202經由高速以太網(wǎng)連接212向各種應用服務器(例如,塊應用服務器204、文件應用服務器206、s3對象應用服務器208或鍵值應用服務器)提供存儲服務。
如在上面討論的,機箱中asu106的最大數(shù)量為二十九,asu106中的每一個(稱為主動對象存儲裝置(aosd)214)均包括nvm216和多達六個hdd218。如在上面討論的,機箱中的第三十個裝置是特殊單元104,其由兩個acb和兩個hdd構成,并且控制主動存儲陣列202中的管理220和網(wǎng)關222功能。當需要附加存儲時,在不擾亂存儲服務的情況下通過添加更多機箱可以動態(tài)地添加更多asu106,在添加附加asu106時,特殊單元104控制主動存儲陣列202的管理220和網(wǎng)關222功能。
當存在裝置故障時,糾刪碼用于保護數(shù)據(jù)。裝置故障可能是asu106中的一個的acb108的故障或hdd的故障。糾刪碼(即,int碼)設計成使得系統(tǒng)202可以承受多個故障,包括acb108故障和/或hdd110故障。
存在在主動存儲系統(tǒng)202中實施糾刪碼的兩種不同方法。第一,如果機箱內部的asu106的acb108執(zhí)行數(shù)據(jù)分條和奇偶校驗計算,則可以在acb108層級實施糾刪碼。以這種方式,通過主動存儲系統(tǒng)202(特別是通過acb108)來完成數(shù)據(jù)分條和分布。另一種方式是在應用服務器204、206、208、210處實施糾刪碼。當在應用服務器層級實施糾刪碼時,在應用服務器204、206、208、210處完成數(shù)據(jù)分條和分布,應用服務器204、206、208、210需要從主動存儲系統(tǒng)202存取數(shù)據(jù)。
這兩種方法具有優(yōu)點也有缺點。acb糾刪碼實施方法不需要在應用服務器204、206、208、210處的任何修改或軟件安裝。應用服務器糾刪碼實施方法需要在應用服務器204、206、208、210處的軟件安裝和/或修改,但是能夠支持比acb糾刪碼實現(xiàn)方法更高的性能,因為應用服務器糾刪碼實施方式提供更高的數(shù)據(jù)并行性。
參考圖3和圖4,示意了兩種糾刪碼實施方式并在對兩種糾刪碼實施方式在當在兩個不同位置實施數(shù)據(jù)分條和奇偶校驗計算時能夠如何存取數(shù)據(jù)方面進行了比較。圖3示意了根據(jù)本實施例的主動存儲陣列202的框圖300,描繪了當在asu106的acb108中實現(xiàn)糾刪碼數(shù)據(jù)分條和分布時的主要步驟。圖4示意了根據(jù)本實施例的主動存儲陣列202的框圖400,描繪了當在應用服務器204、206、208、210中實現(xiàn)糾刪碼數(shù)據(jù)分條和計算時的主要步驟。
參考圖3,在acb糾刪碼數(shù)據(jù)分條和分布實施方式存儲數(shù)據(jù)時,涉及兩個主要步驟。首先,應用服務器(例如,應用服務器204)存取302糾刪碼群組的主aosd304進行讀出和寫入請求。然后,為了寫入數(shù)據(jù),主aosd304執(zhí)行數(shù)據(jù)分條和奇偶校驗計算,同時還將數(shù)據(jù)寫入請求發(fā)送306到群組中相應的aosd214。為了讀出數(shù)據(jù),主aosd304首先計算要被讀出的數(shù)據(jù)的數(shù)據(jù)位置,并且然后將數(shù)據(jù)讀出請求發(fā)動到群組中的相應的aosd214以對它們檢索。
參考圖4,在應用服務器糾刪碼數(shù)據(jù)分條和分布實施方式中,僅需要一個步驟。當讀出數(shù)據(jù)時,應用服務器(例如,數(shù)據(jù)中心中的虛擬機(vm)402)計算要被讀出的數(shù)據(jù)的位置并且然后同時將讀出請求發(fā)送404到相應的aosd214。為了寫入數(shù)據(jù),應用服務器402執(zhí)行數(shù)據(jù)分條和計算,并且然后同時將數(shù)據(jù)寫入請求發(fā)送404到相應的aosd214。
兩種方法具有其優(yōu)點和缺點并且可以單獨地或共同地實施。
int碼是設計用于系統(tǒng)的糾刪碼以使得該系統(tǒng)能夠同時承受多個裝置故障。根據(jù)本實施例,在主動存儲系統(tǒng)中實施int碼以提供高數(shù)據(jù)可靠性和可用性。根據(jù)本實施例,可以在主動存儲系統(tǒng)中實施其他糾刪碼(例如,里德索羅門碼);然而,與相應的里德索羅門碼相比,int碼能夠縮短重構時間至少百分之五十。
根據(jù)本實施例,描述了一種用于使用int碼時的數(shù)據(jù)分條和分配的方法。圖5示意了根據(jù)本實施例的5位int碼的tanner圖結構500,其被設計用于主動存儲系統(tǒng)以承受多達三個同時發(fā)生的故障。使用六個校驗節(jié)點502,五位int碼的最大碼群組大小為三十二。三十二個裝置中六個裝置為存儲奇偶校驗數(shù)據(jù)的奇偶校驗節(jié)點504,而三十二個裝置中的其余二十六個裝置為存儲數(shù)據(jù)的數(shù)據(jù)節(jié)點506。利用這種系統(tǒng)設計,可以保護主動存儲系統(tǒng)免受多達三個同時發(fā)生的故障之害。
圖6示意了根據(jù)本實施例的存儲外殼(例如,機箱102(圖1))內的主動存儲裝置的陣列中的包括acb604和硬盤驅動器(hdd)606的二十九個主動存儲單元(asu)602的圖600。每個asu602具有一個acb604和連接到該acb604的六個hdd606,并且每個hdd606被配置為aosd214。因此,一個asu602中aosd214的最大數(shù)量為六,機箱中asu602的最大數(shù)量為二十九,并且一個機箱中aosd的最大數(shù)量為174。
為了實施上述五位int碼,糾刪碼群組大小被選擇為二十八。這與包括二十九個asu602的當前機箱設計是相容的。這樣,在每個糾刪碼群組中,存在二十八個aosd214,并且這二十八個aosd214當中,其中的六個存儲奇偶校驗數(shù)據(jù)而其中的二十二個存儲數(shù)據(jù)。
參考圖7,圖700示意了根據(jù)本實施例的主動存儲裝置的陣列中的數(shù)據(jù)分條和分配過程,并且描繪了如何在主動存儲裝置的陣列內執(zhí)行糾刪碼計算、數(shù)據(jù)分條和分配。對于數(shù)據(jù)寫入存在三個主要步驟:數(shù)據(jù)分段702、數(shù)據(jù)重組704和糾刪碼計算和數(shù)據(jù)分配706。
數(shù)據(jù)分段702將具有暫時存儲在輸入數(shù)據(jù)緩沖器708中的輸入數(shù)據(jù)(in_data)大小(即,要被寫入到存儲裝置的數(shù)據(jù)大小)的進入的寫入數(shù)據(jù)請求分成多個較小但是相同大小的數(shù)據(jù)塊(datachunk)710。數(shù)據(jù)塊大小是可配置的(例如,數(shù)據(jù)塊大小可以小如一千字節(jié))。在圖700中,in_data已經被分段為60個數(shù)據(jù)塊。
在數(shù)據(jù)重組704過程中,多個分段的數(shù)據(jù)塊710被重組成條712。每個條712的數(shù)據(jù)塊710的數(shù)量由糾刪碼群組大小來確定。在圖700中,每個條712包括二十二個數(shù)據(jù)塊710和六個奇偶校驗塊714。這樣,在圖700中可以看到,存在針對具有in_data的大小的寫入請求形成的三個條712。
在糾刪碼計算和數(shù)據(jù)分布706中,針對每個條712計算奇偶校驗塊714。在圖700中,每個條712需要計算六個奇偶校驗塊714,每個具有塊大小(chunk_size)的大小。該計算基于通過tanner圖500設計的int碼編碼算法。將所有數(shù)據(jù)塊710和奇偶校驗塊714分布到相應的aosd。如參考圖6在上面描述的,在每個糾刪碼群組中存在二十八個aosd214,并且在二十八個aosd214(即,aosd1到aosd28)當中,其中的二十二個(aosd1到aosd22)存儲數(shù)據(jù)而其中的六個(aosd23到aosd28)存儲奇偶校驗數(shù)據(jù)。因而,回頭參考圖700,三個數(shù)據(jù)塊(數(shù)據(jù)塊0、22、43)將被寫入到aosd1,數(shù)據(jù)塊1、23、44將被寫入到aosd2,等等。
以這種方式,aosd1到aosd28是包含二十八個aosd的邏輯群組。群組中的每個邏輯裝置映射到系統(tǒng)中對應的aosd。換言之,為了保存in_data,二十八個aosd必須要從系統(tǒng)中的174個aosd中進行選擇以形成邏輯群組。根據(jù)本實施例,可以(如下所述)選擇這二十八個aosd以便能夠取得高數(shù)據(jù)可靠性。
在根據(jù)本實施例的主動驅動器系統(tǒng)中,主要存在兩種類型的故障:一種是hdd故障而另一種是asu故障。asu故障可能歸因于asu的acb的故障或連接的六個hdd的故障。當hdd發(fā)生故障時,存儲在hdd中的數(shù)據(jù)將不再可存取。當一個asu發(fā)生故障時,存儲在asu中的六個hdd中的數(shù)據(jù)不再可存取。
根據(jù)本實施例,當承受大故障時,將規(guī)則應用到主動存儲系統(tǒng)以保護系統(tǒng)。大故障取決于acb與hdd的比率。在對于一個acb存在六個hdd的情況下,大故障被定義為:任何三個同時發(fā)生的asu故障、任何三個同時發(fā)生的hdd故障、任何一個asu故障同時發(fā)生有任何兩個hdd故障或任何兩個asu故障同時發(fā)生有任何一個hdd故障。首先,連接到一個acb的所有hdd不應當在相同的糾刪碼群組中,它們應當加入到多于一個群組。例如,在二十九個asu并且每個asu包括一個acb和六個hdd的情況下,規(guī)則是在一個asu內部連接到一個acb的所有六個hdd必須加入不同的碼群組。這樣,這二十八個aosd必須來自系統(tǒng)中的二十八個不同的asu(即,每個asu僅能夠選擇一個hdd/aosd處于碼群組中)。例如,參考圖6中的圖600,一個可能的糾刪碼群組可以通過選擇連接到從acb1到acb28的二十八個acb604的每一個的所有hdd610來形成。
參考圖8,流程圖800描繪了根據(jù)本實施例的主動存儲陣列中的數(shù)據(jù)寫入過程。對于在系統(tǒng)的acb中實施數(shù)據(jù)分條和計算的實施方式的情況,需要存取數(shù)據(jù)的應用服務器204、206、208、210首先必須計算或選擇aosd214的群組、在群組中識別一個主要aosd并且然后連接到主要aosd以寫入數(shù)據(jù)。
主要aosd檢查802數(shù)據(jù)寫入是否針對新數(shù)據(jù)寫入(即,存儲的數(shù)據(jù)不需要被產生)。如果要寫入802新數(shù)據(jù),則執(zhí)行804圖700(圖7)中示意的數(shù)據(jù)分段、重組、糾刪碼計算和數(shù)據(jù)分配。還需要基于上面提及的規(guī)則來選擇具有二十八個aosd的碼群組。這一旦完成,主要aosd就同時地將數(shù)據(jù)寫入發(fā)送到相應的aosd以執(zhí)行全條寫入806。一旦完成寫入806,主要aosd就保持對象大小信息;其還可以將對象大小信息808發(fā)送到aosd,aosd持有數(shù)據(jù)的奇偶校驗以保持額外的副本。通過經由現(xiàn)有系統(tǒng)中的setxattr功能將一個屬性、對象大小添加到xattr的現(xiàn)有數(shù)據(jù)結構來執(zhí)行該步驟808。
當被寫入的數(shù)據(jù)不是新數(shù)據(jù)802而是用于更新或修改的數(shù)據(jù)時,對象大小可以通過主要aosd從相應的奇偶校驗塊810讀出,并且執(zhí)行812對象數(shù)據(jù)的數(shù)據(jù)分段、重組、糾刪碼計算和數(shù)據(jù)分布。如果主要aosd已經具有相應的對象大小信息,則主要aosd可以跳過讀出對象大小的步驟。借助對象大小810,并且基于數(shù)據(jù)分布和糾刪碼計算812,可以識別條號和aosd。如果需要更新一整條,則應用服務器將執(zhí)行全寫入814。當需要更新條的僅一部分時,主要aosd可以執(zhí)行部分寫入814。對于全寫入,主要aosd將數(shù)據(jù)和奇偶校驗發(fā)送到群組中的所有相應的aosd以寫入816。對于部分寫入,圖9中描繪了程序。
對于在應用服務器中實施數(shù)據(jù)分條和計算的情況,需要執(zhí)行數(shù)據(jù)分條和計算的應用服務器204、206、208、210執(zhí)行流程圖800的對象寫入。這樣,應用服務器檢查數(shù)據(jù)讀出是否是針對新數(shù)據(jù)寫入802。如果其針對新數(shù)據(jù)寫入802,則執(zhí)行數(shù)據(jù)分段、重組、糾刪碼計算和數(shù)據(jù)分布,并且基于上述規(guī)則選擇具有二十八個aosd的碼群組。然后,應用服務器同時地將數(shù)據(jù)寫入指令發(fā)送到相應的aosd以執(zhí)行全寫入806。一旦寫入完成806,應用服務器就通過經由現(xiàn)有系統(tǒng)中的setxattr功能將一個屬性、對象大小添加到xattr的現(xiàn)有數(shù)據(jù)結構來將對象大小信息發(fā)送到aosd,aosd持有數(shù)據(jù)的奇偶校驗以用于其中的存儲808。
當應用服務器針對不是新數(shù)據(jù)的數(shù)據(jù)而是用于更新或修改的數(shù)據(jù)執(zhí)行對象寫入時802,應用服務器首先發(fā)送請求810以從持有奇偶校驗的aosd通過getxattr讀出目標大小。借助對象大小并且基于數(shù)據(jù)分布和糾刪碼計算812,可以識別條號和aosd。當需要更新一整條時,則應用服務器執(zhí)行全寫入814。當需要更新條的僅一部分時,應用服務器執(zhí)行814部分寫入(如圖9所討論)。對于全寫入814,應用服務器將數(shù)據(jù)和奇偶校驗發(fā)送到群組中的所有相應的aosd以寫入816。
圖9示意了根據(jù)本實施例的主動存儲陣列中的部分數(shù)據(jù)寫入和數(shù)據(jù)更新過程的流程圖900。當在系統(tǒng)的acb中實施數(shù)據(jù)分條和計算時,主要aosd發(fā)送讀出請求以讀出要被更新的數(shù)據(jù)塊和相應的奇偶校驗塊902。然后基于數(shù)據(jù)和讀出的奇偶校驗并且還基于要寫入的新數(shù)據(jù)來計算904新奇偶校驗數(shù)據(jù)。一旦計算904出新奇偶校驗,主要aosd會同時地將新數(shù)據(jù)和奇偶校驗發(fā)送到相應的aosd。
當在應用服務器中實施數(shù)據(jù)分條和計算時,應用服務器發(fā)送讀出請求以讀出要被更新的數(shù)據(jù)塊和相應的奇偶校驗塊902。然后基于數(shù)據(jù)和讀出的奇偶校驗并且還基于要寫入的新數(shù)據(jù)來計算904新奇偶校驗數(shù)據(jù)。一旦應用服務器計算出新奇偶校驗數(shù)據(jù)904,應用服務器會同時地將新數(shù)據(jù)和新奇偶校驗數(shù)據(jù)發(fā)送到相應的aosd906。
參考圖10,描繪了流程圖1000,其用于根據(jù)本實施例的主動存儲陣列中的數(shù)據(jù)讀出過程。當在系統(tǒng)的acb中實施數(shù)據(jù)分條和計算時,如果主要aosd具有要讀出的對象的大小的信息,則其不需要從其他aosd讀出該信息。否則,主要aosd計算1002存儲數(shù)據(jù)塊的aosd的位置,并且將塊讀出請求發(fā)送1004到aosd以將數(shù)據(jù)塊讀出。當存在要讀出的多個塊時,主要aosd同時地向所有相應的osd發(fā)出讀出請求1004。如果成功地完成讀出1006,則主要aosd在將所有數(shù)據(jù)塊發(fā)回到請求方之前將所有數(shù)據(jù)塊合并在一起1008。如果沒有成功地完成讀出1006,則主要aosd將針對每個丟失的塊發(fā)起讀出故障恢復過程1010,如圖11所述。
當在應用服務器中實施數(shù)據(jù)分條和計算時,為了執(zhí)行數(shù)據(jù)讀出,應用服務器首先必須通過調用getxattr功能從存儲信息的aosd(即,保持奇偶校驗塊的aosd)讀出數(shù)據(jù)的大小。一旦完成該功能,應用服務器就可以識別存儲數(shù)據(jù)塊的aosd的位置1002并且發(fā)出讀出請求1004以將數(shù)據(jù)塊讀出。當存在要讀出的多個塊時,應用服務器同時地向所有相應的osd發(fā)出讀出請求1004。如果成功地讀出1006數(shù)據(jù)塊,則應用服務器可以在將所有數(shù)據(jù)塊發(fā)回到請求方之前將所有數(shù)據(jù)塊合并在一起1008。如果沒有成功地完成讀出1006,則應用服務器將根據(jù)圖11針對每個丟失的塊發(fā)起讀出故障恢復過程1010。
圖11示意了根據(jù)本實施例的主動存儲陣列中的讀出故障恢復過程的流程圖1100。當在系統(tǒng)的acb中實施數(shù)據(jù)分條和計算時,當遭遇讀出故障時,主要aosd將發(fā)起讀出故障恢復過程1102?;诩m刪碼和數(shù)據(jù)分布算法,主要aosd將讀出請求發(fā)出到相應的aosd以讀出需要被用于恢復的數(shù)據(jù)塊1104。一旦接收到數(shù)據(jù),主要aosd將計算并恢復發(fā)生故障的數(shù)據(jù)1106并且將其發(fā)回到請求方。同時,主要aosd還能夠將數(shù)據(jù)寫入到其讀出是最初故障的aosd或指定的任何其他aosd1108。
當在應用服務器中實施數(shù)據(jù)分條和計算時,一旦應用服務器遭遇讀出故障,則其將發(fā)起讀出故障恢復過程1102?;诩m刪碼和數(shù)據(jù)分布算法,應用服務器將讀出請求發(fā)出到相應的aosd以讀出恢復所需的數(shù)據(jù)塊1104。一旦接收到數(shù)據(jù)1104,應用服務器將計算并恢復發(fā)生故障的數(shù)據(jù)1106并且將其發(fā)回到請求方。另外,應用服務器將數(shù)據(jù)寫入到其讀出是最初故障的aosd或指定的任何其他aosd1108。
圖12示意了根據(jù)本實施例的主動存儲陣列中的aosd故障恢復過程的流程圖1200。當在系統(tǒng)的acb中實施數(shù)據(jù)分條和計算時,可以通過系統(tǒng)中的管理來識別aosd故障,并且管理可以發(fā)起恢復過程。主要aosd被選擇作為用于其群組的恢復列表構造器1202,并且如果主要aosd不具有群組中的需要被重構的對象的列表,則主要aosd負責構建該列表1204。這可以通過掃視群組中所有可用的aosd來完成。一旦列表被完成1204,主要aosd將把列表發(fā)送到相應的指派的替換aosd1206。指派的替換aosd將是負責重構調度、計算和數(shù)據(jù)寫入1208的恢復主機。
當在應用服務器中實施數(shù)據(jù)分條和計算時,由于一個aosd可以加入多個糾刪碼群組,并且當應用服務器實施數(shù)據(jù)分條和計算時不存在主要aosd,所以對于每個群組選擇/指派恢復列表構造器1202。每個恢復列表構造器負責為其自己的群組構造需要被重構的對象/數(shù)據(jù)列表1204。一旦列表被完成1204,恢復列表構造器會將列表發(fā)送到指派的相應的替換aosd1206,該替換aosd將是負責重構調度、計算和數(shù)據(jù)寫入的恢復主機1208。
當asu的故障是多重故障時,aosd重構過程1200遵循單個aosd故障恢復過程以逐個地重構每個aosd。
圖13示意了根據(jù)本實施例的描繪了主動存儲陣列中的碼群組中的恢復列表構造和恢復主機的圖1300。當在應用服務器中實施數(shù)據(jù)分條和計算時,在群組中不存在構建用于重構的恢復列表的主要aosd。在群組中存在七個aosd,它們是aosdl、aosdb、aosdz、aosdp、aosds、aosdn和aosdf。一旦aosdp發(fā)生故障,任何可用的aosd都可以是恢復列表構造器,其將通過掃視群組中的所有數(shù)據(jù)來構造需要被重構的數(shù)據(jù)的列表。當在系統(tǒng)的acb中實施數(shù)據(jù)分條和計算時,該群組的主要aosd將是負責構造列表的恢復列表構造器。
一旦列表被構造,恢復列表構造器會將列表發(fā)送到aosdw,其是被系統(tǒng)管理指派的替換aosd。aosdw將是該群組的恢復主機。基于接收到的列表,aosdw將負責調度重構過程、計算數(shù)據(jù)和將數(shù)據(jù)寫入到其存儲裝置。以這種方式,減少了在重構過程中需要在網(wǎng)絡上傳輸?shù)臄?shù)據(jù),提供了時間和工作。
因此,可以看到本實施例能夠提供一種用于具有主動存儲裝置的陣列的存儲系統(tǒng)內的數(shù)據(jù)分條、奇偶校驗計算、數(shù)據(jù)分配和數(shù)據(jù)重構的方法和設備,其提供提高的數(shù)據(jù)存取性能和縮短的讀出故障重構時間。本發(fā)明適用于數(shù)據(jù)分條和分布實施于asu的acb中的糾刪碼以及數(shù)據(jù)分條和計算實施于應用服務器中的糾刪碼。
盡管已經在本發(fā)明的前述詳細描述中呈現(xiàn)了示例性實施例,但是應當可以理解存在大量的變型。還應當可以理解,示例性實施例僅為示例,而不以任何方式打算限制發(fā)明的范圍、適用性、操作或配置。而是,前面的詳細描述將給本領域技術人員提供用于實施本發(fā)明的示例性實施例的方便的路線路,可以理解,可以在示例性實施例中描述的元件和操作的方法的功能和布置方面進行各種改變而不脫離所附權利要求中闡述的本發(fā)明的范圍。