新四季網

一種網絡存儲系統、數據處理方法和客戶端的製作方法

2023-09-20 17:58:05

一種網絡存儲系統、數據處理方法和客戶端的製作方法
【專利摘要】本發明公開了一種網絡存儲系統、數據處理方法和客戶端,該系統包括一個客戶端和至少三個數據節點,每個數據節點的存儲區域被劃分為至少一個存儲單元,得到位於該至少三個數據節點中的多個存儲單元,且多個存儲單元被劃歸為多個網絡邏輯單元。該客戶端將根據設定的RAID類型對目標數據進行切分得到的校驗塊和至少兩個數據塊,發送至所述目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中;目標數據節點接收所述客戶端發送的數據塊和/或校驗塊,並將所述數據塊和/或校驗塊分別存儲至所述目標數據節點中屬於所述目標網絡邏輯單元的存儲單元中。通過該系統可以提高數據存儲的安全性和可靠性。
【專利說明】一種網絡存儲系統、數據處理方法和客戶端
【技術領域】
[0001]本發明涉及數據存儲領域,尤其涉及一種網絡存儲系統、數據處理方法和客戶端。【背景技術】
[0002]分布式存儲系統,就是將數據分散存儲在多臺獨立的設備上。傳統的網絡存儲系統採用集中的存儲伺服器存放所有數據,存儲伺服器成為系統性能的瓶頸,不能滿足大規模存儲應用的需要。分布式網絡存儲系統採用可擴展的系統結構,利用多臺存儲伺服器分擔存儲負荷,它不但提高了系統的可靠性、可用性和存取效率,還易於擴展。分布式系統是由若干個獨立的數據節點組成的集合,每個數據節點可以是一個存儲伺服器。在分布式系統中各個數據節點中均可以進行數據存儲且數據節點可以通過網絡訪問系統中其他數據節點上所存儲的數據。
[0003]在實際應用中,當需要獲取分布式系統中的特定數據時,首先需要確定出該數據所在的數據節點位置,進而從該數據節點中獲取到相應的數據。但是,當某數據節點的硬碟或者該數據節點出現故障時,則可能會導致該數據節點上所存儲的數據丟失,進而影響到對相應數據的正常訪問。可見,如何使得分布式系統的數據安全性,提高分布式系統的可靠性是本領域技術人員迫切需要解決的技術問題。

【發明內容】

[0004]有鑑於此,本發明提供一種網絡存儲系統、數據處理方法和客戶端,以提高數據存儲的安全性和可靠性。
[0005]為實現上述目的,本發明提供了如下技術方案:
[0006]本發明的第一方面提供了一種網絡存儲系統,所述系統包括一個客戶端和至少三個數據節點,所述數據節點之間通過網絡連接,所述客戶端與所述數據節點之間通過網絡連接;
[0007]其中,每個數據節點的存儲區域被劃分為至少一個存儲單元,得到位於所述至少三個數據節點中的多個存儲單元;所述多個存儲單元被劃歸為多個網絡邏輯單元;
[0008]所述客戶端,用於根據設定的RAID類型對目標數據進行切分,得到校驗塊和至少兩個數據塊;從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,並將所述數據塊和校驗塊分別發送至所述目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中;
[0009]所述目標數據節點,用於接收所述客戶端發送的數據塊和/或校驗塊,並將所述數據塊和/或校驗塊分別存儲至所述目標數據節點中屬於所述目標網絡邏輯單元的存儲單元中,以使得所述目標網絡邏輯單元的任一存儲單元內均存儲有所述數據塊中的一個數據塊或所述校驗塊。
[0010]結合第一方面,在第一種可能的實現方式中,所述網絡邏輯單元中所包含的多個存儲單元均屬於不同的數據節點。[0011]結合第一方面,在第二種可能的實現方式中,所述客戶端,具體用於從所述多個網絡邏輯單元中,確定支持所述RAID類型的目標網絡邏輯單元,以利用所述目標網絡邏輯單元中的多個存儲單元存儲所述數據塊和所述校驗塊。
[0012]結合第一方面或者第一方面的第二種可能實現方式,在第三種可能的實現方式中,所述客戶端,具體用於計算所述目標數據的第一哈希值,根據所述第一哈希值確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,所述目標網絡邏輯單元所支持的哈希值範圍包含所述第一哈希值。
[0013]結合第一方面或者第一方面的第二種可能實現方式,在第四種可能的實現方式中,所述客戶端,具體用於根據所述目標數據的第一文件名確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,所述目標網絡邏輯單元所支持的文件名中包含所述第一文件名。
[0014]結合第一方面,在第五種可能的實現方式中,所述多個目標數據節點中的至少一個目標數據節點,還用於從所述多個目標數據節點中,獲取所述目標網絡邏輯單元中的各個存儲單元對所述數據塊和校驗塊的存儲狀態信息,將獲取到的所述存儲狀態信息發送給其他目標數據節點,使得各個目標數據節點保存所述存儲狀態信息,其中,所述存儲狀態信息中包括各個存儲單元所存儲的數據塊或校驗塊的數量信息。
[0015]結合第一方面的第二種可能的實現方式,在第六種可能的實現方式中,所述系統還包括:元數據節點;
[0016]所述客戶端還用於:在根據設定的RAID類型對目標數據進行切分,得到所述校驗塊和至少兩個數據塊之後,將所述目標數據與所述RAID類型的對應關係發送至所述元數據節點;
[0017]所述元數據節點,用於存儲所述目標數據與所述RAID類型的對應關係。
[0018]結合第一方面的第六種可能的實現方式,在第七種可能的實現方式中,所述客戶端,還用於從所述元數據節點中獲取所述目標數據與所述RAID類型的對應關係,確定支持所述RAID類型的所述目標網絡邏輯單元,並向所述目標網絡邏輯單元的各個存儲單元所在的目標數據節點發送讀取所述目標數據的請求;
[0019]所述目標數據節點,還用於在接收到所述客戶端讀取所述目標數據的請求時,從屬於所述目標網絡邏輯單元的存儲單元中讀取所存儲的所述目標數據的數據塊和/或校驗塊,並將讀取到的數據塊和/或校驗塊發送給所述客戶端。
[0020]結合第一方面、或者第一方面的第一種可能的實現方式、或者第一方面的第二種實現方式、或者第一方面的第五種可能的實現方式,在第八種可能的實現方式中,所述目標數據節點,還用於獲取所述目標網絡邏輯單元中的各個存儲單元對所述數據塊和校驗塊的存儲狀態信息;當根據所述存儲狀態信息確定出所述目標網絡邏輯單元中存在對所述數據塊或校驗塊存儲異常的存儲單元時,根據所述目標網絡邏輯單元中未出現存儲異常的存儲單元內所存儲的數據塊和校驗塊,恢復出所述出現存儲異常的存儲單元內的數據塊或校驗塊,其中,所述存儲狀態信息中包括存儲單元所存儲的數據塊或校驗塊的數量信息。
[0021 ] 本發明的第二方面提供了 一種數據處理方法,所述方法應用於包括至少三個數據節點的網絡存儲系統,所述數據節點之間通過網絡連接,所述數據節點的存儲區域被劃分為至少一個存儲單元,得到位於所述至少三個數據節點中的多個存儲單元,且所述多個存儲單元被劃歸為多個網絡邏輯單元,所述方法包括:
[0022]根據設定的RAID類型對目標數據進行切分,得到校驗塊和至少兩個數據塊;
[0023]從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元;
[0024]將所述數據塊和校驗塊分別發送至所述目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中,以便所述目標數據節點將接收到的數據塊和/或校驗塊存儲其屬於所述目標網絡邏輯單元的存儲單元內,使得所述目標網絡邏輯單元的任一存儲單元內均存儲有所述數據塊中的一個數據塊或校驗塊。
[0025]結合第二方面,在第一種可能的實現方式中,所述網絡邏輯單元所包含的存儲單元均屬於不同的數據節點;
[0026]所述將所述數據塊和校驗塊分別發送至所述目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中,包括:
[0027]向所述目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中的任一目標數據節點發送一個所述數據塊或一個所述校驗塊,且向不同的目標數據節點發送的數據塊或校驗塊不同。
[0028]結合第二方面,在第二種可能的實現方式中,所述從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,包括:
[0029]從所述多個網絡邏輯單元中,確定支持所述RAID類型的網絡邏輯單元作為存儲所述數據塊和校驗塊的目標網絡邏輯單元。
[0030]結合第二方面或者第二方面的第二種可能的實現方式,在第三種可能的實現方式中,在所述從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元之前,還包括:
[0031]計算所述目標數據的第一哈希值;
[0032]所述從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,包括:
[0033]根據所述第一哈希值,確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,所述目標網絡邏輯單元所支持的哈希值範圍包含所述第一哈希值。
[0034]結合第二方面或者第二方面的第二種可能的實現方式,在第四種可能的實現方式中,所述從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,包括:
[0035]根據所述目標數據的第一文件名,確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,所述目標網絡邏輯單元所支持的文件名中包含所述第一文件名。
[0036]本發明的第三方面還提供了一種客戶端,所述客戶端應用於包括至少三個數據節點的網絡存儲系統,所述數據節點之間通過網絡連接,所述數據節點的存儲區域被劃分為至少一個存儲單元,得到位於所述至少三個數據節點中的多個存儲單元,且所述多個存儲單元被劃歸為多個網絡邏輯單元;所述客戶端至少包括處理器、存儲器、通信接口和通信總線.-^4 ,
[0037]其中,所述處理器、存儲器和所述通信接口通過所述通信總線進行通信;
[0038]所述處理器用於根據設定的RAID類型對目標數據進行切分,得到校驗塊和至少兩個數據塊;從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元;將所述數據塊和校驗塊分別發送至所述目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中;
[0039]所述存儲器用於存儲包含有所述處理器運行的程序的信息。
[0040]結合本發明的第三方面,在第一種可能的實現方式中,當所述網絡邏輯單元所包含的存儲單元均屬於不同的數據節點時,所述處理器從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,具體為:
[0041]向所述目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中的任一目標數據節點發送一個所述數據塊或一個所述校驗塊,且向不同的目標數據節點發送的數據塊或校驗塊不同。
[0042]結合本發明的第三方面,在第二種可能的實現方式中,所述處理器從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,具體為:
[0043]從所述多個網絡邏輯單元中,確定支持所述RAID類型的網絡邏輯單元作為存儲所述數據塊和校驗塊的目標網絡邏輯單元。
[0044]結合本發明的第三方面或者第三方面的第二種可能的實現方式,在第三種可能的實現方式中,所述處理器,還用於在所述從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元之前,計算所述目標數據的第一哈希值;
[0045]相應的,所述處理器從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,具體為:
[0046]根據所述第一哈希值,確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,所述目標網絡邏輯單元所支持的哈希值範圍包含所述第一哈希值。
[0047]結合本發明的第三方面或者第三方面的第二種可能的實現方式,在第四種可能的實現方式中,所述處理器從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,具體為:
[0048]根據所述目標數據的第一文件名,確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,所述目標網絡邏輯單元所支持的文件名中包含所述第一文件名。
[0049]結合本發明的第三方面,在第五種可能的實現方式中,所述網絡存儲系統還包括元數據節點;
[0050]所述處理器,還用於將所述目標數據與所述RAID類型的對應關係發送至所述元數據節點,以在所述元數據節點中存儲所述對應關係。
[0051]結合本發明的第三方面,在第六種可能的實現方式中,所述處理器,還用於從所述元數據節點中獲取所述目標數據與所述RAID類型的對應關係,確定支持所述RAID類型的所述目標網絡邏輯單元,並向所述目標網絡邏輯單元的各個存儲單元所在的目標數據節點發送讀取所述目標數據的請求,以便從所述多個目標數據節點中得到所述數據塊和校驗塊。
[0052]從上述的技術方案可以看出,本發明實施例公開一種網絡存儲系統、數據處理方法和客戶端,由於當客戶端將切分得到的這些該數據塊和校驗塊分別存儲至目標網絡邏輯單元中位於多個目標數據節點內的多個存儲單元後,目標網絡邏輯單元的各個存儲單元內所存儲的數據塊和校驗塊之間也存在冗餘關係。這樣,當由於目標數據節點發生故障,使得某一個或幾個存儲單元中所存儲數據塊或校驗塊出現丟失或損壞等異常狀況時,利用未發生故障的目標數據節點中屬於該目標網絡邏輯單元的存儲單元中所存儲的數據塊和校驗塊,便可以恢復出出現異常的數據塊或校驗塊,從而減少了數據損壞後不能恢復的情況,提高了系統數據存儲的安全性和可靠性。
【專利附圖】

【附圖說明】
[0053]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的實施例,對於本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據提供的附圖獲得其他的附圖。
[0054]圖1為本發明一種網絡存儲系統一個實施例的結構示意圖;
[0055]圖2示出了發明中網絡邏輯單元的組成以及向網絡邏輯單元的存儲單元中存儲數據塊或校驗塊的示意圖;
[0056]圖3為示出了該目標網絡邏輯單元對各個目標數據的校驗塊和數據塊的存儲情況示意圖;
[0057]圖4示出了目標網絡邏輯單元中的存儲單元出現存儲故障以及故障恢復後,對數據塊和校驗塊存儲狀態的對比示意圖;
[0058]圖5示出了本發明一種網絡存儲系統另一個實施例的結構示意圖;
[0059]圖6示出了本發明一種數據處理方法一個實施例的流程示意圖;
[0060]圖7示出了本發明中客戶端進行數據讀取的流程交互示意圖;
[0061]圖8示出了本發明一種客戶端一個實施例的結構示意圖。
【具體實施方式】
[0062]下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基於本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬於本發明保護的範圍。
[0063]本發明公開了一種網絡存儲系統、數據處理方法和客戶端,以提高系統中數據存儲的安全性以及可靠性。
[0064]參見圖1,示出了本發明一種網絡存儲系統一個實施例的結構示意圖,本實施例的系統包括一個客戶端101和至少三個數據節點102。各個數據節點之間通過網絡連接,該客戶端與各個數據節點之間也通過網絡連接。其中,連接各個數據節點以及數據節點與客戶端的網絡可以是網際網路internet、網際網路協議存儲區域網絡(IP SAN, Internet ProtocolStorage Area Network)以及私有網絡等等。
[0065]在本實施例中,每個數據節點102的存儲區域被劃分為至少一個存儲單元,得到位於該至少三個數據節點中的多個存儲單元。系統中的這多個存儲單元被劃歸為多個網絡邏輯單元(NLUN, Network Logical Unit Name)。將多個存儲單元劃歸為多個網絡邏輯單元,實際上是構建出了系統中的多個網絡邏輯單元。其中,每個網絡邏輯單元中至少包含三個存儲單元,且網絡邏輯單元內所包含的存儲單元不能全部位於同一個數據節點。網絡邏輯單元也可以稱為網絡卷,它實際上可以理解為其各個存儲單元分布在網絡中的多個數據節點內的一個存儲系統。
[0066]可以理解的是,不同的網絡邏輯單元所包含的存儲單元的數量也可能不同。為了構建各個網絡邏輯單元,可以預先設定各個網絡邏輯單元中所包含的存儲單元的數量,網絡邏輯單元所包含的存儲單元的數量也就是構建該網絡邏輯單元所需的存儲單元的數量。這樣,根據構建各個網絡邏輯單元所需的存儲單元的數量,可以將系統中的多個存儲單元分別劃歸為系統中需要構建的各個網絡邏輯單元內,從而構建出多個由不同數量的存儲單元組成的網絡邏輯單元。具體的,可以依據負載均衡原則,如依據Crush算法、偽隨機算法、輪巡算法或者是其他負載均衡算法,並依據構建各個網絡邏輯單元所需的存儲單元的數量,從系統中選擇滿足條件的存儲單元來組成各個網絡邏輯單元。
[0067]其中,一個存儲單元僅可以被劃歸為一個網絡邏輯單元,當該存儲單元被劃歸到一個網絡邏輯單元後,該存儲單元便不能被劃歸到其他的網絡邏輯單元中。這樣,對於任意一個網絡邏輯單元而言,當該網絡邏輯單元所包含的存儲單元的數量確定後,可以按照負載均衡的原則,從系統中的未被劃歸至其他網絡邏輯單元的多個存儲單元中,選擇負載量低於其他存儲單元且與構建該網絡邏輯單元所需的存儲單元的數量相同數量的存儲單元來構建該網絡邏輯單元。
[0068]例如,假設系統中存在數據節點A、數據節點B、數據節點C和數據節點D。其中,將數據節點A的存儲區域劃分為2個存儲單元,將數據節點B的存儲區域劃分為4個存儲單元,將數據節點C的整個存儲區域作為一個存儲單元,將數據節點D的存儲區域劃分為2個存儲區域,從而得到位於這4個數據節點中的9個存儲單元。假設系統中構建網絡邏輯單元M需要4個存儲單元,構建網絡邏輯單元N需要5個存儲單元,則可以將這9個存儲單元中的4個存儲單元劃歸為網絡邏輯單元M,將剩餘的5個網絡邏輯單元劃歸為網絡邏輯單元N。根據負載均衡原則,在構建網絡邏輯單元M時,可以是從系統中負載相對較小的4個存儲單元來構成該網絡邏輯單元M,如假設將數據節點A中的2個存儲單元以及數據節點B的I個存儲單元以及數據節點D的I個存儲單元劃歸為網絡邏輯單元M,則網絡邏輯單元M的存儲區域實際上是由位於數據節點A的2個存儲單元,以及位於數據節點B的I個存儲單元和位於數據節點D的I個存儲單元構成。而網絡邏輯單元N需要5個存儲單元,則可以將剩餘的5個存儲單元劃歸為網絡邏輯單元N,如果構建出網絡邏輯單元M之後,系統剩餘的存儲單元大於5個,則仍需要選擇5個負載較小的存儲單元來構成該網絡邏輯單元N。但是需要注意的是,網絡邏輯單元M的4個存儲單元不能都是數據節點B中的4個存儲單元,以避免出現網絡邏輯單元中的所有存儲單元均位於同一個數據節點的情況出現。
[0069]為了在系統中某一個或幾個數據節點發生故障導致數據節點中所存儲的數據出現丟失或損壞等異常後,能夠恢復出出現異常的數據,在客戶端向系統進行數據存儲前,需要將待存儲的目標數據按照RAID類型進行切分之後,再將切分後的數據塊和校驗塊存儲至系統的網絡邏輯單元所包含的存儲單元中。
[0070]具體的,該客戶端101,用於根據設定的RAID類型對目標數據進行切分,得到校驗塊和至少兩個數據塊;從系統的多個網絡邏輯單元中確定用於存儲該數據塊和校驗塊的目標網絡邏輯單元,並將數據塊和校驗塊分別發送至該目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中。[0071]相應的,目標數據節點,用於接收該客戶端發送的數據塊和/或校驗塊,並將所述數據塊和/或校驗塊分別存儲至該目標數據節點中屬於該目標網絡邏輯單元的存儲單元中,以使得該目標網絡邏輯單元的任一存儲單元內均存儲有該切分得到的數據塊中的一個數據塊或者是校驗塊。
[0072]其中,該目標數據可以為一個文件,如文檔、圖片、程序數據等,也可以是文件中的一部分數據。
[0073]客戶端根據設定的RAID類型對目標數據進行切分時,可以按照與該RAID類型對應的RAID算法來對目標數據進行切分。在客戶端中可以設定有多種RAID類型,如RAID類型可以包括RAIDl、RAID5、RAID6等等,RAID類型還可以具體的以RAIDn+m的形式表示,其中,η表示數據塊的數量,m表示校驗塊的數量。例如,RAID5可以包括RAID3+2、RAID4+1等。在客戶端對目標數據進行切分時,不同的目標數據所依據的RAID類型也可能不同,具體的可以依據目標數據所需的保護級別來選擇所依據的RAID類型。
[0074]客戶端依據設定的RAID類型對目標數據進行切分後,得到至少兩個數據塊和至少一個校驗塊,這些切分得到的數據塊和校驗塊之間冗餘關係,當出現數據塊或校驗塊丟失或損壞等異常情況下時,利用其他未出現異常的數據塊和校驗塊便可以重新恢復出丟失或損壞等異常的數據塊或校驗塊。同時,客戶端對目標數據進行切分時所依據的RAID類型,也決定了對目標數據進行切分後得到的數據塊和校驗塊的數量。如,當依據RAID3+2對目標數據進行切分時,得到該目標數據的3個數據塊和2個校驗塊;當依據RAID3+1對目標數據進行切分時,則得到該目標數據的3個數據塊和I個校驗塊。
[0075]為了能夠將切分得到的這些數據塊和校驗塊分別存儲至網絡邏輯單元所包含的各個存儲單元內,客戶端需要從系統中的多個網絡邏輯單元中確定用於存儲切分得到的數據塊和校驗塊的目標網絡邏輯單元。其中,客戶端確定出的該目標網絡邏輯單元中所包含的存儲單元的數量與客戶端對目標數據進行切分後得到的數據塊和校驗塊的總數量相同,以使得後續目標網絡邏輯單元中的任意一個存儲單元內均可以存儲一個數據塊或一個校驗塊,且不同的存儲單元內所存儲的數據塊或校驗塊不同。如,客戶端對目標數據進行切分得到3個數據塊和一個校驗塊,則需要包含有4個存儲單元的網絡邏輯單元作為目標網絡邏輯單元,以使得後續可以將這些數據塊和校驗塊分別存儲至該目標網絡邏輯單元的4個存儲單元中,使得一個存儲單元內僅存儲有一個數據塊或校驗塊。
[0076]當客戶端將切分得到的這些該數據塊和校驗塊分別存儲至目標網絡邏輯單元中位於多個目標數據節點內的多個存儲單元後,目標網絡邏輯單元的各個存儲單元內所存儲的數據塊和校驗塊之間也存在冗餘關係,當由於目標數據節點發生故障,使得某一個或幾個存儲單元中所存儲數據塊或校驗塊出現丟失或損壞等異常狀況時,利用未發生故障的目標數據節點中屬於該目標網絡邏輯單元的存儲單元中所存儲的數據塊和校驗塊便可以恢復出出現異常的數據塊或校驗塊。
[0077]當然,在客戶端中可以存儲有系統中所構建的各個網絡邏輯單元的分布信息,如網絡邏輯單元包含有哪些存儲單元,以及各個存儲單元位於哪些數據節點,以便於確定出目標網絡邏輯單元後,可以向相應的數據節點發送數據塊或校驗塊。
[0078]在本實施例的網絡存儲系統包括客戶端和至少三個數據節點,每個數據節點的存儲區域均被劃分為至少一個存儲單元,得到位於這至少三個數據節點中的多個存儲單元,且這多個存儲單元被劃歸為多個網絡邏輯單元。客戶端依據設定的RAID類型對目標數據切分得到校驗塊和至少兩個數據塊,將切分得到的數據塊和校驗塊分別存儲至目標網絡邏輯單元中位於多個目標數據節點內的各個存儲單元中。由於數據塊和校驗塊是依據RAID類型切分得到的,使得目標網絡邏輯單元中各個存儲單元所存儲的數據塊和校驗塊之間存在冗餘關係,當有目標數據節點出現故障而導致一個或多個存儲單元內出現數據塊或校驗塊丟失或者損壞等異常情況時,則可以利用該目標網絡邏輯單元中未出現存異常的存儲單元內所存儲的數據塊和校驗塊重新恢復出出現異常情況的數據塊,從而降低了系統數據損壞後的不可恢復性,提高了系統數據存儲的安全性。
[0079]在以上實施例中,一個數據節點內可能會存在兩個或兩個以上存儲單元被劃歸為同一個網絡邏輯單元的情況。相應的,對於客戶端確定的目標網絡單元而言,該目標網絡邏輯單元中也可能會存在兩個或多個存儲單元位於同一個目標數據節點的情況。客戶端將切分得到的至少兩個數據塊和至少一個數據塊分別發送至該目標網絡邏輯單元所包含的多個存儲單元所在的目標數據節點後,如果目標數據節點只包含一個屬於該目標網絡邏輯單元的存儲單元,則該目標數據節點則會接收到一個數據塊或一個校驗塊;如果該目標數據節點中有兩個或多個屬於該目標網絡邏輯單元的存儲單元,則該目標數據節點則接收並存儲的數據塊和校驗塊的總數量也會是兩個或多個。例如,目標數據節點中有兩個存儲單元屬於該目標網絡邏輯單元時,則該目標數據節點可能會接收到客戶端發送的兩個數據塊,或者接收到客戶端發送的兩個校驗塊,或者是一個數據塊和一個校驗塊。
[0080]如果目標數據節點中有兩個或多個存儲單元屬於該目標網絡邏輯單元時,該目標數據節點中存儲的數據塊和校驗塊的總數量將大於或等於兩個,這樣當該目標數據節點發生故障時,則可能會導致兩個或多個存儲單元內所存儲的數據塊或校驗塊出現丟失或損壞等異常狀態。而出現丟失或損壞等異常狀態的數據塊和校驗塊的數量較多時,則會給數據恢復帶來困難,甚至導致無法恢復出出現異常的數據塊或校驗塊的情況。
[0081]為了進一步提高系統中數據存儲的安全性和可靠性,對於任意一個網絡邏輯單元,網絡邏輯單元中所包含的多個存儲單元均位於不同的數據節點。因此,在構建網絡邏輯單元時,根據構建的網絡邏輯單元所需的存儲單元的數量,則從系統選取相應數量的數據節點,並從選取出的任一數據節點中選取一個存儲單元,從而得到構建該網絡邏輯單元所需數量的存儲單元。
[0082]為了便於理解構建網絡邏輯單元的過程,下面結合一個實例進行介紹,參見圖2,示出了本申請中網絡邏輯單元組成示意圖,以系統中包含有5個數據節點為例,每個數據節點的存儲區域均被劃分為三個存儲單元,如圖2中數據節點上方的矩形條狀區域為存儲區域,而在該存儲區域內的各個圓柱體代表是劃分出的各個存儲單元。
[0083]以需要構建的網絡邏輯單元包括:網絡邏輯單元NLUNl和網絡邏輯單元NLUN2為例,其中,網絡邏輯單元NLUNl的RAID類型為:RAID3+2 (即3個數據塊,2個校驗塊);網絡邏輯單元NLUN2的RAID類型為:RAID3+1 (即3個數據塊,I個校驗塊),則根據網絡邏輯單元NLUNl所支持的RAID類型,該NLUNl需要包含5個存儲單元。根據負載均衡選擇,分別從5個數據節點中選擇負載最低的5個存儲單元。首先從數據節點I中選擇負載最低的存儲單元,假設為第二個存儲單元(在該例中以從上至下順序為例);然後從數據節點2中選擇該數據節點2中負載最低的存儲單元,設為第三個存儲單元,依此類推。最終構建出的NLUN2所包含的存儲單元分別為數據節點I中的第二個存儲單元、數據節點2中的第三個存儲單元、數據節點3中的第一個存儲單元,數據節點4中的第一個存儲單元和數據節點5中的第三個存儲單元,如圖2中粗體黑線的圓柱體所表示的存儲單元為NLUNl所包含的存儲單元。構建出該NLUNl之後,可以從剩餘的存儲單元中選擇存儲單元來構建網絡邏輯單元NLUN2,NLUN2的RAID類型對應的存儲單元數量為4個,具體構建NLUN2的過程與構建NLUNl相同,假設構建出的NLUN2所包含的4個存儲單元為圖2中位於虛線框內的4個存儲單元。
[0084]由於目標網絡邏輯單元所包含的多個存儲單元均位於不同的數據節點,客戶端需要向目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中的任一目標數據節點發送一個數據塊或一個校驗塊,且向不同的目標數據節點發送的數據塊或校驗塊不同。相應的,任意一個目標數據節點僅接收到客戶端發送至一個數據塊或校驗塊,並將接收到的數據塊或校驗塊存儲至該目標數據節點中屬於目標網絡邏輯單元的存儲單元中。這樣,如果一個目標數據節點發送故障,只會導致該目標網絡邏輯單元中一個存儲單元內的數據塊或校驗塊出現異常,從而減少了出現異常的數據量,提高了數據可恢復性,進而提高了數據存儲的安全性。
[0085]在實際應用中,為了能夠便於區分出各個網絡邏輯單元所包含的存儲單元的數量,並使得同一網絡邏輯單元的各個存儲單元內所存儲的數據具有相同的屬性,系統還分別設置了各個網絡邏輯單元所支持的RAID類型,使得任意一個網絡邏輯單元具有一個所支持的RAID類型。
[0086]其中,設置網絡邏輯單元所支持的RAID類型可以理解為為網絡邏輯單元分配或指定一個RAID類型,其目的是使得客戶端後續向該網絡邏輯單元的存儲單元中存儲依據該網絡邏輯塊單元所支持的RAID類型切分得到的數據塊和校驗塊,以使得存儲在同一個網絡邏輯單元的存儲單元內數據塊和校驗塊均是依據相同的RAID類型切分得到的。
[0087]可見,為了在網絡邏輯單元所包含的存儲單元中可以存儲依據該網絡邏輯單元所支持的RAID類型切分得到的數據塊和校驗塊,網絡邏輯單元所包含的存儲單元的數量應該與依據RAID類型對目標數據切分得到的數據塊和校驗塊的總數量。當系統為一個網絡邏輯單元分配了一個RAID類型後,該網絡邏輯單元所需包含的存儲單元的數量也是確定的。因此,在構建網絡邏輯單元時,可以參照為網絡邏輯單元分配的RAID類型,確定構建該網絡邏輯單元所需的存儲單元的數量,並從系統的多個存儲單元中選擇相應數量的存儲單元來組成該網絡邏輯單元。
[0088]相應的,該客戶端,具體用於從多個網絡邏輯單元中,確定支持對目標數據切分時所依據的RAID類型的目標網絡邏輯單元,以利用該目標網絡邏輯單元中的多個存儲單元存儲切分得到的數據塊和校驗塊。這樣,客戶端所確定的目標網絡邏輯單元具有所包含的存儲單元的數量與對目標數據切分得到的數據塊和校驗塊的總數量相同,且所支持的RAID類型與客戶端對目標數據進行切分所依據的RAID類型相同兩個特徵。
[0089]為了便於理解,仍以圖2為例,在該圖中還示出了網絡邏輯單元中存儲數據塊和校驗塊的示意圖,假設系統中存在三個網絡邏輯單元,除了上面例子中提到的網絡邏輯單元NLUNl和網絡邏輯單元NLUN2外,還存在網絡邏輯單元NLUN3,其中,NLUNl支持的RAID類型為RAID3+2,其所包含的存儲單元為如圖2中粗體黑線的圓柱體所表示的存儲單元。NLUN2支持RAID3+1,其包含有4個存儲單元,如圖中虛線框出的存儲單元。NLUN3支持RAID4+1,其所包含5個存儲單元,在該圖中未標出。
[0090]當客戶端依據RAID3+2對目標數據進行切分後,會得到該目標數據的三個數據塊和兩個校驗塊,如圖2中用方框框出的數據塊和校驗塊。客戶端可以選擇支持RAID3+2的網絡邏輯單元作為目標網絡邏輯單元,在該例中需要選擇NLUNl作為目標網絡邏輯單元。可見,雖然NLUN3也包含有5個存儲單元,但由於NLUN3支持的RAID類型為RAID3+1,所以客戶端不會將NLUN3作為目標網絡邏輯單元。
[0091]確定出目標網絡邏輯單元後,客戶端將切分得到的數據塊和校驗塊分別發送給這5個數據節點,任意一個數據節點接收到客戶端發送的數據塊或校驗塊後,將接收到的數據塊或校驗塊存儲其屬於該NLUNl的存儲單元內,如圖2中帶箭頭的曲線的箭頭指出了數據塊或校驗塊將被存儲的存儲單元位置,例如,位於左上角的數據塊最終被存儲在數據節點I的第二個存儲單元中,其餘與此類似。
[0092]當然,圖2僅僅是將各個數據塊和校驗塊存儲在該NLUNl的5個存儲單元內的一種存儲情況,只要是最終將切分後的數據塊和校驗塊分別存儲至NLUNl的5個存儲單元內即可,至於哪個數據塊或校驗塊需要存儲到該NLUNl的哪個存儲單元內並不限定,例如,圖中位於方框左上角的數據塊也可以存儲在該NLUNl中位於數據節點2內的第三個存儲單元中,而將原來存儲在該數據節點2的第三個存儲單元內的校驗塊則可以存儲到數據節點I的第二個存儲單元內。
[0093]為了使得各個網絡邏輯單元的存儲單元內所存儲的數據為屬於相同哈希值範圍內的數據,還可以預先設置各個網絡邏輯單元所支持的哈希值範圍,從而使得網絡邏輯單元與所是支持的哈希值範圍具有對應關係。這樣,同一網絡邏輯單元的存儲單元中所存儲的數據均屬於相同哈希值範圍內的數據。根據實際需要不同的網絡邏輯單元所支持的哈希值範圍也可能不同。當然,考慮到實際需要可以是設置包含相同數量的存儲單元的網絡邏輯單元所支持的哈希值範圍不同,以便於後續客戶端確定目標網絡邏輯單元。
[0094]相應的,客戶端,具體用於計算目標數據的第一哈希值,根據第一哈希值確定用於存儲切分得到的數據塊和校驗塊的目標網絡邏輯單元,其中,該目標網絡邏輯單元所支持的哈希值範圍包含該第一哈希值。客戶端在確定目標網絡邏輯單元之前,需要計算出目標數據的第一哈希值。計算該目標數據的第一哈希值可以基於該目標數據所具有的文件名稱或者該目標數據的數據本身來計算出的哈希值。這樣,當滿足所包含的存儲單元數量與對目標數據切分得到的數據塊和校驗塊的總數量相同的網絡邏輯單元有多個時,可以進一步根據該網絡邏輯單元所支持的哈希值來最終確定出用於存儲數據塊和校驗塊的目標網絡邏輯單元。
[0095]特別的,在系統中網絡邏輯單元較多的情況下,當系統中的網絡邏輯單元具有所支持的RAID類型時,則可能會存在多個支持相同RAID類型的網絡邏輯單元。這樣,當客戶端確定目標網絡邏輯單元時,也可能會存在有多個滿足所支持RAID類型與對目標數據切分所依據的RAID類型相同的網絡邏輯單元,客戶端可能需要從這多個滿足條件的網絡邏輯單元中隨機選擇出一個網絡邏輯單元。
[0096]為了能夠唯一確定出一個目標網絡邏輯單元,系統可以同時設置各個網絡邏輯單元所支持的RAID類型和哈希值範圍,且支持相同RAID類型的網絡邏輯單元所支持的哈希值範圍不同。相應的,客戶端計算出目標數據的第一哈希值並依據設定的RAID類型對目標數據進行切分後,可以將系統中支持該設定的RAID類型且所支持的哈希值範圍包含該第一哈希值的網絡邏輯單元作為目標網絡邏輯單元,從而可以唯一確定出一個網絡邏輯單
J Li ο
[0097]另外,除了以上設置網絡邏輯單元所支持的哈希值的方式外,還可以預先設置系統中各個網絡邏輯單元所支持的文件名,不同的網絡邏輯單元所支持的文件名不同。相應的,客戶端,具體用於根據目標數據的第一文件名確定用於存儲切分得到的數據塊和校驗塊的目標網絡邏輯單元,該目標網絡邏輯單元所支持的文件名中包含該第一文件名。其中,該目標數據的第一文件名可以是客戶端為該目標數據分配的文件名,也可以是該目標數據原本具有的文件名。客戶端通過該種方式可以唯一確定出一個滿足所包含的存儲單元的數量與切分得到的數據塊和校驗塊的總數量,且所支持的文件名包含有該第一文件名的目標網絡邏輯單元。
[0098]進一步的,當為網絡邏輯單元分配了所支持的RAID類型的情況下,也可以為網絡邏輯單元分配所支持的文件名。其中,支持相同RAID類型的網絡邏輯單元所支持的文件名不同。這樣,客戶端可以從系統中選擇支持的文件名包含該目標數據的第一文件名,且所支持的RAID類型與切分該目標數據所依據的RAID類型相同的目標網絡邏輯單元。
[0099]可以理解的是,為了區分出網絡中的各個網絡邏輯單元,還可以為每個網絡邏輯單元分配一個系統唯一的標識,該標識可以是依據網絡邏輯單元所支持的RAID類型、所支持的哈希值範圍以及文件名中一種或幾種計算出來的標識。
[0100]在以上任一實施例中,構建出網絡邏輯單元後,還可以在網絡邏輯單元的各個存儲單元中存儲該網絡邏輯單元各個存儲單元的總存儲空間和當前可用的存儲空間,每個存儲單元當前可用的存儲空間,該網絡邏輯單元中的各個存儲單元所在的數據節點信息,該網絡邏輯單元所支持的RAID類型、該網絡邏輯單元所支持的哈希值範圍、該網絡邏輯單元所支持的文件名等信息中的一種或多種。如,數據節點a中一個存儲單元al屬於網絡邏輯單元A,則數據節點a可以在該存儲單元al內記錄該網絡邏輯單元相關的信息,如以上所介紹的總存儲空間、所支持的RAID類型等信息。
[0101]由於任意一個目標數據節點都可能會包含有多個存儲單元,而這多個存儲單元可能會屬於不同的網絡邏輯單元。因此,為了使得目標數據節點在接收到數據塊或校驗塊之後,能夠確定出需要將接收到的數據塊或校驗塊存儲到屬於哪個網絡邏輯單元的存儲單元中,客戶端在向數據節點發送數據塊或校驗塊的同時,還需要將目標網絡邏輯單元的信息發送給數據節點。如,客戶端可以將目標網絡邏輯單元的標識,或者是目標網絡邏輯單元所支持的RAID類型和哈希值範圍,或者是目標網絡邏輯單元所支持的RAID類型和文件名等信息發送給目標數據節點,以便目標數據節點可以確定出需要將數據塊或校驗塊存儲到哪個存儲單元中。
[0102]另外,當目標數據節點將接收到的數據塊或校驗塊存儲至屬於目標網絡邏輯單元的存儲單元之後,目標數據節點還可以記錄該存儲單元對數據塊或校驗塊的存儲狀態,如是否存儲成功,以及存儲數據塊或校驗塊的數量,以及所存儲的目標對象,例如,將目標數據I切分得到的數據塊和校驗塊等。
[0103]進一步的,為了目標數據節點能夠了解到目標網絡邏輯單元中的各個存儲單元內對目標數據的數據塊或校驗塊的存儲情況,在該多個目標數據節點中至少有一個目標數據節點,還用於從這多個目標數據節點中,獲取該目標網絡邏輯單元中的各個存儲單元對數據塊和校驗塊的存儲狀態信息,並將獲取到的存儲狀態信息發送給其他目標數據節點,使得各個目標數據節點保存該存儲狀態信息。具有的,各個目標數據節點將該存儲狀態信息保持至該目標網絡邏輯單元包含的各個存儲單元中。其中,該存儲狀態信息中至少包括各個存儲單元所存儲的該目標數據的數據塊或校驗塊的數量信息。另外,該存儲狀態信息還可以包括存儲單元中存儲有對哪些目標數據切分得到的數據塊或校驗塊。
[0104]其中,這多個目標數據節點中的任意一個目標數據節點均可以從接收到客戶端發送的數據塊或校驗塊均至指定時長之後,向其他目標數據節點發送存儲狀態讀取請求,以獲取到各個目標數據節點對客戶端發送的數據塊或校驗塊的存儲請求。當然,任意一個目標數據節點也可以周期性的向其他目標數據節點發送存儲狀態讀取請求,以通過其他目標數據節點獲取到該目標網絡邏輯單元中各個存儲單元對數據塊和校驗塊的存儲狀態信息,並將獲取到的存儲狀態信息發送給其他數據節點。當然,不同時刻發起存儲狀態讀取請求的目標數據節點可能不同,但是只要是能夠保證數據節點內存儲的存儲狀態信息能夠被周期性的更新即可。
[0105]目標數據節點記錄對各個存儲單元對數據塊和校驗塊的存儲狀態信息的方式可以採用任意方式。可選的,在本申請中可以通過與目標網絡邏輯單元所包含的存儲單元的個數相同位數的數字來表示存儲對象的冗餘切片的存儲情況,該數字的不同位代表不同的存儲單元,而不同位上的具體數值則表示了該位對應的數據節點的存儲單元對冗餘切片的存儲情況,如,O表示該存儲單元上沒有存儲數據塊或校驗塊,I?F表示有I?15個數據塊或校驗塊。
[0106]由於不同時刻向該目標網絡邏輯單元存儲的不同目標數據的數據塊和校驗塊,目標網絡邏輯單元的存儲單元內可能會存儲多個目標數據的數據塊和校驗塊,因此,需要針對各個目標數據,分別記錄各個存儲單元對相應數據塊和校驗塊的存儲狀態信息。以在目標網絡邏輯單元的存儲單元中分別存儲有對三個目標數據切分得到的數據塊和校驗塊為例,參見圖3,示出了該目標網絡邏輯單元對各個目標數據的校驗塊和數據塊的存儲情況,以及所記錄相應的存儲狀態信息。
[0107]假設該目標網絡邏輯單元的存儲單元中存儲有三個目標數據的數據塊和校驗塊,這三個目標數據分別為obj-0、obj-l和obj-2。對obj-Ο進行切分得到的數據塊和校驗塊分別為圖中的0-0、0-1、0-2、0-3和0-4 ;相應的,對obj-Ι進行切分得到的數據塊和校驗塊分別為圖中的1-0、1-1、1-2、1-3和1-4;對obj-2切分得到的數據塊和校驗塊分別為圖中的 2-0、2-1、2-2、2-3 和 1-4。
[0108]如圖3所示,該數據節點上方的方框所圍成的區域表示數據節點的存儲區域,而虛線部分與該數據節點的存儲區域的交集為該目標網絡邏輯單元中的各個存儲單元。該目標網絡邏輯單元的包含有5個存儲單元,且這5個存儲單元分別位於5個數據節點中,則可以用5位數來表示這5個存儲單元對該各個目標數據的數據塊和校驗塊的存儲狀態信息。具體可以通過如下方式來記錄存儲狀態信息:
[0109]對於obj-Ο,存儲狀態信息可以記錄為:11111,其表示該目標網絡邏輯單元中位於這5個數據節點內的存儲單元對該存儲對象ObjO的冗餘切片均存儲完成正常,即每個存儲單元內分別存儲有該obj-Ο的一個數據塊或校驗塊。[0110]對於Obj-l,存儲狀態信息可以記錄為11110,其表示位於數據節點5中的存儲單元所存儲的數據塊或校驗塊丟失,而另外四個數據節點中相應存儲單元內均存在一個該存儲對象Objl的數據塊或校驗塊。
[0111]對於obj-2,存儲狀態信息可以記錄為21110,其表示數據節點5的存儲單元內未存儲有的該存儲對象0bj2的數據塊或校驗塊,而數據節點I中保存有該存儲對象0bj2的數據塊和校驗塊的總數量為兩個,也就是原本應該存儲到數據節點5的存儲單元內的數據塊或校驗塊被存儲到數據節點I的存儲單元內。而其他三個數據節點的相應存儲單元內分別存儲有一個該存儲對象0bj2的數據塊或校驗塊。
[0112]一般情況下,當一個存儲單元中存儲有同一個目標數據的一個數據塊或校驗塊時,則說明未出現存儲異常,否則出現了存儲異常。
[0113]為了在某目標數據節點出現故障,而導致目標網絡邏輯單元中位於該目標數據節點上的存儲單元所存儲的數據塊或校驗塊丟失或損壞時,能夠恢復相應存儲單元內丟失或損壞的數據塊或校驗塊,該多個目標數據節點中至少一個目標數據節點,還用於獲取該目標網絡邏輯單元中的各個存儲單元對所存儲的數據塊和校驗塊的存儲狀態信息;當根據該存儲狀態信息確定出該目標網絡邏輯單元中存在對數據塊或校驗塊存儲異常的存儲單元時,根據該目標網絡邏輯單元中未出現存儲異常的存儲單元內所存儲的數據塊和校驗塊,恢復出該出現存儲異常的存儲單元內的數據塊或校驗塊。其中,該存儲狀態信息中包括存儲單元所存儲的數據塊或校驗塊的數量信息。
[0114]其中,對於一個目標數據,目標網絡邏輯單元中各個存儲單元所在的多個目標數據節點中,至少有一個目標數據節點按照預設的周期獲取該目標網絡邏輯單元中各個存儲單元對該目標數據的數據塊和校驗塊的存儲狀態信息,進而根據存儲狀態信息來判斷該目標網絡邏輯單元中各個存儲單元是否均存儲有一個該目標數據的數據塊或校驗塊;如果該目標網絡邏輯單元的某個存儲單元未出現有該目標數據的數據塊或校驗塊,或存儲的數據塊和校驗塊的總數量大於一個,則說明該存儲單元出現數據存儲異常。當然,也可以是在不同時刻,由不同的目標數據節點來發起故障檢測,進而獲取該存儲狀態信息,並依據存儲狀態信息來判斷是否有出現儲存異常的存儲單元。
[0115]目標數據節點獲取該存儲狀態信息的方式有兩種,可以是目標數據節點通過向其他目標數據節點發送狀態讀取請求,以便其他目標數據節點將自身中屬於該目標網絡邏輯單元的存儲單元內對數據塊或校驗塊的存儲狀態信息發送給該目標數據節點。
[0116]特別的,當各個目標數據節點內已經記錄有該目標網絡邏輯單元中各個存儲對目標數據的數據塊和校驗塊的存儲狀態信息,並周期性更新該存儲狀態信息時,目標數據節點需要判斷是否有存儲單元出現存儲異常時,則可以讀取自身存儲的存儲狀態信息,並根據自身存儲的存儲狀態信息來判斷是否有存儲單元出現存儲異常。
[0117]當確定出該目標網絡邏輯單元中存在對數據塊或校驗塊存儲異常的存儲單元時,根據存儲異常的不同,恢復數據塊和校驗塊的過程也可能會有所不同。當存儲單元的存儲異常為丟失了原本應該存儲的數據塊和校驗塊時,該目標數據節點具體用於,當根據存儲狀態信息確定出所述目標網絡邏輯單元中存在丟失所存儲的數據塊或校驗塊的第一存儲單元時,利用該目標網絡邏輯單元中未丟失所存儲的數據塊或校驗塊的各個存儲單元內所存儲的數據塊和校驗塊,恢復出所述第一存儲單元內所丟失的數據塊或校驗塊。[0118]該目標數據節點從其他目標數據節點中獲取該目標網絡邏輯單元中未丟失所存儲的數據塊或校驗塊的各個存儲單元內所存儲的數據塊和校驗塊,利用獲取到的數據塊和校驗塊可以重新構建出原來的目標數據。然後根據目標數據節點中存儲的對該目標數據進行切分所依據的RAID類型或者是該目標網絡邏輯單元所支持的RAID類型,對該目標數據進行重現切分,進而可以重新得到出現異常的存儲單元內所存儲的數據塊或校驗塊。
[0119]為了便於理解仍以圖3所示的目標網絡邏輯單元包含有5個存儲單元,5個存儲單元分別位於5個數據節點中為例。由對圖3中的目標數據Objl的存儲狀態信息的介紹可知,在網絡邏輯單元NLUNl中位於數據節點5中的存儲單元丟失了該Objl的數據塊或校驗塊1-4,而其餘位於其餘四個數據節點中的存儲單元對該存儲對象Objl的數據塊或校驗塊的存儲未出現異常。
[0120]假設此時發起對該NLUNl中的目標數據Objl進行檢測的數據節點設為數據節點1,數據節點I發現位於數據節點5的存儲單元丟失了該目標數據Objl的數據塊或校驗塊,該則該數據節點I讀取自身存儲的Objl的數據塊或校驗塊1-0,並從數據節點2、數據節點3和數據節點4中獲取該Objl的數據塊或校驗塊1-0、1-2和1-3,該數據節點I利用剩餘的數據塊或校驗塊1-0、1-1、1-2和1-3重現構建出該目標數據Objl,並確定原來客戶端對該Objl進行切分所依據RAID類型,依據該RAID類型對該存儲對象Objl重新進行切分,從而得到5個數據塊和校驗塊,然後將剩餘的4個數據塊和檢驗快和心切分出的這5個數據塊和校驗塊進行對比,從而確定出丟失的數據塊或校驗塊,並將確定出的該丟失的數據塊或校驗塊發送至數據節點5,該數據節點5中將接收到的數據塊和校驗塊重新存儲至其屬於該NLUNl的存儲單元中。
[0121]如圖4,示出了存儲異常恢復前和恢復後位於各個數據節點內的各個存儲單元對該Objl的數據塊和校驗塊的存儲狀況對比圖。
[0122]當存儲單元的存儲異常為存儲單元中存儲的該目標數據的數據塊或校驗塊的數量多於一個時,目標數據節點具體用於,當根據存儲狀態信息,確定出該目標網絡邏輯單元中存在所存儲的數據塊或校驗塊的數量多於一個的第二存儲單元時,利用目標網絡邏輯單元中不屬於該第二存儲單元的各個存儲單元內所存儲的數據塊和校驗塊構建出所述目標數據;獲取客戶端切分該目標數據所依據的RAID類型,依據該RAID類型對構建出的目標數據進行重新切分,並依據重新切分得到的數據塊和校驗塊,確定該第二存儲單元所應存儲的數據塊或校驗塊。
[0123]其中,獲取客戶端切分目標數據所依據的RAID類型,可以是由該目標數據節點向客戶端發送查詢請求,以獲取該切分目標數據所依據的RAID類型;也可以是客戶端向目的數據節點發送數據塊或校驗塊時,將切分目標數據所依據的RAID類型發送給目標數據節點進行存儲;另外,當目標網絡邏輯單元支持有一 RAID類型時,該目標數據節點中也可以存儲該目標網絡邏輯單元所支持的RAID類型,而該RAID類型與該客戶端切分該目標數據所依據的RAID類型相同,自然該目標數據可以直接獲取自身存儲的該目標網絡邏輯單元所支持的RAID類型。
[0124]假設NLUNl中的各個存儲單元中還存儲有目標數據Ob j3的各個數據塊和校驗塊,且該NLUNl中的數據節點I中存儲單元內存儲的數據塊和校驗塊的數量為兩個為例,即記錄的存儲狀態信息為21111的形式。這5個數據節點中發起故障檢測的數據節點確定出該NLUNl位於該數據節點I中的存儲單元出現該種存儲異常時,則可以利用該NLUNl中數據節點2-5內所存儲的該Ob j3的數據塊和校驗塊,構建出該目標數據Ob j3,並確定客戶端對該Obj3進行切分時所依據的RAID類型,按照RAID類型對該構建出的該Ob j3進行重現切分,得到5個新的數據塊和校驗塊。將當前切分出的5個新的數據塊和校驗塊與數據節點2-5中所存儲的該0bj3的數據塊和校驗塊進行對比,並將這5個新的數據塊和校驗塊中,不屬於該數據節點2-5中所存儲的該0bj3的數據塊和校驗塊的資料庫或校驗塊確定為數據節點I的存儲單元內所需存儲的數據塊或校驗塊。發起故障檢測的該數據節點將該確定出的數據塊或校驗塊發送給數據節點1,以便數據節點I利用該確定出的數據塊或校驗塊替換了該數據節點I中原來所存儲的該存儲對象0bj3的2個數據塊和校驗塊。
[0125]對應另一種存儲單元的存儲異常,該目標數據節點具體用於,當根據該存儲狀態信息,存在丟失所存儲的數據塊或校驗塊的第一存儲單元和存儲的數據塊或校驗塊的數量多於一個的第二存儲單元時,指示該第二存儲單元所在的數據節點,將第二存儲單元中多出的數據塊或校驗塊發送至該第一存儲單元所在的目標數據節點,以便該第一存儲單元所在的目標數據節點將接收到的數據塊或校驗塊存儲至該第一存儲單元中。
[0126]仍以圖3所示的目標網絡邏輯單元NLUNl為例,在該NLUNl中還存儲有目標數據0bj2,由圖3以及以上對記錄的與0bj2相關的存儲狀態信息的描述可知,由於某種原因,NLUNl位於的數據節點5存儲單元內所應存儲的數據塊或校驗塊被存儲在該NLUNl位於數據節點I的存儲單元內,使得該數據節點I的該存儲單元內存儲的數據塊和校驗塊的數量為兩個。仍假設發起檢測的數據節點為數據節點1,當該數據節點I獲取到該NLUNl中各個存儲單元對該存儲對象0bj2的數據塊和校驗塊的存儲狀態信息時,可以確定出該NLUNl位於數據節點5中的存儲單元所應存儲的數據塊或校驗塊被存儲在位於該數據節點I的存儲單元內,則該數據節點I從自身存儲的兩個數據塊和/或校驗塊中的任意一個發送至該數據節點5,進而使得位於數據節點5中的存儲單元內存儲該0bj2的數據塊或校驗塊。
[0127]如圖4所示,示出了在有存儲單元出現存儲異常以及存儲單元的存儲異常恢復後的,該NLUNl中各個存儲單元對該0bj2的各個數據塊和校驗塊的存儲狀態對比圖,可見,異常恢復後,數據節點I和數據節點5中均保存有一個存儲對象Obj2的數據塊或校驗塊。
[0128]需要說明的是,以上僅僅是以將各個目標數據的數據塊和校驗塊存儲在一個目標網絡邏輯單元的各個存儲單元為例進行介紹。但是在實際應用中,由於一個目標數據節點可以包含多個存儲單元,而該目標數據節點的多個存儲單元可能屬於不同的目標網絡邏輯單元,從而使得該目標數據節點可能同時屬於多個目標網絡邏輯單元。因此,當任意一個目標數據節點需要進行異常檢測時,首先需要確定出待檢測的目標網絡邏輯單元,並需要確定待檢測的目標數據,即確定出需要對該目標網絡邏輯單元的各個存儲單元存儲的哪個目標數據的數據塊或校驗塊的存儲狀態信息進行異常檢測。
[0129]通過由目標數據節點依據存儲狀態信息對目標網絡邏輯單元各個存儲單元的存儲狀態進行檢測,並在存儲單元出現存儲異常時,恢復出出現存儲異常的存儲單元所存儲的數據塊或校驗塊,從而實現了目標網絡邏輯單元對數據的自愈,也減少了由於數據丟失或損壞而無法恢復出數據的情況。
[0130]為了能夠對存儲的數據的相關信息進行管理,並便於客戶端後續進行數據讀取或者查詢存儲到網絡邏輯單元的各個存儲單元內的數據的相關信息,該系統還包括元數據節點。如圖5所示,示出了本發明一種網絡存儲系統另一個實施例的組成結構示意圖。與以上實施例不同的是,在本實施例中系統還包括:元數據節點3。該元數據節點3與客戶端I通過網絡連接。
[0131]在本實施例中,該客戶端還用於:在根據設定的RAID類型對目標數據進行切分,得到校驗塊和至少兩個數據塊之後,將目標數據與該RAID類型的對應關係發送至該元數據節點。
[0132]相應的,該元數據節點,用於存儲該目標數據與該RAID類型的對應關係。
[0133]客戶端對不同的目標數據進行切分時,所依據的RAID類型可能不同。為了便於查詢到對切分目標數據所依據的RAID類型,客戶端需要將目標數據與切分該目標數據所依據的RAID類型的對應關係發送至元數據節點,以在元數據節點中存儲該對應關係。例如,客戶端依據RAID3+2對目標數據I進行切分,則需要將目標數據I與該RAID3+2的對應關係發送至該元數據節點;而客戶端依據RAID3+1對目標數據2進行切分,則需要將目標數據2與該RAID3+1的對應關係發送至元數據節點。
[0134]進一步的,在網絡邏輯單元具有所支持的RAID類型的前提下,如果客戶端將對目標數據切分得到的數據塊和校驗塊存儲在網絡邏輯單元的各個存儲單元所在的目標數據節點之後,為了在客戶端需要讀取目標數據時,能夠確定出存儲該目標數據的各個數據塊和校驗塊的目標網絡邏輯單元,該客戶端,還用於從元數據節點中獲取該目標數據與RAID類型的對應關係,確定支持該RAID類型的目標網絡邏輯單元,並向該目標網絡邏輯單元的各個存儲單元所在的目標數據節點發送讀取該目標數據的請求。
[0135]相應的,目標數據節點,還用於在接收到客戶端讀取該目標數據的請求時,從屬於目標網絡邏輯單元的存儲單元中讀取所存儲的目標數據的數據塊和/或校驗塊,並將讀取到的數據塊和/或校驗塊發送給客戶端。
[0136]任意一個目標數據節點在接收到客戶端讀取該目標數據的請求時,便可以從相應存儲單元中讀取出屬於該目標數據的數據塊或校驗塊並發送給客戶端。
[0137]可見,該元數據節點與數據節點中所存儲的數據內容不同,該元數據節點僅僅是存儲元數據信息,即與是存儲有與目標數據相關的元數據,如上面提到的對目標數據進行切分所依據的RAID類型。
[0138]另外,當網絡邏輯單元支持一定哈希值範圍或文件名時,客戶端還可以將目標數據的第一文件名、計算出的該目標數據的第一哈希值等信息中的一種或幾種發送給元數據節點,以便在元數據節點中存儲這些信息。
[0139]當客戶端需要讀取該目標數據時,則可以從元數據節點中獲取切分該目標數據所依據的RAID類型以及該目標數據的第一文件名,並確定出支持該RAID類型且所支持的文件名包含該第一文件名的目標網絡邏輯單元,以便向該目標網絡邏輯單元的各個存儲單元所在的數據節點發送對該目標數據的讀取請求;或者,從元數據節點中獲取切分該目標數據所依據的RAID類型以及該目標數據的第一哈希值,並確定出支持該RAID類型且所支持的哈希值範圍包含該第一哈希值的目標網絡邏輯單元,以便向該目標網絡邏輯單元的各個存儲單元所在的數據節點發送對該目標數據的讀取請求。
[0140]當然,該客戶端也可以在將目標數據切分得到的數據塊和校驗塊存儲到目標網絡邏輯單元的各個存儲單元後,將該目標數據與該目標網絡邏輯單元的標識信息的對應關係發送給元數據節點,以便後續需要讀取目標數據時,從元數據節點中獲取存儲該目標數據的數據塊和校驗塊的目標網絡邏輯單元。
[0141]需要說明的是,以上任意一個實施例,均是以網絡存儲系統應用RAID算法為例進行描述的,如客戶端依據某RAID類型對目標數據進行切分,以及網絡邏輯單元具有所支持的RAID類型為例來描述該網絡存儲系統的,但是實際上,該網絡存儲系統也適用於應用糾偏碼算法的場景,如,客戶端依據糾偏碼N+M的類型來對目標數據進行切分後,其中,N和M均可以為大於零的自然數,同樣會使得切分得到的數據塊和校驗塊之間存在冗餘關係。當某個數據塊或校驗塊丟失或損壞時,利用未丟失或損壞的數據塊和校驗塊同樣能夠恢復出丟失或損壞的數據塊或校驗塊。相應的,系統可以為網絡邏輯單元分配所支持的糾偏碼類型,以便客戶端依據糾偏碼類型來選擇用於存儲數據塊和校驗塊的目標網絡邏輯單元,其具體過程與以上實施例所描述的過程類似,在此不再贅述。
[0142]另一方面,本發明還提供了一種數據處理方法,參見圖6,示出了本發明一種數據處理方法一個實施例的流程示意圖,本實施例的方法應用於包括至少三個數據節點的網絡存儲系統,在該網絡存儲系統中各個數據節點之間通過網絡連接,且每個數據節點的存儲區域被劃分為至少一個存儲單元,得到位於該至少三個數據節點中的多個存儲單元,且這多個存儲單元被劃歸為多個網絡邏輯單元,本實施例的方法包括:
[0143]步驟601:根據設定的RAID類型對目標數據進行切分,得到校驗塊和至少兩個數據塊。
[0144]其中,客戶端中預設的RAID類型可以有多種,對不同的目標數據進行切分時,所依據的RAID類型可能不同。
[0145]依據設定的RAID類型對目標數據進行切分,實際上是依據該RAID類型對應的RAID算法對目標數據進行切分,從而得到至少一個校驗塊和至少兩個數據塊,該過程與現有的依據RAID類型對數據進行冗餘方式的切分的過程相似,在此不再贅述。
[0146]其中,依據RAID對目標數據進行切分得到的數據塊和校驗塊之間具有冗餘關係,當有數據塊丟失或損壞等故障時,利用未出現故障的數據塊和校驗塊可以恢復出出現故障的數據塊或校驗塊。
[0147]步驟602:從網絡存儲系統的多個網絡邏輯單元中確定用於存儲該數據塊和校驗塊的目標網絡邏輯單元。
[0148]步驟603:將數據塊和校驗塊分別發送至該目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中,以便目標數據節點將接收到的數據塊和/或校驗塊存儲其屬於目標網絡邏輯單元的存儲單元內,使得目標網絡邏輯單元的任一存儲單元內均存儲有切分的數據塊中的一個數據塊或校驗塊。
[0149]其中,客戶端對目標數據進行切分所依據的RAID類型決定了切分得到的數據塊和校驗塊的總數量,如當依據RAID3+2對目標數據進行切分時,則會得到3個數據塊和2個校驗塊,校驗塊和數據塊的總數量為5個;當依據RAID3+1對目標數據進行切分時,則會得到3個數據塊和I個校驗塊。
[0150]客戶端確定的目標網絡邏輯單元所包含的存儲單元數量與切分得到的數據塊和校驗塊的總數量相同、這樣,才能使得後續目標網絡邏輯單元的任一存儲單元均可以存儲一個切分得到的數據塊或校驗塊,且不同存儲單元所存儲的數據塊或校驗塊不同,[0151]在本實施例中,由於當客戶端將切分得到的這些該數據塊和校驗塊分別存儲至目標網絡邏輯單元中位於多個目標數據節點內的多個存儲單元後,目標網絡邏輯單元的各個存儲單元內所存儲的數據塊和校驗塊之間也存在冗餘關係。這樣,當由於目標數據節點發生故障,使得某一個或幾個存儲單元中所存儲數據塊或校驗塊出現丟失或損壞等異常狀況時,利用未發生故障的目標數據節點中屬於該目標網絡邏輯單元的存儲單元中所存儲的數據塊和校驗塊便可以恢復出出現異常的數據塊或校驗塊,從而減少了數據損壞後不能恢復的情況,提高了系統存儲的安全性和可靠性。
[0152]為了避免一個目標數據節點出現故障時,會使得多個存儲單元所存儲的數據丟失或損壞,網絡存儲系統中的網絡邏輯單元所包含的存儲單元均來自不同的數據節點。相應的,目標網絡邏輯單元所包含的各個存儲單元均位於不同的目標數據節點中。與此對應,客戶端可以向目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中的任意一個目標數據節點僅發送一個數據塊或校驗塊,且向不同的目標數據節點發送的數據塊或校驗塊不同。這樣,一個目標數據節點出現故障僅僅會對目標網絡邏輯單元中一個存儲單元所存儲的數據塊或校驗塊造成影響。
[0153]在確定目標網絡邏輯單元時,由於所依據的RAID類型決定了對目標數據進行切分所得到的數據塊和校驗塊的總數量,因此,可以根據對目標數據進行切分所依據的RAID類型來確定目標網絡邏輯單元,進而確定出所包含的存儲單元的數量與切分得到的數據塊和校驗塊的總數量相同的網絡邏輯單元。
[0154]當網絡存儲系統中的網絡邏輯單元的數量較多時,有可能會存在多個網絡邏輯單元所包含的存儲單元數量相同,這樣,滿足條件所包含的存儲單元的數量與切分得到的數據塊和校驗塊的總數量相同的網絡邏輯單元可能會有多個,客戶端可能會從這多個滿足條件的多個網絡邏輯單元中隨機選擇出一個目標網絡邏輯單元。為了減少該種情況,並便於區分出網絡邏輯單元所包含的存儲單元的數量,同時又使得同一網絡邏輯單元的各個存儲單元內所存儲的數據具有相同屬性,每個網絡邏輯單元還可以具有一個所支持的RAID類型。
[0155]相應的,客戶端可以從這多個網絡邏輯單元中,確定支持對目標數據進行切分所依據RAID類型的網絡邏輯單元作為存儲所述數據塊和校驗塊的目標網絡邏輯單元。這樣,即使兩個網絡邏輯單元所包含的存儲單元數量相同,但是這兩個網絡邏輯單元所支持的RAID類型卻不一定相同,從而有利於客戶端來確定目標網絡邏輯單元。同時由於目標網絡邏輯單元的存儲單元中所存儲的數據塊和校驗塊,均是依據相同的RAID類型切分得到的,也有利於對數據的管理。
[0156]另外,當各個網絡邏輯單元也可以是具有所支持的哈希值範圍,這樣,同一網絡邏輯單元的存儲單元中所存儲的數據均屬於相同哈希值範圍內的數據。根據實際需要不同的網絡邏輯單元所支持的哈希值範圍也可能不同。當然,考慮到實際需要可以是設置包含相同數量的存儲單元的網絡邏輯單元所支持的哈希值範圍不同,以便於後續客戶端確定目標網絡邏輯單元。
[0157]相應的,客戶端在從多個網絡邏輯單元中確定用於存儲數據塊和校驗塊的目標網絡邏輯單元之前,還可以計算目標數據的第一哈希值。進而在確定目標網絡邏輯單元時,根據該第一哈希值,確定用於存儲數據塊和校驗塊的目標網絡邏輯單元,其中,該目標網絡邏輯單元所支持的哈希值範圍包含該第一哈希值。
[0158]特別的,在系統中網絡邏輯單元較多的情況下,當系統中的網絡邏輯單元具有所支持的RAID類型時,則可能會存在多個支持相同RAID類型的網絡邏輯單元。為了能夠唯一確定出一個目標網絡邏輯單元,網絡邏輯單元可以在具有所支持的RAID類型的同時,具有所支持的哈希值範圍。其中,支持相同RAID類型的網絡邏輯單元所支持的哈希值範圍不同。相應的,客戶端計算出目標數據的第一哈希值並依據設定的RAID類型對目標數據進行切分後,可以將系統中支持該設定的RAID類型且所支持的哈希值範圍包含該第一哈希值的網絡邏輯單元作為目標網絡邏輯單元,從而可以唯一確定出一個網絡邏輯單元。
[0159]當然,網絡邏輯單元也可以是具有所支持文件名。不同的網絡邏輯單元所支持的文件名也可能不同。相應的,客戶端可以根據目標數據的第一文件名,確定用於存儲切分得到的數據塊和校驗塊的目標網絡邏輯單元,其中,該目標網絡邏輯單元所支持的文件名中包含第一文件名。
[0160]其中,該目標數據的第一文件名可以是客戶端為該目標數據分配的文件名,也可以是該目標數據原本具有的文件名。客戶端通過該種方式可以唯一確定出一個滿足所包含的存儲單元的數量與切分得到的數據塊和校驗塊的總數量,且所支持的文件名包含有該第一文件名的目標網絡邏輯單元。
[0161]進一步的,網絡邏輯單元還可以在具有所支持RAID類型的同時,具有所支持的文件名。其中,支持相同RAID類型的網絡邏輯單元所支持的文件名不同。這樣,客戶端可以選擇支持的文件名包含該目標數據的第一文件名,且所支持的RAID類型與切分該目標數據所依據的RAID類型相同的目標網絡邏輯單元。
[0162]為了客戶端後續能夠讀取存儲到網絡邏輯單元的各個存儲單元內數據塊和校驗塊。該網絡存儲系統中還可以包括元數據節點,該元數據節點與客戶端之間通過網絡連接。
[0163]在客戶端依據設定的RAID類型對目標數據進行切分後,還可以將該目標數據與所述RAID類型的對應關係發送至元數據節點,以在元數據節點中存儲所述對應關係得到的數據塊和校驗塊。
[0164]進一步的,在網絡邏輯單元具有所支持的RAID類型的前提下,客戶端可以從該元數據節點中獲取該目標數據與RAID類型的對應關係,並確定支持該RAID類型的目標網絡邏輯單元,並向目標網絡邏輯單元的各個存儲單元所在的目標數據節點發送讀取該目標數據的請求,以便從所述多個目標數據節點中得到所述數據塊和校驗塊。
[0165]另外,當網絡邏輯單元支持一定哈希值範圍或文件名時,客戶端還可以將目標數據的第一文件名、計算出的該目標數據的第一哈希值等信息中的一種或幾種發送給元數據節點,以便在元數據節點中存儲這些元數據信息。
[0166]當客戶端需要讀取該目標數據時,則可以從元數據節點中獲取切分該目標數據所依據的RAID類型以及該目標數據的第一文件名,並確定出支持該RAID類型且所支持的文件名包含該第一文件名的目標網絡邏輯單元,以便向該目標網絡邏輯單元的各個存儲單元所在的數據節點發送對該目標數據的讀取請求;或者,客戶端從元數據節點中獲取切分該目標數據所依據的RAID類型以及該目標數據的第一哈希值,並確定出支持該RAID類型且所支持的哈希值範圍包含該第一哈希值的目標網絡邏輯單元,以便向該目標網絡邏輯單元的各個存儲單元所在的數據節點發送對該目標數據的讀取請求。[0167]為了便於理解客戶端讀取目標數據的過程,假設任一網絡邏輯單元均具有所支持的RAID類型,並以客戶端根據目標數據的第一文件名以及對目標數據切分時所依據的第
一RAID類型確定目標網絡邏輯單元為例進行介紹,其中,該第一 RAID表示客戶端對目標數據進行切分所依據的RAID類型,其僅僅是為了與網絡邏輯單元所支持的RAID類型進行區分。客戶端會將該目標數據的第一文件名,以及該目標數據與該第一 RAID類型的對應關係發送至元數據節點存儲。參見圖7,示出客戶端進行數據讀取的流程交互示意圖。為了更加便於描述,在圖7中未畫出各個網絡邏輯單元所包含的存儲單元所位於的各個數據節點,而是直接畫出了各個網絡邏輯單元。但是可以理解的是,網絡邏輯單元實際上就是存儲區域分布在不同數據節點的分布式存儲單元,在該圖中以系統包含有四個網絡邏輯單元為例。可見客戶端進行數據讀取的過程可以包括:
[0168]步驟701:客戶端將待讀取的目標數據的第一文件名發送給元數據節點。
[0169]步驟702:元數據節點根據接收到的第一文件名,查找與該第一文件名對應的元數據信息。
[0170]元數據節點根據該第一文件名,可以獲取到與該目標數據對應的元數據信息。當然,客戶端也可以是發送該目標數據的標識信息,以便於元數據節點查詢相應的元數據信
肩、O
[0171]其中,該元數據信息至少包括與該目標數據對應的第一 RAID類型、目標數據的第一文件名,當然還可以包括該目標數據的標識,以及哈希值等。
[0172]步驟703:元數據節點將獲取到的元數據信息發送給該客戶端。
[0173]步驟704:客戶端根據接收到的元數據信息中的第一文件名和第一 RAID類型,確定出目標網絡邏輯單元,並向該目標網絡邏輯單元的各個存儲單元所在的目標數據節點發送讀取該目標數據的請求。
[0174]客戶端根據該第一文件名和第一 RAID類型,將支持該第一 RAID類型且支持的文件名包含該第一文件名的網絡邏輯單元作為目標網絡邏輯單元。
[0175]步驟705:目標數據節點接收該請求,並從屬於該目標網絡邏輯單元的存儲單元中獲取該目標數據的數據塊或校驗塊,並發送給客戶端。
[0176]例如,假設目標網絡邏輯單元為NLUN1,則客戶端向該NLUNl的各個存儲單元所在的各個目標數據節點發送請求,存儲單元包含與該NLUNl的目標數據節點接收到請求後,讀取相應的數據塊或校驗塊並發送給客戶端。
[0177]另外,本申請還提供了一種客戶端,參見圖8,示出了本申請一種客戶端的結構示意圖,該客戶端應用於包括至少三個數據節點的網絡存儲系統,各個數據節點之間通過網絡連接,每個數據節點的存儲區域被劃分為至少一個存儲單元,得到位於所述至少三個數據節點中的多個存儲單元,且這多個存儲單元被劃歸為多個網絡邏輯單元。該客戶端800至少包括處理器801、存儲器802、通信接口 803和通信總線804。
[0178]其中,處理器801、存儲器802和通信接口 803通過通信總線804實現相互之間的
通信;
[0179]該處理器801用於根據設定的RAID類型對目標數據進行切分,得到校驗塊和至少兩個數據塊;從所述多個網絡邏輯單元中確定用於存儲該數據塊和校驗塊的目標網絡邏輯單元;將切分得到的數據塊和校驗塊分別發送至目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中。
[0180]該存儲器802用於存儲包含有該處理器所運行的程序的信息。該存儲器可能包含高速RAM存儲器,也可能還包括非易失性存儲器。
[0181]該通信接口 803,用於與網絡存儲系統中的網元通信,如數據節點等。
[0182]當該網絡存儲系統中的網絡邏輯單元所包含的存儲單元均屬於不同的數據節點的情況下,該處理器801從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,具體為:
[0183]向目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中的任一目標數據節點發送一個所述數據塊或一個所述校驗塊,且向不同的目標數據節點發送的數據塊或校驗塊不同。
[0184]在網絡邏輯單元具有所支持的RAID類型時,該處理器801從多個網絡邏輯單元中確定用於存儲該數據塊和校驗塊的目標網絡邏輯單元,具體為:
[0185]從所述多個網絡邏輯單元中,確定支持所述RAID類型的網絡邏輯單元作為存儲所述數據塊和校驗塊的目標網絡邏輯單元。
[0186]在網絡邏輯單元有所支持的哈希值範圍時,該處理器801,還用於在從所述多個網絡邏輯單元中確定用於存儲數據塊和校驗塊的目標網絡邏輯單元之前,計算該目標數據的
第一哈希值;
[0187]相應的,該處理器801從多個網絡邏輯單元中確定用於存儲該數據塊和校驗塊的目標網絡邏輯單元,具體為:
[0188]根據該第一哈希值,確定用於存儲該數據塊和校驗塊的目標網絡邏輯單元,該目標網絡邏輯單元所支持的哈希值範圍包含所述第一哈希值。
[0189]進一步的,當網絡邏輯單元同時具有所支持的RAID類型以及哈希值範圍時,該處理器801從多個網絡邏輯單元中確定用於存儲該數據塊和校驗塊的目標網絡邏輯單元具體為,將所支持的哈希值範圍包含該第一哈希值,且支持該數據切分單元對目標數據進行切分所依據RAID類型的網絡邏輯單元作為目標網絡邏輯單元。
[0190]當網絡邏輯單元具有支持的文件名時,該處理器801從多個網絡邏輯單元中確定用於存儲該數據塊和校驗塊的目標網絡邏輯單元,具體為:根據目標數據的第一文件名,確定用於存儲數據塊和校驗塊的目標網絡邏輯單元,該目標網絡邏輯單元所支持的文件名中包含所述第一文件名。
[0191]進一步的,當網絡邏輯單元同時具有所支持的RAID類型以及文件名時,該處理器801從多個網絡邏輯單元中確定用於存儲該數據塊和校驗塊的目標網絡邏輯單元,具體為:將所支持的文件名包含該目標數據的第一文件名,且支持該數據切分單元對目標數據進行切分所依據RAID類型的網絡邏輯單元作為目標網絡邏輯單元。
[0192]為了能夠關於對目標數據的元數據信息進行管理,該網絡存儲系統還包括元數據節點。相應的,該處理器801,還用於將目標數據與RAID類型的對應關係發送至元數據節點,以在元數據節點中存儲對應關係。
[0193]進一步的,該處理器801,還用於從元數據節點中獲取該目標數據與RAID類型的對應關係,確定支持該RAID類型的目標網絡邏輯單元,並向該目標網絡邏輯單元的各個存儲單元所在的目標數據節點發送讀取該目標數據的請求,以便從多個目標數據節點中得到數據塊和校驗塊。
[0194]本說明書中各個實施例採用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對於實施例公開的裝置而言,由於其與實施例公開的方法相對應,所以描述的比較簡單,相關之處參見方法部分說明即可。
[0195]結合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬體、處理器執行的軟體模塊,或者二者的結合來實施。軟體模塊可以置於隨機存儲器(RAM)、內存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬碟、可移動磁碟、CD-ROM、或【技術領域】內所公知的任意其它形式的存儲介質中。
[0196]對所公開的實施例的上述說明,使本領域專業技術人員能夠實現或使用本發明。對這些實施例的多種修改對本領域的專業技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發明的精神或範圍的情況下,在其它實施例中實現。因此,本發明將不會被限制於本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的範圍。
【權利要求】
1.一種網絡存儲系統,其特徵在於,所述系統包括一個客戶端和至少三個數據節點,所述數據節點之間通過網絡連接,所述客戶端與所述數據節點之間通過網絡連接; 其中,每個數據節點的存儲區域被劃分為至少一個存儲單元,得到位於所述至少三個數據節點中的多個存儲單元;所述多個存儲單元被劃歸為多個網絡邏輯單元; 所述客戶端,用於根據設定的RAID類型對目標數據進行切分,得到校驗塊和至少兩個數據塊;從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,並將所述數據塊和校驗塊分別發送至所述目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中; 所述目標數據節點,用於接收所述客戶端發送的數據塊和/或校驗塊,並將所述數據塊和/或校驗塊分別存儲至所述目標數據節點中屬於所述目標網絡邏輯單元的存儲單元中,以使得所述目標網絡邏輯單元的任一存儲單元內均存儲有所述數據塊中的一個數據塊或所述校驗塊。
2.根據權利要求1所述的系統,其特徵在於,所述網絡邏輯單元中所包含的多個存儲單元均屬於不同的數據節點。
3.根據權利要求1所述的系統,其特徵在於,所述客戶端,具體用於從所述多個網絡邏輯單元中,確定支持所述RAID類型的目標網絡邏輯單元,以利用所述目標網絡邏輯單元中的多個存儲單元存儲所述數據塊和所述校驗塊。
4.根據權利要求1或3所述的系統,其特徵在於,所述客戶端,具體用於計算所述目標數據的第一哈希值,根據所述第一哈希值確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,所述目標網絡邏輯單元所支持的哈希值範圍包含所述第一哈希值。
5.根據權利要求1或3所述的系統,其特徵在於,所述客戶端,具體用於根據所述目標數據的第一文件名確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,所述目標網絡邏輯單元所支持的文件名中包`含所述第一文件名。
6.根據權利要求1所述的系統,其特徵在於,所述多個目標數據節點中的至少一個目標數據節點,還用於從所述多個目標數據節點中,獲取所述目標網絡邏輯單元中的各個存儲單元對所述數據塊和校驗塊的存儲狀態信息,將獲取到的所述存儲狀態信息發送給其他目標數據節點,使得各個目標數據節點保存所述存儲狀態信息,其中,所述存儲狀態信息中包括各個存儲單元所存儲的數據塊或校驗塊的數量信息。
7.根據權利要求3所述的系統,其特徵在於,所述系統還包括:元數據節點; 所述客戶端還用於:在根據設定的RAID類型對目標數據進行切分,得到所述校驗塊和至少兩個數據塊之後,將所述目標數據與所述RAID類型的對應關係發送至所述元數據節佔.所述元數據節點,用於存儲所述目標數據與所述RAID類型的對應關係。
8.根據權利要求7所述的系統,其特徵在於,所述客戶端,還用於從所述元數據節點中獲取所述目標數據與所述RAID類型的對應關係,確定支持所述RAID類型的所述目標網絡邏輯單元,並向所述目標網絡邏輯單元的各個存儲單元所在的目標數據節點發送讀取所述目標數據的請求; 所述目標數據節點,還用於在接收到所述客戶端讀取所述目標數據的請求時,從屬於所述目標網絡邏輯單元的存儲單元中讀取所存儲的所述目標數據的數據塊和/或校驗塊,並將讀取到的數據塊和/或校驗塊發送給所述客戶端。
9.根據權利要求1、2、3或6任一項所述的系統,其特徵在於,所述目標數據節點,還用於獲取所述目標網絡邏輯單元中的各個存儲單元對所述數據塊和校驗塊的存儲狀態信息;當根據所述存儲狀態信息確定出所述目標網絡邏輯單元中存在對所述數據塊或校驗塊存儲異常的存儲單元時,根據所述目標網絡邏輯單元中未出現存儲異常的存儲單元內所存儲的數據塊和校驗塊,恢復出所述出現存儲異常的存儲單元內的數據塊或校驗塊,其中,所述存儲狀態信息中包括存儲單元所存儲的數據塊或校驗塊的數量信息。
10.根據權利要求9所述的系統,其特徵在於,所述目標數據節點具體用於,當根據所述存儲狀態信息確定出所述目標網絡邏輯單元中存在丟失所存儲的數據塊或校驗塊的第一存儲單元時,利用所述目標網絡邏輯單元中未丟失所存儲的數據塊或校驗塊的各個存儲單元內所存儲的數據塊和校驗塊,恢復出所述第一存儲單元內所丟失的數據塊或校驗塊。
11.根據權利要求9所述的系統,其特徵在於, 所述目標數據節點具體用於,當根據所述存儲狀態信息,確定出所述目標網絡邏輯單元中存在所存儲的數據塊或校驗塊的數量多於一個的第二存儲單元時,利用所述目標網絡邏輯單元中不屬於所述第二存儲單元的各個存儲單元內所存儲的數據塊和校驗塊構建出所述目標數據; 獲取所述客戶端切分所述目標數據所依據的所述RAID類型,依據所述RAID類型對構建出的所述目標數據進行重新切分,並依據重新切分得到的數據塊和校驗塊,確定所述第二存儲單元所應存儲的數據塊或校驗塊。
12.根據權利要求9所述的系統,其特徵在於, 所述目標數據節點具體用於,當根據所述存儲狀態信息,存在丟失所存儲的數據塊或校驗塊的第一存儲單元和存儲的數據塊或校驗塊的數量多於一個的第二存儲單元時,指示所述第二存儲單元所在的數據節點,將所述第二存儲單元中多出的數據塊或校驗塊發送至所述第一存儲單元所在的目標數據節點,以便所述第一存儲單元所在的目標數據節點將接收到的數據塊或校驗塊存儲至所述第一存儲單元。
13.一種數據處理方法,其特徵在於,應用於包括至少三個數據節點的網絡存儲系統,所述數據節點之間通過網絡連接,所述數據節點的存儲區域被劃分為至少一個存儲單元,得到位於所述至少三個數據節點中的多個存儲單元,且所述多個存儲單元被劃歸為多個網絡邏輯單元,所述方法包括: 根據設定的RAID類型對目標數據進行切分,得到校驗塊和至少兩個數據塊; 從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元; 將所述數據塊和校驗塊分別發送至所述目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中,以便所述目標數據節點將接收到的數據塊和/或校驗塊存儲其屬於所述目標網絡邏輯單元的存儲單元內,使得所述目標網絡邏輯單元的任一存儲單元內均存儲有所述數據塊中的一個數據塊或校驗塊。
14.根據權利要求13所述的方法,其特徵在於,所述網絡邏輯單元所包含的存儲單元均屬於不同的數據節點; 所述將所述數據塊和校驗塊分別發送至所述目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中,包括: 向所述目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中的任一目標數據節點發送一個所述數據塊或一個所述校驗塊,且向不同的目標數據節點發送的數據塊或校驗塊不同。
15.根據權利要求13所述的方法,其特徵在於,所述從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,包括: 從所述多個網絡邏輯單元中,確定支持所述RAID類型的網絡邏輯單元作為存儲所述數據塊和校驗塊的目標網絡邏輯單元。
16.根據權利要求13或15所述的方法,其特徵在於,在所述從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元之前,還包括: 計算所述目標數據的第一哈希值; 所述從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,包括: 根據所述第一哈希值,確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,所述目標網絡邏輯單元所支持的哈希值範圍包含所述第一哈希值。
17.根據權利要求13或15所述的方法,其特徵在於,所述從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,包括: 根據所述目標數據的第一文件名,確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,所述目標網絡邏輯單元所支持的文件名中包含所述第一文件名。
18.根據權利要求13所述的方法,其特徵在於,所述網絡存儲系統還包括元數據節點; 在所述根據設定的RAID類型對目標數據進行切分,得到校驗塊和至少兩個數據塊之後,還包括: 將所述目標數據與所述RAID類型的對應關係發送至所述元數據節點,以在所述元數據節點中存儲所述對應關係。
19.根據權利要求18所述的方法,其特徵在於,還包括: 從所述元數據節點中獲取所述目標數據與所述RAID類型的對應關係,確定支持所述RAID類型的所述目標網絡邏輯單元,並向所述目標網絡邏輯單元的各個存儲單元所在的目標數據節點發送讀取所述目標數據的請求,以便從所述多個目標數據節點中得到所述數據塊和校驗塊。
20.一種客戶端,其特徵在於,所述客戶端應用於包括至少三個數據節點的網絡存儲系統,所述數據節點之間通過網絡連接,所述數據節點的存儲區域被劃分為至少一個存儲單元,得到位於所述至少三個數據節點中的多個存儲單元,且所述多個存儲單元被劃歸為多個網絡邏輯單元;所述客戶端包括處理器、存儲器、通信接口和通信總線; 所述處理器、存儲器和所述通信接口通過所述通信總線進行通信; 其中,所述處理器用於根據設定的RAID類型對目標數據進行切分,得到校驗塊和至少兩個數據塊;從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元;將所述數據塊和校驗塊分別發送至所述目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中; 所述存儲器用於存儲包含有所述處理器運行的程序的信息。
21.根據權利要求20所述的客戶端,其特徵在於,當所述網絡邏輯單元所包含的存儲單元均屬於不同的數據節點時,所述處理器從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,具體為: 向所述目標網絡邏輯單元中的多個存儲單元所在的多個目標數據節點中的任一目標數據節點發送一個所述數據塊或一個所述校驗塊,且向不同的目標數據節點發送的數據塊或校驗塊不同。
22.根據權利要求20所述的客戶端,其特徵在於,所述處理器從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,具體為: 從所述多個網絡邏輯單元中,確定支持所述RAID類型的網絡邏輯單元作為存儲所述數據塊和校驗塊的目標網絡邏輯單元。
23.根據權利要求20或22所述的客戶端,其特徵在於,所述處理器,還用於在所述從所述多個網絡邏輯單元中確定用於存儲 所述數據塊和校驗塊的目標網絡邏輯單元之前,計算所述目標數據的第一哈希值; 相應的,所述處理器從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,具體為: 根據所述第一哈希值,確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,所述目標網絡邏輯單元所支持的哈希值範圍包含所述第一哈希值。
24.根據權利要求20或22所述的客戶端,其特徵在於,所述處理器從所述多個網絡邏輯單元中確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,具體為: 根據所述目標數據的第一文件名,確定用於存儲所述數據塊和校驗塊的目標網絡邏輯單元,所述目標網絡邏輯單元所支持的文件名中包含所述第一文件名。
25.根據權利要求20所述的客戶端,其特徵在於,所述網絡存儲系統還包括元數據節佔.所述處理器,還用於將所述目標數據與所述RAID類型的對應關係發送至所述元數據節點,以在所述元數據節點中存儲所述對應關係。
26.根據權利要求25所述的客戶端,其特徵在於,所述處理器,還用於從所述元數據節點中獲取所述目標數據與所述RAID類型的對應關係,確定支持所述RAID類型的所述目標網絡邏輯單元,並向所述目標網絡邏輯單元的各個存儲單元所在的目標數據節點發送讀取所述目標數據的請求,以便從所述多個目標數據節點中得到所述數據塊和校驗塊。
【文檔編號】H04L12/24GK103535014SQ201380000732
【公開日】2014年1月22日 申請日期:2013年4月23日 優先權日:2013年4月23日
【發明者】程菊生 申請人:華為技術有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀