Ceph集群搭建系列(五):RGW client客户端搭建

0. Ceph RGW简介

Ceph RGW基于librados,是为应用提供RESTful类型的对象存储接口。RGW提供两种类型的接口:
  1) S3:兼容Amazon S3RESTful API
  2) Swift:兼容OpenStack Swift API
  S3Swift API共享同一个命名空间,所以可以使用两种API访问相同的数据。

Ceph集群搭建系列(五):RGW client客户端搭建_第1张图片

环境规划

如前文 Ceph集群搭建系列(一):Ceph 集群搭建 的集群部署如下:

Ceph集群搭建系列(五):RGW client客户端搭建_第2张图片

1. 现在要部署 Ceph RGW 到 node1节点:

进入admin-node节点的ceph-cluster目录,$ cd ceph-cluster

 

1)默认端口

  RGW默认使用Civetweb作为其Web Sevice,而Civetweb默认使用端口7480提供服务。ceph.conf配置文件的默认值为:

[client.rgw.rgw-node]

rgw_frontends = "civetweb port=7480"

2)安装CEPH OBJECT GATEWAY

  格式为:

$ ceph-deploy install --rgw <gateway-node1> [<gateway-node2> ...]

  由于我们环境中只有一个RGW,所以执行命令:

$ ceph-deploy install --rgw rgw-node

3)管理RGW节点

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

$ ceph-deploy admin rgw-node

4)安装RGW实例

执行命令:

$ ceph-deploy rgw create rgw-node

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

http://rgw-node:7480

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

 


  
    anonymous
    
  
  

也可以在node1节点下查看运行的radosgs进程:

[yjiang2@node1 ~]$ ps -axu| grep radosgw
ceph      113795  0.1  3.1 5043732 48692 ?       Ssl  04:23   1:46 /usr/bin/radosgw -f --cluster ceph --name client.rgw.node1 --setuser ceph --setgroup ceph

5)修改默认端口(可选的)

  如果想修改端口(如80端口),就需要修改Ceph的配置文件在配置文件中增加一个section[client.rgw.admin-node]

[client.rgw.rgw-node]

rgw_frontends = "civetweb port=80"

  然后再将配置文件推送到RGW节点。

$ ceph-deploy --overwrite-conf config push rgw-node

重启rgw节点的radosgw服务,命令为/etc/init.d/radosgw restart

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

2. 创建S3用户

  想正常的访问RGW,需要创建相应的RGW用户,并赋予相应的权限,radosgw-admin命令实现了这些功能。
  执行下面命令,来创建一个名为testuser的用户:

$ 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": "I0PJDPCIYZ665MW88W9R",
        "secret_key": "dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA"
    }],
    "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": []
}

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

3. 创建Swift用户

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

$ radosgw-admin subuser create --uid=testuser --subuser=testuser:swift --access=full

  输出结果大致如下:

    

 "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:swift",
        "access_key": "3Y1LNW4Q6X0Y53A52DET",
        "secret_key": ""
    }, {
        "user": "testuser",
        "access_key": "I0PJDPCIYZ665MW88W9R",
        "secret_key": "dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA"
    }],
    "swift_keys": [{
        "user": "testuser:swift",
        "secret_key": "244+fz2gSqoHwR3lYtSbIyomyPHf3i7rgSJrF\/IA"
    }],
    "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": []

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

4. 测试S3接口

  需要创建一个Python测试脚本来测试S3访问。该脚本会连接RGW,创建一个bucket并列出所有的bucket。其中,变量access_keysecret_access的值,来自于创建S3用户命令时,radosgw-admin命令返回的keys->access_keykeys->secret_key
  执行以下步骤,首先安装python-boto库,该库用于连接S3

$ apt-get install python-boto

  创建并编辑Python脚本:

$ vi s3test.py

 

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,

    )

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

$ python s3test.py

  输出应该类似如下:

my-new-bucket-2 2017-02-19T04:34:17.530Z

5. 测试Swift接口

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

$ apt-get install python-setuptools

$ apt-get install python-swiftclient

  执行下列命令,范文Swift接口:

$ swift -A http://{IP ADDRESS}:{port}/auth/1.0 -U testuser:swift -K '{swift_secret_key}' list

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

my-new-bucket

小结

  通过ceph-deploy命令,已经大大地简化了对Ceph集群和RGW的安装和配置。但如果想挑战下自己,或者想让自己了解更多,试试完全的手动部署Ceph

你可能感兴趣的:(Ceph)