本發(fā)明涉及一種基于glusterfs的高容錯(cuò)的分布式存儲(chǔ)方法,特別針對(duì)具有高速在線和低速離線備份雙存儲(chǔ)的以文件夾為原子單位的數(shù)據(jù)存儲(chǔ)。
背景技術(shù):
近年來(lái),隨著計(jì)算機(jī)和信息技術(shù)的迅猛發(fā)展和普及應(yīng)用,行業(yè)應(yīng)用系統(tǒng)的規(guī)模迅速擴(kuò)大,所產(chǎn)生的數(shù)據(jù)呈爆炸性增長(zhǎng)。動(dòng)輒達(dá)到數(shù)百tb甚至數(shù)百pb規(guī)模的行業(yè)/企業(yè)大數(shù)據(jù)已遠(yuǎn)遠(yuǎn)超出了傳統(tǒng)的計(jì)算機(jī)存儲(chǔ)能力,因此,分布式存儲(chǔ)的使用已經(jīng)越來(lái)越普及。
glusterfs是目前較為成熟的開(kāi)源分布式存儲(chǔ)軟件,是一個(gè)支持pb級(jí)數(shù)據(jù)存儲(chǔ)的無(wú)元數(shù)據(jù)服務(wù)器的分布式存儲(chǔ)系統(tǒng),支持線性性能擴(kuò)展。通過(guò)解除對(duì)元數(shù)據(jù)服務(wù)器的要求,消除了單點(diǎn)故障的性能瓶頸,真正實(shí)現(xiàn)了并行化數(shù)據(jù)訪問(wèn)。
對(duì)于許多大數(shù)據(jù)應(yīng)用而言,雖然數(shù)據(jù)總體規(guī)模非常大,但在特定時(shí)間段內(nèi)需要訪問(wèn)的數(shù)據(jù)通常僅占其中很小部分。因此,對(duì)于類似的大數(shù)據(jù)應(yīng)用,不僅需要大規(guī)模的存儲(chǔ)數(shù)據(jù),還需要快速的訪問(wèn)部分?jǐn)?shù)據(jù),而目前的數(shù)據(jù)訪問(wèn)瓶頸大部分仍然是磁盤(pán)性能。為了解決磁盤(pán)性能瓶頸,可以使用訪問(wèn)速度高的高速磁盤(pán),如固態(tài)硬盤(pán)。但是目前磁盤(pán)的訪問(wèn)速度與其單位存儲(chǔ)價(jià)格基本成正比,即訪問(wèn)速度越高的存儲(chǔ)介質(zhì)單位存儲(chǔ)成本往往更高。因此,對(duì)于一個(gè)擁有海量數(shù)據(jù)且某一時(shí)間段內(nèi)只需要訪問(wèn)一部分?jǐn)?shù)據(jù)的應(yīng)用而言,全部使用高速磁盤(pán)或者全部使用普通廉價(jià)磁盤(pán)都是不合理的,全部使用高速磁盤(pán)由于很多數(shù)據(jù)在很長(zhǎng)時(shí)間基本不會(huì)被訪問(wèn),造成了存儲(chǔ)成本的浪費(fèi);如果全部使用普通廉價(jià)磁盤(pán),則不能滿足快速訪問(wèn)數(shù)據(jù)的需求。對(duì)于此類應(yīng)用,可以將多個(gè)普通磁盤(pán)和少量的高速磁盤(pán)通過(guò)網(wǎng)絡(luò)連接成glusterfs集群,用高速磁盤(pán)當(dāng)做存儲(chǔ)節(jié)點(diǎn)創(chuàng)建高速訪問(wèn)distributed類型數(shù)據(jù)卷,用普通磁盤(pán)當(dāng)做存儲(chǔ)節(jié)點(diǎn)創(chuàng)建低速訪問(wèn)distributed類型數(shù)據(jù)卷。實(shí)現(xiàn)在存儲(chǔ)成本限制下,提供接近高速磁盤(pán)的數(shù)據(jù)訪問(wèn)服務(wù)。
對(duì)于許多應(yīng)用而言,其存儲(chǔ)數(shù)據(jù)是一個(gè)文件夾,并且文件夾中的文件相互依賴,一旦一個(gè)文件損壞或者丟失,則整個(gè)應(yīng)用數(shù)據(jù)文件夾損壞。如果應(yīng)用需要存儲(chǔ)的是大量這樣不可分割的數(shù)據(jù)文件夾,對(duì)于每個(gè)一個(gè)數(shù)據(jù)文件夾,目前的glusterfs存儲(chǔ)機(jī)制是文件會(huì)根據(jù)文件名hash分布存儲(chǔ)在不同的節(jié)點(diǎn)的磁盤(pán)上,這樣面臨的一個(gè)問(wèn)題是,一旦一個(gè)節(jié)點(diǎn)出現(xiàn)故障,幾乎所有的數(shù)據(jù)文件夾可能都會(huì)缺少部分文件,造成所有的數(shù)據(jù)文件夾損壞不可使用。
以上glusterfs集群中的高速數(shù)據(jù)卷是為了加快數(shù)據(jù)訪問(wèn)速度,其中存儲(chǔ)的數(shù)據(jù)低速數(shù)據(jù)卷中都有備份,所以可以允許節(jié)點(diǎn)損壞造成的部分?jǐn)?shù)據(jù)丟失,但是對(duì)于存儲(chǔ)整體數(shù)據(jù)文件夾,一個(gè)節(jié)點(diǎn)的故障則會(huì)造成數(shù)據(jù)的全部損壞,這是不能容忍的。并且由于高速數(shù)據(jù)卷采用高速磁盤(pán)做存儲(chǔ)介質(zhì),代價(jià)比較昂貴,而glusterfs的replicated數(shù)據(jù)卷的存儲(chǔ)利用率非常低,同時(shí),使用備份存儲(chǔ)因?yàn)閷?xiě)數(shù)據(jù)的時(shí)候需要寫(xiě)多份,會(huì)降低寫(xiě)性能,對(duì)于高速訪問(wèn)數(shù)據(jù)卷是不合適的。所以需要一個(gè)替代方案能夠滿足以下要求:
1.存儲(chǔ)利用率高,由于高速代價(jià)非常高,不能以較大的犧牲存儲(chǔ)保證數(shù)據(jù)安全性。
2.數(shù)據(jù)是相對(duì)安全的,一個(gè)節(jié)點(diǎn)的故障不能影響其他節(jié)點(diǎn)的數(shù)據(jù),高速存儲(chǔ)區(qū)中的數(shù)據(jù)在低速廉價(jià)存儲(chǔ)區(qū)都有備份,少量的數(shù)據(jù)文件夾的丟失可以接受,只需重新從低速存儲(chǔ)區(qū)再?gòu)?fù)制一份即可。
3.不會(huì)對(duì)數(shù)據(jù)的訪問(wèn)和存儲(chǔ)速度造成較大影響。
目前還沒(méi)有一個(gè)完整的存儲(chǔ)方案能夠滿足以上要求,glusterfs是基于彈性hash算法定位文件,所以文件的分布具有隨機(jī)性,對(duì)于同一個(gè)整體數(shù)據(jù)文件夾中的文件不能保證存儲(chǔ)在同一節(jié)點(diǎn)上,而這種整體數(shù)據(jù)文件夾中文件損壞或者丟失一個(gè),整體數(shù)據(jù)文件夾即損壞。所以,需要一種能夠?qū)⒄w文件夾中的文件存儲(chǔ)在同一節(jié)點(diǎn)上的高可用分布式存儲(chǔ)系統(tǒng)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于針對(duì)現(xiàn)有存儲(chǔ)技術(shù)的不足,針對(duì)整體數(shù)據(jù)文件夾的高效可靠存儲(chǔ)的需求,提出的基于glusterfs分布式存儲(chǔ)的以文件夾為單位分布的高效可靠分布式存儲(chǔ)方法。
一種基于glusterfs的高容錯(cuò)分布式存儲(chǔ)方法,包括:
步驟101、搭建glusterfs集群,并創(chuàng)建包含若干存儲(chǔ)節(jié)點(diǎn)的distributed類型數(shù)據(jù)卷,設(shè)置數(shù)據(jù)卷閾值,數(shù)據(jù)文件夾將以文件夾為單位分布存儲(chǔ)在數(shù)據(jù)卷中;
步驟102、在所有節(jié)點(diǎn)中創(chuàng)建數(shù)據(jù)文件夾;
步驟103、尋找最優(yōu)節(jié)點(diǎn),將最優(yōu)節(jié)點(diǎn)上創(chuàng)建的所述數(shù)據(jù)文件夾的哈希區(qū)間定為最大,使所有的文件哈希值落在所述最優(yōu)節(jié)點(diǎn)上,以使所述數(shù)據(jù)文件夾的所有文件都存儲(chǔ)在所述最優(yōu)節(jié)點(diǎn)上,其他節(jié)點(diǎn)上創(chuàng)建的所述數(shù)據(jù)文件夾的哈希區(qū)間設(shè)置為0,以使所述數(shù)據(jù)文件夾的所有文件哈希值不會(huì)落在這些其他節(jié)點(diǎn)的哈希區(qū)間內(nèi);
步驟104、在每個(gè)節(jié)點(diǎn)創(chuàng)建的所述數(shù)據(jù)文件夾的擴(kuò)展屬性trusted.glusterfs.dht中記錄分配到的哈希區(qū)間;
步驟105、使用glusterfs環(huán)境下的哈希計(jì)算方法,根據(jù)創(chuàng)建的將要存儲(chǔ)的所述數(shù)據(jù)文件夾中某個(gè)文件的文件名計(jì)算哈希值;
步驟106、根據(jù)計(jì)算得出的文件的哈希值,查看所有節(jié)點(diǎn)的所述數(shù)據(jù)文件夾的擴(kuò)展屬性中記錄的已被分配到的哈希區(qū)間,確定計(jì)算得出的文件的哈希值所在的節(jié)點(diǎn);
步驟107、在確定的待存儲(chǔ)節(jié)點(diǎn)上的所述數(shù)據(jù)文件夾下創(chuàng)建文件;依據(jù)相同的方法完成其他文件的創(chuàng)建,完成數(shù)據(jù)文件夾的存儲(chǔ)。
進(jìn)一步地,步驟103中所述尋找最優(yōu)節(jié)點(diǎn)進(jìn)一步包括:
步驟1031、掃描數(shù)據(jù)卷的所有節(jié)點(diǎn)的可用容量大小和已經(jīng)存儲(chǔ)數(shù)據(jù)的容量大?。徊襟E1032、查看所有節(jié)點(diǎn)的可用容量大小是否大于數(shù)據(jù)卷閾值,如果都小于閾值則選擇可用容量最大的節(jié)點(diǎn)為最優(yōu)節(jié)點(diǎn);如果存在可用容量大于閾值的節(jié)點(diǎn)則在可用容量大于閾值的節(jié)點(diǎn)中選擇已經(jīng)存儲(chǔ)數(shù)據(jù)最少的節(jié)點(diǎn)作為最優(yōu)節(jié)點(diǎn)。
進(jìn)一步地,當(dāng)數(shù)據(jù)卷已經(jīng)存儲(chǔ)一定量數(shù)據(jù)時(shí)新增節(jié)點(diǎn)使得數(shù)據(jù)不均衡時(shí),執(zhí)行再均衡操作使所有節(jié)點(diǎn)的負(fù)載均衡,所述再均衡操作具體包括:
步驟a、當(dāng)用戶進(jìn)行再均衡操作時(shí),遍歷所有節(jié)點(diǎn),對(duì)每個(gè)節(jié)點(diǎn),查看其可用容量是否大于數(shù)據(jù)卷創(chuàng)建時(shí)配置的閾值,如該節(jié)點(diǎn)可用容量大于閾值,則該節(jié)點(diǎn)數(shù)據(jù)不需要均衡,遍歷下一個(gè)節(jié)點(diǎn);否則,進(jìn)行步驟b對(duì)該節(jié)點(diǎn)進(jìn)行數(shù)據(jù)均衡;當(dāng)數(shù)據(jù)卷中的所有節(jié)點(diǎn)都被遍歷后結(jié)束再均衡操作。
步驟b、循環(huán)遷移需要進(jìn)行數(shù)據(jù)均衡的節(jié)點(diǎn)的最小數(shù)據(jù)文件夾,每次找到大小最小的數(shù)據(jù)文件夾,尋找數(shù)據(jù)卷中的最優(yōu)節(jié)點(diǎn),如果最優(yōu)節(jié)點(diǎn)可用容量也小于閾值,則整個(gè)數(shù)據(jù)均衡操作結(jié)束;否則,進(jìn)行步驟c遷移所述最小數(shù)據(jù)文件夾到最優(yōu)節(jié)點(diǎn)上;
步驟c、對(duì)需要遷移的數(shù)據(jù)文件夾中的每個(gè)文件,將其復(fù)制到確定出的最優(yōu)節(jié)點(diǎn)上的對(duì)應(yīng)文件夾中,所述對(duì)應(yīng)文件夾在創(chuàng)建文件夾的時(shí)已在每個(gè)節(jié)點(diǎn)都已被創(chuàng)建。
步驟d、在需要遷移的文件夾下的所有文件復(fù)制完成后,重新設(shè)置文件夾的擴(kuò)展屬性trusted.glusterfs.dht表示的哈希區(qū)間,將文件被遷移到的節(jié)點(diǎn)上文件夾的哈希區(qū)間設(shè)置為最大,而把文件遷出的節(jié)點(diǎn)上文件夾的哈希區(qū)間設(shè)置為最小,刪除文件遷出的節(jié)點(diǎn)上文件夾下的所有文件,該數(shù)據(jù)文件夾遷移完成,再次判斷文件遷出的節(jié)點(diǎn)的可用容量是否大于數(shù)據(jù)卷閾值,如果是,則遍歷數(shù)據(jù)卷的下一個(gè)節(jié)點(diǎn),否則,重復(fù)步驟b。
進(jìn)一步地,再均衡操作步驟b中尋找數(shù)據(jù)卷中的最優(yōu)節(jié)點(diǎn)包括,掃描數(shù)據(jù)卷的所有節(jié)點(diǎn)的可用容量大小和已經(jīng)存儲(chǔ)數(shù)據(jù)的容量大??;查看所有節(jié)點(diǎn)的可用容量大小是否大于數(shù)據(jù)卷閾值,如果都小于閾值則選擇可用容量最大的節(jié)點(diǎn)為最優(yōu)節(jié)點(diǎn);如果存在可用容量大于閾值的節(jié)點(diǎn)則在可用容量大于閾值的節(jié)點(diǎn)中選擇已經(jīng)存儲(chǔ)數(shù)據(jù)最少的節(jié)點(diǎn)作為最優(yōu)節(jié)點(diǎn)。
采用本發(fā)明可以達(dá)到以下技術(shù)效果:
在基于glusterfs的分布式文件存儲(chǔ)系統(tǒng)中,配置特定的文件夾名稱,該文件夾下的所有的文件都會(huì)分布在同一節(jié)點(diǎn)上,以保證glusterfs某個(gè)節(jié)點(diǎn)損壞的情況下,其他節(jié)點(diǎn)上的數(shù)據(jù)文件夾可以正常使用,成功的解決了glusterfs一個(gè)節(jié)點(diǎn)損壞會(huì)使數(shù)據(jù)卷中所有數(shù)據(jù)損壞的問(wèn)題。同時(shí),如數(shù)據(jù)卷節(jié)點(diǎn)的增加等可能會(huì)引起數(shù)據(jù)分布的不均衡,新節(jié)點(diǎn)負(fù)載較輕,原節(jié)點(diǎn)負(fù)載較重,會(huì)導(dǎo)致集群速度和穩(wěn)定性降低,glusterfs通過(guò)用戶會(huì)手動(dòng)執(zhí)行再均衡操作使數(shù)據(jù)重新均衡。但是glusterfs的再均衡操作會(huì)將破壞數(shù)據(jù)文件夾的統(tǒng)一存儲(chǔ),所以,還需要改進(jìn)再均衡操作以解決數(shù)據(jù)再均衡操作時(shí)數(shù)據(jù)文件的統(tǒng)一存儲(chǔ)。
附圖說(shuō)明
圖1為本發(fā)明數(shù)據(jù)文件夾的存儲(chǔ)的流程圖;
圖2為本發(fā)明數(shù)據(jù)卷負(fù)載不均衡時(shí),用戶進(jìn)行改進(jìn)后的再均衡操作使數(shù)據(jù)卷負(fù)載均衡時(shí)候的流程圖。
具體實(shí)施方式
本發(fā)明的技術(shù)方案包括兩個(gè)方面,數(shù)據(jù)文件夾的存儲(chǔ)和數(shù)據(jù)卷的再均衡操作。
本發(fā)明中涉及的術(shù)語(yǔ)定義如下:
節(jié)點(diǎn):一定數(shù)量的存儲(chǔ)磁盤(pán)作為存儲(chǔ)節(jié)點(diǎn);
集群:由節(jié)點(diǎn)通過(guò)網(wǎng)絡(luò)連接成glusterfs集群;
數(shù)據(jù)卷:在glusterfs集群環(huán)境下創(chuàng)建的包含多個(gè)節(jié)點(diǎn)的distributed類型數(shù)據(jù)卷。
數(shù)據(jù)卷閾值:數(shù)據(jù)卷容量閾值(閾值的設(shè)定應(yīng)參考需要存儲(chǔ)的單位數(shù)據(jù)的大小),用于判斷數(shù)據(jù)卷各節(jié)點(diǎn)的可用容量是否充足,如果節(jié)點(diǎn)可用容量大于閾值則說(shuō)明該節(jié)點(diǎn)可用容量充足,否則說(shuō)明可用容量不足。
最優(yōu)節(jié)點(diǎn):在節(jié)點(diǎn)可用容量充足的情況下,最優(yōu)節(jié)點(diǎn)為存儲(chǔ)數(shù)據(jù)最少的節(jié)點(diǎn)(即已用容量最小的節(jié)點(diǎn))為最優(yōu)節(jié)點(diǎn),保證數(shù)據(jù)存儲(chǔ)的負(fù)載盡可能均衡;當(dāng)可用容量不足時(shí)候,則選擇可用容量最大的節(jié)點(diǎn)為最優(yōu)節(jié)點(diǎn)以保證數(shù)據(jù)文件夾能夠完整的存儲(chǔ),盡可能的不出現(xiàn)空間不足的情況。
如圖1所示,為本發(fā)明數(shù)據(jù)文件夾的存儲(chǔ)流程圖,具體執(zhí)行以下步驟:
步驟101、搭建集群并創(chuàng)建distributed類型數(shù)據(jù)卷。
例如,搭建一個(gè)glusterfs集群gs,并創(chuàng)建包含a,b,c三個(gè)節(jié)點(diǎn)的數(shù)據(jù)卷x,并設(shè)置數(shù)據(jù)卷x的閾值為xt。以下步驟是將testfolder數(shù)據(jù)文件夾(其中包含數(shù)個(gè)文件)以文件夾為單位分布存儲(chǔ)在數(shù)據(jù)卷x中,即將testfolder中的所有文件存儲(chǔ)在一個(gè)節(jié)點(diǎn);
步驟102、在所有節(jié)點(diǎn)中創(chuàng)建文件夾testfolder。
例如在所有節(jié)點(diǎn)a,b,c上創(chuàng)建數(shù)據(jù)文件夾testfolder;
步驟103、尋找最優(yōu)節(jié)點(diǎn)(具體步驟參見(jiàn)1031-1032),將最優(yōu)節(jié)點(diǎn)上testfolder的hash區(qū)間定為最大即0x00000000到0xffffffff,使所有的文件hash值落在a上以保證testfolder的所有文件都存儲(chǔ)在最優(yōu)節(jié)點(diǎn)a上,其他節(jié)點(diǎn)上testfolder的hash區(qū)間設(shè)置為0,即0x00000000到0x00000000,以保證testfolder的所有文件hash值不會(huì)落在這些節(jié)點(diǎn)hash區(qū)間內(nèi),即文件不會(huì)分布到這些節(jié)點(diǎn)。
例如在節(jié)點(diǎn)a,b,c上找到最優(yōu)的節(jié)點(diǎn)a,將a上的testfolder的hash區(qū)間分配為0x00000000到0xffffffff,其他節(jié)點(diǎn)b,c上的testfolder的hash區(qū)間分配為0x00000000到0x00000000;
步驟1031、掃描數(shù)據(jù)卷的所有節(jié)點(diǎn)a,b,c的可用容量大小分別是a1,b1,c1和已經(jīng)存儲(chǔ)數(shù)據(jù)的容量大小分別是a2,b2,c2;
步驟1032、查看a1,b1,c1是否大于數(shù)據(jù)卷x的閾值xt,如果都小于閾值則選擇可用容量最大的節(jié)點(diǎn)為最優(yōu)節(jié)點(diǎn);如果存在可用容量大于閾值的節(jié)點(diǎn)則在可用容量大于閾值的節(jié)點(diǎn)中選擇已經(jīng)存儲(chǔ)數(shù)據(jù)最少的節(jié)點(diǎn)作為最優(yōu)節(jié)點(diǎn),例如a1,b1大于xt,a2大于b2,則選擇b節(jié)點(diǎn)作為最優(yōu)節(jié)點(diǎn)。
步驟104、在每個(gè)節(jié)點(diǎn)的testfolder文件夾的擴(kuò)展屬性trusted.glusterfs.dht中記錄分配到的hash區(qū)間。
例如在a節(jié)點(diǎn)的testfolder文件夾的trusted.glusterfs.dht擴(kuò)展屬性的值為0x00000000ffffffff(表示hash區(qū)間是0x00000000到0xffffffff),其他節(jié)點(diǎn)b,c上的testfolder文件夾的trusted.glusterfs.dht擴(kuò)展屬性的值為0x0000000000000000。
步驟105、根據(jù)將要存儲(chǔ)的數(shù)據(jù)文件夾中某個(gè)文件的文件名計(jì)算hash值;
例如,利用glusterfs的davies-meyer算法計(jì)算待存儲(chǔ)數(shù)據(jù)文件夾testfolder中某個(gè)文件testfile文件名的hash值m;
步驟106、根據(jù)文件所在文件夾的hash區(qū)間確定文件名計(jì)算得到的hash值所在的節(jié)點(diǎn);
例如,根據(jù)testfile的hash值m,查看所有節(jié)點(diǎn)的testfolder的trusted.glusterfs.dht的值,確定m在a節(jié)點(diǎn)testfolder的trusted.glusterfs.dht區(qū)間內(nèi),即testfile應(yīng)該被存儲(chǔ)在a節(jié)點(diǎn)上。
步驟107、在確定的待存儲(chǔ)節(jié)點(diǎn)上的文件夾下創(chuàng)建文件。
例如,在節(jié)點(diǎn)a的testfolder下面創(chuàng)建文件testfile。
每個(gè)文件的創(chuàng)建方法相同,主要是在文件夾的擴(kuò)展屬性中記錄該文件夾應(yīng)該存儲(chǔ)的節(jié)點(diǎn),所以其他文件仍然按照testfile文件的方法創(chuàng)建即可。
以上方法是針對(duì)指定數(shù)據(jù)文件夾中的所有文件相互依賴,一個(gè)文件損壞或者丟失則整個(gè)數(shù)據(jù)文件夾不可用的情況,需要更改glusterfs數(shù)據(jù)文件夾中擴(kuò)展屬性記錄的hash區(qū)間的分配算法,將hash區(qū)間分配在一個(gè)節(jié)點(diǎn)上,保證該數(shù)據(jù)文件夾下所有文件能夠存儲(chǔ)在一個(gè)節(jié)點(diǎn)上,保持集群的高容錯(cuò)性。
但是當(dāng)數(shù)據(jù)卷已經(jīng)存儲(chǔ)一定量數(shù)據(jù)時(shí)新增節(jié)點(diǎn),會(huì)出現(xiàn)新節(jié)點(diǎn)上面沒(méi)有數(shù)據(jù)而舊節(jié)點(diǎn)數(shù)據(jù)太多導(dǎo)致整個(gè)數(shù)據(jù)卷節(jié)點(diǎn)的數(shù)據(jù)不均衡,當(dāng)用戶發(fā)現(xiàn)數(shù)據(jù)不均衡現(xiàn)象時(shí),可以手動(dòng)執(zhí)行再均衡操作使所有節(jié)點(diǎn)的負(fù)載均衡。glusterfs的再均衡操作同樣有可能使同一個(gè)數(shù)據(jù)文件夾下的文件分散存儲(chǔ)到不同的節(jié)點(diǎn),所以,需要改進(jìn)再均衡,以下步驟為改進(jìn)再均衡的具體步驟。
步驟a、當(dāng)用戶進(jìn)行再均衡操作時(shí),遍歷所有節(jié)點(diǎn),對(duì)每個(gè)節(jié)點(diǎn),查看其可用容量(即節(jié)點(diǎn)的剩余磁盤(pán)空間)是否大于數(shù)據(jù)卷創(chuàng)建時(shí)候配置的閾值,如該節(jié)點(diǎn)可用容量大于閾值,則該節(jié)點(diǎn)數(shù)據(jù)不需要均衡,遍歷下一個(gè)節(jié)點(diǎn);否則,進(jìn)行步驟b對(duì)該節(jié)點(diǎn)進(jìn)行數(shù)據(jù)均衡。
步驟b、循環(huán)遷移該節(jié)點(diǎn)的最小數(shù)據(jù)文件夾,每次找到大小最小的數(shù)據(jù)文件夾,用步驟103的方法尋找數(shù)據(jù)卷中的最優(yōu)節(jié)點(diǎn),如果最優(yōu)節(jié)點(diǎn)可用容量也小于閾值,則整個(gè)數(shù)據(jù)均衡操作結(jié)束;否則,進(jìn)行步驟c遷移該節(jié)點(diǎn)最小數(shù)據(jù)文件夾到最優(yōu)節(jié)點(diǎn)上。
步驟c、對(duì)需要遷移的數(shù)據(jù)文件夾中的每個(gè)文件,將其復(fù)制到新節(jié)點(diǎn)(步驟b中的最優(yōu)節(jié)點(diǎn))的對(duì)應(yīng)文件夾(創(chuàng)建文件夾的時(shí)候在每個(gè)節(jié)點(diǎn)都創(chuàng)建了)中。
步驟d、需要遷移文件夾下的所有文件復(fù)制完成后,重新設(shè)置文件夾的擴(kuò)展屬性trusted.glusterfs.dht表示的hash區(qū)間,將目的節(jié)點(diǎn)(文件被遷移到的節(jié)點(diǎn))文件夾的hash區(qū)間設(shè)置為最大,即trusted.glusterfs.dht為0x00000000ffffffff,而把源節(jié)點(diǎn)(即文件遷出的節(jié)點(diǎn))文件夾的hash區(qū)間設(shè)置為最小,即trusted.glusterfs.dht為0x0000000000000000,然后刪除源節(jié)點(diǎn)文件夾下的所有文件,該數(shù)據(jù)文件夾遷移完成,再次判斷源節(jié)點(diǎn)的可用容量是否大于數(shù)據(jù)卷閾值,如果是,則遍歷數(shù)據(jù)卷的下一個(gè)節(jié)點(diǎn),否則,重復(fù)步驟b。
假設(shè)數(shù)據(jù)卷x中目前已經(jīng)存儲(chǔ)了一定量的數(shù)據(jù),此時(shí),為數(shù)據(jù)卷添加一個(gè)節(jié)點(diǎn)d導(dǎo)致數(shù)據(jù)卷的負(fù)載不均衡,用戶進(jìn)行了再均衡操作,具體步驟如圖2所示,
步驟201、對(duì)于數(shù)據(jù)卷x執(zhí)行再均衡操作;
步驟202、遍歷數(shù)據(jù)卷x中的所有節(jié)點(diǎn),對(duì)于其中一個(gè)節(jié)點(diǎn)a獲取其可用容量s;
步驟203、判斷s是否大于閾值xt,如果是執(zhí)行209,否則執(zhí)行204;
步驟204、獲取節(jié)點(diǎn)a上的大小最小的一個(gè)數(shù)據(jù)文件夾e;
步驟205、使用步驟103所示的方法尋找數(shù)據(jù)卷x中的一個(gè)最優(yōu)節(jié)點(diǎn)o;
步驟206、如果o節(jié)點(diǎn)的可用容量也小于閾值xt,則結(jié)束再均衡操作;否則進(jìn)行步驟207;
步驟207、將節(jié)點(diǎn)a中文件夾e下的所有文件復(fù)制到節(jié)點(diǎn)o下的e文件夾下;
步驟208、復(fù)制完成后,將o節(jié)點(diǎn)下的e文件夾擴(kuò)展屬性trusted.glusterfs.dht設(shè)為0x00000000ffffffff,把a(bǔ)節(jié)點(diǎn)下e文件夾擴(kuò)展屬性trusted.glusterfs.dht設(shè)為0x0000000000000000,刪除a節(jié)點(diǎn)下e文件夾下的所有文件,更新a節(jié)點(diǎn)可用容量s,重復(fù)203;
步驟209、遍歷數(shù)據(jù)卷x中的下一個(gè)節(jié)點(diǎn),如果所有節(jié)點(diǎn)都已被遍歷,則數(shù)據(jù)均衡結(jié)束執(zhí)行步驟210,否則,對(duì)于下一個(gè)節(jié)點(diǎn),重復(fù)步驟202;
步驟210數(shù)據(jù)均衡結(jié)束。
最后所應(yīng)說(shuō)明的是,以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案而非限制,盡管參照較佳實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對(duì)本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍。