CEPH J版本新特性RGW Multi-tenancy详解


 CEPH官方对RGW Multi-tenancy的介绍如下



RGW Multi-tenancy


 多租户特性允许创建使用不同的存储桶和用户,前提是将其分离在不同的租户之下。例如,允许不同租户下的Swift API的用户,都可以创建形如“test”,“trove”这样很容易重复的桶名。

 从Jewel版本开始,每个用户和桶都在租户之下。为了兼容性,RGW提供了一个名为空的“legacy”租户,如果引用桶时没有指明所属租户,则默认从“legacy”租户下获取该桶的信息。由于原有用户位于传统租户之下,因此他们将继续像以前一样创建和访问存储桶。RADOS中对象的布局以兼容的方式扩展,确保能顺利升级到Jewel版本。


指定租户下管理用户


 租户实际没有做任何操作。当管理用户时,租户的概念才能起作用。为了明确使用租户的创建、修改和删除用户,可以使用附加提供的参数-tanant。或者在radosgw-admin名参数中使用语法<tenant>$<user>”


示例


创建S3用户testx$tester


radosgw-admin --tenant testx --uid tester--display-name "Test User" --access_key TESTER --secret test123 usercreate


创建Swift用户testx$tester


radosgw-admin --tenant testx --uid tester--display-name "Test User" --subuser tester:test --key-type swift--access full user create

请注意,指明租户的子用户必须在shell中引用

测试

创建租户为testx,用户名为tester的用户,swift子账号名为test,创建命令


radosgw-admin --tenant testx --uid tester--display-name "Test User" --subuser tester:test --key-type swift--access full user create



用该用户的keys调用SWIFT API创建桶test



创建租户为testx3,用户名为tester的用户,swift子账号名为test,创建命令

radosgw-admin --tenant testx3--uid tester --display-name "Test User" --subuser tester:test--key-type swift --access full user create

 


用该用户的keys调用SWIFT API创建桶test

底层使用命令radosgw-admin metadata list bucket查看RGW所有桶



由此可见,底层其实是把租户的名称加到桶名前面,这样实现不同租户下可以创建相同的桶名。

同样的,使用命令radosgw-admin metadata list user查看,可以看出RGW用户名格式为<tenant>$<user>


 


总结

         RGWMulti-tenancy这个特性,底层实现其实就是在桶名和用户名前加个租户tenant字段来实现区分,对于用户而言是透明的,但是对于底层而言,是在用户名或者桶名加上了tenant字段而已。这个在做应用的时候会有一定的好处,即对不同租户的使用上来说,可以看成是可以创建同名的bucket桶。


测试python脚本(需先安装swiftclient的python包)

import requests
import swiftclient
KEY = '0os329T9icBwNB1Kpjt5SJi0BNTJPltcrZH5YCAj'
USERNAME = 'testx$tester:test'
server = '192.168.59.2:8080'
url = 'http://%s/auth' % server
conn = swiftclient.Connection(
    user=USERNAME,
    key=KEY,
    authurl=url,
)
print USERNAME
print conn.put_container("test")
print conn.get_account()



猜你喜欢

转载自blog.csdn.net/u010317005/article/details/79275527