概述
在使用radosgw提供s3服务的时候,有时候我们会需要指定user使用不同的data pool,或者不同的data index pool;
在Jewel版本里,我们可以通过配置placement target来实现;
首先介绍下Jewel版本里radosgw的几个概念:
缩略语 | 全称 |
---|---|
Realm | 域,同一域内的账户在其下属的zone上是通用的。一个域下只能有一个主zonegroup,从的zonegroup可以是0或多个。 |
Period | 表示域的有效期,在域的结构发生变化时,其Period会相应变化。 |
Zonegroup | Zone的集合,等价于之前的Region。一个Zonegroup下只能有一个主Zone。主Zone和从Zone可以部署在同一集群上,也可以部署在不同的集群上。 |
Zone | 表示独立的一个对象存储区域。 |
代码解析
zone placement
Radosgw里的user bucket数据存放哪里,是有user里的placement确定的,每个placement info可以指定三个pool,如下所示:
1 | struct RGWZonePlacementInfo { |
每个zone里可以用多个placement,定义如下:
1 | struct RGWZoneParams : RGWSystemMetaObj { |
zonegroup placement
zonegroup里的placement target的定义如下,每个zonegroup可以配置多个placement targets,每个placement targets有name,tags(对应user info里的配置)标识;
这里的placement target name都对应着zone placement_pools里的string 关键字;
1 | struct RGWZoneGroupPlacementTarget { |
user info
在每个user里,可以配置default placement,也支持配置多个placement tags;
user支持在创建bucket的时候指定placement;
1 | struct RGWUserInfo |
操作步骤
下面通过增加一个test的placement target,让rgw user miketest使用pool default.rgw.buckets.data.tst 作为其bucket的data pool;
创建pool
根据需要通过ceph osd pool 命令创建要使用的pool,例如:
1 | # ceph osd pool create default.rgw.buckets.data.tst 1024 1024 |
添加zone的placement
可以先list下当前的zone的placement
1 | # radosgw-admin zone placement list --rgw-zone=default |
zone添加placement的命令如下(指定zone placement的各个pool):
1 | # radosgw-admin zone placement add --rgw-zone=default --placement-id=test --index_pool=default.rgw.buckets.index --data_pool=default.rgw.buckets.data.tst --data_extra_pool=default.rgw.buckets.non-ec |
也可以通过如下命令来添加zone的placement:
1 | # radosgw-admin zone get --rgw-zone=default > zone.info |
添加zonegroup的placement
查看当前的zonegroup的placement
1 | # radosgw-admin zonegroup placement list |
zonegroup添加新的placement
1 | # radosgw-admin zonegroup placement add --rgw-zonegroup=default --placement-id=test |
更新user info
查看user的信息
1 | # radosgw-admin user info --uid=miketest |
导出user info,修改后导入新的信息,添加新的placement_tags:
1 | # radosgw-admin metadata get user:miketest > miketest.userinfo |
更新zonegroup map
更新完zonegroup的placement后,虽说也可以查看到新的placement,但这些并没有更新到zonegroup map里;
1 | # radosgw-admin zonegroup placement list |
执行zonegroup map更新:radosgw-admin period update --commit
1 | # radosgw-admin period update --commit |
重启radosgw服务
重启radosgw服务,Centos里的命令为:
1 | # systemctl restart ceph-radosgw.target |
测试
通过s3cmd就可以测试,命令如下:
1 | ✗ s3cmd mb s3://foxtst --bucket-location=:test |
在ceph集群里,可以查看到上传的文件pg_by_osd.sh
在指定的pool里:default.rgw.buckets.data.tst
1 | # rados ls -p default.rgw.buckets.data.tst |
参考
http://docs.ceph.com/docs/jewel/radosgw/multisite/
http://www.jianshu.com/p/31a6f8df9a8f
http://ceph.org.cn/2017/03/24/ceph-rgwj%E4%BB%A5%E4%B8%8A%E7%89%88%E6%9C%AC%E7%9A%84%E7%94%A8%E6%88%B7placement%E8%AE%BE%E7%BD%AE-by_%E7%A7%A6%E7%89%A7%E7%BE%8A/