Ceph RGW中各Pool的作用

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内部的内容,我还没有完全搞清楚,待补充。

转载于:https://my.oschina.net/myspaceNUAA/blog/692628

你可能感兴趣的:(Ceph RGW中各Pool的作用)