一種提高云存儲(chǔ)資源修復(fù)效率的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種提高云存儲(chǔ)資源修復(fù)效率的方法和裝 置。
【背景技術(shù)】
[0002] 云存儲(chǔ)中,一個(gè)卷(volume)通常由后端多個(gè)存儲(chǔ)節(jié)點(diǎn)上的資源(brick)組成,如 圖 1 所不。該卷由 Brick A、Brick B、Brick C、Brick D、Brick E、Brick F 組成。數(shù)據(jù)在 寫入的時(shí)候,分別寫入卷里的各個(gè)brick。
[0003] 以N+M的糾刪碼卷為例,在Μ個(gè)brick離線后,該卷內(nèi)仍然可以繼續(xù)寫入數(shù)據(jù)。但 是在Μ個(gè)brick上線后,卷里的數(shù)據(jù)應(yīng)該如何進(jìn)行修復(fù)是需要考慮的問(wèn)題。
[0004] 現(xiàn)有的一種卷修復(fù)方案為:由單個(gè)節(jié)點(diǎn)遍歷卷里的文件進(jìn)行修復(fù)。請(qǐng)參圖2,首先 從卷的根目錄開(kāi)始,逐個(gè)讀取目錄的每一項(xiàng);若已經(jīng)讀取完畢,則修復(fù)結(jié)束;否則判斷讀取 的該項(xiàng)是否為目錄,若是目錄,則需要繼續(xù)遞歸讀取該目錄的每一項(xiàng)進(jìn)行修復(fù);若是文件, 若確定該文件需要修復(fù),則對(duì)該文件實(shí)施修復(fù)。這里可以通過(guò)判斷文件的擴(kuò)展屬性、大小、 修改時(shí)間等等來(lái)判斷確定文件是否需要修復(fù)。
[0005] 上述修復(fù)方案耗時(shí)較長(zhǎng),效率較低。
【發(fā)明內(nèi)容】
[0006] 有鑒于此,本發(fā)明提供一種提高云存儲(chǔ)資源修復(fù)效率的方法和裝置。
[0007] 該提高云存儲(chǔ)資源修復(fù)效率的方法包括:預(yù)先給各存儲(chǔ)節(jié)點(diǎn)分配修復(fù)節(jié)點(diǎn)值;存 儲(chǔ)節(jié)點(diǎn)在參與卷修復(fù)時(shí),遍歷卷里的文件,根據(jù)某算法,以遍歷到的文件在卷中的相對(duì)路徑 為參數(shù),計(jì)算該文件對(duì)應(yīng)的修復(fù)節(jié)點(diǎn)值;判斷計(jì)算得到的修復(fù)節(jié)點(diǎn)值是否屬于分配給自身 的修復(fù)節(jié)點(diǎn)值,如果是,則執(zhí)行對(duì)該遍歷到的文件的修復(fù),否則不修復(fù)。
[0008] 優(yōu)選地,預(yù)先給各存儲(chǔ)節(jié)點(diǎn)分配修復(fù)節(jié)點(diǎn)值包括:預(yù)先為每個(gè)存儲(chǔ)節(jié)點(diǎn)分配一段 hash值;根據(jù)某算法以遍歷到的文件在卷中的相對(duì)路徑為參數(shù),計(jì)算得到該文件對(duì)應(yīng)的修 復(fù)節(jié)點(diǎn)值包括:根據(jù)hash算法,以遍歷到的文件在卷中的相對(duì)路徑為參數(shù),計(jì)算該文件對(duì) 應(yīng)的hash值;判斷計(jì)算得到的修復(fù)節(jié)點(diǎn)值是否屬于分配給自身的修復(fù)節(jié)點(diǎn)值包括:判斷計(jì) 算得到的hash值是否屬于分配給自身的一段hash值中的某一個(gè)值。
[0009] 優(yōu)選地,在預(yù)先為每個(gè)存儲(chǔ)節(jié)點(diǎn)分配一段hash值時(shí),采用均勻分配的方式。
[0010] 優(yōu)選地,另一種預(yù)先給各存儲(chǔ)節(jié)點(diǎn)分配修復(fù)節(jié)點(diǎn)值包括:為η個(gè)存儲(chǔ)節(jié)點(diǎn)依次分 配0至η-1這η個(gè)修復(fù)節(jié)點(diǎn)值;所述根據(jù)某算法,以遍歷到的文件在卷中的相對(duì)路徑為參 數(shù),計(jì)算該文件對(duì)應(yīng)的修復(fù)節(jié)點(diǎn)值包括:根據(jù)MD5sum算法,以遍歷到的文件在卷中的相對(duì) 路徑為參數(shù),計(jì)算該文件對(duì)應(yīng)的MD5sum值,將計(jì)算得到的MD5sum值對(duì)η取余,將得到的余 數(shù)作為該文件對(duì)應(yīng)的修復(fù)節(jié)點(diǎn)值。
[0011] 該提高云存儲(chǔ)資源修復(fù)效率的裝置,包括:修復(fù)節(jié)點(diǎn)值分配模塊,用于預(yù)先給各存 儲(chǔ)節(jié)點(diǎn)分配修復(fù)節(jié)點(diǎn)值;修復(fù)節(jié)點(diǎn)值計(jì)算模塊,用于存儲(chǔ)節(jié)點(diǎn)在參與卷修復(fù)時(shí),遍歷卷里的 文件,根據(jù)某算法,以遍歷到的文件在卷中的相對(duì)路徑為參數(shù),計(jì)算該文件對(duì)應(yīng)的修復(fù)節(jié)點(diǎn) 值;修復(fù)模塊,用于判斷計(jì)算得到的修復(fù)節(jié)點(diǎn)值是否屬于分配給自身的修復(fù)節(jié)點(diǎn)值,如果 是,則執(zhí)行對(duì)該遍歷到的文件的修復(fù),否則不修復(fù)。
[0012] 優(yōu)選地,修復(fù)節(jié)點(diǎn)值分配模塊預(yù)先給各存儲(chǔ)節(jié)點(diǎn)分配修復(fù)節(jié)點(diǎn)值包括:預(yù)先為每 個(gè)存儲(chǔ)節(jié)點(diǎn)分配一段hash值;修復(fù)節(jié)點(diǎn)值計(jì)算模塊根據(jù)某算法以遍歷到的文件在卷中的 相對(duì)路徑為參數(shù),計(jì)算得到該文件對(duì)應(yīng)的修復(fù)節(jié)點(diǎn)值包括:根據(jù)hash算法,以遍歷到的文 件在卷中的相對(duì)路徑為參數(shù),計(jì)算該文件對(duì)應(yīng)的hash值;修復(fù)模塊判斷計(jì)算得到的修復(fù)節(jié) 點(diǎn)值是否屬于分配給自身的修復(fù)節(jié)點(diǎn)值包括:判斷計(jì)算得到的hash值是否屬于分配給自 身的一段hash值中的某一個(gè)值。
[0013] 優(yōu)選地,修復(fù)節(jié)點(diǎn)值分配模塊在預(yù)先為每個(gè)存儲(chǔ)節(jié)點(diǎn)分配一段hash值時(shí),采用均 勻分配的方式。
[0014] 優(yōu)選地,修復(fù)節(jié)點(diǎn)值分配模塊預(yù)先給各存儲(chǔ)節(jié)點(diǎn)分配修復(fù)節(jié)點(diǎn)值包括:為η個(gè)存 儲(chǔ)節(jié)點(diǎn)依次分配0至η-1這η個(gè)修復(fù)節(jié)點(diǎn)值;修復(fù)節(jié)點(diǎn)值計(jì)算模塊根據(jù)某算法,以遍歷到 的文件在卷中的相對(duì)路徑為參數(shù),計(jì)算該文件對(duì)應(yīng)的修復(fù)節(jié)點(diǎn)值包括:根據(jù)MD5sum算法, 以遍歷到的文件在卷中的相對(duì)路徑為參數(shù),計(jì)算該文件對(duì)應(yīng)的MD5sum值,將計(jì)算得到的 MD5sum值對(duì)η取余,將得到的余數(shù)作為該文件對(duì)應(yīng)的修復(fù)節(jié)點(diǎn)值。
[0015] 相較于現(xiàn)有技術(shù),本發(fā)明方案提高了修復(fù)卷文件的效率,且整個(gè)方案簡(jiǎn)單易行。
【附圖說(shuō)明】
[0016] 圖1是卷的組成示意圖。
[0017] 圖2是現(xiàn)有的卷文件修復(fù)流程圖。
[0018] 圖3是本發(fā)明實(shí)施例流程圖。
[0019] 圖4是本發(fā)明又一實(shí)施例流程圖。
[0020] 圖5是本發(fā)明實(shí)施裝置邏輯結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0021] 為解決【背景技術(shù)】中提到的技術(shù)問(wèn)題,本發(fā)明提供一種多節(jié)點(diǎn)參與卷修復(fù)以提高修 復(fù)效率的方案。
[0022] 多節(jié)點(diǎn)同時(shí)參與卷修復(fù)時(shí),通??梢杂筛鱾€(gè)節(jié)點(diǎn)分別遍歷卷里的文件進(jìn)行修復(fù)。 如果不做規(guī)劃,各節(jié)點(diǎn)同時(shí)操作卷中的文件的話,會(huì)造成數(shù)據(jù)錯(cuò)誤。所以一般可以采用文件 加鎖的方式來(lái)避免這種錯(cuò)誤,但是文件加鎖非常復(fù)雜,整體上的修復(fù)效率可能比【背景技術(shù)】 中提到的方案還要低。
[0023] 所以,多個(gè)節(jié)點(diǎn)在參與卷修復(fù)時(shí),需要規(guī)劃各節(jié)點(diǎn)修復(fù)的文件,即明確卷中待修復(fù) 的文件到底由哪個(gè)節(jié)點(diǎn)進(jìn)行修復(fù)。以下通過(guò)具體實(shí)施例進(jìn)行說(shuō)明。
[0024] 請(qǐng)參圖3所示的本發(fā)明實(shí)施例流程圖。
[0025] S31、預(yù)先給各存儲(chǔ)節(jié)點(diǎn)分配修復(fù)節(jié)點(diǎn)值;
[0026] S32、存儲(chǔ)節(jié)點(diǎn)在參與卷修復(fù)時(shí),遍歷卷里的文件,根據(jù)某算法,以遍歷到的文件在 卷中的相對(duì)路徑為參數(shù),計(jì)算得到該文件對(duì)應(yīng)的修復(fù)節(jié)點(diǎn)值;
[0027] S33、判斷計(jì)算得到的修復(fù)節(jié)點(diǎn)值是否屬于分配給自身的修復(fù)節(jié)點(diǎn)值,如果是,則 執(zhí)行對(duì)該遍歷到的文件的修復(fù),否則不修復(fù)。
[0028] 為了對(duì)上述實(shí)施例能有更清楚地解釋,下面通過(guò)兩個(gè)例子來(lái)說(shuō)明。
[0029] 首先以某算法為hash算法為例。
[0030] 預(yù)先為每個(gè)存儲(chǔ)節(jié)點(diǎn)分配的修復(fù)節(jié)點(diǎn)值為一段hash值。在節(jié)點(diǎn)啟動(dòng)修復(fù)進(jìn)程時(shí) 首先獲取各存儲(chǔ)節(jié)點(diǎn)信息并排序,然后將O-OxFFFFFFFF均勻分配,獲得本節(jié)點(diǎn)對(duì)應(yīng)的hash 值范圍。以4個(gè)節(jié)點(diǎn)為例:A/B/C/D四個(gè)節(jié)點(diǎn)各自獲得一段hash范圍,由O-OxFFFFFFFF均 分得到:
[0032] 節(jié)點(diǎn)在參與卷的修復(fù)時(shí),遍歷卷里的文件,根據(jù)文件在卷里的相對(duì)路徑,即文件名 計(jì)算hash值,若hash值在本節(jié)點(diǎn)hash范圍內(nèi)則進(jìn)行修復(fù);若不在本節(jié)點(diǎn)hash范圍內(nèi),貝1J 跳過(guò)。比如說(shuō),節(jié)點(diǎn)A根據(jù)文件1在卷中的相對(duì)路徑計(jì)算hash值,假設(shè)計(jì)算得到的hash值 為0x3ffffffa,由于節(jié)點(diǎn)A預(yù)先分配到的hash值范圍為0x0_0x3ffffffe,計(jì)算得到的hash 值0x3ffffffa在該范圍內(nèi),所以該文件1由節(jié)點(diǎn)A進(jìn)行修復(fù)。
[0033] 進(jìn)一步參圖4的流程圖說(shuō)明。
[0034] 請(qǐng)參圖4所示的流程圖。
[0035] S41、節(jié)點(diǎn)分配到一段hash范圍;
[0036] S42、讀取目錄的每一項(xiàng);
[0037] S43、判斷是否讀取完畢,如果是,轉(zhuǎn)S49,否則,轉(zhuǎn)S44 ;
[0038] S44、判斷該項(xiàng)是否為目錄,如果是,轉(zhuǎn)S42,否則,轉(zhuǎn)S45 ;
[0039] S45、計(jì)算文件的hash值;
[0040] S46、判斷該hash值是否在本節(jié)點(diǎn)的hash范圍內(nèi),如果是,轉(zhuǎn)S47,否則,返回S42 ;
[0041] S47、讀取文件屬性,判斷文件是否需要修復(fù),如果是,轉(zhuǎn)S48 ;否則,返回S42 ;
[0042] S48、本節(jié)點(diǎn)執(zhí)行文件修復(fù),返回S42。
[0043] 通過(guò)上文描述可以看出,在多個(gè)存儲(chǔ)節(jié)點(diǎn)參與卷中文件的修復(fù)時(shí),使用某種算法 讓每個(gè)節(jié)點(diǎn)只負(fù)責(zé)卷里部分文件的修復(fù),由此既保證了所有節(jié)點(diǎn)都參與了卷的修復(fù),也保 證了同一個(gè)文件只被一個(gè)節(jié)點(diǎn)進(jìn)行修復(fù),并且卷中的每個(gè)文件都進(jìn)行了修復(fù)。如果集群里 存儲(chǔ)節(jié)點(diǎn)較多,將明顯提高卷修復(fù)的效率。由于單個(gè)文件只會(huì)在一個(gè)節(jié)點(diǎn)上觸發(fā)修復(fù),由此 也避