功能描述
通过设置用户的placement,对不同的bucket指定不同的pool,实现单个zone以pool为单位进行扩容,也可以利用这个特性实现bucket存储介质的差异化配置。
配置流程
新建一组pool存储index、data和extra数据
1 2 3 4 5 6 |
root@demo:/home/demouser# ceph osd pool create test.buckets.extra 64 64 pool 'test.buckets.extra' created root@demo:/home/demouser# ceph osd pool create test.buckets.index 64 64 pool 'test.buckets.index' created root@demo:/home/demouser# ceph osd pool create test.buckets.data 64 64 pool 'test.buckets.data' created |
增加zone的placement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
root@demo:/home/demouser# radosgw-admin zone placement add --rgw-zone=default --placement-id=test --index_pool=test.buckets.index --data_pool=test.buckets.data --data_extra_pool=test.buckets.extra --placement-index-type=normal { "id": "0fef9464-bfe0-428b-86b5-b8d51876ff81", "name": "default", "domain_root": "default.rgw.data.root", "control_pool": "default.rgw.control", "gc_pool": "default.rgw.gc", "lc_pool": "default.rgw.lc", "log_pool": "default.rgw.log", "intent_log_pool": "default.rgw.intent-log", "usage_log_pool": "default.rgw.usage", "user_keys_pool": "default.rgw.users.keys", "user_email_pool": "default.rgw.users.email", "user_swift_pool": "default.rgw.users.swift", "user_uid_pool": "default.rgw.users.uid", "system_key": { "access_key": "", "secret_key": "" }, "placement_pools": [ { "key": "default-placement", "val": { "index_pool": "default.rgw.buckets.index", "data_pool": "default.rgw.buckets.data", "data_extra_pool": "default.rgw.buckets.non-ec", "index_type": 0, "compression": "snappy" } }, { "key": "test", "val": { "index_pool": "test.buckets.index", "data_pool": "test.buckets.data", "data_extra_pool": "test.buckets.extra", "index_type": 0, "compression": "" } } ], "metadata_heap": "", "tier_config": [], "realm_id": "" } |
检查zone的placement结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
root@demo:/home/demouser# radosgw-admin zone placement list --rgw-zone=default [ { "key": "default-placement", "val": { "index_pool": "default.rgw.buckets.index", "data_pool": "default.rgw.buckets.data", "data_extra_pool": "default.rgw.buckets.non-ec", "index_type": 0, "compression": "snappy" } }, { "key": "test", #新增 "val": { "index_pool": "test.buckets.index", "data_pool": "test.buckets.data", "data_extra_pool": "test.buckets.extra", "index_type": 0, "compression": "" } } ] |
增加zonegroup的placement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
root@demo:/home/demouser# radosgw-admin zonegroup placement add --rgw-zonegroup=default --placement-id=test [ { "key": "default-placement", "val": { "name": "default-placement", "tags": [] } }, { "key": "test", "val": { "name": "test", "tags": [] } } ] |
修改用户的placement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
root@demo:/home/demouser# radosgw-admin metadata get user:demouser > user.info #导出配置并修改内容如下 { "key": "user:demouser", "ver": { "tag": "_fAFg63Kdtv8cvVaKW6zxDa5", "ver": 4 }, "mtime": "2017-03-22 02:44:53.879956Z", "data": { "user_id": "demouser", "display_name": "demouser", "email": "", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [], "keys": [ { "user": "demouser", "access_key": "", "secret_key": "" } ], "swift_keys": [], "caps": [], "op_mask": "read, write, delete", "default_placement": "default-placement", "placement_tags": [ "default-placement", "test" #新加 ], "bucket_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "user_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "temp_url_keys": [], "type": "rgw", "attrs": [ { "key": "user.rgw.idtag", "val": "" } ] } } |
导入user配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
root@demo:/home/demouser# radosgw-admin metadata put user:demouser < user.info root@demo:/home/demouser# radosgw-admin user info --uid=demouser { "user_id": "demouser", "display_name": "demouser", "email": "", "suspended": 0, "max_buckets": 1000, "auid": 0, "subusers": [], "keys": [ { "user": "demouser", "access_key": "", "secret_key": "" } ], "swift_keys": [], "caps": [], "op_mask": "read, write, delete", "default_placement": "default-placement", "placement_tags": [ "default-placement", "test" #新增了一个字段 ], "bucket_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "user_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "temp_url_keys": [], "type": "rgw" } |
重启radosgw服务
1 |
/etc/init.d/radosgw restart #不同系统命令不一样,具体请参考系统操作温度 |
使用和验证
使用s3cmd新建bucket,指定localtion为test
1 |
s3cmd mb s3://demo1 --bucket-location=:test |
或者使用boto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
from boto.s3.connection import S3Connection import boto access_key = 'xxx' secret_key = 'xxxx' host = 'ceph.work' bucket = 'demo1' conn = S3Connection(access_key, secret_key, host=host, is_secure=False) conn = boto.connect_s3( aws_access_key_id = access_key, aws_secret_access_key = secret_key, host = host, is_secure=False, calling_format = boto.s3.connection.SubdomainCallingFormat(), validate_certs = True, ) bucket = conn.create_bucket(bucket,location=':test') #指定bucket localtion bucket = conn.get_bucket(bucket) print bucket |
检查bucket的placement配置是否生效
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
root@demo:/home/demouser# radosgw-admin bucket stats --bucket=demo1 { "bucket": "demo1", "pool": "test.buckets.data", #新的data pool "index_pool": "test.buckets.index", #新的index pool "id": "0fef9464-bfe0-428b-86b5-b8d51876ff81.4378.1", "marker": "0fef9464-bfe0-428b-86b5-b8d51876ff81.4378.1", "owner": "user", "ver": "0#1", "master_ver": "0#0", "mtime": "2017-03-22 11:42:08.922907", "max_marker": "0#", "usage": {}, "bucket_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 } } |