一種基于數(shù)據(jù)緩存的糾刪碼集群存儲(chǔ)擴(kuò)容方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明屬于計(jì)算機(jī)存儲(chǔ)領(lǐng)域,更具體地,涉及一種基于數(shù)據(jù)緩存的糾刪碼集群存儲(chǔ)擴(kuò)容方法。
【背景技術(shù)】
[0002]糾刪碼廣泛應(yīng)用于分布式存儲(chǔ),糾刪碼存儲(chǔ)集群將數(shù)據(jù)按糾刪編碼方式存放到多個(gè)存儲(chǔ)節(jié)點(diǎn)上,借助糾刪碼自有冗余特性,使得存儲(chǔ)集群具備了一定的容錯(cuò)能力。目前應(yīng)用于存儲(chǔ)系統(tǒng)的糾刪編碼主要包括陣列編碼(RAID碼)、最小密度校驗(yàn)碼(LDPC碼)和里德-所羅門編碼(RS碼)。在相同容量條件下,RS編碼具有比陣列編碼更高的容錯(cuò)能力;LDPC碼具有譯碼不確定性,其無(wú)法保證譯碼肯定成功,當(dāng)數(shù)目很小的信息塊丟失時(shí),可能導(dǎo)致無(wú)法完全恢復(fù)出完整信息,因此LDPC碼并不完全適合于對(duì)需要100%數(shù)據(jù)恢復(fù)的存儲(chǔ)系統(tǒng)。本發(fā)明針對(duì)的是基于RS碼的存儲(chǔ)集群。
[0003]隨著存儲(chǔ)集群的運(yùn)行和使用,集群中存儲(chǔ)容量將逐漸減少,需要通過(guò)增加存儲(chǔ)節(jié)點(diǎn)的方式來(lái)增加系統(tǒng)中存儲(chǔ)容量,稱之為‘存儲(chǔ)集群擴(kuò)容’。現(xiàn)有的磁盤陣列擴(kuò)展方案主要針對(duì)RAID-0、RAID-4、RAID-5和RAID-6,RAID-0擴(kuò)容方案只處理數(shù)據(jù)的迀移,未考慮校驗(yàn)數(shù)據(jù)的更新;RAID-4要求在所有數(shù)據(jù)磁盤上有均勻的數(shù)據(jù)分布,使得RAID-4擴(kuò)容方案會(huì)導(dǎo)致大量的數(shù)據(jù)迀移;RAID-5采用基于輪詢的數(shù)據(jù)分布,如果將RAID-5擴(kuò)容方案應(yīng)用于RS碼存儲(chǔ)集群,集群將面臨大量數(shù)據(jù)移動(dòng)和校驗(yàn)更新的高I/O開(kāi)銷問(wèn)題。RAID-6擴(kuò)容方案專門為特定RAID-6編碼和RAID-6布局而設(shè)計(jì),并不適用于糾刪碼存儲(chǔ)集群;因此現(xiàn)有的磁盤陣列擴(kuò)展方案均不適于集群存儲(chǔ)擴(kuò)容。
【發(fā)明內(nèi)容】
[0004]針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種基于數(shù)據(jù)緩存的RS糾刪碼集群存儲(chǔ)擴(kuò)容方法,將用戶訪問(wèn)時(shí)緩存在內(nèi)存中的數(shù)據(jù)直接用于編碼計(jì)算,在降低磁盤讀取的同時(shí),可以將熱點(diǎn)訪問(wèn)均勻地分散到多個(gè)節(jié)點(diǎn)上,達(dá)到讀寫訪問(wèn)平衡。
[0005]為了實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明提供了一種基于數(shù)據(jù)緩存的RS糾刪碼集群存儲(chǔ)擴(kuò)容方法,包括響應(yīng)客戶端讀數(shù)據(jù)請(qǐng)求的步驟和集群存儲(chǔ)擴(kuò)容的步驟,具體如下:
[0006](I)響應(yīng)客戶端讀數(shù)據(jù)請(qǐng)求:根據(jù)客戶端讀數(shù)據(jù)請(qǐng)求,在元數(shù)據(jù)服務(wù)器上定位目標(biāo)數(shù)據(jù)分塊所在的節(jié)點(diǎn);并判斷該目標(biāo)數(shù)據(jù)分塊是否命中該節(jié)點(diǎn)的緩存;
[0007]將命中緩存的數(shù)據(jù)分塊直接返回給客戶端;對(duì)于未命中緩存的數(shù)據(jù)分塊,則將其從磁盤讀取到緩存;若從磁盤讀取的數(shù)據(jù)分塊處于新條帶,則將其從緩存發(fā)送到客戶端,若從磁盤讀取的數(shù)據(jù)分塊處于舊條帶,則在將其發(fā)送到客戶端,并發(fā)送到新增節(jié)點(diǎn);
[0008]本步驟中,目標(biāo)數(shù)據(jù)分塊發(fā)送到客戶端與該數(shù)據(jù)分塊發(fā)送到新增節(jié)點(diǎn)的動(dòng)作同步進(jìn)tx,起到提尚擴(kuò)容效率的作用;
[0009](2)集群存儲(chǔ)擴(kuò)容:
[0010]新增節(jié)點(diǎn)根據(jù)接收到的舊數(shù)據(jù)分塊,采用RS糾刪編碼計(jì)算得到新校驗(yàn)分塊;由該舊數(shù)據(jù)分塊和新校驗(yàn)分塊構(gòu)成新條帶;將新條帶上的分塊(包括數(shù)據(jù)分塊和校驗(yàn)分塊)均勻分布到存儲(chǔ)集群的各節(jié)點(diǎn);其中,舊數(shù)據(jù)分塊指的是新增節(jié)點(diǎn)接收的處于舊條帶的數(shù)據(jù)分塊;
[0011]上述方法中,直接讀取客戶端訪問(wèn)時(shí)緩存的數(shù)據(jù)分塊,即位于舊條帶上的舊數(shù)據(jù)分塊,將其直接用于RS糾刪編碼計(jì)算,以獲取新條帶的新校驗(yàn)分塊,減少了由“讀取舊數(shù)據(jù)分塊”所帶來(lái)的磁盤讀寫開(kāi)銷;將新條帶上的分塊重新分布,可以將熱點(diǎn)訪問(wèn)均勻地分散到集群中多個(gè)節(jié)點(diǎn)上,達(dá)到存儲(chǔ)集群讀寫訪問(wèn)平衡。
[0012]優(yōu)選地,上述基于數(shù)據(jù)緩存的RS糾刪碼集群存儲(chǔ)擴(kuò)容方法,在步驟(I)之前,還包括初始化步驟:在該步驟中,每個(gè)集群節(jié)點(diǎn)預(yù)先分配緩存,在集群中指定一個(gè)節(jié)點(diǎn)作為元數(shù)據(jù)服務(wù)器用來(lái)管理集群中的節(jié)點(diǎn)(包括擴(kuò)容前的節(jié)點(diǎn)和擴(kuò)容后的新增節(jié)點(diǎn)),并維護(hù)一個(gè)全局?jǐn)?shù)據(jù)分配表;
[0013]其中,全局?jǐn)?shù)據(jù)分配表用于管理存儲(chǔ)集群中所有分塊的放置位置,以及各分塊所屬的條帶。
[0014]優(yōu)選地,上述步驟(I)具體包括如下子步驟:
[0015](1.1)元數(shù)據(jù)服務(wù)器根據(jù)接收到的讀數(shù)據(jù)請(qǐng)求,判斷存儲(chǔ)集群中是否存在請(qǐng)求所包含的目標(biāo)數(shù)據(jù)分塊;若是,則進(jìn)入步驟(1.2);若否,則接收下一條客戶端讀數(shù)據(jù)請(qǐng)求;
[0016](1.2)查找目標(biāo)數(shù)據(jù)分塊在集群節(jié)點(diǎn)所處的位置以及目標(biāo)數(shù)據(jù)分塊所在的條帶;
[0017](1.3)判斷在該集群節(jié)點(diǎn)的緩存中是否命中目標(biāo)數(shù)據(jù)分塊,若是,將緩存中的目標(biāo)數(shù)據(jù)分塊發(fā)送給客戶端;若否,則進(jìn)入步驟(1.4);
[0018](1.4)從磁盤中讀取目標(biāo)數(shù)據(jù)分塊發(fā)送到緩存,并判斷目標(biāo)數(shù)據(jù)分塊是否位于舊條帶,若是,則將目標(biāo)數(shù)據(jù)分塊發(fā)送到新增節(jié)點(diǎn)的緩存,同時(shí)將目標(biāo)數(shù)據(jù)分塊發(fā)送到客戶端;若否,則直接將目標(biāo)數(shù)據(jù)分塊發(fā)送到客戶端。
[0019]優(yōu)選地,步驟(2)具體包括如下子步驟:
[0020](2.1)往存儲(chǔ)集群中添加新節(jié)點(diǎn),以在物理上增加存儲(chǔ)集群的容量;
[0021](2.2)新增節(jié)點(diǎn)接收并緩存舊數(shù)據(jù)分塊;
[0022](2.3)判斷新增節(jié)點(diǎn)緩存中接收到的數(shù)據(jù)分塊數(shù)目是否達(dá)到閾值;若是,則采用RS糾刪編碼方法生成新校驗(yàn)分塊;若否,則進(jìn)入步驟(2.2);其中,閾值是指一個(gè)完整新條帶中的數(shù)據(jù)分塊數(shù)目;
[0023](2.4)將新條帶上的分塊均勻分布到存儲(chǔ)集群的各個(gè)節(jié)點(diǎn),使得分塊在存儲(chǔ)集群各節(jié)點(diǎn)間傳輸所產(chǎn)生的網(wǎng)絡(luò)開(kāi)銷最小。
[0024]優(yōu)選地,上述步驟(2.4)具體包括如下子步驟:
[0025](2.4.1)新增節(jié)點(diǎn)將緩存中的一個(gè)校驗(yàn)分塊寫入磁盤,將(Δ k+ Δ r_l)個(gè)數(shù)據(jù)分塊發(fā)送到其他新增節(jié)點(diǎn);將(r’-l)個(gè)校驗(yàn)分塊寫回舊條帶所在節(jié)點(diǎn)的磁盤,并替換所在節(jié)點(diǎn)上的舊數(shù)據(jù)分塊;其中,Δ k是新條帶相比舊條帶增加的數(shù)據(jù)分塊數(shù),Δ r是新條帶相比舊條帶增加的校驗(yàn)分塊數(shù),r ’是新條帶中新校驗(yàn)分塊數(shù);
[0026](2.4.2)當(dāng)新條帶中全部的數(shù)據(jù)分塊和校驗(yàn)分塊寫入存儲(chǔ)集群節(jié)點(diǎn)的磁盤時(shí),更新元數(shù)據(jù)服務(wù)器中的全局?jǐn)?shù)據(jù)分配表;
[0027]在上述步驟(2.4.1)中,通過(guò)在集群節(jié)點(diǎn)間重新分布新條帶中部分的數(shù)據(jù)分塊和全部的校驗(yàn)分塊,實(shí)現(xiàn)新條帶分塊(包括數(shù)據(jù)分塊和校驗(yàn)分塊)在存儲(chǔ)集群節(jié)點(diǎn)中均勻分布的同時(shí),減少網(wǎng)絡(luò)傳輸開(kāi)銷。
[0028]總體而言,通過(guò)本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,能夠取得下列有益效果:
[0029](I)本發(fā)明提供的這種基于緩存的RS糾刪碼存儲(chǔ)集群擴(kuò)容方法,通過(guò)迀移響應(yīng)客戶端請(qǐng)求時(shí)緩存中的數(shù)據(jù)分塊,節(jié)省擴(kuò)容時(shí)從磁盤讀取數(shù)據(jù)分塊的開(kāi)銷,同時(shí)實(shí)現(xiàn)熱點(diǎn)數(shù)據(jù)在存儲(chǔ)集群中所有節(jié)點(diǎn)上的均勻分布,有效提高集群節(jié)點(diǎn)的并行訪問(wèn)效率;
[0030](2)本發(fā)明提供的這種基于緩存的RS糾刪碼存儲(chǔ)集群擴(kuò)容方法,通過(guò)新增節(jié)點(diǎn)對(duì)接收到的舊數(shù)據(jù)分塊直接進(jìn)行RS糾刪編碼生成新條帶中的新校驗(yàn)分塊,提高了 RS糾刪編碼集群存儲(chǔ)擴(kuò)容效率;
[0031](3)本發(fā)明提供的這種基于緩存的RS糾刪碼存儲(chǔ)集群擴(kuò)容方法,在新條帶分塊重新分布過(guò)程中,每個(gè)計(jì)算新條帶上的校驗(yàn)分塊的節(jié)點(diǎn)本地磁盤保存一個(gè)校驗(yàn)分塊,其他的校驗(yàn)分塊發(fā)送給擴(kuò)容前的節(jié)點(diǎn)替換掉舊條帶中的數(shù)據(jù)分塊,舊條帶中其余數(shù)據(jù)分塊在集群節(jié)點(diǎn)中的位置保持不變,在實(shí)現(xiàn)一個(gè)新條帶分塊均勻分布在集群各節(jié)點(diǎn)的同時(shí),盡量減小新條帶分塊重新分布帶來(lái)的網(wǎng)絡(luò)傳輸流量開(kāi)銷;
[0032](4)本發(fā)明提供的這種基于緩存的糾刪碼擴(kuò)容方法,其優(yōu)選方案里,采用異步方式執(zhí)行數(shù)據(jù)讀響應(yīng)和數(shù)據(jù)迀移,改善了由于數(shù)據(jù)迀移造成的數(shù)據(jù)不可用情況,加快存儲(chǔ)集群擴(kuò)容過(guò)程。
【附圖說(shuō)明】
[0033]圖1是(k+r,k)RS碼存儲(chǔ)集群數(shù)據(jù)布局示意圖;
[0034]圖2是RS糾刪碼集群響應(yīng)客戶端請(qǐng)求流程圖;
[0035]圖3是本發(fā)明條帶上的分塊迀移示意圖,其中圖3(a)是舊節(jié)點(diǎn)向新增節(jié)點(diǎn)發(fā)送緩存數(shù)據(jù)分塊過(guò)程示意圖,圖3(b)是新條帶分塊重新分布過(guò)程示意圖;
[0036]圖4是實(shí)施例的RS糾刪碼集群存儲(chǔ)擴(kuò)容方法的流程圖;
[0037]圖5是本發(fā)明實(shí)施例中RS糾刪碼集群存儲(chǔ)擴(kuò)容過(guò)程示意圖。
【具體實(shí)施方式】
[0038]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
[0039]以下首先就本發(fā)明所涉及的技術(shù)術(shù)語(yǔ)進(jìn)行解釋和說(shuō)明:
[0040]RS糾刪碼存儲(chǔ)集群的無(wú)固定數(shù)據(jù)布局:如圖1所示,無(wú)固定布局的(k+r,k)RS糾刪碼存儲(chǔ)集群中的節(jié)點(diǎn)無(wú)數(shù)據(jù)節(jié)點(diǎn)和校驗(yàn)節(jié)點(diǎn)區(qū)分,即每個(gè)節(jié)點(diǎn)既可用于存放數(shù)據(jù)分塊,也可用于存放校驗(yàn)分塊;將擴(kuò)容前RS糾刪碼集群中的一個(gè)舊條帶表示為(k+r,k);當(dāng)RS糾刪碼集群中增加(△ k+Δ r)個(gè)節(jié)點(diǎn)進(jìn)行存儲(chǔ)擴(kuò)容時(shí),相應(yīng)的,一個(gè)新條帶的數(shù)據(jù)分塊數(shù)增加Δ k,校驗(yàn)分塊數(shù)增加Ar;將新條帶表示為(k',V ),其中,k'是擴(kuò)容后新條帶中的數(shù)據(jù)分塊數(shù),V是擴(kuò)容后新條帶中的校驗(yàn)分塊數(shù),新條帶中的所有的分塊獨(dú)立分布到RS糾刪碼集群中的各節(jié)點(diǎn)上,RS糾刪碼存儲(chǔ)集群擴(kuò)容過(guò)