溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Ceph實(shí)現(xiàn)讀寫(xiě)流程的示例分析

發(fā)布時(shí)間:2021-12-17 10:56:04 來(lái)源:億速云 閱讀:621 作者:小新 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹了Ceph實(shí)現(xiàn)讀寫(xiě)流程的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

一、Osd中的模塊

消息封裝

在OSD上發(fā)送和接收信息。有兩類:

1.cluster_messenger -與其它OSDs和monitors溝通
2.client_messenger -與客戶端溝通

消息調(diào)度

Dispatcher類,主要負(fù)責(zé)消息分類

工作隊(duì)列

1.       OpWQ: 處理ops(從客戶端)和sub ops(從其他的OSD)。運(yùn)行在op_tp線程池。

2.       PeeringWQ: 處理peering任務(wù),運(yùn)行在op_tp線程池。

3.       CommandWQ:處理cmd命令,運(yùn)行在command_tp。

4.       RecoveryWQ: 數(shù)據(jù)修復(fù),運(yùn)行在recovery_tp。

5.       SnapTrimWQ: 快照相關(guān),運(yùn)行在disk_tp。

6.       ScrubWQ: scrub,運(yùn)行在disk_tp。

7.       ScrubFinalizeWQ: scrub,運(yùn)行在disk_tp。

8.       RepScrubWQ: scrub,運(yùn)行在disk_tp。

9.       RemoveWQ: 刪除舊的pg目錄。運(yùn)行在disk_tp。

 

線程池

有4種 OSD線程池:

1.       op_tp: 處理ops和sub ops

2.       recovery_tp:處理修復(fù)任務(wù)

3.       disk_tp: 處理磁盤(pán)密集型任務(wù)

4.       command_tp: 處理命令

二、Ceph讀流程

Ceph實(shí)現(xiàn)讀寫(xiě)流程的示例分析
 

注:索引的格式,查找更新索引、如何持久化的,還沒(méi)搞清楚。

沒(méi)有所謂索引,一切皆規(guī)則:

每個(gè)object的文件名格式為:

objectname_key_head(snap_num)_hash_namespace_poolid

?  objectname:對(duì)象名

?  key、namespace:都是客戶端指定,做名稱空間細(xì)分用。當(dāng)塊兒設(shè)備使用時(shí),一般都置為空

?  head(snap_num):snapshot版本

?  hash:由objectname計(jì)算得到,u_int32_t類型,這里轉(zhuǎn)換為16進(jìn)制字符打印,如3AF0B980

?  poolid:pool的id

目錄結(jié)構(gòu):

數(shù)據(jù)目錄/PG名稱/子目錄/object文件名

舉例說(shuō)明:

/data09/ceph/osd2/current/0.0_head/DIR_0/DIR_8/DIR_9/10000007af4.00000000__head_3AF0B980__0

其中,子目錄是根據(jù)object文件名中hash字段的字符反向排列生成。當(dāng)一個(gè)目錄中的文件個(gè)數(shù)大于配置值(merge_threshold * 16 * split_multiplier)時(shí),會(huì)建子目錄,對(duì)文件進(jìn)行歸檔。

ReplicatedPG.h

ReplicatedPG.cc

 int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)函數(shù)中的

 Case CEPH_OSD_OP_READ分支                                       

 r = osd->store->fiemap(coll, soid, op.extent.offset, op.extent.length, bl);

 r = pgbackend->objects_read_sync(                  

           soid, miter->first, miter->second, &tmpbl);

 pgbackend->objects_read_sync轉(zhuǎn)int ReplicatedBackend::objects_read_sync調(diào)用 store->read(coll, hoid, off, len, *bl) ,來(lái)自O(shè)bjectStore::read

三、Ceph寫(xiě)流程

階段1:主節(jié)點(diǎn)發(fā)請(qǐng)求

Ceph實(shí)現(xiàn)讀寫(xiě)流程的示例分析 

階段2:從節(jié)點(diǎn)處理請(qǐng)求

Ceph實(shí)現(xiàn)讀寫(xiě)流程的示例分析
 

osd->store->queue_transactions(&osr, rm->tls, onapply, oncommit);

這里注冊(cè)的兩個(gè)回調(diào):

 Context *oncommit = new C_OSD_RepModifyCommit(rm);  當(dāng)日志寫(xiě)入磁盤(pán)后被調(diào)用

 Context *onapply = new C_OSD_RepModifyApply(rm);    當(dāng)該操作被處理后被調(diào)用

分別向主節(jié)點(diǎn)做ACK和ON_DISK兩種回應(yīng)。

注:transaction封裝,journal log寫(xiě)入細(xì)節(jié),對(duì)象寫(xiě)入細(xì)節(jié)還沒(méi)來(lái)得及看。

階段3:主節(jié)點(diǎn)接收從節(jié)點(diǎn)回應(yīng),并回應(yīng)客戶端

Ceph實(shí)現(xiàn)讀寫(xiě)流程的示例分析

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Ceph實(shí)現(xiàn)讀寫(xiě)流程的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI