Ceph RGW中各Pool的作用
1.引言
在使用Ceph的radosgw服务时,会通过create pool命令创建一系列的pool,服务于radosgw.我想在本文中分析出各个pool的作用。
2.pool信息罗列
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
.rgw.root 18 4375 0 19575G 7
.rgw 19 8559 0 13050G 43
.rgw.control 20 0 0 19575G 9
.rgw.gc 21 0 0 19575G 76
.rgw.buckets 22 0 0 19575G 0
.rgw.buckets.index 23 0 0 25849G 2048
.log 24 0 0 19575G 180
.intent-log 25 0 0 19575G 0
.usage 26 0 0 19575G 0
.users 27 74 0 19575G 6
.users.email 28 0 0 19575G 0
.users.swift 29 52 0 13050G 4
.users.uid 30 2847 0 19575G 12
上文罗列了所有默认的rgw工作所需要的pool信息,我在此处说明各自功用。
3.region及zone信息管理
在.rgw.root中,存放的是集群命名空间信息。我使用默认配置。应用上可以配置集群的region, zone信息,并使用radosgw-agent实现region中zone之间的信息同步。这是顶层的划分。
[root@ceph4 ~]# rados -p .rgw.root ls
zone_info.main
region_map
default.region
region_info.default
zone_info.default
region_info.
可以通过如下命令获取region,zone信息,也可以编辑配置文件,重新设置。
radosgw-admin region get >> region.conf.json
radosgw-admin zone get >> zone.conf.json
radosgw-admin region set << region.conf.json
radosgw-admin zone set << zone.conf.json
一般使用无需修改,系统会有默认设置。只要在为用户设置独立的placement策略的时候需要修改。
4.用户管理
创建S3用户后才可以进行数据读写。通过radosgw-admin user create命令指定用户名及用户ID,生成accesskey, secretkey, 借助这两个key,和radosgw建立连接,执行创建、删除bucket, 上传下载删除对象等操作。
在.users.uid中可以看到创建用户时的指定uid信息,在.users中可以看到用户的accesskey信息。.users.email中应该是用户的email信息,但是我在创建用户时没有指定,所以内容为空。
[root@ceph4 ~]# rados -p .users.uid ls
app
app-download
[root@ceph4 ~]# rados -p .users ls
5HJ1G*****84FKIQY15W
CE4R2*****AZWHS2MRQ5
[root@ceph4 ~]# rados -p .users.email ls
5.BUCKET管理
在.rgw中,通过命令可以看到BUCKET名称及其编号
[root@ceph4 ~]#rados -p .rgw ls
down-update.app.com
.bucket.meta.down-update.app.com:default.8172.22
.bucket.meta.down.app.com:default.8157.4
down.app.com
6.BUCKET实际数据存储
在我对用户信息进行个性化配置时,配置了某个用户的数据使用哪个index pool 和data pool。 在我的集群中有如下两个pool
.rgw.buckets.app.download 17 1890G 1.69 30956G 802808
.rgw.buckets.app.download.index 18 0 0 22283G 40
这两个POOL是我为了某个特定业务专门创建出来,分别用于存放BUCKET index信息以及BUCKET data信息。那这里面放了哪些BUCKET,这个信息可以从.rgw中看出一些端倪。
6.1 INDEX信息
我对INDEX POOL中的object信息做了一个整理,可以发现,每个都是8个一组,原因是在设置INDEX的shard num为8,所以每一个BUCKET的INDEX对应8个dir。
.dir.default.8871.2.0
.dir.default.8871.2.1
.dir.default.8871.2.2
.dir.default.8871.2.3
.dir.default.8871.2.4
.dir.default.8871.2.5
.dir.default.8871.2.6
.dir.default.8871.2.7
.dir.default.8172.22.0
.dir.default.8172.22.1
.dir.default.8172.22.2
.dir.default.8172.22.3
.dir.default.8172.22.4
.dir.default.8172.22.5
.dir.default.8172.22.6
.dir.default.8172.22.7
.dir.default.8157.4.0
.dir.default.8157.4.1
.dir.default.8157.4.2
.dir.default.8157.4.3
.dir.default.8157.4.4
.dir.default.8157.4.5
.dir.default.8157.4.6
.dir.default.8157.4.7
.dir.default.8865.1.0
.dir.default.8865.1.1
.dir.default.8865.1.2
.dir.default.8865.1.3
.dir.default.8865.1.4
.dir.default.8865.1.5
.dir.default.8865.1.6
.dir.default.8865.1.7
这个地方要研究的是,每个dir对象,对应的是哪一个BUCKET。在上文中我们在.rgw中看到如下信息
.bucket.meta.down-update.app.com:default.8172.22
.bucket.meta.down.app.com:default.8157.4
BUCKET:down-update.app.com 对应的编号为 default.8172.22 bUCKET:down.app.com对应编号是:default.8157.4
通过这个,我们就可以将BUCKET信息和INDEX中的dir信息关联起来。
下面我要研究的是,INDEX信息里面究竟放的是什么
rados -p .rgw.buckets.app.download.index listomapvals
其中存放的都是这些信息
cf/ts/tcls_verify/600/rez/UI/Achieve/Mark/23x26/S_COMBAT_Base_11_4.tga
value: (258 bytes) :
0000 : 08 03 fc 00 00 00 46 00 00 00 63 66 2f 74 73 2f : ......F...cf/ts/
0010 : 74 63 6c 73 5f 76 65 72 69 66 79 2f 36 30 30 2f : tcls_verify/600/
0020 : 72 65 7a 2f 55 49 2f 41 63 68 69 65 76 65 2f 4d : rez/UI/Achieve/M
0030 : 61 72 6b 2f 32 33 78 32 36 2f 53 5f 43 4f 4d 42 : ark/23x26/S_COMB
0040 : 41 54 5f 42 61 73 65 5f 31 31 5f 34 2e 74 67 61 : AT_Base_11_4.tga
0050 : da 01 00 00 00 00 00 00 01 04 03 69 00 00 00 01 : ...........i....
0060 : 89 06 00 00 00 00 00 00 f3 ec 52 57 00 00 00 00 : ..........RW....
0070 : 20 00 00 00 32 37 38 30 36 62 33 61 65 65 38 61 : ...27806b3aee8a
0080 : 39 37 33 62 37 38 34 61 30 64 36 35 66 65 32 39 : 973b784a0d65fe29
0090 : 37 61 63 38 10 00 00 00 74 65 6e 63 65 6e 74 2d : 7ac8....tencent-
00a0 : 64 6f 77 6e 6c 6f 61 64 10 00 00 00 74 65 6e 63 : download....tenc
00b0 : 65 6e 74 2d 64 6f 77 6e 6c 6f 61 64 00 00 00 00 : ent-download....
00c0 : 89 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
00d0 : 01 01 04 00 00 00 11 82 da 01 82 9c 35 13 00 00 : ............5...
00e0 : 00 64 65 66 61 75 6c 74 2e 38 31 36 30 2e 31 35 : .default.8160.15
00f0 : 33 33 36 31 00 00 00 00 00 00 00 00 00 00 00 00 : 3361............
0100 : 00 00 : ..
这些二进制对应的信息其实是这样的格式。 包含了文件的KEY,owner, owner_display_name, size, time, etag等内容。
#radosgw-admin bucket list --bucket=down.app.com
{
"name": "cf\/full\/CrossFire_OBV231_Full.exe",
"instance": "",
"namespace": "",
"owner": "app-download",
"owner_display_name": "app-download",
"size": 1564956326,
"mtime": "2016-06-04 17:31:01.000000Z",
"etag": "f71cd24f5ca7d661a4c44faed925fa80-100",
"content_type": "",
"tag": "default.8193.647053",
"flags": 0
}
6.2 数据信息
.rgw.buckets.zj.app中存放的是实际数据,通过ls命令可以看到对象的oid信息,通过这些OID以及CRUSHMAP算法,可定位到对象所在的物理位置。从而进行文件读写。 部分示例信息 从中可以看到所属BUCKET的编号信息(default.8154.4)即OID信息。
[root@ceph4 ~]# rados -p .rgw.buckets.app.download ls | grep CrossFire_OBV354_Full.exe
default.8157.4__shadow_cf/full/CrossFire_OBV354_Full.exe.2~4VZa_ly8gX76_AMjDB2UCXC_0FpFG8r.96_2
default.8157.4__shadow_cf/full/CrossFire_OBV354_Full.exe.2~4VZa_ly8gX76_AMjDB2UCXC_0FpFG8r.145_3
.....
7.集群资源使用情况
集群使用情况氛围两种,一种是集群整体使用情况,一种是单个BUCKET的使用情况。 整体使用情况可以通过ceph df命令看到各POOL的使用情况。但是单个BUCKET的使用情况要用如下命令 其中包含了BUCKET的使用统计情况以及对象数量。这些信息就是存放在.usage pool中。
[root@ceph4 ]# radosgw-admin bucket stats --bucket=down.app.com
"usage": {
"rgw.main": {
"size_kb": 1837686079,
"size_kb_actual": 1838258768,
"num_objects": 262774
},
"rgw.multimeta": {
"size_kb": 0,
"size_kb_actual": 0,
"num_objects": 13
}
},
8 .资源删除
在我们删除文件时,并不是立刻删除文件,而是先标记文件删除,根据配置文件的设置参数,进行异步删除,在.rgw.gc中记录的就是文件的待删除任务。 关于Ceph中的任务删除详细信息,可以参考Ceph radosgw gc 的处理过程
说明
.log .intent-log内部的内容,我还没有完全搞清楚,待补充。