您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)Ceph中存儲(chǔ)引擎實(shí)現(xiàn)FileStore的示例分析的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
Ceph作為一個(gè)高可用和強(qiáng)一致性的軟件定義存儲(chǔ)實(shí)現(xiàn),去使用它非常重要的就是了解其內(nèi)部的IO路徑和存儲(chǔ)實(shí)現(xiàn)。
ObjectStore是Ceph OSD中最重要的概念之一,它封裝了所有對(duì)底層存儲(chǔ)的IO操作。從上圖中可以看到所有IO請(qǐng)求在Clieng端發(fā)出,在Message層統(tǒng)一解析后會(huì)被OSD層分發(fā)到各個(gè)PG,每個(gè)PG都擁有一個(gè)隊(duì)列,一個(gè)線程池會(huì)對(duì)每個(gè)隊(duì)列進(jìn)行處理。
當(dāng)一個(gè)在PG隊(duì)列里的IO被提出后,該IO請(qǐng)求會(huì)被根據(jù)類型和相關(guān)附帶參數(shù)進(jìn)行處理。如果是讀請(qǐng)求會(huì)通過ObjectStore提供的API獲得相應(yīng)的內(nèi)容,如果是寫請(qǐng)求也會(huì)利用ObjectStore提供的事務(wù)API將所有寫操作組合成一個(gè)原子事務(wù)提交給ObjectStore。ObjectStore通過接口對(duì)上層提供不同的隔離級(jí)別,目前PG層只采用了Serializable級(jí)別,保證讀寫的順序性。
ObjectStore主要接口分為三部分,第一部分是Object的讀寫操作,類似于POSIX的部分接口,第二部分是Object的屬性(xattr)讀寫操作,這類操作的特征是kv對(duì)并且與某一個(gè)Object關(guān)聯(lián)。第三部分是關(guān)聯(lián)Object的kv操作(在Ceph中稱為omap),這個(gè)其實(shí)與第二部分非常類似,但是在實(shí)現(xiàn)上可能會(huì)有所變化。
目前ObjectStore的主要實(shí)現(xiàn)是FileStore,也就是利用文件系統(tǒng)的POSIX接口實(shí)現(xiàn)ObjectStore API。每個(gè)Object在FileStore層會(huì)被看成是一個(gè)文件,Object的屬性(xattr)會(huì)利用文件的xattr屬性存取,因?yàn)橛行┪募到y(tǒng)(如Ext4)對(duì)xattr的長(zhǎng)度有限制,因此超出長(zhǎng)度的Metadata會(huì)被存儲(chǔ)在DBObjectMap里。而Object的omap則直接利用DBObjectMap實(shí)現(xiàn)。因此,可以看出xattr和omap操作是互通的,在用戶角度來說,前者可以看作是受限的長(zhǎng)度,后者更寬泛(API沒有對(duì)這些做出硬性要求)。
DBObjectMap是FileStore的一部分,利用KeyValue數(shù)據(jù)庫(kù)實(shí)現(xiàn)了ObjectStore的第三部分API,DBObjectMap主要復(fù)雜在其實(shí)現(xiàn)了clone操作的no-copy。因?yàn)镺bjectStore提供了clone API,提供對(duì)一個(gè)Object的完全clone(包括Object的屬性和omap)。DBObjectMap對(duì)每一個(gè)Object有一個(gè)Header,每個(gè)Object聯(lián)系的omap(kv pairs)對(duì)會(huì)與該Header聯(lián)系,當(dāng)clone時(shí),會(huì)產(chǎn)生兩個(gè)新的Header,原來的Header作為這兩個(gè)新Header的parent,這時(shí)候無論是原來的Object還是cloned Object在查詢或者寫操作時(shí)都會(huì)查詢parent的情況,并且實(shí)現(xiàn)copy-on-write。那么Header如何與omap(kv pairs)聯(lián)系呢,首先每個(gè)Header有一個(gè)唯一的seq,然后所有屬于該Header的omap的key里面都會(huì)包含該seq,因此,利用KeyValueDB的提供的有序prefix檢索來實(shí)現(xiàn)對(duì)omap的遍歷。
上面提到FileStore會(huì)將每個(gè)Object作為一個(gè)文件,那么Object的一些屬性會(huì)與Object Name一起作為文件名,Object 所屬的PG會(huì)作為文件目錄,當(dāng)一個(gè)PG內(nèi)所包含的文件超過一定程度時(shí)(在目錄內(nèi)文件太多會(huì)造成文件系統(tǒng)的lookup性能損耗),PG會(huì)被分裂成兩個(gè)PG。
感謝各位的閱讀!關(guān)于“Ceph中存儲(chǔ)引擎實(shí)現(xiàn)FileStore的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。