CEPH 對象存儲的系統池介紹


RGW抽象來看就是基於rados集群之上的一個rados-client實例。 

Object和pool簡述

Rados集群網上介紹的文章很多,這里就不一一敘述,主要要說明的是object和pool。在rados集群中任意一個對象都會映射為一個(pool,object)。其中pool是存儲池,object為對象名。如果你只是做rados集群上層應用的開發(類似開發rgw)。只需要設計如何將數據存儲到rados集群中哪個pool及哪個對象即可。

RGW中pool和object應用

RGW中存在的pool比較多,不同的pool管理不同的object數據。這里要關注2個數據結構:


struct RGWZoneParams {
rgw_bucket domain_root;
rgw_bucket control_pool;
rgw_bucket gc_pool;
rgw_bucket log_pool;
rgw_bucket intent_log_pool;
rgw_bucket usage_log_pool;

rgw_bucket user_keys_pool;
rgw_bucket user_email_pool;
rgw_bucket user_swift_pool;
rgw_bucket user_uid_pool;
};
struct RGWZonePlacementInfo {
string index_pool;
string data_pool;
string data_extra_pool;
}


RGW應用到rados中的對象分為2類,一類是普通對象,相當於普通文件的存儲。還一類是omap對象,用於存儲K-V對象。下面介紹RGW主要pool的用途:

domain_root pool:每個bucket都對應一個普通對象,用於存儲bucket元數據。

control pool:該pool上創建若干個普通對象用於watch-notify(librados提供的一種watch和notify機制)。目前RGW用這種機制來實現分布式緩存(后續會詳細介紹)。

gc pool:rgw中大文件數據一般在后台刪除,該pool用於記錄那些待刪除的文件對象。

log pool:用於存儲3種類型log,oplog,meta_log,data_log。其中oplog主要用於記錄用戶操作記錄。

Meta_log和data_log都是遠程復制功能中需要用到的,后續會詳細介紹。

Intent log pool:這個pool目前沒有用到。

usage log pool:存儲計量數據統計,比如上傳文件多少次,下載多少次,遍歷bucket多少次之類。

user keys pool:用於存儲用戶AK和uid的對應關系,方便通過用戶restful請求的ak找到用戶id。

user email pool:用於存儲用戶email和uid的對應關系。

user swift pool:用於存儲swift key和uid的對應關系

user uid pool:用於存儲用戶信息,每個用戶都有一個唯一的uid作為對象名。同時每個用戶還會有一個用於索引該用戶下桶的對象也存在該pool下面。

index pool:存儲bucket的文件索引對象。每個bucket對應在該pool下有一個索引對象,用來索引該bucket下所有的文件。同時遠程復制中用到的bilog也存儲在該pool的bucket索引對象上。

data pool:顧名思義,所有的文件數據都存在該pool下。

data extra pool:Multipart upload過程中一些中間態的數據,會存在該pool上。這些數據可以幫助用戶進行斷點續傳及垃圾數據回收。

另外還有2個pool也比較重要

zone root pool:用於存放zone的元數據信息,其實就是存放RGWZoneParams數據結構

region root pool:用於存放region的元數據信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM