【实践】Ceph:创建RGW

Ceph RGW基于librados,是为应用提供RESTful类型的对象存储接口。RGW提供两种类型的接口:

1) S3:兼容AmazonS3RESTful API;

2) Swift:兼容OpenStackSwift API。

S3和Swift API共享同一个命名空间,所以可以使用两种API访问相同的数据。

环境规划

如上篇文章《[CEPH]基于CentOS7部署Ceph集群(版本10.2.2)》 


作者:Younger Liu,

本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。

原文地址:http://blog.csdn.net/younger_china/article/details/73410918


1     部署RGW

进入上文所述的/etc/ceph目录,安装ceph object gateway,

格式:

ceph-deployinstall --rgw  [ ...]

本例中

[root@node0ceph]# ceph-deploy install --rgw node0

注:

ceph-deploygatherkeys node0

安装rgw实例,执行命令:

ceph-deploy rgwcreate node0


Ceph CLI工具需要在管理员模式下运行,因此需要执行以下命令: 

ceph-deploy admin node0

 

一旦RGW开始运行,就可以通过端口7480(如果没有修改的话)来访问。如: 

http://node0:7480

如果RGW运行正常,它应该返回类似的信息: 


  
     anonymous
      
   
   

 

**注意**:剩下的创建用户的步骤都应该在RGW节点上运行。

 

2     创建S3用户

想正常的访问RGW,需要创建相应的RGW用户,并赋予相应的权限,radosgw-admin命令实现了这些功能。 

执行下面命令,来创建一个名为testuser的用户: 

[root@node0 ceph]# radosgw-admin user create--uid="testuser" --display-name="First User"
2017-06-16 22:38:15.215139 7f988c8579c0  0 RGWZoneParams::create(): error creatingdefault zone params: (17) File exists
{
   "user_id": "testuser",
   "display_name": "First User",
   "email": "",
   "suspended": 0,
   "max_buckets": 1000,
   "auid": 0,
   "subusers": [],
    "keys": [
        {
           "user": "testuser",
           "access_key": "YUXJRPRS5JEHYV53LVZA",
           "secret_key":"qLKQRj71IvBVrovGRJ4USL70vCCbiFfhPxHC8Hn5"
        }
    ],
   "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@node0 ceph]#

**注意**:需要记住返回结果中keys->access_key和keys->secret_key的值,用于S3接口访问确认。 

  

3     创建Swift用户

 Swift用户是作为子用户subuser被创建的,执行以下命令:

[root@node0 ceph]# radosgw-admin subuser create--uid=testuser --subuser=testuser:swift --access=full
2017-06-16 22:39:52.267161 7f86a8fa39c0  0 RGWZoneParams::create(): error creatingdefault zone params: (17) File exists
{
   "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": "YUXJRPRS5JEHYV53LVZA",
           "secret_key":"qLKQRj71IvBVrovGRJ4USL70vCCbiFfhPxHC8Hn5"
        }
    ],
   "swift_keys": [
        {
           "user": "testuser:swift",
           "secret_key": "cDouzXDRQmAIYiAefAlYU23B897pZ3glyHe1CdBB"
        }
    ],
   "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@node0 ceph]#

**注意**:需要记住返回结果中swift_keys->secret_key的值,用于Swift接口访问确认。

4     测试S3接口

需要创建一个python测试脚本来测试S3访问。该脚本会连接RGW,创建一个bucket并列出所有的bucket。其中,变量access_key和secret_access的值,来自于创建S3用户命令时,radosgw-admin命令返回的keys->access_key和keys->secret_key。 

执行以下步骤,首先安装python-boto库,该库用于连接S3:

# yum install -y python-boto


创建并编辑Python脚本:

[root@node0 test]# cat s3test.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
###############################################
# File Name  : s3test.py
# Author     : Youner Liu
# Mail       : [email protected]
# Created Time: Fri 16 Jun 2017 10:43:19 PM CST
# Description :
###############################################
 
import boto.s3.connection
 
access_key = 'I0PJDPCIYZ665MW88W9R'
secret_key ='dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA'
conn = boto.connect_s3(
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        host='{hostname}',port={port},
        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} {created}".format(
            name=bucket.name,
            created=bucket.creation_date,
            )
 
[root@node0 test]#

替换{hostname}、{port}为真实环境的hostname(或者ip)和RGW的端口。执行命令进行测试:

[root@node0 test]# python s3test.py
my-new-bucket 2017-06-16T14:47:53.748Z
[root@node0 test]#

 

5     测试Swift接口

Swfit的访问可以通过命令行。首先安装相关软件包: 

# pip installpython-setuptools  
# pip installpython-swiftclient
# swift -A http://{IP ADDRESS}:{port}/auth/1.0 -Utestuser:swift -K '{swift_secret_key}' list

替换{IP ADDRESS}、{port}、{swift_secret_key}等相关参数,其中{swift_secret_key}为创建Swift用户时,radosgw-admin命令返回的swift_keys->secret_key的值。正常的输出应该为:

[root@node0 test]# swift -Ahttp://192.168.192.90:7480/auth/1.0 -U testuser:swift -K 'cDouzXDRQmAIYiAefAlYU23B897pZ3glyHe1CdBB' list
my-new-bucket
[root@node0 test]#

 

6     小结

通过ceph-deploy命令,已经大大地简化了对Ceph集群和RGW的安装和配置。


作者:Younger Liu,

本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。

原文地址:http://blog.csdn.net/younger_china/article/details/73410918


你可能感兴趣的:(数据存储,深入理解CEPH系统,CEPH,RGW)