Ceph RGW 基于 librados,是为应用提供 RESTful 类型的对象存储接口。RGW 提供两种类型的接口:
1) S3:兼容 Amazon S3RESTful API;
2) Swift:兼容 OpenStack Swift API。
S3 和 Swift API 共享同一个命名空间,所以可以使用两种 API 访问相同的数据。
如上篇文章《Ceph 部署(一)集群搭建》所述:4 台服务器:1 台作为 Monitor,1 台作为 OSD RGW,还有两台作为 OSD。ps:我们不搭建 CephFS。
所有服务器都安装 Ubuntu 16.04。
进入上文所述的 my-cluster 目录。
- $ cd my-cluster
RGW 默认使用 Civetweb 作为其 Web Sevice,而 Civetweb 默认使用端口 7480 提供服务,如果想修改端口(如 80 端口),就需要修改 Ceph 的配置文件。在配置文件中增加一个 section[client.rgw.
- [client.rgw.node4]
- rgw_frontends = "civetweb port=80"
然后再将配置文件推送到 RGW 节点。
- $ ceph-deploy --overwrite-conf config push node4
格式为:
- $ ceph-deploy install --rgw <gateway-node1> [<gateway-node2> ...]
由于我们环境中只有一个 RGW,所以执行命令:
- $ ceph-deploy install –-rgw node4
Ceph CLI 工具需要在管理员模式下运行,因此需要执行以下命令:
- $ ceph-deploy admin node4
执行命令:
- $ ceph-deploy rgw create node4
一旦 RGW 开始运行,我们就可以通过端口 7480(如果没有修改的话)来访问。如:
- http: //node4:7480
如果 RGW 运行正常,它应该返回类似的信息:
- <ListAllMyBucketsResult>
- <Owner>
- <ID>
- anonymous
- </ID>
- <DisplayName/>
- </Owner>
- <Buckets/>
- </ListAllMyBucketsResult>
注意:剩下的创建用户的步骤都应该在 RGW 节点上运行。
想正常的访问 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_key 和 keys->secret_key 的值,用于 S3 接口访问确认。
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 接口访问确认。
需要创建一个 Python 测试脚本来测试 S3 访问。该脚本会连接 RGW,创建一个 bucket 并列出所有的 bucket。其中,变量 access_key 和 secret_access 的值,来自于创建 S3 用户命令时,radosgw-admin 命令返回的 keys->access_key 和 keys->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
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 吧。
来源: http://www.cnblogs.com/styshoo/p/6472181.html