分布式存儲ceph的數(shù)據(jù)分布優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)存儲技術(shù)領(lǐng)域,尤其是涉及一種分布式存儲CEPH的數(shù)據(jù)分布優(yōu)化方法。
【背景技術(shù)】
[0002]隨著信息技術(shù)的發(fā)展,全球數(shù)據(jù)呈爆炸式增長。集中式存儲服務(wù)器,無法滿足系統(tǒng)高可靠,可擴(kuò)展性等要求,而且會是性能熱點(diǎn)。分布式存儲很好的解決了這些問題。CEPH是開源的分布式存儲系統(tǒng),也能夠同時提供塊、文件和對象接口服務(wù),其底層是一個對象存儲系統(tǒng)RAD0S。與其他分布式文件系統(tǒng)相比,CEPH的數(shù)據(jù)分布算法是其一大亮點(diǎn)。傳統(tǒng)的數(shù)據(jù)映射,都是通過元數(shù)據(jù)去查詢具體位置,因此元數(shù)據(jù)查詢將成為性能熱點(diǎn)。CEPH應(yīng)用兩級數(shù)據(jù)映射算法,使得數(shù)據(jù)映射無需進(jìn)行元數(shù)據(jù)查詢,只需在客戶端計(jì)算,即可得出數(shù)據(jù)存儲的具體位置。CEPH數(shù)據(jù)分布算法的第一層映射是將對象映射至PG(PlaCement Group),采用的是傳統(tǒng)的哈希算法。第二層映射是運(yùn)用CRUSH算法將PG映射至若干個0SD(0bject StorageDevice),一般來說一個磁盤對應(yīng)一個OSD XEPH采用副本機(jī)制來確保數(shù)據(jù)的高可用,CRUSH算法會為各PG計(jì)算出副本個數(shù)個OSD,其中第一個OSD是存儲主副本的,其他OSD存儲普通副本。CEPH采用的是R0WA(Read-0ne_ffrite-All),Write操作必須寫入所有副本,所有的Read操作都從主副本讀取。不同對象的主副本可能分散在不同機(jī)器上。
[0003]當(dāng)PG數(shù)量增加時,由于第一層映射采用的是傳統(tǒng)的哈希算法,對象到PG的映射會大量更改,從而造成底層的數(shù)據(jù)迀移。使用API讀取數(shù)據(jù)時,由于對象的主副本分散在各機(jī)器上,在讀取的過程中需要在集群內(nèi)跨機(jī)器讀取。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種分布式存儲CEPH的數(shù)據(jù)分布優(yōu)化方法,改善CEPH數(shù)據(jù)映射存在的問題,提高數(shù)據(jù)讀取的性能。
[0005]本發(fā)明的目的可以通過以下技術(shù)方案來實(shí)現(xiàn):
[0006]—種分布式存儲CEPH的數(shù)據(jù)分布優(yōu)化方法,其特征在于,包括:
[0007]1)將第一層映射的普通哈希算法替換為一致性哈希算法;
[0008]2)在第二層映射中,為CRUSH算法添加一個本地化參數(shù),在設(shè)定情況下,使得應(yīng)用和主副本位于同一 CEPH節(jié)點(diǎn)上。
[0009]所述的一致性哈希算法采用哈希環(huán)的形式,當(dāng)PG數(shù)目增加時,對象的映射結(jié)果變化較傳統(tǒng)哈希算法少。
[0010]所述的步驟2)具體為:
[0011]201)添加兩條CEPH命令,用于設(shè)置本地化參數(shù)local的數(shù)值;
[0012]202)為Crush算法的crush_do_rule函數(shù)添加本地化參數(shù)local ;
[0013]203)當(dāng)新建一個對象時,若local為True,先判斷寫入該對象客戶端是否位于CEPH集群,若位于集群的某一節(jié)點(diǎn)A,則local = local&True;反之local = local&False ;
[0014]204)若local為True,再判斷CRUSH rule中是否包含節(jié)點(diǎn)A所管理的0SD,若rule中包含節(jié)點(diǎn)A 所管理的0SD,則 local = local&False;反之 local = local&False ;
[0015]205)若 local 為False,crush_do_rule 函數(shù)不做任何改變,若 local 為 True,在crush_do_rule中,先選節(jié)點(diǎn)A中的0SD,再選擇其他副本所在的0SD。
[0016]所述的兩條CEPH命令分別為:
[0017]ceph osd crush set local,表不local的值為True;
[0018]ceph osd crush unset local,表不local的值為False。
[0019]所述的步驟202)中l(wèi)ocal為True時,使得主副本在本節(jié)點(diǎn)上。
[0020]所述的步驟206)中,根據(jù)CEPH的規(guī)則,第一個0SD即為主0SD。
[0021 ]與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):
[0022]1、當(dāng)CEPH集群的PG數(shù)量增多時,相較于現(xiàn)有算法,映射關(guān)系改變的對象變少。也就意味著,在CEPH底層,數(shù)據(jù)的迀移量變小,有利于節(jié)省網(wǎng)絡(luò)開銷。在上層應(yīng)用壓力較大時,節(jié)省該部分開銷能提高CEPH的讀寫性能。
[0023]2、當(dāng)客戶端位于集群某個節(jié)點(diǎn)A上時,優(yōu)化后的CRUSH算法,會將對象的主副本都選取在節(jié)點(diǎn)A的0SD上。一般來說,同一對象的讀取和寫入都會在同一客戶端進(jìn)行。由于CEPH采用的是R0WA,讀取對象時都會從主副本讀取,因此客戶端在讀取對象時,在本節(jié)點(diǎn)讀取即可,無需跨越集群網(wǎng)絡(luò)在其他節(jié)點(diǎn)讀取。從而有利用提高系統(tǒng)的讀性能。
【附圖說明】
[0024]圖1為對象到PG普通哈希映射示意圖;
[0025]圖2為對象到PG—致性哈希示意圖;
[0026]圖3為CEPH對象存儲以及對象讀取路徑示意圖;
[0027]圖4為PG增加為4時CEPH對象存儲及讀取路徑示意圖;
[0028]圖5為優(yōu)化后CEPH對象存儲以及對象讀取路徑示意圖;
[0029]圖6為PG增加為4時優(yōu)化后CEPH對象存儲及讀取路徑示意圖。
【具體實(shí)施方式】
[0030]下面結(jié)合附圖和具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)說明。
[0031 ] 實(shí)施例
[0032]本發(fā)明對CEPH的兩級數(shù)據(jù)分布方法,主要做了以下優(yōu)化。
[0033]1、將第一層映射的普通哈希算法,替換為一致性哈希算法。傳統(tǒng)的哈希算法,當(dāng)PG數(shù)目增加時,所有的數(shù)據(jù)需重新計(jì)算映射結(jié)果,數(shù)據(jù)的映射結(jié)果會產(chǎn)生較大變化。一致性哈希算法采用哈希環(huán)的形式,當(dāng)PG數(shù)目增加時,對象的映射結(jié)果變化較傳統(tǒng)哈希算法少?,F(xiàn)有的第一層映射示意圖如圖1所示。當(dāng)增加一個PG時,對象4、5、6都會映射到新的PG。替換成一致性哈希算法后,只有對象5的映射PG改變了,如圖2。
[0034]2、在第二層映射中,為CRUSH算法添加一個本地化參數(shù),使得在特定情況下,對象的主副本離應(yīng)用最“近”。這里的“近”,意思是使得應(yīng)用和主副本位于同一CEPH節(jié)點(diǎn)上。具體步驟如下:
[0035]2.1添加兩條CEPH命令
[0036]ceph osd crush set local
[0037]ceph osd crush unset local
[0038]set local后,表不local的值為True;unset表不local的值為False。
[0039]2.2為Crush算法的crush_do_rule函數(shù)添加一個參數(shù)local。當(dāng)local為True時,使得主副本在本節(jié)點(diǎn)上。
[0040]2.3當(dāng)新建一個對象時,若local為True,先判斷寫入該對象客戶端是否位于CEPH集群。若位于集群的某一節(jié)點(diǎn)A,則local = local&True;反之local = local&False。
[0041 ] 2.4若local為True,再判斷CRUSH rule中是否包含節(jié)點(diǎn)A所管理的0SD。若rule中包含節(jié)點(diǎn)A 所管理的0SD,則 local = local&False;反之 local = local&False。
[0042]2.6 若 local 為 False,crush_do_rule 函數(shù)不做任何改變。若 local 為True,在crush_do_rule中,先選節(jié)點(diǎn)A中的0SD,再選擇其他副本所在的0SD。根據(jù)CEPH的規(guī)則,第一個0SDS卩為主0SD。
[0043]實(shí)施方式舉例
[0044]共有三個節(jié)點(diǎn)A、B、C用來搭建CEPH集群,每個節(jié)點(diǎn)一共包含兩塊磁盤。系統(tǒng)整體框圖如圖3所示。
[0045]1、修改CEPH兩級數(shù)據(jù)分布算法后,搭建好CEPH集群。
[0046]2、調(diào)用ceph osd crush set local命令,設(shè)置本地化參數(shù)。
[0047]3、新建池七68七口001以及1^)(1鏡像七681:;[1]^區(qū)6。
[0048]4、池testpool中是三副本,crush rule為在三個節(jié)點(diǎn)上各選一個0SD。在節(jié)點(diǎn)A,用tgt將testpool/testimage掛載出去。在tgt中,使用了CEPH塊設(shè)備的API,即tgt為CEPH的客戶端。
[0049]5、用另一臺機(jī)器T上安裝tgt initiator,連接機(jī)器A上的tgt。此時機(jī)器T上將多出一個iSCSI磁盤,假設(shè)其為/ dev/sdc。對/dev/sdc進(jìn)行數(shù)據(jù)讀寫。
[0050]機(jī)器T在對/dev/sdc進(jìn)行讀寫時,經(jīng)過轉(zhuǎn)換,相當(dāng)于在CEPH底層寫入了一系列對象。假設(shè)testpool—共有3個PG。在傳統(tǒng)數(shù)據(jù)映射算法下,各PG的映射情況為PG1映射到osd[0,3,4],PG2映射到osd[3,5,1],PG3映射到osd[5,0,2]。以對象1?6為例,對象到PG的映射關(guān)系如圖1,其在磁盤中的存儲情況以及tgt讀取數(shù)據(jù)的路徑如圖3所示。其中填充的對象表示該對象是主副本,其他對象為從副本。當(dāng)PG數(shù)量變化時,根據(jù)現(xiàn)有數(shù)據(jù)映射算法,假設(shè)新增了 PG4,映射為osd [ 1,4,2],其對象在磁盤的存儲情況以及tgt讀取數(shù)據(jù)的路徑如圖4,其中粗線條框的對象表示較圖3中變化的對象。優(yōu)化后的數(shù)據(jù)映射算法,PG到osd的映射將發(fā)生如下變化,PG1映射到osd[0,3,4],PG2映射到osd[ 1,3,5],PG3映射到[0,2,5],PG4映射到[1,4,2]。當(dāng)PG數(shù)為3時,對象在磁盤中的存儲情況以及tgt讀取數(shù)據(jù)的路徑如圖5所示。當(dāng)PG數(shù)增加為4時,如圖6所示。
【主權(quán)項(xiàng)】
1.一種分布式存儲CEPH的數(shù)據(jù)分布優(yōu)化方法,其特征在于,包括: 1)將第一層映射的普通哈希算法替換為一致性哈希算法; 2)在第二層映射中,為CRUSH算法添加一個本地化參數(shù),在設(shè)定情況下,使得應(yīng)用和主副本位于同一 CEPH節(jié)點(diǎn)上。2.根據(jù)權(quán)利要求1所述的一種分布式存儲CEPH的數(shù)據(jù)分布優(yōu)化方法,其特征在于,所述的一致性哈希算法采用哈希環(huán)的形式,當(dāng)PG數(shù)目增加時,對象的映射結(jié)果變化較傳統(tǒng)哈希算法少。3.根據(jù)權(quán)利要求1所述的一種分布式存儲CEPH的數(shù)據(jù)分布優(yōu)化方法,其特征在于,所述的步驟2)具體為: 201)添加兩條CEPH命令,用于設(shè)置本地化參數(shù)local的數(shù)值; 202)為Crush算法的crush_do_rule函數(shù)添加本地化參數(shù)local; 203)當(dāng)新建一個對象時,若local為True,先判斷寫入該對象客戶端是否位于CEPH集群,若位于集群的某一節(jié)點(diǎn)A,則local = local&True;反之local = local&False ; 204)若local為True,再判斷CRUSHrule中是否包含節(jié)點(diǎn)A所管理的0SD,若rule中包含節(jié)點(diǎn)A所管理的0SD,則 local = local&False;反之 local = local&False ; 205)若local為False,crush_do_rule函數(shù)不做任何改變,若local為True,在crush_do_rule中,先選節(jié)點(diǎn)A中的OSD,再選擇其他副本所在的OSD。4.根據(jù)權(quán)利要求3所述的一種分布式存儲CEPH的數(shù)據(jù)分布優(yōu)化方法,其特征在于,所述的兩條CEPH命令分別為: ceph osd crush set local,表不local 的值為True; ceph osd crush unset local,表不local的值為False。5.根據(jù)權(quán)利要求3所述的一種分布式存儲CEPH的數(shù)據(jù)分布優(yōu)化方法,其特征在于,所述的步驟202)中l(wèi)ocal為True時,使得主副本在本節(jié)點(diǎn)上。6.根據(jù)權(quán)利要求3所述的一種分布式存儲CEPH的數(shù)據(jù)分布優(yōu)化方法,其特征在于,所述的步驟206)中,根據(jù)CEPH的規(guī)則,第一個0SD即為主0SD。
【專利摘要】本發(fā)明涉及一種分布式存儲CEPH的數(shù)據(jù)分布優(yōu)化方法,包括:1)將第一層映射的普通哈希算法替換為一致性哈希算法;2)在第二層映射中,為CRUSH算法添加一個本地化參數(shù),在設(shè)定情況下,使得應(yīng)用和主副本位于同一CEPH節(jié)點(diǎn)上。與現(xiàn)有技術(shù)相比,本發(fā)明具有改善CEPH數(shù)據(jù)映射存在的問題,提高數(shù)據(jù)讀取的性能等優(yōu)點(diǎn)。
【IPC分類】H04L29/08
【公開號】CN105450734
【申請?zhí)枴緾N201510755992
【發(fā)明人】魯莎莎
【申請人】上海愛數(shù)信息技術(shù)股份有限公司
【公開日】2016年3月30日
【申請日】2015年11月9日