轉(zhuǎn)帖|行業(yè)資訊|編輯:郝浩|2016-02-16 10:16:08.000|閱讀 363 次
概述:Ring 代表磁盤(pán)上存儲(chǔ)的實(shí)體的名稱(chēng)和它們的物理位置的映射。accounts, containers, and objects都有單獨(dú)的Ring。其他組件要在這三者之一進(jìn)行任何操作,他們都需要合相應(yīng)的Ring進(jìn)行交互以確定它在集群中的位置。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
相關(guān)鏈接:
Ring 代表磁盤(pán)上存儲(chǔ)的實(shí)體的名稱(chēng)和它們的物理位置的映射。accounts, containers, and objects都有單獨(dú)的Ring。其他組件要在這三者之一進(jìn)行任何操作,他們都需要合相應(yīng)的Ring進(jìn)行交互以確定它在集群中的位置。
Ring用zones,devices,partitions,和replicas來(lái)維護(hù)映射,在Ring中的每個(gè)分區(qū)都會(huì)在集群中默認(rèn)有三個(gè)副本。分區(qū)的位置存儲(chǔ)在Ring維護(hù)的映射中。Ring也負(fù)責(zé)確定失敗場(chǎng)景中接替的設(shè)備。(這點(diǎn)類(lèi)似HDFS副本的復(fù)制)。分區(qū)的副本要保證存儲(chǔ)在不同的zone。Ring的分區(qū)分布在OpenStack Object Storage installation所有設(shè)備中。分區(qū)需要移動(dòng)的時(shí)候,Ring確保一次移動(dòng)最少的分區(qū),一次僅有一個(gè)分區(qū)的副本被移動(dòng)。
權(quán)重能用來(lái)平衡分區(qū)在磁盤(pán)驅(qū)動(dòng)上的分布。Ring在代理服務(wù)器和一些背景進(jìn)程中使用。
代理服務(wù)器負(fù)責(zé)將OpenStack Object Storage架構(gòu)中其他部分結(jié)合在一起。對(duì)于每次請(qǐng)求,它都查詢?cè)赗ing中查詢account, container, or object的位置,并以此轉(zhuǎn)發(fā)請(qǐng)求。公有APIs也是通過(guò)代理服務(wù)器來(lái)暴露的。
大量的失敗也是由代理服務(wù)器來(lái)進(jìn)行處理。比如一個(gè)服務(wù)器不可用,它就會(huì)要求Ring來(lái)為它找下一個(gè)接替的服務(wù)器,并把請(qǐng)求轉(zhuǎn)發(fā)到那里。
當(dāng)對(duì)象流進(jìn)或流出object server時(shí),它們都通過(guò)代理服務(wù)器來(lái)流給用戶,或者通過(guò)它從用戶獲取。代理服務(wù)器不會(huì)緩沖它們。
Proxy服務(wù)器的功能可以總結(jié)為:查詢位置,處理失敗,中轉(zhuǎn)對(duì)象。
Object Server,是非常簡(jiǎn)單的blob存儲(chǔ)服務(wù)器,能存儲(chǔ)、檢索和刪除本地磁盤(pán)上的對(duì)象,它以二進(jìn)制文件形式存放在文件系統(tǒng)中,元數(shù)據(jù)以文件的擴(kuò)展屬性存放。
對(duì)象以源于對(duì)象名的hash和操作的時(shí)間戳的路徑來(lái)存放。上一次寫(xiě)總會(huì)成功,確保最新的版本將被使用。刪除也視作文件的一個(gè)版本:這確保刪除的文件也被正確復(fù)制,更舊的把本不會(huì)因?yàn)槭∏樾坞x奇消失。
其主要工作是處理對(duì)象列表,它不知道對(duì)象在哪里,只是知道哪些對(duì)象在一個(gè)特定的container。列表被存儲(chǔ)為sqlite 數(shù)據(jù)庫(kù)文件,類(lèi)似對(duì)象的方式在集群中復(fù)制。也進(jìn)行了跟蹤統(tǒng)計(jì),包括對(duì)象的總數(shù),以及container中使用的總存儲(chǔ)量。
它是類(lèi)似于Container Server,除了它是負(fù)責(zé)containers的列表而非對(duì)象。
設(shè)計(jì)副本的目的是,在面臨網(wǎng)絡(luò)中斷或驅(qū)動(dòng)失敗等臨時(shí)錯(cuò)誤條件時(shí),保持系統(tǒng)在一致的狀態(tài)。
副本進(jìn)程會(huì)比較本地的數(shù)據(jù)和每個(gè)遠(yuǎn)處的副本,以確保他們所有都包含最新的版本。對(duì)象副本用一個(gè)Hash列表來(lái)快速比較每個(gè)分區(qū)的片段,而containe和 account replication 用的是Hash和共享的高水印結(jié)合的方法。
副本的更新,是基于推送的。對(duì)于對(duì)象副本,更新是遠(yuǎn)程同步文件到Peer。Account和container replication通過(guò)HTTP or rsync把整個(gè)數(shù)據(jù)庫(kù)文件推送遺失的記錄。
副本也通過(guò)tombstone設(shè)置最新版本的方式,確保數(shù)據(jù)從系統(tǒng)中清除。
有時(shí),container 或 account數(shù)據(jù)不能被立即更新,這通常是發(fā)生在失敗的情形或高負(fù)載時(shí)期。如果一個(gè)更新失敗,該更新會(huì)在文件系統(tǒng)上本地排隊(duì),更新器將處理這些失敗的更新。事件一致性窗口(eventual consistency window)最可能來(lái)起作用。比如,假設(shè)一個(gè)container服務(wù)器正處于載入之中,一個(gè)新對(duì)象正被放進(jìn)系統(tǒng),代理服務(wù)器一響應(yīng)客戶端成功,該對(duì)象就立即可讀了。然而,container服務(wù)器沒(méi)有更新Object列表,所以更新就進(jìn)入隊(duì)列,以等待稍后的更新。Container列表,因此可能還不會(huì)立即包含這個(gè)對(duì)象。
實(shí)際上,一致性窗口只是與updater運(yùn)行的頻率一樣大,當(dāng)代理服務(wù)器將轉(zhuǎn)發(fā)清單請(qǐng)求到響應(yīng)的第一個(gè)container服務(wù)器中,也許甚至還不會(huì)被注意。在載入之下的服務(wù)器可能還不是服務(wù)后續(xù)清單請(qǐng)求的那個(gè)。另外兩個(gè)副本中的一個(gè)可能處理這個(gè)清單。
Auditors會(huì)檢查objects, containers, 和 accounts的完整性。如果發(fā)先損壞的文件,它將被隔離,好的副本將會(huì)取代這個(gè)壞的文件。如果發(fā)現(xiàn)其他的錯(cuò)誤,它們會(huì)記入到日志中。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn