一種網(wǎng)絡(luò)存儲系統(tǒng)、數(shù)據(jù)處理方法和客戶端的制作方法
【專利摘要】本發(fā)明公開了一種網(wǎng)絡(luò)存儲系統(tǒng)、數(shù)據(jù)處理方法和客戶端,該系統(tǒng)包括一個客戶端和至少三個數(shù)據(jù)節(jié)點,每個數(shù)據(jù)節(jié)點的存儲區(qū)域被劃分為至少一個存儲單元,得到位于該至少三個數(shù)據(jù)節(jié)點中的多個存儲單元,且多個存儲單元被劃歸為多個網(wǎng)絡(luò)邏輯單元。該客戶端將根據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分得到的校驗塊和至少兩個數(shù)據(jù)塊,發(fā)送至所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中;目標(biāo)數(shù)據(jù)節(jié)點接收所述客戶端發(fā)送的數(shù)據(jù)塊和/或校驗塊,并將所述數(shù)據(jù)塊和/或校驗塊分別存儲至所述目標(biāo)數(shù)據(jù)節(jié)點中屬于所述目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元中。通過該系統(tǒng)可以提高數(shù)據(jù)存儲的安全性和可靠性。
【專利說明】一種網(wǎng)絡(luò)存儲系統(tǒng)、數(shù)據(jù)處理方法和客戶端
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲領(lǐng)域,尤其涉及一種網(wǎng)絡(luò)存儲系統(tǒng)、數(shù)據(jù)處理方法和客戶端?!颈尘凹夹g(shù)】
[0002]分布式存儲系統(tǒng),就是將數(shù)據(jù)分散存儲在多臺獨立的設(shè)備上。傳統(tǒng)的網(wǎng)絡(luò)存儲系統(tǒng)采用集中的存儲服務(wù)器存放所有數(shù)據(jù),存儲服務(wù)器成為系統(tǒng)性能的瓶頸,不能滿足大規(guī)模存儲應(yīng)用的需要。分布式網(wǎng)絡(luò)存儲系統(tǒng)采用可擴(kuò)展的系統(tǒng)結(jié)構(gòu),利用多臺存儲服務(wù)器分擔(dān)存儲負(fù)荷,它不但提高了系統(tǒng)的可靠性、可用性和存取效率,還易于擴(kuò)展。分布式系統(tǒng)是由若干個獨立的數(shù)據(jù)節(jié)點組成的集合,每個數(shù)據(jù)節(jié)點可以是一個存儲服務(wù)器。在分布式系統(tǒng)中各個數(shù)據(jù)節(jié)點中均可以進(jìn)行數(shù)據(jù)存儲且數(shù)據(jù)節(jié)點可以通過網(wǎng)絡(luò)訪問系統(tǒng)中其他數(shù)據(jù)節(jié)點上所存儲的數(shù)據(jù)。
[0003]在實際應(yīng)用中,當(dāng)需要獲取分布式系統(tǒng)中的特定數(shù)據(jù)時,首先需要確定出該數(shù)據(jù)所在的數(shù)據(jù)節(jié)點位置,進(jìn)而從該數(shù)據(jù)節(jié)點中獲取到相應(yīng)的數(shù)據(jù)。但是,當(dāng)某數(shù)據(jù)節(jié)點的硬盤或者該數(shù)據(jù)節(jié)點出現(xiàn)故障時,則可能會導(dǎo)致該數(shù)據(jù)節(jié)點上所存儲的數(shù)據(jù)丟失,進(jìn)而影響到對相應(yīng)數(shù)據(jù)的正常訪問??梢姡绾问沟梅植际较到y(tǒng)的數(shù)據(jù)安全性,提高分布式系統(tǒng)的可靠性是本領(lǐng)域技術(shù)人員迫切需要解決的技術(shù)問題。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明提供一種網(wǎng)絡(luò)存儲系統(tǒng)、數(shù)據(jù)處理方法和客戶端,以提高數(shù)據(jù)存儲的安全性和可靠性。
[0005]為實現(xiàn)上述目的,本發(fā)明提供了如下技術(shù)方案:
[0006]本發(fā)明的第一方面提供了一種網(wǎng)絡(luò)存儲系統(tǒng),所述系統(tǒng)包括一個客戶端和至少三個數(shù)據(jù)節(jié)點,所述數(shù)據(jù)節(jié)點之間通過網(wǎng)絡(luò)連接,所述客戶端與所述數(shù)據(jù)節(jié)點之間通過網(wǎng)絡(luò)連接;
[0007]其中,每個數(shù)據(jù)節(jié)點的存儲區(qū)域被劃分為至少一個存儲單元,得到位于所述至少三個數(shù)據(jù)節(jié)點中的多個存儲單元;所述多個存儲單元被劃歸為多個網(wǎng)絡(luò)邏輯單元;
[0008]所述客戶端,用于根據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分,得到校驗塊和至少兩個數(shù)據(jù)塊;從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,并將所述數(shù)據(jù)塊和校驗塊分別發(fā)送至所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中;
[0009]所述目標(biāo)數(shù)據(jù)節(jié)點,用于接收所述客戶端發(fā)送的數(shù)據(jù)塊和/或校驗塊,并將所述數(shù)據(jù)塊和/或校驗塊分別存儲至所述目標(biāo)數(shù)據(jù)節(jié)點中屬于所述目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元中,以使得所述目標(biāo)網(wǎng)絡(luò)邏輯單元的任一存儲單元內(nèi)均存儲有所述數(shù)據(jù)塊中的一個數(shù)據(jù)塊或所述校驗塊。
[0010]結(jié)合第一方面,在第一種可能的實現(xiàn)方式中,所述網(wǎng)絡(luò)邏輯單元中所包含的多個存儲單元均屬于不同的數(shù)據(jù)節(jié)點。[0011]結(jié)合第一方面,在第二種可能的實現(xiàn)方式中,所述客戶端,具體用于從所述多個網(wǎng)絡(luò)邏輯單元中,確定支持所述RAID類型的目標(biāo)網(wǎng)絡(luò)邏輯單元,以利用所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元存儲所述數(shù)據(jù)塊和所述校驗塊。
[0012]結(jié)合第一方面或者第一方面的第二種可能實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述客戶端,具體用于計算所述目標(biāo)數(shù)據(jù)的第一哈希值,根據(jù)所述第一哈希值確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,所述目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍包含所述第一哈希值。
[0013]結(jié)合第一方面或者第一方面的第二種可能實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述客戶端,具體用于根據(jù)所述目標(biāo)數(shù)據(jù)的第一文件名確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,所述目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的文件名中包含所述第一文件名。
[0014]結(jié)合第一方面,在第五種可能的實現(xiàn)方式中,所述多個目標(biāo)數(shù)據(jù)節(jié)點中的至少一個目標(biāo)數(shù)據(jù)節(jié)點,還用于從所述多個目標(biāo)數(shù)據(jù)節(jié)點中,獲取所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的各個存儲單元對所述數(shù)據(jù)塊和校驗塊的存儲狀態(tài)信息,將獲取到的所述存儲狀態(tài)信息發(fā)送給其他目標(biāo)數(shù)據(jù)節(jié)點,使得各個目標(biāo)數(shù)據(jù)節(jié)點保存所述存儲狀態(tài)信息,其中,所述存儲狀態(tài)信息中包括各個存儲單元所存儲的數(shù)據(jù)塊或校驗塊的數(shù)量信息。
[0015]結(jié)合第一方面的第二種可能的實現(xiàn)方式,在第六種可能的實現(xiàn)方式中,所述系統(tǒng)還包括:元數(shù)據(jù)節(jié)點;
[0016]所述客戶端還用于:在根據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分,得到所述校驗塊和至少兩個數(shù)據(jù)塊之后,將所述目標(biāo)數(shù)據(jù)與所述RAID類型的對應(yīng)關(guān)系發(fā)送至所述元數(shù)據(jù)節(jié)點;
[0017]所述元數(shù)據(jù)節(jié)點,用于存儲所述目標(biāo)數(shù)據(jù)與所述RAID類型的對應(yīng)關(guān)系。
[0018]結(jié)合第一方面的第六種可能的實現(xiàn)方式,在第七種可能的實現(xiàn)方式中,所述客戶端,還用于從所述元數(shù)據(jù)節(jié)點中獲取所述目標(biāo)數(shù)據(jù)與所述RAID類型的對應(yīng)關(guān)系,確定支持所述RAID類型的所述目標(biāo)網(wǎng)絡(luò)邏輯單元,并向所述目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元所在的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送讀取所述目標(biāo)數(shù)據(jù)的請求;
[0019]所述目標(biāo)數(shù)據(jù)節(jié)點,還用于在接收到所述客戶端讀取所述目標(biāo)數(shù)據(jù)的請求時,從屬于所述目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元中讀取所存儲的所述目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊和/或校驗塊,并將讀取到的數(shù)據(jù)塊和/或校驗塊發(fā)送給所述客戶端。
[0020]結(jié)合第一方面、或者第一方面的第一種可能的實現(xiàn)方式、或者第一方面的第二種實現(xiàn)方式、或者第一方面的第五種可能的實現(xiàn)方式,在第八種可能的實現(xiàn)方式中,所述目標(biāo)數(shù)據(jù)節(jié)點,還用于獲取所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的各個存儲單元對所述數(shù)據(jù)塊和校驗塊的存儲狀態(tài)信息;當(dāng)根據(jù)所述存儲狀態(tài)信息確定出所述目標(biāo)網(wǎng)絡(luò)邏輯單元中存在對所述數(shù)據(jù)塊或校驗塊存儲異常的存儲單元時,根據(jù)所述目標(biāo)網(wǎng)絡(luò)邏輯單元中未出現(xiàn)存儲異常的存儲單元內(nèi)所存儲的數(shù)據(jù)塊和校驗塊,恢復(fù)出所述出現(xiàn)存儲異常的存儲單元內(nèi)的數(shù)據(jù)塊或校驗塊,其中,所述存儲狀態(tài)信息中包括存儲單元所存儲的數(shù)據(jù)塊或校驗塊的數(shù)量信息。
[0021 ] 本發(fā)明的第二方面提供了 一種數(shù)據(jù)處理方法,所述方法應(yīng)用于包括至少三個數(shù)據(jù)節(jié)點的網(wǎng)絡(luò)存儲系統(tǒng),所述數(shù)據(jù)節(jié)點之間通過網(wǎng)絡(luò)連接,所述數(shù)據(jù)節(jié)點的存儲區(qū)域被劃分為至少一個存儲單元,得到位于所述至少三個數(shù)據(jù)節(jié)點中的多個存儲單元,且所述多個存儲單元被劃歸為多個網(wǎng)絡(luò)邏輯單元,所述方法包括:
[0022]根據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分,得到校驗塊和至少兩個數(shù)據(jù)塊;
[0023]從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元;
[0024]將所述數(shù)據(jù)塊和校驗塊分別發(fā)送至所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中,以便所述目標(biāo)數(shù)據(jù)節(jié)點將接收到的數(shù)據(jù)塊和/或校驗塊存儲其屬于所述目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元內(nèi),使得所述目標(biāo)網(wǎng)絡(luò)邏輯單元的任一存儲單元內(nèi)均存儲有所述數(shù)據(jù)塊中的一個數(shù)據(jù)塊或校驗塊。
[0025]結(jié)合第二方面,在第一種可能的實現(xiàn)方式中,所述網(wǎng)絡(luò)邏輯單元所包含的存儲單元均屬于不同的數(shù)據(jù)節(jié)點;
[0026]所述將所述數(shù)據(jù)塊和校驗塊分別發(fā)送至所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中,包括:
[0027]向所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中的任一目標(biāo)數(shù)據(jù)節(jié)點發(fā)送一個所述數(shù)據(jù)塊或一個所述校驗塊,且向不同的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送的數(shù)據(jù)塊或校驗塊不同。
[0028]結(jié)合第二方面,在第二種可能的實現(xiàn)方式中,所述從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,包括:
[0029]從所述多個網(wǎng)絡(luò)邏輯單元中,確定支持所述RAID類型的網(wǎng)絡(luò)邏輯單元作為存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0030]結(jié)合第二方面或者第二方面的第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,在所述從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元之前,還包括:
[0031]計算所述目標(biāo)數(shù)據(jù)的第一哈希值;
[0032]所述從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,包括:
[0033]根據(jù)所述第一哈希值,確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,所述目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍包含所述第一哈希值。
[0034]結(jié)合第二方面或者第二方面的第二種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,包括:
[0035]根據(jù)所述目標(biāo)數(shù)據(jù)的第一文件名,確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,所述目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的文件名中包含所述第一文件名。
[0036]本發(fā)明的第三方面還提供了一種客戶端,所述客戶端應(yīng)用于包括至少三個數(shù)據(jù)節(jié)點的網(wǎng)絡(luò)存儲系統(tǒng),所述數(shù)據(jù)節(jié)點之間通過網(wǎng)絡(luò)連接,所述數(shù)據(jù)節(jié)點的存儲區(qū)域被劃分為至少一個存儲單元,得到位于所述至少三個數(shù)據(jù)節(jié)點中的多個存儲單元,且所述多個存儲單元被劃歸為多個網(wǎng)絡(luò)邏輯單元;所述客戶端至少包括處理器、存儲器、通信接口和通信總線.-^4 ,
[0037]其中,所述處理器、存儲器和所述通信接口通過所述通信總線進(jìn)行通信;
[0038]所述處理器用于根據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分,得到校驗塊和至少兩個數(shù)據(jù)塊;從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元;將所述數(shù)據(jù)塊和校驗塊分別發(fā)送至所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中;
[0039]所述存儲器用于存儲包含有所述處理器運(yùn)行的程序的信息。
[0040]結(jié)合本發(fā)明的第三方面,在第一種可能的實現(xiàn)方式中,當(dāng)所述網(wǎng)絡(luò)邏輯單元所包含的存儲單元均屬于不同的數(shù)據(jù)節(jié)點時,所述處理器從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,具體為:
[0041]向所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中的任一目標(biāo)數(shù)據(jù)節(jié)點發(fā)送一個所述數(shù)據(jù)塊或一個所述校驗塊,且向不同的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送的數(shù)據(jù)塊或校驗塊不同。
[0042]結(jié)合本發(fā)明的第三方面,在第二種可能的實現(xiàn)方式中,所述處理器從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,具體為:
[0043]從所述多個網(wǎng)絡(luò)邏輯單元中,確定支持所述RAID類型的網(wǎng)絡(luò)邏輯單元作為存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0044]結(jié)合本發(fā)明的第三方面或者第三方面的第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述處理器,還用于在所述從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元之前,計算所述目標(biāo)數(shù)據(jù)的第一哈希值;
[0045]相應(yīng)的,所述處理器從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,具體為:
[0046]根據(jù)所述第一哈希值,確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,所述目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍包含所述第一哈希值。
[0047]結(jié)合本發(fā)明的第三方面或者第三方面的第二種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述處理器從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,具體為:
[0048]根據(jù)所述目標(biāo)數(shù)據(jù)的第一文件名,確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,所述目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的文件名中包含所述第一文件名。
[0049]結(jié)合本發(fā)明的第三方面,在第五種可能的實現(xiàn)方式中,所述網(wǎng)絡(luò)存儲系統(tǒng)還包括元數(shù)據(jù)節(jié)點;
[0050]所述處理器,還用于將所述目標(biāo)數(shù)據(jù)與所述RAID類型的對應(yīng)關(guān)系發(fā)送至所述元數(shù)據(jù)節(jié)點,以在所述元數(shù)據(jù)節(jié)點中存儲所述對應(yīng)關(guān)系。
[0051]結(jié)合本發(fā)明的第三方面,在第六種可能的實現(xiàn)方式中,所述處理器,還用于從所述元數(shù)據(jù)節(jié)點中獲取所述目標(biāo)數(shù)據(jù)與所述RAID類型的對應(yīng)關(guān)系,確定支持所述RAID類型的所述目標(biāo)網(wǎng)絡(luò)邏輯單元,并向所述目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元所在的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送讀取所述目標(biāo)數(shù)據(jù)的請求,以便從所述多個目標(biāo)數(shù)據(jù)節(jié)點中得到所述數(shù)據(jù)塊和校驗塊。
[0052]從上述的技術(shù)方案可以看出,本發(fā)明實施例公開一種網(wǎng)絡(luò)存儲系統(tǒng)、數(shù)據(jù)處理方法和客戶端,由于當(dāng)客戶端將切分得到的這些該數(shù)據(jù)塊和校驗塊分別存儲至目標(biāo)網(wǎng)絡(luò)邏輯單元中位于多個目標(biāo)數(shù)據(jù)節(jié)點內(nèi)的多個存儲單元后,目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元內(nèi)所存儲的數(shù)據(jù)塊和校驗塊之間也存在冗余關(guān)系。這樣,當(dāng)由于目標(biāo)數(shù)據(jù)節(jié)點發(fā)生故障,使得某一個或幾個存儲單元中所存儲數(shù)據(jù)塊或校驗塊出現(xiàn)丟失或損壞等異常狀況時,利用未發(fā)生故障的目標(biāo)數(shù)據(jù)節(jié)點中屬于該目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元中所存儲的數(shù)據(jù)塊和校驗塊,便可以恢復(fù)出出現(xiàn)異常的數(shù)據(jù)塊或校驗塊,從而減少了數(shù)據(jù)損壞后不能恢復(fù)的情況,提高了系統(tǒng)數(shù)據(jù)存儲的安全性和可靠性。
【專利附圖】
【附圖說明】
[0053]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
[0054]圖1為本發(fā)明一種網(wǎng)絡(luò)存儲系統(tǒng)一個實施例的結(jié)構(gòu)示意圖;
[0055]圖2示出了發(fā)明中網(wǎng)絡(luò)邏輯單元的組成以及向網(wǎng)絡(luò)邏輯單元的存儲單元中存儲數(shù)據(jù)塊或校驗塊的示意圖;
[0056]圖3為示出了該目標(biāo)網(wǎng)絡(luò)邏輯單元對各個目標(biāo)數(shù)據(jù)的校驗塊和數(shù)據(jù)塊的存儲情況示意圖;
[0057]圖4示出了目標(biāo)網(wǎng)絡(luò)邏輯單元中的存儲單元出現(xiàn)存儲故障以及故障恢復(fù)后,對數(shù)據(jù)塊和校驗塊存儲狀態(tài)的對比示意圖;
[0058]圖5示出了本發(fā)明一種網(wǎng)絡(luò)存儲系統(tǒng)另一個實施例的結(jié)構(gòu)示意圖;
[0059]圖6示出了本發(fā)明一種數(shù)據(jù)處理方法一個實施例的流程示意圖;
[0060]圖7示出了本發(fā)明中客戶端進(jìn)行數(shù)據(jù)讀取的流程交互示意圖;
[0061]圖8示出了本發(fā)明一種客戶端一個實施例的結(jié)構(gòu)示意圖。
【具體實施方式】
[0062]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
[0063]本發(fā)明公開了一種網(wǎng)絡(luò)存儲系統(tǒng)、數(shù)據(jù)處理方法和客戶端,以提高系統(tǒng)中數(shù)據(jù)存儲的安全性以及可靠性。
[0064]參見圖1,示出了本發(fā)明一種網(wǎng)絡(luò)存儲系統(tǒng)一個實施例的結(jié)構(gòu)示意圖,本實施例的系統(tǒng)包括一個客戶端101和至少三個數(shù)據(jù)節(jié)點102。各個數(shù)據(jù)節(jié)點之間通過網(wǎng)絡(luò)連接,該客戶端與各個數(shù)據(jù)節(jié)點之間也通過網(wǎng)絡(luò)連接。其中,連接各個數(shù)據(jù)節(jié)點以及數(shù)據(jù)節(jié)點與客戶端的網(wǎng)絡(luò)可以是互聯(lián)網(wǎng)internet、因特網(wǎng)協(xié)議存儲區(qū)域網(wǎng)絡(luò)(IP SAN, Internet ProtocolStorage Area Network)以及私有網(wǎng)絡(luò)等等。
[0065]在本實施例中,每個數(shù)據(jù)節(jié)點102的存儲區(qū)域被劃分為至少一個存儲單元,得到位于該至少三個數(shù)據(jù)節(jié)點中的多個存儲單元。系統(tǒng)中的這多個存儲單元被劃歸為多個網(wǎng)絡(luò)邏輯單元(NLUN, Network Logical Unit Name)。將多個存儲單元劃歸為多個網(wǎng)絡(luò)邏輯單元,實際上是構(gòu)建出了系統(tǒng)中的多個網(wǎng)絡(luò)邏輯單元。其中,每個網(wǎng)絡(luò)邏輯單元中至少包含三個存儲單元,且網(wǎng)絡(luò)邏輯單元內(nèi)所包含的存儲單元不能全部位于同一個數(shù)據(jù)節(jié)點。網(wǎng)絡(luò)邏輯單元也可以稱為網(wǎng)絡(luò)卷,它實際上可以理解為其各個存儲單元分布在網(wǎng)絡(luò)中的多個數(shù)據(jù)節(jié)點內(nèi)的一個存儲系統(tǒng)。
[0066]可以理解的是,不同的網(wǎng)絡(luò)邏輯單元所包含的存儲單元的數(shù)量也可能不同。為了構(gòu)建各個網(wǎng)絡(luò)邏輯單元,可以預(yù)先設(shè)定各個網(wǎng)絡(luò)邏輯單元中所包含的存儲單元的數(shù)量,網(wǎng)絡(luò)邏輯單元所包含的存儲單元的數(shù)量也就是構(gòu)建該網(wǎng)絡(luò)邏輯單元所需的存儲單元的數(shù)量。這樣,根據(jù)構(gòu)建各個網(wǎng)絡(luò)邏輯單元所需的存儲單元的數(shù)量,可以將系統(tǒng)中的多個存儲單元分別劃歸為系統(tǒng)中需要構(gòu)建的各個網(wǎng)絡(luò)邏輯單元內(nèi),從而構(gòu)建出多個由不同數(shù)量的存儲單元組成的網(wǎng)絡(luò)邏輯單元。具體的,可以依據(jù)負(fù)載均衡原則,如依據(jù)Crush算法、偽隨機(jī)算法、輪巡算法或者是其他負(fù)載均衡算法,并依據(jù)構(gòu)建各個網(wǎng)絡(luò)邏輯單元所需的存儲單元的數(shù)量,從系統(tǒng)中選擇滿足條件的存儲單元來組成各個網(wǎng)絡(luò)邏輯單元。
[0067]其中,一個存儲單元僅可以被劃歸為一個網(wǎng)絡(luò)邏輯單元,當(dāng)該存儲單元被劃歸到一個網(wǎng)絡(luò)邏輯單元后,該存儲單元便不能被劃歸到其他的網(wǎng)絡(luò)邏輯單元中。這樣,對于任意一個網(wǎng)絡(luò)邏輯單元而言,當(dāng)該網(wǎng)絡(luò)邏輯單元所包含的存儲單元的數(shù)量確定后,可以按照負(fù)載均衡的原則,從系統(tǒng)中的未被劃歸至其他網(wǎng)絡(luò)邏輯單元的多個存儲單元中,選擇負(fù)載量低于其他存儲單元且與構(gòu)建該網(wǎng)絡(luò)邏輯單元所需的存儲單元的數(shù)量相同數(shù)量的存儲單元來構(gòu)建該網(wǎng)絡(luò)邏輯單元。
[0068]例如,假設(shè)系統(tǒng)中存在數(shù)據(jù)節(jié)點A、數(shù)據(jù)節(jié)點B、數(shù)據(jù)節(jié)點C和數(shù)據(jù)節(jié)點D。其中,將數(shù)據(jù)節(jié)點A的存儲區(qū)域劃分為2個存儲單元,將數(shù)據(jù)節(jié)點B的存儲區(qū)域劃分為4個存儲單元,將數(shù)據(jù)節(jié)點C的整個存儲區(qū)域作為一個存儲單元,將數(shù)據(jù)節(jié)點D的存儲區(qū)域劃分為2個存儲區(qū)域,從而得到位于這4個數(shù)據(jù)節(jié)點中的9個存儲單元。假設(shè)系統(tǒng)中構(gòu)建網(wǎng)絡(luò)邏輯單元M需要4個存儲單元,構(gòu)建網(wǎng)絡(luò)邏輯單元N需要5個存儲單元,則可以將這9個存儲單元中的4個存儲單元劃歸為網(wǎng)絡(luò)邏輯單元M,將剩余的5個網(wǎng)絡(luò)邏輯單元劃歸為網(wǎng)絡(luò)邏輯單元N。根據(jù)負(fù)載均衡原則,在構(gòu)建網(wǎng)絡(luò)邏輯單元M時,可以是從系統(tǒng)中負(fù)載相對較小的4個存儲單元來構(gòu)成該網(wǎng)絡(luò)邏輯單元M,如假設(shè)將數(shù)據(jù)節(jié)點A中的2個存儲單元以及數(shù)據(jù)節(jié)點B的I個存儲單元以及數(shù)據(jù)節(jié)點D的I個存儲單元劃歸為網(wǎng)絡(luò)邏輯單元M,則網(wǎng)絡(luò)邏輯單元M的存儲區(qū)域?qū)嶋H上是由位于數(shù)據(jù)節(jié)點A的2個存儲單元,以及位于數(shù)據(jù)節(jié)點B的I個存儲單元和位于數(shù)據(jù)節(jié)點D的I個存儲單元構(gòu)成。而網(wǎng)絡(luò)邏輯單元N需要5個存儲單元,則可以將剩余的5個存儲單元劃歸為網(wǎng)絡(luò)邏輯單元N,如果構(gòu)建出網(wǎng)絡(luò)邏輯單元M之后,系統(tǒng)剩余的存儲單元大于5個,則仍需要選擇5個負(fù)載較小的存儲單元來構(gòu)成該網(wǎng)絡(luò)邏輯單元N。但是需要注意的是,網(wǎng)絡(luò)邏輯單元M的4個存儲單元不能都是數(shù)據(jù)節(jié)點B中的4個存儲單元,以避免出現(xiàn)網(wǎng)絡(luò)邏輯單元中的所有存儲單元均位于同一個數(shù)據(jù)節(jié)點的情況出現(xiàn)。
[0069]為了在系統(tǒng)中某一個或幾個數(shù)據(jù)節(jié)點發(fā)生故障導(dǎo)致數(shù)據(jù)節(jié)點中所存儲的數(shù)據(jù)出現(xiàn)丟失或損壞等異常后,能夠恢復(fù)出出現(xiàn)異常的數(shù)據(jù),在客戶端向系統(tǒng)進(jìn)行數(shù)據(jù)存儲前,需要將待存儲的目標(biāo)數(shù)據(jù)按照RAID類型進(jìn)行切分之后,再將切分后的數(shù)據(jù)塊和校驗塊存儲至系統(tǒng)的網(wǎng)絡(luò)邏輯單元所包含的存儲單元中。
[0070]具體的,該客戶端101,用于根據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分,得到校驗塊和至少兩個數(shù)據(jù)塊;從系統(tǒng)的多個網(wǎng)絡(luò)邏輯單元中確定用于存儲該數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,并將數(shù)據(jù)塊和校驗塊分別發(fā)送至該目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中。[0071]相應(yīng)的,目標(biāo)數(shù)據(jù)節(jié)點,用于接收該客戶端發(fā)送的數(shù)據(jù)塊和/或校驗塊,并將所述數(shù)據(jù)塊和/或校驗塊分別存儲至該目標(biāo)數(shù)據(jù)節(jié)點中屬于該目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元中,以使得該目標(biāo)網(wǎng)絡(luò)邏輯單元的任一存儲單元內(nèi)均存儲有該切分得到的數(shù)據(jù)塊中的一個數(shù)據(jù)塊或者是校驗塊。
[0072]其中,該目標(biāo)數(shù)據(jù)可以為一個文件,如文檔、圖片、程序數(shù)據(jù)等,也可以是文件中的一部分?jǐn)?shù)據(jù)。
[0073]客戶端根據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分時,可以按照與該RAID類型對應(yīng)的RAID算法來對目標(biāo)數(shù)據(jù)進(jìn)行切分。在客戶端中可以設(shè)定有多種RAID類型,如RAID類型可以包括RAIDl、RAID5、RAID6等等,RAID類型還可以具體的以RAIDn+m的形式表示,其中,η表示數(shù)據(jù)塊的數(shù)量,m表示校驗塊的數(shù)量。例如,RAID5可以包括RAID3+2、RAID4+1等。在客戶端對目標(biāo)數(shù)據(jù)進(jìn)行切分時,不同的目標(biāo)數(shù)據(jù)所依據(jù)的RAID類型也可能不同,具體的可以依據(jù)目標(biāo)數(shù)據(jù)所需的保護(hù)級別來選擇所依據(jù)的RAID類型。
[0074]客戶端依據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分后,得到至少兩個數(shù)據(jù)塊和至少一個校驗塊,這些切分得到的數(shù)據(jù)塊和校驗塊之間冗余關(guān)系,當(dāng)出現(xiàn)數(shù)據(jù)塊或校驗塊丟失或損壞等異常情況下時,利用其他未出現(xiàn)異常的數(shù)據(jù)塊和校驗塊便可以重新恢復(fù)出丟失或損壞等異常的數(shù)據(jù)塊或校驗塊。同時,客戶端對目標(biāo)數(shù)據(jù)進(jìn)行切分時所依據(jù)的RAID類型,也決定了對目標(biāo)數(shù)據(jù)進(jìn)行切分后得到的數(shù)據(jù)塊和校驗塊的數(shù)量。如,當(dāng)依據(jù)RAID3+2對目標(biāo)數(shù)據(jù)進(jìn)行切分時,得到該目標(biāo)數(shù)據(jù)的3個數(shù)據(jù)塊和2個校驗塊;當(dāng)依據(jù)RAID3+1對目標(biāo)數(shù)據(jù)進(jìn)行切分時,則得到該目標(biāo)數(shù)據(jù)的3個數(shù)據(jù)塊和I個校驗塊。
[0075]為了能夠?qū)⑶蟹值玫降倪@些數(shù)據(jù)塊和校驗塊分別存儲至網(wǎng)絡(luò)邏輯單元所包含的各個存儲單元內(nèi),客戶端需要從系統(tǒng)中的多個網(wǎng)絡(luò)邏輯單元中確定用于存儲切分得到的數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元。其中,客戶端確定出的該目標(biāo)網(wǎng)絡(luò)邏輯單元中所包含的存儲單元的數(shù)量與客戶端對目標(biāo)數(shù)據(jù)進(jìn)行切分后得到的數(shù)據(jù)塊和校驗塊的總數(shù)量相同,以使得后續(xù)目標(biāo)網(wǎng)絡(luò)邏輯單元中的任意一個存儲單元內(nèi)均可以存儲一個數(shù)據(jù)塊或一個校驗塊,且不同的存儲單元內(nèi)所存儲的數(shù)據(jù)塊或校驗塊不同。如,客戶端對目標(biāo)數(shù)據(jù)進(jìn)行切分得到3個數(shù)據(jù)塊和一個校驗塊,則需要包含有4個存儲單元的網(wǎng)絡(luò)邏輯單元作為目標(biāo)網(wǎng)絡(luò)邏輯單元,以使得后續(xù)可以將這些數(shù)據(jù)塊和校驗塊分別存儲至該目標(biāo)網(wǎng)絡(luò)邏輯單元的4個存儲單元中,使得一個存儲單元內(nèi)僅存儲有一個數(shù)據(jù)塊或校驗塊。
[0076]當(dāng)客戶端將切分得到的這些該數(shù)據(jù)塊和校驗塊分別存儲至目標(biāo)網(wǎng)絡(luò)邏輯單元中位于多個目標(biāo)數(shù)據(jù)節(jié)點內(nèi)的多個存儲單元后,目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元內(nèi)所存儲的數(shù)據(jù)塊和校驗塊之間也存在冗余關(guān)系,當(dāng)由于目標(biāo)數(shù)據(jù)節(jié)點發(fā)生故障,使得某一個或幾個存儲單元中所存儲數(shù)據(jù)塊或校驗塊出現(xiàn)丟失或損壞等異常狀況時,利用未發(fā)生故障的目標(biāo)數(shù)據(jù)節(jié)點中屬于該目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元中所存儲的數(shù)據(jù)塊和校驗塊便可以恢復(fù)出出現(xiàn)異常的數(shù)據(jù)塊或校驗塊。
[0077]當(dāng)然,在客戶端中可以存儲有系統(tǒng)中所構(gòu)建的各個網(wǎng)絡(luò)邏輯單元的分布信息,如網(wǎng)絡(luò)邏輯單元包含有哪些存儲單元,以及各個存儲單元位于哪些數(shù)據(jù)節(jié)點,以便于確定出目標(biāo)網(wǎng)絡(luò)邏輯單元后,可以向相應(yīng)的數(shù)據(jù)節(jié)點發(fā)送數(shù)據(jù)塊或校驗塊。
[0078]在本實施例的網(wǎng)絡(luò)存儲系統(tǒng)包括客戶端和至少三個數(shù)據(jù)節(jié)點,每個數(shù)據(jù)節(jié)點的存儲區(qū)域均被劃分為至少一個存儲單元,得到位于這至少三個數(shù)據(jù)節(jié)點中的多個存儲單元,且這多個存儲單元被劃歸為多個網(wǎng)絡(luò)邏輯單元。客戶端依據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)切分得到校驗塊和至少兩個數(shù)據(jù)塊,將切分得到的數(shù)據(jù)塊和校驗塊分別存儲至目標(biāo)網(wǎng)絡(luò)邏輯單元中位于多個目標(biāo)數(shù)據(jù)節(jié)點內(nèi)的各個存儲單元中。由于數(shù)據(jù)塊和校驗塊是依據(jù)RAID類型切分得到的,使得目標(biāo)網(wǎng)絡(luò)邏輯單元中各個存儲單元所存儲的數(shù)據(jù)塊和校驗塊之間存在冗余關(guān)系,當(dāng)有目標(biāo)數(shù)據(jù)節(jié)點出現(xiàn)故障而導(dǎo)致一個或多個存儲單元內(nèi)出現(xiàn)數(shù)據(jù)塊或校驗塊丟失或者損壞等異常情況時,則可以利用該目標(biāo)網(wǎng)絡(luò)邏輯單元中未出現(xiàn)存異常的存儲單元內(nèi)所存儲的數(shù)據(jù)塊和校驗塊重新恢復(fù)出出現(xiàn)異常情況的數(shù)據(jù)塊,從而降低了系統(tǒng)數(shù)據(jù)損壞后的不可恢復(fù)性,提高了系統(tǒng)數(shù)據(jù)存儲的安全性。
[0079]在以上實施例中,一個數(shù)據(jù)節(jié)點內(nèi)可能會存在兩個或兩個以上存儲單元被劃歸為同一個網(wǎng)絡(luò)邏輯單元的情況。相應(yīng)的,對于客戶端確定的目標(biāo)網(wǎng)絡(luò)單元而言,該目標(biāo)網(wǎng)絡(luò)邏輯單元中也可能會存在兩個或多個存儲單元位于同一個目標(biāo)數(shù)據(jù)節(jié)點的情況??蛻舳藢⑶蟹值玫降闹辽賰蓚€數(shù)據(jù)塊和至少一個數(shù)據(jù)塊分別發(fā)送至該目標(biāo)網(wǎng)絡(luò)邏輯單元所包含的多個存儲單元所在的目標(biāo)數(shù)據(jù)節(jié)點后,如果目標(biāo)數(shù)據(jù)節(jié)點只包含一個屬于該目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元,則該目標(biāo)數(shù)據(jù)節(jié)點則會接收到一個數(shù)據(jù)塊或一個校驗塊;如果該目標(biāo)數(shù)據(jù)節(jié)點中有兩個或多個屬于該目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元,則該目標(biāo)數(shù)據(jù)節(jié)點則接收并存儲的數(shù)據(jù)塊和校驗塊的總數(shù)量也會是兩個或多個。例如,目標(biāo)數(shù)據(jù)節(jié)點中有兩個存儲單元屬于該目標(biāo)網(wǎng)絡(luò)邏輯單元時,則該目標(biāo)數(shù)據(jù)節(jié)點可能會接收到客戶端發(fā)送的兩個數(shù)據(jù)塊,或者接收到客戶端發(fā)送的兩個校驗塊,或者是一個數(shù)據(jù)塊和一個校驗塊。
[0080]如果目標(biāo)數(shù)據(jù)節(jié)點中有兩個或多個存儲單元屬于該目標(biāo)網(wǎng)絡(luò)邏輯單元時,該目標(biāo)數(shù)據(jù)節(jié)點中存儲的數(shù)據(jù)塊和校驗塊的總數(shù)量將大于或等于兩個,這樣當(dāng)該目標(biāo)數(shù)據(jù)節(jié)點發(fā)生故障時,則可能會導(dǎo)致兩個或多個存儲單元內(nèi)所存儲的數(shù)據(jù)塊或校驗塊出現(xiàn)丟失或損壞等異常狀態(tài)。而出現(xiàn)丟失或損壞等異常狀態(tài)的數(shù)據(jù)塊和校驗塊的數(shù)量較多時,則會給數(shù)據(jù)恢復(fù)帶來困難,甚至導(dǎo)致無法恢復(fù)出出現(xiàn)異常的數(shù)據(jù)塊或校驗塊的情況。
[0081]為了進(jìn)一步提高系統(tǒng)中數(shù)據(jù)存儲的安全性和可靠性,對于任意一個網(wǎng)絡(luò)邏輯單元,網(wǎng)絡(luò)邏輯單元中所包含的多個存儲單元均位于不同的數(shù)據(jù)節(jié)點。因此,在構(gòu)建網(wǎng)絡(luò)邏輯單元時,根據(jù)構(gòu)建的網(wǎng)絡(luò)邏輯單元所需的存儲單元的數(shù)量,則從系統(tǒng)選取相應(yīng)數(shù)量的數(shù)據(jù)節(jié)點,并從選取出的任一數(shù)據(jù)節(jié)點中選取一個存儲單元,從而得到構(gòu)建該網(wǎng)絡(luò)邏輯單元所需數(shù)量的存儲單元。
[0082]為了便于理解構(gòu)建網(wǎng)絡(luò)邏輯單元的過程,下面結(jié)合一個實例進(jìn)行介紹,參見圖2,示出了本申請中網(wǎng)絡(luò)邏輯單元組成示意圖,以系統(tǒng)中包含有5個數(shù)據(jù)節(jié)點為例,每個數(shù)據(jù)節(jié)點的存儲區(qū)域均被劃分為三個存儲單元,如圖2中數(shù)據(jù)節(jié)點上方的矩形條狀區(qū)域為存儲區(qū)域,而在該存儲區(qū)域內(nèi)的各個圓柱體代表是劃分出的各個存儲單元。
[0083]以需要構(gòu)建的網(wǎng)絡(luò)邏輯單元包括:網(wǎng)絡(luò)邏輯單元NLUNl和網(wǎng)絡(luò)邏輯單元NLUN2為例,其中,網(wǎng)絡(luò)邏輯單元NLUNl的RAID類型為:RAID3+2 (即3個數(shù)據(jù)塊,2個校驗塊);網(wǎng)絡(luò)邏輯單元NLUN2的RAID類型為:RAID3+1 (即3個數(shù)據(jù)塊,I個校驗塊),則根據(jù)網(wǎng)絡(luò)邏輯單元NLUNl所支持的RAID類型,該NLUNl需要包含5個存儲單元。根據(jù)負(fù)載均衡選擇,分別從5個數(shù)據(jù)節(jié)點中選擇負(fù)載最低的5個存儲單元。首先從數(shù)據(jù)節(jié)點I中選擇負(fù)載最低的存儲單元,假設(shè)為第二個存儲單元(在該例中以從上至下順序為例);然后從數(shù)據(jù)節(jié)點2中選擇該數(shù)據(jù)節(jié)點2中負(fù)載最低的存儲單元,設(shè)為第三個存儲單元,依此類推。最終構(gòu)建出的NLUN2所包含的存儲單元分別為數(shù)據(jù)節(jié)點I中的第二個存儲單元、數(shù)據(jù)節(jié)點2中的第三個存儲單元、數(shù)據(jù)節(jié)點3中的第一個存儲單元,數(shù)據(jù)節(jié)點4中的第一個存儲單元和數(shù)據(jù)節(jié)點5中的第三個存儲單元,如圖2中粗體黑線的圓柱體所表示的存儲單元為NLUNl所包含的存儲單元。構(gòu)建出該NLUNl之后,可以從剩余的存儲單元中選擇存儲單元來構(gòu)建網(wǎng)絡(luò)邏輯單元NLUN2,NLUN2的RAID類型對應(yīng)的存儲單元數(shù)量為4個,具體構(gòu)建NLUN2的過程與構(gòu)建NLUNl相同,假設(shè)構(gòu)建出的NLUN2所包含的4個存儲單元為圖2中位于虛線框內(nèi)的4個存儲單元。
[0084]由于目標(biāo)網(wǎng)絡(luò)邏輯單元所包含的多個存儲單元均位于不同的數(shù)據(jù)節(jié)點,客戶端需要向目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中的任一目標(biāo)數(shù)據(jù)節(jié)點發(fā)送一個數(shù)據(jù)塊或一個校驗塊,且向不同的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送的數(shù)據(jù)塊或校驗塊不同。相應(yīng)的,任意一個目標(biāo)數(shù)據(jù)節(jié)點僅接收到客戶端發(fā)送至一個數(shù)據(jù)塊或校驗塊,并將接收到的數(shù)據(jù)塊或校驗塊存儲至該目標(biāo)數(shù)據(jù)節(jié)點中屬于目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元中。這樣,如果一個目標(biāo)數(shù)據(jù)節(jié)點發(fā)送故障,只會導(dǎo)致該目標(biāo)網(wǎng)絡(luò)邏輯單元中一個存儲單元內(nèi)的數(shù)據(jù)塊或校驗塊出現(xiàn)異常,從而減少了出現(xiàn)異常的數(shù)據(jù)量,提高了數(shù)據(jù)可恢復(fù)性,進(jìn)而提高了數(shù)據(jù)存儲的安全性。
[0085]在實際應(yīng)用中,為了能夠便于區(qū)分出各個網(wǎng)絡(luò)邏輯單元所包含的存儲單元的數(shù)量,并使得同一網(wǎng)絡(luò)邏輯單元的各個存儲單元內(nèi)所存儲的數(shù)據(jù)具有相同的屬性,系統(tǒng)還分別設(shè)置了各個網(wǎng)絡(luò)邏輯單元所支持的RAID類型,使得任意一個網(wǎng)絡(luò)邏輯單元具有一個所支持的RAID類型。
[0086]其中,設(shè)置網(wǎng)絡(luò)邏輯單元所支持的RAID類型可以理解為為網(wǎng)絡(luò)邏輯單元分配或指定一個RAID類型,其目的是使得客戶端后續(xù)向該網(wǎng)絡(luò)邏輯單元的存儲單元中存儲依據(jù)該網(wǎng)絡(luò)邏輯塊單元所支持的RAID類型切分得到的數(shù)據(jù)塊和校驗塊,以使得存儲在同一個網(wǎng)絡(luò)邏輯單元的存儲單元內(nèi)數(shù)據(jù)塊和校驗塊均是依據(jù)相同的RAID類型切分得到的。
[0087]可見,為了在網(wǎng)絡(luò)邏輯單元所包含的存儲單元中可以存儲依據(jù)該網(wǎng)絡(luò)邏輯單元所支持的RAID類型切分得到的數(shù)據(jù)塊和校驗塊,網(wǎng)絡(luò)邏輯單元所包含的存儲單元的數(shù)量應(yīng)該與依據(jù)RAID類型對目標(biāo)數(shù)據(jù)切分得到的數(shù)據(jù)塊和校驗塊的總數(shù)量。當(dāng)系統(tǒng)為一個網(wǎng)絡(luò)邏輯單元分配了一個RAID類型后,該網(wǎng)絡(luò)邏輯單元所需包含的存儲單元的數(shù)量也是確定的。因此,在構(gòu)建網(wǎng)絡(luò)邏輯單元時,可以參照為網(wǎng)絡(luò)邏輯單元分配的RAID類型,確定構(gòu)建該網(wǎng)絡(luò)邏輯單元所需的存儲單元的數(shù)量,并從系統(tǒng)的多個存儲單元中選擇相應(yīng)數(shù)量的存儲單元來組成該網(wǎng)絡(luò)邏輯單元。
[0088]相應(yīng)的,該客戶端,具體用于從多個網(wǎng)絡(luò)邏輯單元中,確定支持對目標(biāo)數(shù)據(jù)切分時所依據(jù)的RAID類型的目標(biāo)網(wǎng)絡(luò)邏輯單元,以利用該目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元存儲切分得到的數(shù)據(jù)塊和校驗塊。這樣,客戶端所確定的目標(biāo)網(wǎng)絡(luò)邏輯單元具有所包含的存儲單元的數(shù)量與對目標(biāo)數(shù)據(jù)切分得到的數(shù)據(jù)塊和校驗塊的總數(shù)量相同,且所支持的RAID類型與客戶端對目標(biāo)數(shù)據(jù)進(jìn)行切分所依據(jù)的RAID類型相同兩個特征。
[0089]為了便于理解,仍以圖2為例,在該圖中還示出了網(wǎng)絡(luò)邏輯單元中存儲數(shù)據(jù)塊和校驗塊的示意圖,假設(shè)系統(tǒng)中存在三個網(wǎng)絡(luò)邏輯單元,除了上面例子中提到的網(wǎng)絡(luò)邏輯單元NLUNl和網(wǎng)絡(luò)邏輯單元NLUN2外,還存在網(wǎng)絡(luò)邏輯單元NLUN3,其中,NLUNl支持的RAID類型為RAID3+2,其所包含的存儲單元為如圖2中粗體黑線的圓柱體所表示的存儲單元。NLUN2支持RAID3+1,其包含有4個存儲單元,如圖中虛線框出的存儲單元。NLUN3支持RAID4+1,其所包含5個存儲單元,在該圖中未標(biāo)出。
[0090]當(dāng)客戶端依據(jù)RAID3+2對目標(biāo)數(shù)據(jù)進(jìn)行切分后,會得到該目標(biāo)數(shù)據(jù)的三個數(shù)據(jù)塊和兩個校驗塊,如圖2中用方框框出的數(shù)據(jù)塊和校驗塊??蛻舳丝梢赃x擇支持RAID3+2的網(wǎng)絡(luò)邏輯單元作為目標(biāo)網(wǎng)絡(luò)邏輯單元,在該例中需要選擇NLUNl作為目標(biāo)網(wǎng)絡(luò)邏輯單元??梢姡m然NLUN3也包含有5個存儲單元,但由于NLUN3支持的RAID類型為RAID3+1,所以客戶端不會將NLUN3作為目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0091]確定出目標(biāo)網(wǎng)絡(luò)邏輯單元后,客戶端將切分得到的數(shù)據(jù)塊和校驗塊分別發(fā)送給這5個數(shù)據(jù)節(jié)點,任意一個數(shù)據(jù)節(jié)點接收到客戶端發(fā)送的數(shù)據(jù)塊或校驗塊后,將接收到的數(shù)據(jù)塊或校驗塊存儲其屬于該NLUNl的存儲單元內(nèi),如圖2中帶箭頭的曲線的箭頭指出了數(shù)據(jù)塊或校驗塊將被存儲的存儲單元位置,例如,位于左上角的數(shù)據(jù)塊最終被存儲在數(shù)據(jù)節(jié)點I的第二個存儲單元中,其余與此類似。
[0092]當(dāng)然,圖2僅僅是將各個數(shù)據(jù)塊和校驗塊存儲在該NLUNl的5個存儲單元內(nèi)的一種存儲情況,只要是最終將切分后的數(shù)據(jù)塊和校驗塊分別存儲至NLUNl的5個存儲單元內(nèi)即可,至于哪個數(shù)據(jù)塊或校驗塊需要存儲到該NLUNl的哪個存儲單元內(nèi)并不限定,例如,圖中位于方框左上角的數(shù)據(jù)塊也可以存儲在該NLUNl中位于數(shù)據(jù)節(jié)點2內(nèi)的第三個存儲單元中,而將原來存儲在該數(shù)據(jù)節(jié)點2的第三個存儲單元內(nèi)的校驗塊則可以存儲到數(shù)據(jù)節(jié)點I的第二個存儲單元內(nèi)。
[0093]為了使得各個網(wǎng)絡(luò)邏輯單元的存儲單元內(nèi)所存儲的數(shù)據(jù)為屬于相同哈希值范圍內(nèi)的數(shù)據(jù),還可以預(yù)先設(shè)置各個網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍,從而使得網(wǎng)絡(luò)邏輯單元與所是支持的哈希值范圍具有對應(yīng)關(guān)系。這樣,同一網(wǎng)絡(luò)邏輯單元的存儲單元中所存儲的數(shù)據(jù)均屬于相同哈希值范圍內(nèi)的數(shù)據(jù)。根據(jù)實際需要不同的網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍也可能不同。當(dāng)然,考慮到實際需要可以是設(shè)置包含相同數(shù)量的存儲單元的網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍不同,以便于后續(xù)客戶端確定目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0094]相應(yīng)的,客戶端,具體用于計算目標(biāo)數(shù)據(jù)的第一哈希值,根據(jù)第一哈希值確定用于存儲切分得到的數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,其中,該目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍包含該第一哈希值??蛻舳嗽诖_定目標(biāo)網(wǎng)絡(luò)邏輯單元之前,需要計算出目標(biāo)數(shù)據(jù)的第一哈希值。計算該目標(biāo)數(shù)據(jù)的第一哈希值可以基于該目標(biāo)數(shù)據(jù)所具有的文件名稱或者該目標(biāo)數(shù)據(jù)的數(shù)據(jù)本身來計算出的哈希值。這樣,當(dāng)滿足所包含的存儲單元數(shù)量與對目標(biāo)數(shù)據(jù)切分得到的數(shù)據(jù)塊和校驗塊的總數(shù)量相同的網(wǎng)絡(luò)邏輯單元有多個時,可以進(jìn)一步根據(jù)該網(wǎng)絡(luò)邏輯單元所支持的哈希值來最終確定出用于存儲數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0095]特別的,在系統(tǒng)中網(wǎng)絡(luò)邏輯單元較多的情況下,當(dāng)系統(tǒng)中的網(wǎng)絡(luò)邏輯單元具有所支持的RAID類型時,則可能會存在多個支持相同RAID類型的網(wǎng)絡(luò)邏輯單元。這樣,當(dāng)客戶端確定目標(biāo)網(wǎng)絡(luò)邏輯單元時,也可能會存在有多個滿足所支持RAID類型與對目標(biāo)數(shù)據(jù)切分所依據(jù)的RAID類型相同的網(wǎng)絡(luò)邏輯單元,客戶端可能需要從這多個滿足條件的網(wǎng)絡(luò)邏輯單元中隨機(jī)選擇出一個網(wǎng)絡(luò)邏輯單元。
[0096]為了能夠唯一確定出一個目標(biāo)網(wǎng)絡(luò)邏輯單元,系統(tǒng)可以同時設(shè)置各個網(wǎng)絡(luò)邏輯單元所支持的RAID類型和哈希值范圍,且支持相同RAID類型的網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍不同。相應(yīng)的,客戶端計算出目標(biāo)數(shù)據(jù)的第一哈希值并依據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分后,可以將系統(tǒng)中支持該設(shè)定的RAID類型且所支持的哈希值范圍包含該第一哈希值的網(wǎng)絡(luò)邏輯單元作為目標(biāo)網(wǎng)絡(luò)邏輯單元,從而可以唯一確定出一個網(wǎng)絡(luò)邏輯單
J Li ο
[0097]另外,除了以上設(shè)置網(wǎng)絡(luò)邏輯單元所支持的哈希值的方式外,還可以預(yù)先設(shè)置系統(tǒng)中各個網(wǎng)絡(luò)邏輯單元所支持的文件名,不同的網(wǎng)絡(luò)邏輯單元所支持的文件名不同。相應(yīng)的,客戶端,具體用于根據(jù)目標(biāo)數(shù)據(jù)的第一文件名確定用于存儲切分得到的數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,該目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的文件名中包含該第一文件名。其中,該目標(biāo)數(shù)據(jù)的第一文件名可以是客戶端為該目標(biāo)數(shù)據(jù)分配的文件名,也可以是該目標(biāo)數(shù)據(jù)原本具有的文件名??蛻舳送ㄟ^該種方式可以唯一確定出一個滿足所包含的存儲單元的數(shù)量與切分得到的數(shù)據(jù)塊和校驗塊的總數(shù)量,且所支持的文件名包含有該第一文件名的目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0098]進(jìn)一步的,當(dāng)為網(wǎng)絡(luò)邏輯單元分配了所支持的RAID類型的情況下,也可以為網(wǎng)絡(luò)邏輯單元分配所支持的文件名。其中,支持相同RAID類型的網(wǎng)絡(luò)邏輯單元所支持的文件名不同。這樣,客戶端可以從系統(tǒng)中選擇支持的文件名包含該目標(biāo)數(shù)據(jù)的第一文件名,且所支持的RAID類型與切分該目標(biāo)數(shù)據(jù)所依據(jù)的RAID類型相同的目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0099]可以理解的是,為了區(qū)分出網(wǎng)絡(luò)中的各個網(wǎng)絡(luò)邏輯單元,還可以為每個網(wǎng)絡(luò)邏輯單元分配一個系統(tǒng)唯一的標(biāo)識,該標(biāo)識可以是依據(jù)網(wǎng)絡(luò)邏輯單元所支持的RAID類型、所支持的哈希值范圍以及文件名中一種或幾種計算出來的標(biāo)識。
[0100]在以上任一實施例中,構(gòu)建出網(wǎng)絡(luò)邏輯單元后,還可以在網(wǎng)絡(luò)邏輯單元的各個存儲單元中存儲該網(wǎng)絡(luò)邏輯單元各個存儲單元的總存儲空間和當(dāng)前可用的存儲空間,每個存儲單元當(dāng)前可用的存儲空間,該網(wǎng)絡(luò)邏輯單元中的各個存儲單元所在的數(shù)據(jù)節(jié)點信息,該網(wǎng)絡(luò)邏輯單元所支持的RAID類型、該網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍、該網(wǎng)絡(luò)邏輯單元所支持的文件名等信息中的一種或多種。如,數(shù)據(jù)節(jié)點a中一個存儲單元al屬于網(wǎng)絡(luò)邏輯單元A,則數(shù)據(jù)節(jié)點a可以在該存儲單元al內(nèi)記錄該網(wǎng)絡(luò)邏輯單元相關(guān)的信息,如以上所介紹的總存儲空間、所支持的RAID類型等信息。
[0101]由于任意一個目標(biāo)數(shù)據(jù)節(jié)點都可能會包含有多個存儲單元,而這多個存儲單元可能會屬于不同的網(wǎng)絡(luò)邏輯單元。因此,為了使得目標(biāo)數(shù)據(jù)節(jié)點在接收到數(shù)據(jù)塊或校驗塊之后,能夠確定出需要將接收到的數(shù)據(jù)塊或校驗塊存儲到屬于哪個網(wǎng)絡(luò)邏輯單元的存儲單元中,客戶端在向數(shù)據(jù)節(jié)點發(fā)送數(shù)據(jù)塊或校驗塊的同時,還需要將目標(biāo)網(wǎng)絡(luò)邏輯單元的信息發(fā)送給數(shù)據(jù)節(jié)點。如,客戶端可以將目標(biāo)網(wǎng)絡(luò)邏輯單元的標(biāo)識,或者是目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的RAID類型和哈希值范圍,或者是目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的RAID類型和文件名等信息發(fā)送給目標(biāo)數(shù)據(jù)節(jié)點,以便目標(biāo)數(shù)據(jù)節(jié)點可以確定出需要將數(shù)據(jù)塊或校驗塊存儲到哪個存儲單元中。
[0102]另外,當(dāng)目標(biāo)數(shù)據(jù)節(jié)點將接收到的數(shù)據(jù)塊或校驗塊存儲至屬于目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元之后,目標(biāo)數(shù)據(jù)節(jié)點還可以記錄該存儲單元對數(shù)據(jù)塊或校驗塊的存儲狀態(tài),如是否存儲成功,以及存儲數(shù)據(jù)塊或校驗塊的數(shù)量,以及所存儲的目標(biāo)對象,例如,將目標(biāo)數(shù)據(jù)I切分得到的數(shù)據(jù)塊和校驗塊等。
[0103]進(jìn)一步的,為了目標(biāo)數(shù)據(jù)節(jié)點能夠了解到目標(biāo)網(wǎng)絡(luò)邏輯單元中的各個存儲單元內(nèi)對目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊或校驗塊的存儲情況,在該多個目標(biāo)數(shù)據(jù)節(jié)點中至少有一個目標(biāo)數(shù)據(jù)節(jié)點,還用于從這多個目標(biāo)數(shù)據(jù)節(jié)點中,獲取該目標(biāo)網(wǎng)絡(luò)邏輯單元中的各個存儲單元對數(shù)據(jù)塊和校驗塊的存儲狀態(tài)信息,并將獲取到的存儲狀態(tài)信息發(fā)送給其他目標(biāo)數(shù)據(jù)節(jié)點,使得各個目標(biāo)數(shù)據(jù)節(jié)點保存該存儲狀態(tài)信息。具有的,各個目標(biāo)數(shù)據(jù)節(jié)點將該存儲狀態(tài)信息保持至該目標(biāo)網(wǎng)絡(luò)邏輯單元包含的各個存儲單元中。其中,該存儲狀態(tài)信息中至少包括各個存儲單元所存儲的該目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊或校驗塊的數(shù)量信息。另外,該存儲狀態(tài)信息還可以包括存儲單元中存儲有對哪些目標(biāo)數(shù)據(jù)切分得到的數(shù)據(jù)塊或校驗塊。
[0104]其中,這多個目標(biāo)數(shù)據(jù)節(jié)點中的任意一個目標(biāo)數(shù)據(jù)節(jié)點均可以從接收到客戶端發(fā)送的數(shù)據(jù)塊或校驗塊均至指定時長之后,向其他目標(biāo)數(shù)據(jù)節(jié)點發(fā)送存儲狀態(tài)讀取請求,以獲取到各個目標(biāo)數(shù)據(jù)節(jié)點對客戶端發(fā)送的數(shù)據(jù)塊或校驗塊的存儲請求。當(dāng)然,任意一個目標(biāo)數(shù)據(jù)節(jié)點也可以周期性的向其他目標(biāo)數(shù)據(jù)節(jié)點發(fā)送存儲狀態(tài)讀取請求,以通過其他目標(biāo)數(shù)據(jù)節(jié)點獲取到該目標(biāo)網(wǎng)絡(luò)邏輯單元中各個存儲單元對數(shù)據(jù)塊和校驗塊的存儲狀態(tài)信息,并將獲取到的存儲狀態(tài)信息發(fā)送給其他數(shù)據(jù)節(jié)點。當(dāng)然,不同時刻發(fā)起存儲狀態(tài)讀取請求的目標(biāo)數(shù)據(jù)節(jié)點可能不同,但是只要是能夠保證數(shù)據(jù)節(jié)點內(nèi)存儲的存儲狀態(tài)信息能夠被周期性的更新即可。
[0105]目標(biāo)數(shù)據(jù)節(jié)點記錄對各個存儲單元對數(shù)據(jù)塊和校驗塊的存儲狀態(tài)信息的方式可以采用任意方式。可選的,在本申請中可以通過與目標(biāo)網(wǎng)絡(luò)邏輯單元所包含的存儲單元的個數(shù)相同位數(shù)的數(shù)字來表示存儲對象的冗余切片的存儲情況,該數(shù)字的不同位代表不同的存儲單元,而不同位上的具體數(shù)值則表示了該位對應(yīng)的數(shù)據(jù)節(jié)點的存儲單元對冗余切片的存儲情況,如,O表示該存儲單元上沒有存儲數(shù)據(jù)塊或校驗塊,I?F表示有I?15個數(shù)據(jù)塊或校驗塊。
[0106]由于不同時刻向該目標(biāo)網(wǎng)絡(luò)邏輯單元存儲的不同目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊和校驗塊,目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元內(nèi)可能會存儲多個目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊和校驗塊,因此,需要針對各個目標(biāo)數(shù)據(jù),分別記錄各個存儲單元對相應(yīng)數(shù)據(jù)塊和校驗塊的存儲狀態(tài)信息。以在目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元中分別存儲有對三個目標(biāo)數(shù)據(jù)切分得到的數(shù)據(jù)塊和校驗塊為例,參見圖3,示出了該目標(biāo)網(wǎng)絡(luò)邏輯單元對各個目標(biāo)數(shù)據(jù)的校驗塊和數(shù)據(jù)塊的存儲情況,以及所記錄相應(yīng)的存儲狀態(tài)信息。
[0107]假設(shè)該目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元中存儲有三個目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊和校驗塊,這三個目標(biāo)數(shù)據(jù)分別為obj-0、obj-l和obj-2。對obj-Ο進(jìn)行切分得到的數(shù)據(jù)塊和校驗塊分別為圖中的0-0、0-1、0-2、0-3和0-4 ;相應(yīng)的,對obj-Ι進(jìn)行切分得到的數(shù)據(jù)塊和校驗塊分別為圖中的1-0、1-1、1-2、1-3和1-4;對obj-2切分得到的數(shù)據(jù)塊和校驗塊分別為圖中的 2-0、2-1、2-2、2-3 和 1-4。
[0108]如圖3所示,該數(shù)據(jù)節(jié)點上方的方框所圍成的區(qū)域表示數(shù)據(jù)節(jié)點的存儲區(qū)域,而虛線部分與該數(shù)據(jù)節(jié)點的存儲區(qū)域的交集為該目標(biāo)網(wǎng)絡(luò)邏輯單元中的各個存儲單元。該目標(biāo)網(wǎng)絡(luò)邏輯單元的包含有5個存儲單元,且這5個存儲單元分別位于5個數(shù)據(jù)節(jié)點中,則可以用5位數(shù)來表示這5個存儲單元對該各個目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊和校驗塊的存儲狀態(tài)信息。具體可以通過如下方式來記錄存儲狀態(tài)信息:
[0109]對于obj-Ο,存儲狀態(tài)信息可以記錄為:11111,其表示該目標(biāo)網(wǎng)絡(luò)邏輯單元中位于這5個數(shù)據(jù)節(jié)點內(nèi)的存儲單元對該存儲對象ObjO的冗余切片均存儲完成正常,即每個存儲單元內(nèi)分別存儲有該obj-Ο的一個數(shù)據(jù)塊或校驗塊。[0110]對于Obj-l,存儲狀態(tài)信息可以記錄為11110,其表示位于數(shù)據(jù)節(jié)點5中的存儲單元所存儲的數(shù)據(jù)塊或校驗塊丟失,而另外四個數(shù)據(jù)節(jié)點中相應(yīng)存儲單元內(nèi)均存在一個該存儲對象Objl的數(shù)據(jù)塊或校驗塊。
[0111]對于obj-2,存儲狀態(tài)信息可以記錄為21110,其表示數(shù)據(jù)節(jié)點5的存儲單元內(nèi)未存儲有的該存儲對象0bj2的數(shù)據(jù)塊或校驗塊,而數(shù)據(jù)節(jié)點I中保存有該存儲對象0bj2的數(shù)據(jù)塊和校驗塊的總數(shù)量為兩個,也就是原本應(yīng)該存儲到數(shù)據(jù)節(jié)點5的存儲單元內(nèi)的數(shù)據(jù)塊或校驗塊被存儲到數(shù)據(jù)節(jié)點I的存儲單元內(nèi)。而其他三個數(shù)據(jù)節(jié)點的相應(yīng)存儲單元內(nèi)分別存儲有一個該存儲對象0bj2的數(shù)據(jù)塊或校驗塊。
[0112]一般情況下,當(dāng)一個存儲單元中存儲有同一個目標(biāo)數(shù)據(jù)的一個數(shù)據(jù)塊或校驗塊時,則說明未出現(xiàn)存儲異常,否則出現(xiàn)了存儲異常。
[0113]為了在某目標(biāo)數(shù)據(jù)節(jié)點出現(xiàn)故障,而導(dǎo)致目標(biāo)網(wǎng)絡(luò)邏輯單元中位于該目標(biāo)數(shù)據(jù)節(jié)點上的存儲單元所存儲的數(shù)據(jù)塊或校驗塊丟失或損壞時,能夠恢復(fù)相應(yīng)存儲單元內(nèi)丟失或損壞的數(shù)據(jù)塊或校驗塊,該多個目標(biāo)數(shù)據(jù)節(jié)點中至少一個目標(biāo)數(shù)據(jù)節(jié)點,還用于獲取該目標(biāo)網(wǎng)絡(luò)邏輯單元中的各個存儲單元對所存儲的數(shù)據(jù)塊和校驗塊的存儲狀態(tài)信息;當(dāng)根據(jù)該存儲狀態(tài)信息確定出該目標(biāo)網(wǎng)絡(luò)邏輯單元中存在對數(shù)據(jù)塊或校驗塊存儲異常的存儲單元時,根據(jù)該目標(biāo)網(wǎng)絡(luò)邏輯單元中未出現(xiàn)存儲異常的存儲單元內(nèi)所存儲的數(shù)據(jù)塊和校驗塊,恢復(fù)出該出現(xiàn)存儲異常的存儲單元內(nèi)的數(shù)據(jù)塊或校驗塊。其中,該存儲狀態(tài)信息中包括存儲單元所存儲的數(shù)據(jù)塊或校驗塊的數(shù)量信息。
[0114]其中,對于一個目標(biāo)數(shù)據(jù),目標(biāo)網(wǎng)絡(luò)邏輯單元中各個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中,至少有一個目標(biāo)數(shù)據(jù)節(jié)點按照預(yù)設(shè)的周期獲取該目標(biāo)網(wǎng)絡(luò)邏輯單元中各個存儲單元對該目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊和校驗塊的存儲狀態(tài)信息,進(jìn)而根據(jù)存儲狀態(tài)信息來判斷該目標(biāo)網(wǎng)絡(luò)邏輯單元中各個存儲單元是否均存儲有一個該目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊或校驗塊;如果該目標(biāo)網(wǎng)絡(luò)邏輯單元的某個存儲單元未出現(xiàn)有該目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊或校驗塊,或存儲的數(shù)據(jù)塊和校驗塊的總數(shù)量大于一個,則說明該存儲單元出現(xiàn)數(shù)據(jù)存儲異常。當(dāng)然,也可以是在不同時刻,由不同的目標(biāo)數(shù)據(jù)節(jié)點來發(fā)起故障檢測,進(jìn)而獲取該存儲狀態(tài)信息,并依據(jù)存儲狀態(tài)信息來判斷是否有出現(xiàn)儲存異常的存儲單元。
[0115]目標(biāo)數(shù)據(jù)節(jié)點獲取該存儲狀態(tài)信息的方式有兩種,可以是目標(biāo)數(shù)據(jù)節(jié)點通過向其他目標(biāo)數(shù)據(jù)節(jié)點發(fā)送狀態(tài)讀取請求,以便其他目標(biāo)數(shù)據(jù)節(jié)點將自身中屬于該目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元內(nèi)對數(shù)據(jù)塊或校驗塊的存儲狀態(tài)信息發(fā)送給該目標(biāo)數(shù)據(jù)節(jié)點。
[0116]特別的,當(dāng)各個目標(biāo)數(shù)據(jù)節(jié)點內(nèi)已經(jīng)記錄有該目標(biāo)網(wǎng)絡(luò)邏輯單元中各個存儲對目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊和校驗塊的存儲狀態(tài)信息,并周期性更新該存儲狀態(tài)信息時,目標(biāo)數(shù)據(jù)節(jié)點需要判斷是否有存儲單元出現(xiàn)存儲異常時,則可以讀取自身存儲的存儲狀態(tài)信息,并根據(jù)自身存儲的存儲狀態(tài)信息來判斷是否有存儲單元出現(xiàn)存儲異常。
[0117]當(dāng)確定出該目標(biāo)網(wǎng)絡(luò)邏輯單元中存在對數(shù)據(jù)塊或校驗塊存儲異常的存儲單元時,根據(jù)存儲異常的不同,恢復(fù)數(shù)據(jù)塊和校驗塊的過程也可能會有所不同。當(dāng)存儲單元的存儲異常為丟失了原本應(yīng)該存儲的數(shù)據(jù)塊和校驗塊時,該目標(biāo)數(shù)據(jù)節(jié)點具體用于,當(dāng)根據(jù)存儲狀態(tài)信息確定出所述目標(biāo)網(wǎng)絡(luò)邏輯單元中存在丟失所存儲的數(shù)據(jù)塊或校驗塊的第一存儲單元時,利用該目標(biāo)網(wǎng)絡(luò)邏輯單元中未丟失所存儲的數(shù)據(jù)塊或校驗塊的各個存儲單元內(nèi)所存儲的數(shù)據(jù)塊和校驗塊,恢復(fù)出所述第一存儲單元內(nèi)所丟失的數(shù)據(jù)塊或校驗塊。[0118]該目標(biāo)數(shù)據(jù)節(jié)點從其他目標(biāo)數(shù)據(jù)節(jié)點中獲取該目標(biāo)網(wǎng)絡(luò)邏輯單元中未丟失所存儲的數(shù)據(jù)塊或校驗塊的各個存儲單元內(nèi)所存儲的數(shù)據(jù)塊和校驗塊,利用獲取到的數(shù)據(jù)塊和校驗塊可以重新構(gòu)建出原來的目標(biāo)數(shù)據(jù)。然后根據(jù)目標(biāo)數(shù)據(jù)節(jié)點中存儲的對該目標(biāo)數(shù)據(jù)進(jìn)行切分所依據(jù)的RAID類型或者是該目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的RAID類型,對該目標(biāo)數(shù)據(jù)進(jìn)行重現(xiàn)切分,進(jìn)而可以重新得到出現(xiàn)異常的存儲單元內(nèi)所存儲的數(shù)據(jù)塊或校驗塊。
[0119]為了便于理解仍以圖3所示的目標(biāo)網(wǎng)絡(luò)邏輯單元包含有5個存儲單元,5個存儲單元分別位于5個數(shù)據(jù)節(jié)點中為例。由對圖3中的目標(biāo)數(shù)據(jù)Objl的存儲狀態(tài)信息的介紹可知,在網(wǎng)絡(luò)邏輯單元NLUNl中位于數(shù)據(jù)節(jié)點5中的存儲單元丟失了該Objl的數(shù)據(jù)塊或校驗塊1-4,而其余位于其余四個數(shù)據(jù)節(jié)點中的存儲單元對該存儲對象Objl的數(shù)據(jù)塊或校驗塊的存儲未出現(xiàn)異常。
[0120]假設(shè)此時發(fā)起對該NLUNl中的目標(biāo)數(shù)據(jù)Objl進(jìn)行檢測的數(shù)據(jù)節(jié)點設(shè)為數(shù)據(jù)節(jié)點1,數(shù)據(jù)節(jié)點I發(fā)現(xiàn)位于數(shù)據(jù)節(jié)點5的存儲單元丟失了該目標(biāo)數(shù)據(jù)Objl的數(shù)據(jù)塊或校驗塊,該則該數(shù)據(jù)節(jié)點I讀取自身存儲的Objl的數(shù)據(jù)塊或校驗塊1-0,并從數(shù)據(jù)節(jié)點2、數(shù)據(jù)節(jié)點3和數(shù)據(jù)節(jié)點4中獲取該Objl的數(shù)據(jù)塊或校驗塊1-0、1-2和1-3,該數(shù)據(jù)節(jié)點I利用剩余的數(shù)據(jù)塊或校驗塊1-0、1-1、1-2和1-3重現(xiàn)構(gòu)建出該目標(biāo)數(shù)據(jù)Objl,并確定原來客戶端對該Objl進(jìn)行切分所依據(jù)RAID類型,依據(jù)該RAID類型對該存儲對象Objl重新進(jìn)行切分,從而得到5個數(shù)據(jù)塊和校驗塊,然后將剩余的4個數(shù)據(jù)塊和檢驗快和心切分出的這5個數(shù)據(jù)塊和校驗塊進(jìn)行對比,從而確定出丟失的數(shù)據(jù)塊或校驗塊,并將確定出的該丟失的數(shù)據(jù)塊或校驗塊發(fā)送至數(shù)據(jù)節(jié)點5,該數(shù)據(jù)節(jié)點5中將接收到的數(shù)據(jù)塊和校驗塊重新存儲至其屬于該NLUNl的存儲單元中。
[0121]如圖4,示出了存儲異?;謴?fù)前和恢復(fù)后位于各個數(shù)據(jù)節(jié)點內(nèi)的各個存儲單元對該Objl的數(shù)據(jù)塊和校驗塊的存儲狀況對比圖。
[0122]當(dāng)存儲單元的存儲異常為存儲單元中存儲的該目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊或校驗塊的數(shù)量多于一個時,目標(biāo)數(shù)據(jù)節(jié)點具體用于,當(dāng)根據(jù)存儲狀態(tài)信息,確定出該目標(biāo)網(wǎng)絡(luò)邏輯單元中存在所存儲的數(shù)據(jù)塊或校驗塊的數(shù)量多于一個的第二存儲單元時,利用目標(biāo)網(wǎng)絡(luò)邏輯單元中不屬于該第二存儲單元的各個存儲單元內(nèi)所存儲的數(shù)據(jù)塊和校驗塊構(gòu)建出所述目標(biāo)數(shù)據(jù);獲取客戶端切分該目標(biāo)數(shù)據(jù)所依據(jù)的RAID類型,依據(jù)該RAID類型對構(gòu)建出的目標(biāo)數(shù)據(jù)進(jìn)行重新切分,并依據(jù)重新切分得到的數(shù)據(jù)塊和校驗塊,確定該第二存儲單元所應(yīng)存儲的數(shù)據(jù)塊或校驗塊。
[0123]其中,獲取客戶端切分目標(biāo)數(shù)據(jù)所依據(jù)的RAID類型,可以是由該目標(biāo)數(shù)據(jù)節(jié)點向客戶端發(fā)送查詢請求,以獲取該切分目標(biāo)數(shù)據(jù)所依據(jù)的RAID類型;也可以是客戶端向目的數(shù)據(jù)節(jié)點發(fā)送數(shù)據(jù)塊或校驗塊時,將切分目標(biāo)數(shù)據(jù)所依據(jù)的RAID類型發(fā)送給目標(biāo)數(shù)據(jù)節(jié)點進(jìn)行存儲;另外,當(dāng)目標(biāo)網(wǎng)絡(luò)邏輯單元支持有一 RAID類型時,該目標(biāo)數(shù)據(jù)節(jié)點中也可以存儲該目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的RAID類型,而該RAID類型與該客戶端切分該目標(biāo)數(shù)據(jù)所依據(jù)的RAID類型相同,自然該目標(biāo)數(shù)據(jù)可以直接獲取自身存儲的該目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的RAID類型。
[0124]假設(shè)NLUNl中的各個存儲單元中還存儲有目標(biāo)數(shù)據(jù)Ob j3的各個數(shù)據(jù)塊和校驗塊,且該NLUNl中的數(shù)據(jù)節(jié)點I中存儲單元內(nèi)存儲的數(shù)據(jù)塊和校驗塊的數(shù)量為兩個為例,即記錄的存儲狀態(tài)信息為21111的形式。這5個數(shù)據(jù)節(jié)點中發(fā)起故障檢測的數(shù)據(jù)節(jié)點確定出該NLUNl位于該數(shù)據(jù)節(jié)點I中的存儲單元出現(xiàn)該種存儲異常時,則可以利用該NLUNl中數(shù)據(jù)節(jié)點2-5內(nèi)所存儲的該Ob j3的數(shù)據(jù)塊和校驗塊,構(gòu)建出該目標(biāo)數(shù)據(jù)Ob j3,并確定客戶端對該Obj3進(jìn)行切分時所依據(jù)的RAID類型,按照RAID類型對該構(gòu)建出的該Ob j3進(jìn)行重現(xiàn)切分,得到5個新的數(shù)據(jù)塊和校驗塊。將當(dāng)前切分出的5個新的數(shù)據(jù)塊和校驗塊與數(shù)據(jù)節(jié)點2-5中所存儲的該0bj3的數(shù)據(jù)塊和校驗塊進(jìn)行對比,并將這5個新的數(shù)據(jù)塊和校驗塊中,不屬于該數(shù)據(jù)節(jié)點2-5中所存儲的該0bj3的數(shù)據(jù)塊和校驗塊的數(shù)據(jù)庫或校驗塊確定為數(shù)據(jù)節(jié)點I的存儲單元內(nèi)所需存儲的數(shù)據(jù)塊或校驗塊。發(fā)起故障檢測的該數(shù)據(jù)節(jié)點將該確定出的數(shù)據(jù)塊或校驗塊發(fā)送給數(shù)據(jù)節(jié)點1,以便數(shù)據(jù)節(jié)點I利用該確定出的數(shù)據(jù)塊或校驗塊替換了該數(shù)據(jù)節(jié)點I中原來所存儲的該存儲對象0bj3的2個數(shù)據(jù)塊和校驗塊。
[0125]對應(yīng)另一種存儲單元的存儲異常,該目標(biāo)數(shù)據(jù)節(jié)點具體用于,當(dāng)根據(jù)該存儲狀態(tài)信息,存在丟失所存儲的數(shù)據(jù)塊或校驗塊的第一存儲單元和存儲的數(shù)據(jù)塊或校驗塊的數(shù)量多于一個的第二存儲單元時,指示該第二存儲單元所在的數(shù)據(jù)節(jié)點,將第二存儲單元中多出的數(shù)據(jù)塊或校驗塊發(fā)送至該第一存儲單元所在的目標(biāo)數(shù)據(jù)節(jié)點,以便該第一存儲單元所在的目標(biāo)數(shù)據(jù)節(jié)點將接收到的數(shù)據(jù)塊或校驗塊存儲至該第一存儲單元中。
[0126]仍以圖3所示的目標(biāo)網(wǎng)絡(luò)邏輯單元NLUNl為例,在該NLUNl中還存儲有目標(biāo)數(shù)據(jù)0bj2,由圖3以及以上對記錄的與0bj2相關(guān)的存儲狀態(tài)信息的描述可知,由于某種原因,NLUNl位于的數(shù)據(jù)節(jié)點5存儲單元內(nèi)所應(yīng)存儲的數(shù)據(jù)塊或校驗塊被存儲在該NLUNl位于數(shù)據(jù)節(jié)點I的存儲單元內(nèi),使得該數(shù)據(jù)節(jié)點I的該存儲單元內(nèi)存儲的數(shù)據(jù)塊和校驗塊的數(shù)量為兩個。仍假設(shè)發(fā)起檢測的數(shù)據(jù)節(jié)點為數(shù)據(jù)節(jié)點1,當(dāng)該數(shù)據(jù)節(jié)點I獲取到該NLUNl中各個存儲單元對該存儲對象0bj2的數(shù)據(jù)塊和校驗塊的存儲狀態(tài)信息時,可以確定出該NLUNl位于數(shù)據(jù)節(jié)點5中的存儲單元所應(yīng)存儲的數(shù)據(jù)塊或校驗塊被存儲在位于該數(shù)據(jù)節(jié)點I的存儲單元內(nèi),則該數(shù)據(jù)節(jié)點I從自身存儲的兩個數(shù)據(jù)塊和/或校驗塊中的任意一個發(fā)送至該數(shù)據(jù)節(jié)點5,進(jìn)而使得位于數(shù)據(jù)節(jié)點5中的存儲單元內(nèi)存儲該0bj2的數(shù)據(jù)塊或校驗塊。
[0127]如圖4所示,示出了在有存儲單元出現(xiàn)存儲異常以及存儲單元的存儲異?;謴?fù)后的,該NLUNl中各個存儲單元對該0bj2的各個數(shù)據(jù)塊和校驗塊的存儲狀態(tài)對比圖,可見,異?;謴?fù)后,數(shù)據(jù)節(jié)點I和數(shù)據(jù)節(jié)點5中均保存有一個存儲對象Obj2的數(shù)據(jù)塊或校驗塊。
[0128]需要說明的是,以上僅僅是以將各個目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊和校驗塊存儲在一個目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元為例進(jìn)行介紹。但是在實際應(yīng)用中,由于一個目標(biāo)數(shù)據(jù)節(jié)點可以包含多個存儲單元,而該目標(biāo)數(shù)據(jù)節(jié)點的多個存儲單元可能屬于不同的目標(biāo)網(wǎng)絡(luò)邏輯單元,從而使得該目標(biāo)數(shù)據(jù)節(jié)點可能同時屬于多個目標(biāo)網(wǎng)絡(luò)邏輯單元。因此,當(dāng)任意一個目標(biāo)數(shù)據(jù)節(jié)點需要進(jìn)行異常檢測時,首先需要確定出待檢測的目標(biāo)網(wǎng)絡(luò)邏輯單元,并需要確定待檢測的目標(biāo)數(shù)據(jù),即確定出需要對該目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元存儲的哪個目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊或校驗塊的存儲狀態(tài)信息進(jìn)行異常檢測。
[0129]通過由目標(biāo)數(shù)據(jù)節(jié)點依據(jù)存儲狀態(tài)信息對目標(biāo)網(wǎng)絡(luò)邏輯單元各個存儲單元的存儲狀態(tài)進(jìn)行檢測,并在存儲單元出現(xiàn)存儲異常時,恢復(fù)出出現(xiàn)存儲異常的存儲單元所存儲的數(shù)據(jù)塊或校驗塊,從而實現(xiàn)了目標(biāo)網(wǎng)絡(luò)邏輯單元對數(shù)據(jù)的自愈,也減少了由于數(shù)據(jù)丟失或損壞而無法恢復(fù)出數(shù)據(jù)的情況。
[0130]為了能夠?qū)Υ鎯Φ臄?shù)據(jù)的相關(guān)信息進(jìn)行管理,并便于客戶端后續(xù)進(jìn)行數(shù)據(jù)讀取或者查詢存儲到網(wǎng)絡(luò)邏輯單元的各個存儲單元內(nèi)的數(shù)據(jù)的相關(guān)信息,該系統(tǒng)還包括元數(shù)據(jù)節(jié)點。如圖5所示,示出了本發(fā)明一種網(wǎng)絡(luò)存儲系統(tǒng)另一個實施例的組成結(jié)構(gòu)示意圖。與以上實施例不同的是,在本實施例中系統(tǒng)還包括:元數(shù)據(jù)節(jié)點3。該元數(shù)據(jù)節(jié)點3與客戶端I通過網(wǎng)絡(luò)連接。
[0131]在本實施例中,該客戶端還用于:在根據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分,得到校驗塊和至少兩個數(shù)據(jù)塊之后,將目標(biāo)數(shù)據(jù)與該RAID類型的對應(yīng)關(guān)系發(fā)送至該元數(shù)據(jù)節(jié)點。
[0132]相應(yīng)的,該元數(shù)據(jù)節(jié)點,用于存儲該目標(biāo)數(shù)據(jù)與該RAID類型的對應(yīng)關(guān)系。
[0133]客戶端對不同的目標(biāo)數(shù)據(jù)進(jìn)行切分時,所依據(jù)的RAID類型可能不同。為了便于查詢到對切分目標(biāo)數(shù)據(jù)所依據(jù)的RAID類型,客戶端需要將目標(biāo)數(shù)據(jù)與切分該目標(biāo)數(shù)據(jù)所依據(jù)的RAID類型的對應(yīng)關(guān)系發(fā)送至元數(shù)據(jù)節(jié)點,以在元數(shù)據(jù)節(jié)點中存儲該對應(yīng)關(guān)系。例如,客戶端依據(jù)RAID3+2對目標(biāo)數(shù)據(jù)I進(jìn)行切分,則需要將目標(biāo)數(shù)據(jù)I與該RAID3+2的對應(yīng)關(guān)系發(fā)送至該元數(shù)據(jù)節(jié)點;而客戶端依據(jù)RAID3+1對目標(biāo)數(shù)據(jù)2進(jìn)行切分,則需要將目標(biāo)數(shù)據(jù)2與該RAID3+1的對應(yīng)關(guān)系發(fā)送至元數(shù)據(jù)節(jié)點。
[0134]進(jìn)一步的,在網(wǎng)絡(luò)邏輯單元具有所支持的RAID類型的前提下,如果客戶端將對目標(biāo)數(shù)據(jù)切分得到的數(shù)據(jù)塊和校驗塊存儲在網(wǎng)絡(luò)邏輯單元的各個存儲單元所在的目標(biāo)數(shù)據(jù)節(jié)點之后,為了在客戶端需要讀取目標(biāo)數(shù)據(jù)時,能夠確定出存儲該目標(biāo)數(shù)據(jù)的各個數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,該客戶端,還用于從元數(shù)據(jù)節(jié)點中獲取該目標(biāo)數(shù)據(jù)與RAID類型的對應(yīng)關(guān)系,確定支持該RAID類型的目標(biāo)網(wǎng)絡(luò)邏輯單元,并向該目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元所在的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送讀取該目標(biāo)數(shù)據(jù)的請求。
[0135]相應(yīng)的,目標(biāo)數(shù)據(jù)節(jié)點,還用于在接收到客戶端讀取該目標(biāo)數(shù)據(jù)的請求時,從屬于目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元中讀取所存儲的目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊和/或校驗塊,并將讀取到的數(shù)據(jù)塊和/或校驗塊發(fā)送給客戶端。
[0136]任意一個目標(biāo)數(shù)據(jù)節(jié)點在接收到客戶端讀取該目標(biāo)數(shù)據(jù)的請求時,便可以從相應(yīng)存儲單元中讀取出屬于該目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊或校驗塊并發(fā)送給客戶端。
[0137]可見,該元數(shù)據(jù)節(jié)點與數(shù)據(jù)節(jié)點中所存儲的數(shù)據(jù)內(nèi)容不同,該元數(shù)據(jù)節(jié)點僅僅是存儲元數(shù)據(jù)信息,即與是存儲有與目標(biāo)數(shù)據(jù)相關(guān)的元數(shù)據(jù),如上面提到的對目標(biāo)數(shù)據(jù)進(jìn)行切分所依據(jù)的RAID類型。
[0138]另外,當(dāng)網(wǎng)絡(luò)邏輯單元支持一定哈希值范圍或文件名時,客戶端還可以將目標(biāo)數(shù)據(jù)的第一文件名、計算出的該目標(biāo)數(shù)據(jù)的第一哈希值等信息中的一種或幾種發(fā)送給元數(shù)據(jù)節(jié)點,以便在元數(shù)據(jù)節(jié)點中存儲這些信息。
[0139]當(dāng)客戶端需要讀取該目標(biāo)數(shù)據(jù)時,則可以從元數(shù)據(jù)節(jié)點中獲取切分該目標(biāo)數(shù)據(jù)所依據(jù)的RAID類型以及該目標(biāo)數(shù)據(jù)的第一文件名,并確定出支持該RAID類型且所支持的文件名包含該第一文件名的目標(biāo)網(wǎng)絡(luò)邏輯單元,以便向該目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元所在的數(shù)據(jù)節(jié)點發(fā)送對該目標(biāo)數(shù)據(jù)的讀取請求;或者,從元數(shù)據(jù)節(jié)點中獲取切分該目標(biāo)數(shù)據(jù)所依據(jù)的RAID類型以及該目標(biāo)數(shù)據(jù)的第一哈希值,并確定出支持該RAID類型且所支持的哈希值范圍包含該第一哈希值的目標(biāo)網(wǎng)絡(luò)邏輯單元,以便向該目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元所在的數(shù)據(jù)節(jié)點發(fā)送對該目標(biāo)數(shù)據(jù)的讀取請求。
[0140]當(dāng)然,該客戶端也可以在將目標(biāo)數(shù)據(jù)切分得到的數(shù)據(jù)塊和校驗塊存儲到目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元后,將該目標(biāo)數(shù)據(jù)與該目標(biāo)網(wǎng)絡(luò)邏輯單元的標(biāo)識信息的對應(yīng)關(guān)系發(fā)送給元數(shù)據(jù)節(jié)點,以便后續(xù)需要讀取目標(biāo)數(shù)據(jù)時,從元數(shù)據(jù)節(jié)點中獲取存儲該目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0141]需要說明的是,以上任意一個實施例,均是以網(wǎng)絡(luò)存儲系統(tǒng)應(yīng)用RAID算法為例進(jìn)行描述的,如客戶端依據(jù)某RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分,以及網(wǎng)絡(luò)邏輯單元具有所支持的RAID類型為例來描述該網(wǎng)絡(luò)存儲系統(tǒng)的,但是實際上,該網(wǎng)絡(luò)存儲系統(tǒng)也適用于應(yīng)用糾偏碼算法的場景,如,客戶端依據(jù)糾偏碼N+M的類型來對目標(biāo)數(shù)據(jù)進(jìn)行切分后,其中,N和M均可以為大于零的自然數(shù),同樣會使得切分得到的數(shù)據(jù)塊和校驗塊之間存在冗余關(guān)系。當(dāng)某個數(shù)據(jù)塊或校驗塊丟失或損壞時,利用未丟失或損壞的數(shù)據(jù)塊和校驗塊同樣能夠恢復(fù)出丟失或損壞的數(shù)據(jù)塊或校驗塊。相應(yīng)的,系統(tǒng)可以為網(wǎng)絡(luò)邏輯單元分配所支持的糾偏碼類型,以便客戶端依據(jù)糾偏碼類型來選擇用于存儲數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,其具體過程與以上實施例所描述的過程類似,在此不再贅述。
[0142]另一方面,本發(fā)明還提供了一種數(shù)據(jù)處理方法,參見圖6,示出了本發(fā)明一種數(shù)據(jù)處理方法一個實施例的流程示意圖,本實施例的方法應(yīng)用于包括至少三個數(shù)據(jù)節(jié)點的網(wǎng)絡(luò)存儲系統(tǒng),在該網(wǎng)絡(luò)存儲系統(tǒng)中各個數(shù)據(jù)節(jié)點之間通過網(wǎng)絡(luò)連接,且每個數(shù)據(jù)節(jié)點的存儲區(qū)域被劃分為至少一個存儲單元,得到位于該至少三個數(shù)據(jù)節(jié)點中的多個存儲單元,且這多個存儲單元被劃歸為多個網(wǎng)絡(luò)邏輯單元,本實施例的方法包括:
[0143]步驟601:根據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分,得到校驗塊和至少兩個數(shù)據(jù)塊。
[0144]其中,客戶端中預(yù)設(shè)的RAID類型可以有多種,對不同的目標(biāo)數(shù)據(jù)進(jìn)行切分時,所依據(jù)的RAID類型可能不同。
[0145]依據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分,實際上是依據(jù)該RAID類型對應(yīng)的RAID算法對目標(biāo)數(shù)據(jù)進(jìn)行切分,從而得到至少一個校驗塊和至少兩個數(shù)據(jù)塊,該過程與現(xiàn)有的依據(jù)RAID類型對數(shù)據(jù)進(jìn)行冗余方式的切分的過程相似,在此不再贅述。
[0146]其中,依據(jù)RAID對目標(biāo)數(shù)據(jù)進(jìn)行切分得到的數(shù)據(jù)塊和校驗塊之間具有冗余關(guān)系,當(dāng)有數(shù)據(jù)塊丟失或損壞等故障時,利用未出現(xiàn)故障的數(shù)據(jù)塊和校驗塊可以恢復(fù)出出現(xiàn)故障的數(shù)據(jù)塊或校驗塊。
[0147]步驟602:從網(wǎng)絡(luò)存儲系統(tǒng)的多個網(wǎng)絡(luò)邏輯單元中確定用于存儲該數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0148]步驟603:將數(shù)據(jù)塊和校驗塊分別發(fā)送至該目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中,以便目標(biāo)數(shù)據(jù)節(jié)點將接收到的數(shù)據(jù)塊和/或校驗塊存儲其屬于目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元內(nèi),使得目標(biāo)網(wǎng)絡(luò)邏輯單元的任一存儲單元內(nèi)均存儲有切分的數(shù)據(jù)塊中的一個數(shù)據(jù)塊或校驗塊。
[0149]其中,客戶端對目標(biāo)數(shù)據(jù)進(jìn)行切分所依據(jù)的RAID類型決定了切分得到的數(shù)據(jù)塊和校驗塊的總數(shù)量,如當(dāng)依據(jù)RAID3+2對目標(biāo)數(shù)據(jù)進(jìn)行切分時,則會得到3個數(shù)據(jù)塊和2個校驗塊,校驗塊和數(shù)據(jù)塊的總數(shù)量為5個;當(dāng)依據(jù)RAID3+1對目標(biāo)數(shù)據(jù)進(jìn)行切分時,則會得到3個數(shù)據(jù)塊和I個校驗塊。
[0150]客戶端確定的目標(biāo)網(wǎng)絡(luò)邏輯單元所包含的存儲單元數(shù)量與切分得到的數(shù)據(jù)塊和校驗塊的總數(shù)量相同、這樣,才能使得后續(xù)目標(biāo)網(wǎng)絡(luò)邏輯單元的任一存儲單元均可以存儲一個切分得到的數(shù)據(jù)塊或校驗塊,且不同存儲單元所存儲的數(shù)據(jù)塊或校驗塊不同,[0151]在本實施例中,由于當(dāng)客戶端將切分得到的這些該數(shù)據(jù)塊和校驗塊分別存儲至目標(biāo)網(wǎng)絡(luò)邏輯單元中位于多個目標(biāo)數(shù)據(jù)節(jié)點內(nèi)的多個存儲單元后,目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元內(nèi)所存儲的數(shù)據(jù)塊和校驗塊之間也存在冗余關(guān)系。這樣,當(dāng)由于目標(biāo)數(shù)據(jù)節(jié)點發(fā)生故障,使得某一個或幾個存儲單元中所存儲數(shù)據(jù)塊或校驗塊出現(xiàn)丟失或損壞等異常狀況時,利用未發(fā)生故障的目標(biāo)數(shù)據(jù)節(jié)點中屬于該目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元中所存儲的數(shù)據(jù)塊和校驗塊便可以恢復(fù)出出現(xiàn)異常的數(shù)據(jù)塊或校驗塊,從而減少了數(shù)據(jù)損壞后不能恢復(fù)的情況,提高了系統(tǒng)存儲的安全性和可靠性。
[0152]為了避免一個目標(biāo)數(shù)據(jù)節(jié)點出現(xiàn)故障時,會使得多個存儲單元所存儲的數(shù)據(jù)丟失或損壞,網(wǎng)絡(luò)存儲系統(tǒng)中的網(wǎng)絡(luò)邏輯單元所包含的存儲單元均來自不同的數(shù)據(jù)節(jié)點。相應(yīng)的,目標(biāo)網(wǎng)絡(luò)邏輯單元所包含的各個存儲單元均位于不同的目標(biāo)數(shù)據(jù)節(jié)點中。與此對應(yīng),客戶端可以向目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中的任意一個目標(biāo)數(shù)據(jù)節(jié)點僅發(fā)送一個數(shù)據(jù)塊或校驗塊,且向不同的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送的數(shù)據(jù)塊或校驗塊不同。這樣,一個目標(biāo)數(shù)據(jù)節(jié)點出現(xiàn)故障僅僅會對目標(biāo)網(wǎng)絡(luò)邏輯單元中一個存儲單元所存儲的數(shù)據(jù)塊或校驗塊造成影響。
[0153]在確定目標(biāo)網(wǎng)絡(luò)邏輯單元時,由于所依據(jù)的RAID類型決定了對目標(biāo)數(shù)據(jù)進(jìn)行切分所得到的數(shù)據(jù)塊和校驗塊的總數(shù)量,因此,可以根據(jù)對目標(biāo)數(shù)據(jù)進(jìn)行切分所依據(jù)的RAID類型來確定目標(biāo)網(wǎng)絡(luò)邏輯單元,進(jìn)而確定出所包含的存儲單元的數(shù)量與切分得到的數(shù)據(jù)塊和校驗塊的總數(shù)量相同的網(wǎng)絡(luò)邏輯單元。
[0154]當(dāng)網(wǎng)絡(luò)存儲系統(tǒng)中的網(wǎng)絡(luò)邏輯單元的數(shù)量較多時,有可能會存在多個網(wǎng)絡(luò)邏輯單元所包含的存儲單元數(shù)量相同,這樣,滿足條件所包含的存儲單元的數(shù)量與切分得到的數(shù)據(jù)塊和校驗塊的總數(shù)量相同的網(wǎng)絡(luò)邏輯單元可能會有多個,客戶端可能會從這多個滿足條件的多個網(wǎng)絡(luò)邏輯單元中隨機(jī)選擇出一個目標(biāo)網(wǎng)絡(luò)邏輯單元。為了減少該種情況,并便于區(qū)分出網(wǎng)絡(luò)邏輯單元所包含的存儲單元的數(shù)量,同時又使得同一網(wǎng)絡(luò)邏輯單元的各個存儲單元內(nèi)所存儲的數(shù)據(jù)具有相同屬性,每個網(wǎng)絡(luò)邏輯單元還可以具有一個所支持的RAID類型。
[0155]相應(yīng)的,客戶端可以從這多個網(wǎng)絡(luò)邏輯單元中,確定支持對目標(biāo)數(shù)據(jù)進(jìn)行切分所依據(jù)RAID類型的網(wǎng)絡(luò)邏輯單元作為存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元。這樣,即使兩個網(wǎng)絡(luò)邏輯單元所包含的存儲單元數(shù)量相同,但是這兩個網(wǎng)絡(luò)邏輯單元所支持的RAID類型卻不一定相同,從而有利于客戶端來確定目標(biāo)網(wǎng)絡(luò)邏輯單元。同時由于目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元中所存儲的數(shù)據(jù)塊和校驗塊,均是依據(jù)相同的RAID類型切分得到的,也有利于對數(shù)據(jù)的管理。
[0156]另外,當(dāng)各個網(wǎng)絡(luò)邏輯單元也可以是具有所支持的哈希值范圍,這樣,同一網(wǎng)絡(luò)邏輯單元的存儲單元中所存儲的數(shù)據(jù)均屬于相同哈希值范圍內(nèi)的數(shù)據(jù)。根據(jù)實際需要不同的網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍也可能不同。當(dāng)然,考慮到實際需要可以是設(shè)置包含相同數(shù)量的存儲單元的網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍不同,以便于后續(xù)客戶端確定目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0157]相應(yīng)的,客戶端在從多個網(wǎng)絡(luò)邏輯單元中確定用于存儲數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元之前,還可以計算目標(biāo)數(shù)據(jù)的第一哈希值。進(jìn)而在確定目標(biāo)網(wǎng)絡(luò)邏輯單元時,根據(jù)該第一哈希值,確定用于存儲數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,其中,該目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍包含該第一哈希值。
[0158]特別的,在系統(tǒng)中網(wǎng)絡(luò)邏輯單元較多的情況下,當(dāng)系統(tǒng)中的網(wǎng)絡(luò)邏輯單元具有所支持的RAID類型時,則可能會存在多個支持相同RAID類型的網(wǎng)絡(luò)邏輯單元。為了能夠唯一確定出一個目標(biāo)網(wǎng)絡(luò)邏輯單元,網(wǎng)絡(luò)邏輯單元可以在具有所支持的RAID類型的同時,具有所支持的哈希值范圍。其中,支持相同RAID類型的網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍不同。相應(yīng)的,客戶端計算出目標(biāo)數(shù)據(jù)的第一哈希值并依據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分后,可以將系統(tǒng)中支持該設(shè)定的RAID類型且所支持的哈希值范圍包含該第一哈希值的網(wǎng)絡(luò)邏輯單元作為目標(biāo)網(wǎng)絡(luò)邏輯單元,從而可以唯一確定出一個網(wǎng)絡(luò)邏輯單元。
[0159]當(dāng)然,網(wǎng)絡(luò)邏輯單元也可以是具有所支持文件名。不同的網(wǎng)絡(luò)邏輯單元所支持的文件名也可能不同。相應(yīng)的,客戶端可以根據(jù)目標(biāo)數(shù)據(jù)的第一文件名,確定用于存儲切分得到的數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,其中,該目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的文件名中包含第一文件名。
[0160]其中,該目標(biāo)數(shù)據(jù)的第一文件名可以是客戶端為該目標(biāo)數(shù)據(jù)分配的文件名,也可以是該目標(biāo)數(shù)據(jù)原本具有的文件名。客戶端通過該種方式可以唯一確定出一個滿足所包含的存儲單元的數(shù)量與切分得到的數(shù)據(jù)塊和校驗塊的總數(shù)量,且所支持的文件名包含有該第一文件名的目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0161]進(jìn)一步的,網(wǎng)絡(luò)邏輯單元還可以在具有所支持RAID類型的同時,具有所支持的文件名。其中,支持相同RAID類型的網(wǎng)絡(luò)邏輯單元所支持的文件名不同。這樣,客戶端可以選擇支持的文件名包含該目標(biāo)數(shù)據(jù)的第一文件名,且所支持的RAID類型與切分該目標(biāo)數(shù)據(jù)所依據(jù)的RAID類型相同的目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0162]為了客戶端后續(xù)能夠讀取存儲到網(wǎng)絡(luò)邏輯單元的各個存儲單元內(nèi)數(shù)據(jù)塊和校驗塊。該網(wǎng)絡(luò)存儲系統(tǒng)中還可以包括元數(shù)據(jù)節(jié)點,該元數(shù)據(jù)節(jié)點與客戶端之間通過網(wǎng)絡(luò)連接。
[0163]在客戶端依據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分后,還可以將該目標(biāo)數(shù)據(jù)與所述RAID類型的對應(yīng)關(guān)系發(fā)送至元數(shù)據(jù)節(jié)點,以在元數(shù)據(jù)節(jié)點中存儲所述對應(yīng)關(guān)系得到的數(shù)據(jù)塊和校驗塊。
[0164]進(jìn)一步的,在網(wǎng)絡(luò)邏輯單元具有所支持的RAID類型的前提下,客戶端可以從該元數(shù)據(jù)節(jié)點中獲取該目標(biāo)數(shù)據(jù)與RAID類型的對應(yīng)關(guān)系,并確定支持該RAID類型的目標(biāo)網(wǎng)絡(luò)邏輯單元,并向目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元所在的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送讀取該目標(biāo)數(shù)據(jù)的請求,以便從所述多個目標(biāo)數(shù)據(jù)節(jié)點中得到所述數(shù)據(jù)塊和校驗塊。
[0165]另外,當(dāng)網(wǎng)絡(luò)邏輯單元支持一定哈希值范圍或文件名時,客戶端還可以將目標(biāo)數(shù)據(jù)的第一文件名、計算出的該目標(biāo)數(shù)據(jù)的第一哈希值等信息中的一種或幾種發(fā)送給元數(shù)據(jù)節(jié)點,以便在元數(shù)據(jù)節(jié)點中存儲這些元數(shù)據(jù)信息。
[0166]當(dāng)客戶端需要讀取該目標(biāo)數(shù)據(jù)時,則可以從元數(shù)據(jù)節(jié)點中獲取切分該目標(biāo)數(shù)據(jù)所依據(jù)的RAID類型以及該目標(biāo)數(shù)據(jù)的第一文件名,并確定出支持該RAID類型且所支持的文件名包含該第一文件名的目標(biāo)網(wǎng)絡(luò)邏輯單元,以便向該目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元所在的數(shù)據(jù)節(jié)點發(fā)送對該目標(biāo)數(shù)據(jù)的讀取請求;或者,客戶端從元數(shù)據(jù)節(jié)點中獲取切分該目標(biāo)數(shù)據(jù)所依據(jù)的RAID類型以及該目標(biāo)數(shù)據(jù)的第一哈希值,并確定出支持該RAID類型且所支持的哈希值范圍包含該第一哈希值的目標(biāo)網(wǎng)絡(luò)邏輯單元,以便向該目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元所在的數(shù)據(jù)節(jié)點發(fā)送對該目標(biāo)數(shù)據(jù)的讀取請求。[0167]為了便于理解客戶端讀取目標(biāo)數(shù)據(jù)的過程,假設(shè)任一網(wǎng)絡(luò)邏輯單元均具有所支持的RAID類型,并以客戶端根據(jù)目標(biāo)數(shù)據(jù)的第一文件名以及對目標(biāo)數(shù)據(jù)切分時所依據(jù)的第
一RAID類型確定目標(biāo)網(wǎng)絡(luò)邏輯單元為例進(jìn)行介紹,其中,該第一 RAID表示客戶端對目標(biāo)數(shù)據(jù)進(jìn)行切分所依據(jù)的RAID類型,其僅僅是為了與網(wǎng)絡(luò)邏輯單元所支持的RAID類型進(jìn)行區(qū)分??蛻舳藭⒃撃繕?biāo)數(shù)據(jù)的第一文件名,以及該目標(biāo)數(shù)據(jù)與該第一 RAID類型的對應(yīng)關(guān)系發(fā)送至元數(shù)據(jù)節(jié)點存儲。參見圖7,示出客戶端進(jìn)行數(shù)據(jù)讀取的流程交互示意圖。為了更加便于描述,在圖7中未畫出各個網(wǎng)絡(luò)邏輯單元所包含的存儲單元所位于的各個數(shù)據(jù)節(jié)點,而是直接畫出了各個網(wǎng)絡(luò)邏輯單元。但是可以理解的是,網(wǎng)絡(luò)邏輯單元實際上就是存儲區(qū)域分布在不同數(shù)據(jù)節(jié)點的分布式存儲單元,在該圖中以系統(tǒng)包含有四個網(wǎng)絡(luò)邏輯單元為例。可見客戶端進(jìn)行數(shù)據(jù)讀取的過程可以包括:
[0168]步驟701:客戶端將待讀取的目標(biāo)數(shù)據(jù)的第一文件名發(fā)送給元數(shù)據(jù)節(jié)點。
[0169]步驟702:元數(shù)據(jù)節(jié)點根據(jù)接收到的第一文件名,查找與該第一文件名對應(yīng)的元數(shù)據(jù)信息。
[0170]元數(shù)據(jù)節(jié)點根據(jù)該第一文件名,可以獲取到與該目標(biāo)數(shù)據(jù)對應(yīng)的元數(shù)據(jù)信息。當(dāng)然,客戶端也可以是發(fā)送該目標(biāo)數(shù)據(jù)的標(biāo)識信息,以便于元數(shù)據(jù)節(jié)點查詢相應(yīng)的元數(shù)據(jù)信
肩、O
[0171]其中,該元數(shù)據(jù)信息至少包括與該目標(biāo)數(shù)據(jù)對應(yīng)的第一 RAID類型、目標(biāo)數(shù)據(jù)的第一文件名,當(dāng)然還可以包括該目標(biāo)數(shù)據(jù)的標(biāo)識,以及哈希值等。
[0172]步驟703:元數(shù)據(jù)節(jié)點將獲取到的元數(shù)據(jù)信息發(fā)送給該客戶端。
[0173]步驟704:客戶端根據(jù)接收到的元數(shù)據(jù)信息中的第一文件名和第一 RAID類型,確定出目標(biāo)網(wǎng)絡(luò)邏輯單元,并向該目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元所在的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送讀取該目標(biāo)數(shù)據(jù)的請求。
[0174]客戶端根據(jù)該第一文件名和第一 RAID類型,將支持該第一 RAID類型且支持的文件名包含該第一文件名的網(wǎng)絡(luò)邏輯單元作為目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0175]步驟705:目標(biāo)數(shù)據(jù)節(jié)點接收該請求,并從屬于該目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元中獲取該目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊或校驗塊,并發(fā)送給客戶端。
[0176]例如,假設(shè)目標(biāo)網(wǎng)絡(luò)邏輯單元為NLUN1,則客戶端向該NLUNl的各個存儲單元所在的各個目標(biāo)數(shù)據(jù)節(jié)點發(fā)送請求,存儲單元包含與該NLUNl的目標(biāo)數(shù)據(jù)節(jié)點接收到請求后,讀取相應(yīng)的數(shù)據(jù)塊或校驗塊并發(fā)送給客戶端。
[0177]另外,本申請還提供了一種客戶端,參見圖8,示出了本申請一種客戶端的結(jié)構(gòu)示意圖,該客戶端應(yīng)用于包括至少三個數(shù)據(jù)節(jié)點的網(wǎng)絡(luò)存儲系統(tǒng),各個數(shù)據(jù)節(jié)點之間通過網(wǎng)絡(luò)連接,每個數(shù)據(jù)節(jié)點的存儲區(qū)域被劃分為至少一個存儲單元,得到位于所述至少三個數(shù)據(jù)節(jié)點中的多個存儲單元,且這多個存儲單元被劃歸為多個網(wǎng)絡(luò)邏輯單元。該客戶端800至少包括處理器801、存儲器802、通信接口 803和通信總線804。
[0178]其中,處理器801、存儲器802和通信接口 803通過通信總線804實現(xiàn)相互之間的
通信;
[0179]該處理器801用于根據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分,得到校驗塊和至少兩個數(shù)據(jù)塊;從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲該數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元;將切分得到的數(shù)據(jù)塊和校驗塊分別發(fā)送至目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中。
[0180]該存儲器802用于存儲包含有該處理器所運(yùn)行的程序的信息。該存儲器可能包含高速RAM存儲器,也可能還包括非易失性存儲器。
[0181]該通信接口 803,用于與網(wǎng)絡(luò)存儲系統(tǒng)中的網(wǎng)元通信,如數(shù)據(jù)節(jié)點等。
[0182]當(dāng)該網(wǎng)絡(luò)存儲系統(tǒng)中的網(wǎng)絡(luò)邏輯單元所包含的存儲單元均屬于不同的數(shù)據(jù)節(jié)點的情況下,該處理器801從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,具體為:
[0183]向目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中的任一目標(biāo)數(shù)據(jù)節(jié)點發(fā)送一個所述數(shù)據(jù)塊或一個所述校驗塊,且向不同的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送的數(shù)據(jù)塊或校驗塊不同。
[0184]在網(wǎng)絡(luò)邏輯單元具有所支持的RAID類型時,該處理器801從多個網(wǎng)絡(luò)邏輯單元中確定用于存儲該數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,具體為:
[0185]從所述多個網(wǎng)絡(luò)邏輯單元中,確定支持所述RAID類型的網(wǎng)絡(luò)邏輯單元作為存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0186]在網(wǎng)絡(luò)邏輯單元有所支持的哈希值范圍時,該處理器801,還用于在從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元之前,計算該目標(biāo)數(shù)據(jù)的
第一哈希值;
[0187]相應(yīng)的,該處理器801從多個網(wǎng)絡(luò)邏輯單元中確定用于存儲該數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,具體為:
[0188]根據(jù)該第一哈希值,確定用于存儲該數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,該目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍包含所述第一哈希值。
[0189]進(jìn)一步的,當(dāng)網(wǎng)絡(luò)邏輯單元同時具有所支持的RAID類型以及哈希值范圍時,該處理器801從多個網(wǎng)絡(luò)邏輯單元中確定用于存儲該數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元具體為,將所支持的哈希值范圍包含該第一哈希值,且支持該數(shù)據(jù)切分單元對目標(biāo)數(shù)據(jù)進(jìn)行切分所依據(jù)RAID類型的網(wǎng)絡(luò)邏輯單元作為目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0190]當(dāng)網(wǎng)絡(luò)邏輯單元具有支持的文件名時,該處理器801從多個網(wǎng)絡(luò)邏輯單元中確定用于存儲該數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,具體為:根據(jù)目標(biāo)數(shù)據(jù)的第一文件名,確定用于存儲數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,該目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的文件名中包含所述第一文件名。
[0191]進(jìn)一步的,當(dāng)網(wǎng)絡(luò)邏輯單元同時具有所支持的RAID類型以及文件名時,該處理器801從多個網(wǎng)絡(luò)邏輯單元中確定用于存儲該數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,具體為:將所支持的文件名包含該目標(biāo)數(shù)據(jù)的第一文件名,且支持該數(shù)據(jù)切分單元對目標(biāo)數(shù)據(jù)進(jìn)行切分所依據(jù)RAID類型的網(wǎng)絡(luò)邏輯單元作為目標(biāo)網(wǎng)絡(luò)邏輯單元。
[0192]為了能夠關(guān)于對目標(biāo)數(shù)據(jù)的元數(shù)據(jù)信息進(jìn)行管理,該網(wǎng)絡(luò)存儲系統(tǒng)還包括元數(shù)據(jù)節(jié)點。相應(yīng)的,該處理器801,還用于將目標(biāo)數(shù)據(jù)與RAID類型的對應(yīng)關(guān)系發(fā)送至元數(shù)據(jù)節(jié)點,以在元數(shù)據(jù)節(jié)點中存儲對應(yīng)關(guān)系。
[0193]進(jìn)一步的,該處理器801,還用于從元數(shù)據(jù)節(jié)點中獲取該目標(biāo)數(shù)據(jù)與RAID類型的對應(yīng)關(guān)系,確定支持該RAID類型的目標(biāo)網(wǎng)絡(luò)邏輯單元,并向該目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元所在的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送讀取該目標(biāo)數(shù)據(jù)的請求,以便從多個目標(biāo)數(shù)據(jù)節(jié)點中得到數(shù)據(jù)塊和校驗塊。
[0194]本說明書中各個實施例采用遞進(jìn)的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的裝置而言,由于其與實施例公開的方法相對應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說明即可。
[0195]結(jié)合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實施。軟件模塊可以置于隨機(jī)存儲器(RAM)、內(nèi)存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、CD-ROM、或【技術(shù)領(lǐng)域】內(nèi)所公知的任意其它形式的存儲介質(zhì)中。
[0196]對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。
【權(quán)利要求】
1.一種網(wǎng)絡(luò)存儲系統(tǒng),其特征在于,所述系統(tǒng)包括一個客戶端和至少三個數(shù)據(jù)節(jié)點,所述數(shù)據(jù)節(jié)點之間通過網(wǎng)絡(luò)連接,所述客戶端與所述數(shù)據(jù)節(jié)點之間通過網(wǎng)絡(luò)連接; 其中,每個數(shù)據(jù)節(jié)點的存儲區(qū)域被劃分為至少一個存儲單元,得到位于所述至少三個數(shù)據(jù)節(jié)點中的多個存儲單元;所述多個存儲單元被劃歸為多個網(wǎng)絡(luò)邏輯單元; 所述客戶端,用于根據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分,得到校驗塊和至少兩個數(shù)據(jù)塊;從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,并將所述數(shù)據(jù)塊和校驗塊分別發(fā)送至所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中; 所述目標(biāo)數(shù)據(jù)節(jié)點,用于接收所述客戶端發(fā)送的數(shù)據(jù)塊和/或校驗塊,并將所述數(shù)據(jù)塊和/或校驗塊分別存儲至所述目標(biāo)數(shù)據(jù)節(jié)點中屬于所述目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元中,以使得所述目標(biāo)網(wǎng)絡(luò)邏輯單元的任一存儲單元內(nèi)均存儲有所述數(shù)據(jù)塊中的一個數(shù)據(jù)塊或所述校驗塊。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述網(wǎng)絡(luò)邏輯單元中所包含的多個存儲單元均屬于不同的數(shù)據(jù)節(jié)點。
3.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述客戶端,具體用于從所述多個網(wǎng)絡(luò)邏輯單元中,確定支持所述RAID類型的目標(biāo)網(wǎng)絡(luò)邏輯單元,以利用所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元存儲所述數(shù)據(jù)塊和所述校驗塊。
4.根據(jù)權(quán)利要求1或3所述的系統(tǒng),其特征在于,所述客戶端,具體用于計算所述目標(biāo)數(shù)據(jù)的第一哈希值,根據(jù)所述第一哈希值確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,所述目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍包含所述第一哈希值。
5.根據(jù)權(quán)利要求1或3所述的系統(tǒng),其特征在于,所述客戶端,具體用于根據(jù)所述目標(biāo)數(shù)據(jù)的第一文件名確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,所述目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的文件名中包`含所述第一文件名。
6.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述多個目標(biāo)數(shù)據(jù)節(jié)點中的至少一個目標(biāo)數(shù)據(jù)節(jié)點,還用于從所述多個目標(biāo)數(shù)據(jù)節(jié)點中,獲取所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的各個存儲單元對所述數(shù)據(jù)塊和校驗塊的存儲狀態(tài)信息,將獲取到的所述存儲狀態(tài)信息發(fā)送給其他目標(biāo)數(shù)據(jù)節(jié)點,使得各個目標(biāo)數(shù)據(jù)節(jié)點保存所述存儲狀態(tài)信息,其中,所述存儲狀態(tài)信息中包括各個存儲單元所存儲的數(shù)據(jù)塊或校驗塊的數(shù)量信息。
7.根據(jù)權(quán)利要求3所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括:元數(shù)據(jù)節(jié)點; 所述客戶端還用于:在根據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分,得到所述校驗塊和至少兩個數(shù)據(jù)塊之后,將所述目標(biāo)數(shù)據(jù)與所述RAID類型的對應(yīng)關(guān)系發(fā)送至所述元數(shù)據(jù)節(jié)占.所述元數(shù)據(jù)節(jié)點,用于存儲所述目標(biāo)數(shù)據(jù)與所述RAID類型的對應(yīng)關(guān)系。
8.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述客戶端,還用于從所述元數(shù)據(jù)節(jié)點中獲取所述目標(biāo)數(shù)據(jù)與所述RAID類型的對應(yīng)關(guān)系,確定支持所述RAID類型的所述目標(biāo)網(wǎng)絡(luò)邏輯單元,并向所述目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元所在的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送讀取所述目標(biāo)數(shù)據(jù)的請求; 所述目標(biāo)數(shù)據(jù)節(jié)點,還用于在接收到所述客戶端讀取所述目標(biāo)數(shù)據(jù)的請求時,從屬于所述目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元中讀取所存儲的所述目標(biāo)數(shù)據(jù)的數(shù)據(jù)塊和/或校驗塊,并將讀取到的數(shù)據(jù)塊和/或校驗塊發(fā)送給所述客戶端。
9.根據(jù)權(quán)利要求1、2、3或6任一項所述的系統(tǒng),其特征在于,所述目標(biāo)數(shù)據(jù)節(jié)點,還用于獲取所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的各個存儲單元對所述數(shù)據(jù)塊和校驗塊的存儲狀態(tài)信息;當(dāng)根據(jù)所述存儲狀態(tài)信息確定出所述目標(biāo)網(wǎng)絡(luò)邏輯單元中存在對所述數(shù)據(jù)塊或校驗塊存儲異常的存儲單元時,根據(jù)所述目標(biāo)網(wǎng)絡(luò)邏輯單元中未出現(xiàn)存儲異常的存儲單元內(nèi)所存儲的數(shù)據(jù)塊和校驗塊,恢復(fù)出所述出現(xiàn)存儲異常的存儲單元內(nèi)的數(shù)據(jù)塊或校驗塊,其中,所述存儲狀態(tài)信息中包括存儲單元所存儲的數(shù)據(jù)塊或校驗塊的數(shù)量信息。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述目標(biāo)數(shù)據(jù)節(jié)點具體用于,當(dāng)根據(jù)所述存儲狀態(tài)信息確定出所述目標(biāo)網(wǎng)絡(luò)邏輯單元中存在丟失所存儲的數(shù)據(jù)塊或校驗塊的第一存儲單元時,利用所述目標(biāo)網(wǎng)絡(luò)邏輯單元中未丟失所存儲的數(shù)據(jù)塊或校驗塊的各個存儲單元內(nèi)所存儲的數(shù)據(jù)塊和校驗塊,恢復(fù)出所述第一存儲單元內(nèi)所丟失的數(shù)據(jù)塊或校驗塊。
11.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于, 所述目標(biāo)數(shù)據(jù)節(jié)點具體用于,當(dāng)根據(jù)所述存儲狀態(tài)信息,確定出所述目標(biāo)網(wǎng)絡(luò)邏輯單元中存在所存儲的數(shù)據(jù)塊或校驗塊的數(shù)量多于一個的第二存儲單元時,利用所述目標(biāo)網(wǎng)絡(luò)邏輯單元中不屬于所述第二存儲單元的各個存儲單元內(nèi)所存儲的數(shù)據(jù)塊和校驗塊構(gòu)建出所述目標(biāo)數(shù)據(jù); 獲取所述客戶端切分所述目標(biāo)數(shù)據(jù)所依據(jù)的所述RAID類型,依據(jù)所述RAID類型對構(gòu)建出的所述目標(biāo)數(shù)據(jù)進(jìn)行重新切分,并依據(jù)重新切分得到的數(shù)據(jù)塊和校驗塊,確定所述第二存儲單元所應(yīng)存儲的數(shù)據(jù)塊或校驗塊。
12.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于, 所述目標(biāo)數(shù)據(jù)節(jié)點具體用于,當(dāng)根據(jù)所述存儲狀態(tài)信息,存在丟失所存儲的數(shù)據(jù)塊或校驗塊的第一存儲單元和存儲的數(shù)據(jù)塊或校驗塊的數(shù)量多于一個的第二存儲單元時,指示所述第二存儲單元所在的數(shù)據(jù)節(jié)點,將所述第二存儲單元中多出的數(shù)據(jù)塊或校驗塊發(fā)送至所述第一存儲單元所在的目標(biāo)數(shù)據(jù)節(jié)點,以便所述第一存儲單元所在的目標(biāo)數(shù)據(jù)節(jié)點將接收到的數(shù)據(jù)塊或校驗塊存儲至所述第一存儲單元。
13.一種數(shù)據(jù)處理方法,其特征在于,應(yīng)用于包括至少三個數(shù)據(jù)節(jié)點的網(wǎng)絡(luò)存儲系統(tǒng),所述數(shù)據(jù)節(jié)點之間通過網(wǎng)絡(luò)連接,所述數(shù)據(jù)節(jié)點的存儲區(qū)域被劃分為至少一個存儲單元,得到位于所述至少三個數(shù)據(jù)節(jié)點中的多個存儲單元,且所述多個存儲單元被劃歸為多個網(wǎng)絡(luò)邏輯單元,所述方法包括: 根據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分,得到校驗塊和至少兩個數(shù)據(jù)塊; 從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元; 將所述數(shù)據(jù)塊和校驗塊分別發(fā)送至所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中,以便所述目標(biāo)數(shù)據(jù)節(jié)點將接收到的數(shù)據(jù)塊和/或校驗塊存儲其屬于所述目標(biāo)網(wǎng)絡(luò)邏輯單元的存儲單元內(nèi),使得所述目標(biāo)網(wǎng)絡(luò)邏輯單元的任一存儲單元內(nèi)均存儲有所述數(shù)據(jù)塊中的一個數(shù)據(jù)塊或校驗塊。
14.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述網(wǎng)絡(luò)邏輯單元所包含的存儲單元均屬于不同的數(shù)據(jù)節(jié)點; 所述將所述數(shù)據(jù)塊和校驗塊分別發(fā)送至所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中,包括: 向所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中的任一目標(biāo)數(shù)據(jù)節(jié)點發(fā)送一個所述數(shù)據(jù)塊或一個所述校驗塊,且向不同的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送的數(shù)據(jù)塊或校驗塊不同。
15.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,包括: 從所述多個網(wǎng)絡(luò)邏輯單元中,確定支持所述RAID類型的網(wǎng)絡(luò)邏輯單元作為存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元。
16.根據(jù)權(quán)利要求13或15所述的方法,其特征在于,在所述從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元之前,還包括: 計算所述目標(biāo)數(shù)據(jù)的第一哈希值; 所述從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,包括: 根據(jù)所述第一哈希值,確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,所述目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍包含所述第一哈希值。
17.根據(jù)權(quán)利要求13或15所述的方法,其特征在于,所述從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,包括: 根據(jù)所述目標(biāo)數(shù)據(jù)的第一文件名,確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,所述目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的文件名中包含所述第一文件名。
18.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述網(wǎng)絡(luò)存儲系統(tǒng)還包括元數(shù)據(jù)節(jié)點; 在所述根據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分,得到校驗塊和至少兩個數(shù)據(jù)塊之后,還包括: 將所述目標(biāo)數(shù)據(jù)與所述RAID類型的對應(yīng)關(guān)系發(fā)送至所述元數(shù)據(jù)節(jié)點,以在所述元數(shù)據(jù)節(jié)點中存儲所述對應(yīng)關(guān)系。
19.根據(jù)權(quán)利要求18所述的方法,其特征在于,還包括: 從所述元數(shù)據(jù)節(jié)點中獲取所述目標(biāo)數(shù)據(jù)與所述RAID類型的對應(yīng)關(guān)系,確定支持所述RAID類型的所述目標(biāo)網(wǎng)絡(luò)邏輯單元,并向所述目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元所在的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送讀取所述目標(biāo)數(shù)據(jù)的請求,以便從所述多個目標(biāo)數(shù)據(jù)節(jié)點中得到所述數(shù)據(jù)塊和校驗塊。
20.一種客戶端,其特征在于,所述客戶端應(yīng)用于包括至少三個數(shù)據(jù)節(jié)點的網(wǎng)絡(luò)存儲系統(tǒng),所述數(shù)據(jù)節(jié)點之間通過網(wǎng)絡(luò)連接,所述數(shù)據(jù)節(jié)點的存儲區(qū)域被劃分為至少一個存儲單元,得到位于所述至少三個數(shù)據(jù)節(jié)點中的多個存儲單元,且所述多個存儲單元被劃歸為多個網(wǎng)絡(luò)邏輯單元;所述客戶端包括處理器、存儲器、通信接口和通信總線; 所述處理器、存儲器和所述通信接口通過所述通信總線進(jìn)行通信; 其中,所述處理器用于根據(jù)設(shè)定的RAID類型對目標(biāo)數(shù)據(jù)進(jìn)行切分,得到校驗塊和至少兩個數(shù)據(jù)塊;從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元;將所述數(shù)據(jù)塊和校驗塊分別發(fā)送至所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中; 所述存儲器用于存儲包含有所述處理器運(yùn)行的程序的信息。
21.根據(jù)權(quán)利要求20所述的客戶端,其特征在于,當(dāng)所述網(wǎng)絡(luò)邏輯單元所包含的存儲單元均屬于不同的數(shù)據(jù)節(jié)點時,所述處理器從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,具體為: 向所述目標(biāo)網(wǎng)絡(luò)邏輯單元中的多個存儲單元所在的多個目標(biāo)數(shù)據(jù)節(jié)點中的任一目標(biāo)數(shù)據(jù)節(jié)點發(fā)送一個所述數(shù)據(jù)塊或一個所述校驗塊,且向不同的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送的數(shù)據(jù)塊或校驗塊不同。
22.根據(jù)權(quán)利要求20所述的客戶端,其特征在于,所述處理器從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,具體為: 從所述多個網(wǎng)絡(luò)邏輯單元中,確定支持所述RAID類型的網(wǎng)絡(luò)邏輯單元作為存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元。
23.根據(jù)權(quán)利要求20或22所述的客戶端,其特征在于,所述處理器,還用于在所述從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲 所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元之前,計算所述目標(biāo)數(shù)據(jù)的第一哈希值; 相應(yīng)的,所述處理器從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,具體為: 根據(jù)所述第一哈希值,確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,所述目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的哈希值范圍包含所述第一哈希值。
24.根據(jù)權(quán)利要求20或22所述的客戶端,其特征在于,所述處理器從所述多個網(wǎng)絡(luò)邏輯單元中確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,具體為: 根據(jù)所述目標(biāo)數(shù)據(jù)的第一文件名,確定用于存儲所述數(shù)據(jù)塊和校驗塊的目標(biāo)網(wǎng)絡(luò)邏輯單元,所述目標(biāo)網(wǎng)絡(luò)邏輯單元所支持的文件名中包含所述第一文件名。
25.根據(jù)權(quán)利要求20所述的客戶端,其特征在于,所述網(wǎng)絡(luò)存儲系統(tǒng)還包括元數(shù)據(jù)節(jié)占.所述處理器,還用于將所述目標(biāo)數(shù)據(jù)與所述RAID類型的對應(yīng)關(guān)系發(fā)送至所述元數(shù)據(jù)節(jié)點,以在所述元數(shù)據(jù)節(jié)點中存儲所述對應(yīng)關(guān)系。
26.根據(jù)權(quán)利要求25所述的客戶端,其特征在于,所述處理器,還用于從所述元數(shù)據(jù)節(jié)點中獲取所述目標(biāo)數(shù)據(jù)與所述RAID類型的對應(yīng)關(guān)系,確定支持所述RAID類型的所述目標(biāo)網(wǎng)絡(luò)邏輯單元,并向所述目標(biāo)網(wǎng)絡(luò)邏輯單元的各個存儲單元所在的目標(biāo)數(shù)據(jù)節(jié)點發(fā)送讀取所述目標(biāo)數(shù)據(jù)的請求,以便從所述多個目標(biāo)數(shù)據(jù)節(jié)點中得到所述數(shù)據(jù)塊和校驗塊。
【文檔編號】H04L12/24GK103535014SQ201380000732
【公開日】2014年1月22日 申請日期:2013年4月23日 優(yōu)先權(quán)日:2013年4月23日
【發(fā)明者】程菊生 申請人:華為技術(shù)有限公司