在今天的數(shù)字化時(shí)代,云計(jì)算、互聯(lián)網(wǎng)、社交媒體以及大數(shù)據(jù)的發(fā)展,使得數(shù)據(jù)量呈現(xiàn)爆炸式增長。據(jù)IDC預(yù)測,2018年到2025年之間,全球產(chǎn)生的數(shù)據(jù)量將會(huì)從33 ZB增長到175 ZB,復(fù)合增長率達(dá)到27%,其中超過85%的數(shù)據(jù)都會(huì)是處理難度較大的非結(jié)構(gòu)化數(shù)據(jù)。預(yù)計(jì)到2030年全球數(shù)據(jù)總量將達(dá)到3,5000EB。
傳統(tǒng)存儲(chǔ)在應(yīng)對這些PB甚至EB級(jí)海量非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)需求難以滿足的同時(shí),其技術(shù)架構(gòu)也面臨著諸多挑戰(zhàn),已經(jīng)很難滿足不斷增長的數(shù)據(jù)需求,主要包括超大規(guī)模的橫向擴(kuò)展、越來越高的性能要求、數(shù)據(jù)長期存儲(chǔ)的可靠性、統(tǒng)一資源池的管理、更低的TCO總體擁有成本等。
在這種情況下,用戶迫切需要新的存儲(chǔ)架構(gòu)來解決這些問題,來滿足不同應(yīng)用的存儲(chǔ)資源服務(wù)需求,所以隨著客戶需求的變更及技術(shù)的迭代升級(jí)發(fā)展,分布式存儲(chǔ)技術(shù)應(yīng)運(yùn)而生。
分布式存儲(chǔ)系統(tǒng)是一個(gè)高性能、可擴(kuò)容的分布式存儲(chǔ)系統(tǒng),并且它可提供對象、塊和文件三種種類存儲(chǔ)服務(wù),以滿足客戶復(fù)雜的業(yè)務(wù)應(yīng)用場景,分布式存儲(chǔ)架構(gòu)邏輯上可分為四部分:OSD(Object-based Storage Device,對象存儲(chǔ)設(shè)備)、Monitor(監(jiān)控服務(wù))、Client(客戶端)、MDS(metadata server,元數(shù)據(jù)服務(wù))。
01、
對象存儲(chǔ)設(shè)備(OSD)
OSD包括操作系統(tǒng)和文件系統(tǒng)的計(jì)算存儲(chǔ)單元,其硬件包括處理器、內(nèi)存、硬盤以及網(wǎng)卡等,守護(hù)進(jìn)程提供數(shù)據(jù)存儲(chǔ)服務(wù)。在實(shí)際應(yīng)用中,通常將每塊硬盤(SSD或HDD)對應(yīng)一個(gè)OSD守護(hù)進(jìn)程,并將其視為OSD的硬盤部分,處理器、內(nèi)存、網(wǎng)卡等在同一主機(jī)的多個(gè)OSD之間進(jìn)行復(fù)用。
02、
監(jiān)控服務(wù)(Monitor)
監(jiān)控服務(wù)持有集群視圖信息,包含關(guān)于集群本身的邏輯狀態(tài)和存儲(chǔ)策略的數(shù)據(jù)表示。集群視圖包括監(jiān)控視圖、OSD視圖、元數(shù)據(jù)服務(wù)視圖,這些視圖構(gòu)成了集群的元數(shù)據(jù)。集群視圖信息量較少,只有在集群的物理設(shè)備(如主機(jī)、硬盤)和存儲(chǔ)策略發(fā)生變化時(shí)視圖信息才發(fā)生改變。
03、
客戶端(Client)
用戶通過客戶端登陸集群并對集群數(shù)據(jù)進(jìn)行讀寫操作??蛻舳送ㄟ^與OSD或者監(jiān)控服務(wù)的交互獲取集群視圖,然后直接在本地進(jìn)行計(jì)算,得出數(shù)據(jù)的存儲(chǔ)位置后,便直接與對應(yīng)的OSD通信,完成數(shù)據(jù)的各種操作。在此過程中,客戶端可以不依賴于任何元數(shù)據(jù)服務(wù)器,不進(jìn)行任何查表操作,便完成數(shù)據(jù)訪問流程。
04、
集群元數(shù)據(jù)服務(wù)(MDS)
元數(shù)據(jù)是定義數(shù)據(jù)的數(shù)據(jù),主要是描述數(shù)據(jù)屬性的信息,用來支持如指示存儲(chǔ)位置、指示歷史數(shù)據(jù)、查找資源、文件記錄等功能。
數(shù)據(jù)存儲(chǔ)過程
在存儲(chǔ)過程中存儲(chǔ)的大數(shù)據(jù)都會(huì)被切分成Objects,Objects size大小可以由管理員調(diào)整,通常為2M或4M。每個(gè)對象都會(huì)有一個(gè)唯一的ID。
File:File就是用戶需要存儲(chǔ)或者訪問的文件。
Object:object是底層系統(tǒng)所看到的對象。Object與上面提到的file的區(qū)別是,object的最大size由管理員限定(通常為2MB或4MB),以便實(shí)現(xiàn)底層存儲(chǔ)的組織管理。
PG(Placement Group):對object的存儲(chǔ)進(jìn)行組織和位置映射。具體而言,一個(gè)PG負(fù)責(zé)組織若干個(gè)object(可以為數(shù)干個(gè)甚至更多),但一個(gè)object只能被映射到一個(gè)PG中,即,PG和object.之間是一對多"映射關(guān)系。同時(shí),一個(gè)PG會(huì)被映射到n個(gè)OSD上,而每個(gè)OSD上都會(huì)承載大量的PG,即,PG和OSD之間是“多對多”映射關(guān)系。在實(shí)踐當(dāng)中,n至少為2,如果用于生產(chǎn)環(huán)境,則至少為3。一個(gè)OSD上的PG則可達(dá)到數(shù)百個(gè)。
OSD:OSD的數(shù)量事實(shí)上也關(guān)系到系統(tǒng)的數(shù)據(jù)分布均勻性,因此其數(shù)量不應(yīng)太少。在實(shí)踐當(dāng)中,至少也應(yīng)該是數(shù)十上百個(gè)的量級(jí)才有助于系統(tǒng)的設(shè)計(jì)發(fā)揮其應(yīng)有的優(yōu)勢。
數(shù)據(jù)映射過程
基于上述定義,便可以對尋址流程進(jìn)行解釋了。具體而言,尋址至少要經(jīng)歷以下三次映射:
File->object ID映射
Object>PG映射,hash&mask->pgid
PG>OSD映射,CRUSH算法
全分布式架構(gòu)中,客戶端是直接讀或者寫存放在OSD上的對象存儲(chǔ)中的對象(data object)的,因此,需要走完(Pool,Object)→(Pool,PG)→OSD set→OSD/Disk完整的鏈路,讓client存儲(chǔ)目標(biāo)數(shù)據(jù)object的具體位置。
數(shù)據(jù)寫入時(shí),文件被切分成object,object先映射到PG,再由PG映射到OSD set。每個(gè)pool有多個(gè)PG,每個(gè)object通過計(jì)算hash值并取模得到它所對應(yīng)的PG。PG再映射到一組OSD(OSD個(gè)數(shù)由pool的副本數(shù)決定),第一個(gè)OSD是Primary,剩下的都是Replicas。
分布數(shù)據(jù)的過程:首先計(jì)算數(shù)據(jù)x的Hash值并將結(jié)果和PG數(shù)目取余,以得到數(shù)據(jù)x對應(yīng)的PG編號(hào)。然后,通過CRUSH算法將PG映射到一組OSD中。最后把數(shù)據(jù)x存放到PG對應(yīng)的OSD中。這個(gè)過程中包含了兩次映射,第一次是數(shù)據(jù)x到PG的映射。PG是抽象的存儲(chǔ)節(jié)點(diǎn),它不會(huì)隨著物理節(jié)點(diǎn)的加入或則離開而增加或減少,因此數(shù)據(jù)到PG的映射是穩(wěn)定的。具體步驟:
(1)創(chuàng)建Pool和它的PG。根據(jù)上述的計(jì)算過程,PG在Pool被創(chuàng)建后就會(huì)被MON在根據(jù)CRUSH算法計(jì)算出來的PG應(yīng)該所在若干的OSD上被創(chuàng)建出來了。也就是說,在客戶端寫入對象的時(shí)候,PG已經(jīng)被創(chuàng)建好了,PG和OSD的映射關(guān)系已經(jīng)是確定了的。
(2)客戶端通過哈希算法計(jì)算出存放object的PG的ID:
客戶端輸入pool ID和object ID(比如pool=“liverpool”and object-id=“john”)
對object ID做哈希
對該hash值取PG總數(shù)的模,得到PG編號(hào)(比如58)(第2和第3步基本保證了一個(gè)pool的所有PG將會(huì)被均勻地使用)
對pool ID取hash
將pool ID和PG ID組合在一起(比如3.23)得到PG的完整ID。也就是:PG-id=hash(pool-id).hash(objet-id)%PG-number
(3)客戶端通過CRUSH算法計(jì)算出object會(huì)被保存到PG中OSD位置。
對客戶端來說,只要它獲得了Cluster map,就可以使用CRUSH算法算出某個(gè)object將要所在的OSD的ID,然后直接與它通信。
client從MON獲取最新的cluster map。
client根據(jù)上面的第(2)步計(jì)算出該object將要在的PG的ID。
client再根據(jù)CRUSH算法計(jì)算出PG中目標(biāo)主和次OSD的ID。也就是:OSD-ids=CURSH(PG-id,cluster-map,crush-rules)。
CRUSH算法
為了保證負(fù)載均衡,保證新舊數(shù)據(jù)混合在一起。但是簡單HASH分布不能有效處理設(shè)備數(shù)量的變化,導(dǎo)致大量數(shù)據(jù)遷移。應(yīng)用了CRUSH算法,它是一種偽隨機(jī)數(shù)據(jù)分布算法,它能夠在層級(jí)結(jié)構(gòu)的存儲(chǔ)集群中有效的分布對象的副本。CRUSH實(shí)現(xiàn)了一種偽隨機(jī)(確定性)的函數(shù),它的參數(shù)是object id或object group id,并返回一組存儲(chǔ)設(shè)備(用于保存object副本OSD)。CRUSH需要cluster map(描述存儲(chǔ)集群的層級(jí)結(jié)構(gòu))、和副本分布策略(rule)。
CRUSH算法根據(jù)每個(gè)設(shè)備的權(quán)重盡可能概率平均地分配數(shù)據(jù)。分布算法是由集群可用存儲(chǔ)資源以及其邏輯單元的map控制的。這個(gè)map(如下圖所示)的描述類似于一個(gè)大型數(shù)據(jù)中心的描述:數(shù)據(jù)中心(root)由各個(gè)機(jī)房(row)組成,機(jī)房由一系列的機(jī)柜(rack)組成,機(jī)柜裝滿服務(wù)器(host),服務(wù)器裝滿磁盤(osd)。數(shù)據(jù)分配的策略是由定位規(guī)則來定義的,定位規(guī)則指定了集群中將保存多少個(gè)副本,以及數(shù)據(jù)副本的放置有什么限制。例如,可以指定數(shù)據(jù)有三個(gè)副本,這三個(gè)副本放置在不同的機(jī)柜中,使得三個(gè)數(shù)據(jù)副本不共用一個(gè)物理電路。
給定一個(gè)輸入x,CRUSH算法將輸出一個(gè)確定的有序的儲(chǔ)存目標(biāo)向量。當(dāng)輸入x,CRUSH利用強(qiáng)大的多重整數(shù)hash函數(shù)根據(jù)集群map、定位規(guī)則、以及x計(jì)算出獨(dú)立的完全確定可靠的映射關(guān)系。CRUSH分配算法是偽隨機(jī)算法,并且輸入的內(nèi)容和輸出的儲(chǔ)存位置之間是沒有明顯相關(guān)的關(guān)系。我們可以說CRUSH算法在集群設(shè)備中生成了“偽集群”的數(shù)據(jù)副本。集群的設(shè)備對一個(gè)數(shù)據(jù)項(xiàng)目共享數(shù)據(jù)副本,對其他數(shù)據(jù)項(xiàng)目又是獨(dú)立的。
CRUSH算法通過每個(gè)設(shè)備的權(quán)重來計(jì)算數(shù)據(jù)對象的分布。目的是利用可用資源優(yōu)化分配數(shù)據(jù),當(dāng)存儲(chǔ)設(shè)備添加或刪除時(shí)高效地重組數(shù)據(jù),以及靈活地約束對象副本放置,當(dāng)數(shù)據(jù)同步或者相關(guān)硬件故障的時(shí)候最大化保證數(shù)據(jù)安全。
H3C X10000海量存儲(chǔ)系統(tǒng),是H3C自主研發(fā)的新一代全對稱分布式存儲(chǔ)。X10000在同時(shí)支持塊、文件、對象與HDFS存儲(chǔ)能力,最大支持4096個(gè)節(jié)點(diǎn)的橫向擴(kuò)展,單一命名空間支持EB級(jí)容量,系統(tǒng)的性能和容量隨節(jié)點(diǎn)數(shù)增加呈線性增長。
該產(chǎn)品擁有高性能、高擴(kuò)展、高可靠、易管理維護(hù)等特性,廣泛適用于互聯(lián)網(wǎng)行業(yè)云計(jì)算、虛擬化、數(shù)據(jù)庫、文件共享、票據(jù)影像、HPC、視頻監(jiān)控、歸檔備份等場景,為用戶提供海量存儲(chǔ)資源池。