对象存储之二(续):实践rgw
在对象存储之二:实践中使用了Ceph系统的rados命令以及librados API,下面继续往前走;
rgw
在使用云服务器+Docker部署Ceph存储系统 环境中,已经在docker实例中启动了rgw服务;
[root@cluster1 ~]# ps aux |grep rgw
root 12913 0.0 0.0 112648 960 pts/2 R+ 11:13 0:00 grep –color=auto rgw
64045 31401 0.0 2.3 1822416 23744 ? Ssl Jun25 3:50 radosgw –cluster ceph –setuser ceph –setgroup ceph -n client.radosgw.gateway -k /var/lib/ceph/radosgw/cluster/keyring –rgw-socket-path= –rgw-frontends=civetweb port=80
rgw for s3 access
创建rgw s3 user:using-the-gateway
[root@cluster1 ~]# radosgw-admin user create –uid=”testuser” –display-name=”First User”
{
“user_id”: “testuser”,
“display_name”: “First User”,
“email”: “”,
“suspended”: 0,
“max_buckets”: 1000,
“auid”: 0,
“subusers”: [],
“keys”: [
{
“user”: “testuser”,
“access_key”: “WD34DYGH4T3D1F9MJE0C”,
“secret_key”: “UhqLKc31zTmyPDzj29Z4QUp0ikuPcyQRw0RgVbFw”
}
],
“swift_keys”: [],
“caps”: [],
“op_mask”: “read, write, delete”,
“default_placement”: “”,
“placement_tags”: [],
“bucket_quota”: {
“enabled”: false,
“max_size_kb”: -1,
“max_objects”: -1
},
“user_quota”: {
“enabled”: false,
“max_size_kb”: -1,
“max_objects”: -1
},
“temp_url_keys”: []
}
[root@cluster1 ~]# radosgw-admin user info –uid=”testuser”
client端 安装s3开发包,连接到rgw并创建一个bucket:
yum install python-boto -y
cat <<EOF >s3test.py
#!/bin/python
import boto
import boto.s3.connection
access_key = "WD34DYGH4T3D1F9MJE0C"
secret_key = "UhqLKc31zTmyPDzj29Z4QUp0ikuPcyQRw0RgVbFw"
conn = boto.connect_s3(
aws_access_key_id = access_key,
aws_secret_access_key = secret_key,
host = '172.18.18.95',
is_secure=False,
calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
bucket = conn.create_bucket('my-new-bucket')
for bucket in conn.get_all_buckets():
print "{name}\t{created}".format(
name = bucket.name,
created = bucket.creation_date,
)
EOF
[root@cluster1 ~]# python s3test.py
my-new-bucket 2017-06-29T03:38:46.825Z
rgw for swift access
创建rgw swift user:
[root@cluster1 ~]# sudo radosgw-admin subuser create –uid=testuser –subuser=testuser:swift –access=full
[root@cluster1 ~]# sudo radosgw-admin key create –subuser=testuser:swift –key-type=swift –gen-secret
{
“user_id”: “testuser”,
“display_name”: “First User”,
“email”: “”,
“suspended”: 0,
“max_buckets”: 1000,
“auid”: 0,
“subusers”: [
{
“id”: “testuser:swift”,
“permissions”: “full-control”
}
],
“keys”: [
{
“user”: “testuser”,
“access_key”: “WD34DYGH4T3D1F9MJE0C”,
“secret_key”: “UhqLKc31zTmyPDzj29Z4QUp0ikuPcyQRw0RgVbFw”
}
],
“swift_keys”: [
{
“user”: “testuser:swift”,
“secret_key”: “MgOqWsoDzSs2OZVYU4ggprqtwc8AiaLXkQNtPq6O”
}
],
“caps”: [],
“op_mask”: “read, write, delete”,
“default_placement”: “”,
“placement_tags”: [],
“bucket_quota”: {
“enabled”: false,
“max_size_kb”: -1,
“max_objects”: -1
},
“user_quota”: {
“enabled”: false,
“max_size_kb”: -1,
“max_objects”: -1
},
“temp_url_keys”: []
}
client端 安装swift包,并连接到rgw并显示所有 bucket,创建新bucket:
yum install python-setuptools
easy_install pip
pip install –upgrade setuptools
pip install –upgrade python-swiftclient
[root@cluster1 ~]# ps aux |grep radosgw
64045 14009 0.0 3.3 1821416 33704 ? Ssl 11:31 0:10 radosgw --cluster ceph --setuser ceph --setgroup ceph -n client.radosgw.gateway -k /var/lib/ceph/radosgw/cluster1/keyring --rgw-socket-path= --rgw-frontends=civetweb **port=80**
root 15496 0.0 0.0 112648 964 pts/2 R+ 14:57 0:00 grep --color=auto radosgw
[root@cluster1 ~]# swift -A http://172.18.18.95:**80**/auth/1.0 -U testuser:swift -K 'MgOqWsoDzSs2OZVYU4ggprqtwc8AiaLXkQNtPq6O' list
my-new-bucket
[root@cluster1 ~]# swift -A http://172.18.18.95:80/auth/1.0 -U testuser:swift -K 'MgOqWsoDzSs2OZVYU4ggprqtwc8AiaLXkQNtPq6O' post test-bucket
[root@cluster1 ~]# swift -A http://172.18.18.95:80/auth/1.0 -U testuser:swift -K 'MgOqWsoDzSs2OZVYU4ggprqtwc8AiaLXkQNtPq6O' list
my-new-bucket
test-bucket
总结一下
结合笔者使用aws s3和ali oss的经历,对象存储面向使用者,一般都提供如下几类接口:
- GUI控制台
- cmd tools:例如ceph的rados,ossutil,s3cmd;
- SDK:例如ceph的librados,ali和aws也各自有多语言的sdk;
- Restful API:基于HTTP的访问,例如ceph需搭建rgw(主要实现web server功能)后才支持;