首页 > 代码库 > CEPH 对象存储的系统池介绍

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的元数据信息。

CEPH 对象存储的系统池介绍