RGW中pool和object应用

RGW抽象来看就是基于rados集群之上的一个rados-client实例。

Objectpool简述

Rados集群网上介绍的文章很多,这里就不一一叙述,主要要说明的是objectpool。在rados集群中任意一个对象都会映射为一个(poolobject)。其中pool是存储池,object为对象名。如果你只是做rados集群上层应用的开发(类似开发rgw)。只需要设计如何将数据存储到rados集群中哪个pool及哪个对象即可。

RGWpoolobject应用

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-notifylibrados提供的一种watchnotify机制)。目前RGW用这种机制来实现分布式缓存(后续会详细介绍)。

gc poolrgw中大文件数据一般在后台删除,该pool用于记录那些待删除的文件对象。

log pool:用于存储3种类型logoplogmeta_logdata_log。其中oplog主要用于记录用户操作记录。Meta_logdata_log都是远程复制功能中需要用到的,后续会详细介绍。

Intent log pool:这个pool目前没有用到。

usage log pool:存储计量数据统计,比如上传文件多少次,下载多少次,遍历bucket多少次之类。

user keys pool:用于存储用户AKuid的对应关系,方便通过用户restful请求的ak找到用户id

user email pool:用于存储用户emailuid的对应关系。

user swift pool:用于存储swift keyuid的对应关系

user uid pool:用于存储用户信息,每个用户都有一个唯一的uid作为对象名。同时每个用户还会有一个用于索引该用户下桶的对象也存在该pool下面。

index pool:存储bucket的文件索引对象。每个bucket对应在该pool下有一个索引对象,用来索引该bucket下所有的文件。同时远程复制中用到的bilog也存储在该poolbucket索引对象上。

data pool:顾名思义,所有的文件数据都存在该pool下。

data extra poolMultipart upload过程中一些中间态的数据,会存在该pool上。这些数据可以帮助用户进行断点续传及垃圾数据回收。

另外还有2pool也比较重要

zone root pool:用于存放zone的元数据信息,其实就是存放RGWZoneParams数据结构

region root pool:用于存放region的元数据信息。

 

猜你喜欢

转载自my.oschina.net/u/2257799/blog/475774