ceph对象存储的配置与S3、swift接口的使用

首先简单了解一下一些ceph对象存储的基本知识:
Ceph:
起始于2006年
开发语言:C
强一致性
块存储
对象存储
Swift:

起始于2008年
开发语言:Python
最终一致性
对象存储
真正的大型公用云服务产品中使用

对象存储介绍:

Ceph本质上就是一个rados,利用命令rados就可以访问和使用ceph的对象存储,但作为一个真正产品机的对象存储服务,通常使用的是Restfulapi的方式进行访问和使用。而radosgw其实就是这个作用,安装完radosgw以后,就可以使用api来访问和使用ceph的对象存储服务了。
本质上radosgw(其实也是一个命令)和rbd命令一样,其实是ceph集群的客户端。只不过,radosgw即作为rados的客户端,同时又提供http restful接口,作为服务端供用户使用。

首先明白一下架构,radosgw其实名副其实,就是rados的一个网关,作用是对外提供对象存储服务。本质上radosgw(其实也是一个命令)和rbd命令一样,其实是ceph集群的客户端。只不过,radosgw即作为rados的客户端,同时又提供http restful接口,作为服务端供用户使用。Radosgw对用户而言就是一个http restful的应用,因此本质上来讲,对其进行使用就是通过http的方式,但显然每次都要用户构建http访问的url和headers不是一个很方便的方式,因此radosgw兼容了通用的对象存储接口,分别是亚马逊的s3和openstack的swift,这也就是说你可以用swift或者s3的客户端来访问radosgw。
Radosgw包含两个命令行工具:
一个是radosgw,这个是用来启动radosgw服务的脚本,是一个二进制文件;
另外一个是radosgw-admin,这是用来管理radosgw的账号的一个命令行工具,主要用来创建、查看、修改radosgw的账号信息。

注意,ragw的账号信息仅仅是对radosgw的用户而言,这个和ceph中的用户不是一个概念。
Radosgw作为ceph集群(rados)的客户端,因此他在ceph中有一个账号,通常叫做client.radosgw.gateway。在启动radosgw这个服务时,会读取ceph.conf中[client.radosgw.gateway]这个section。

开始操作:Ceph 对象存储服务提供了 REST 风格的 API ,它有与 Amazon S3 和 OpenStack Swift 兼容的接口。也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL和其他扩展;Ceph 对象存储可以简称为 RGW,Ceph RGW 是基于 librados,为应用提供 RESTful 类型的对象存储接口,其接口方式支持 S3(兼容 Amazon S3 RESTful API) 和 Swift(兼容 OpenStack Swift API) 两种类型。接下来就分别演示通过这两种方式使用 Ceph RGW。

接下来就是我实际的配置操作:

Ceph 对象存储可以简称为 RGW,Ceph RGW 是基于 librados,为应用提供 RESTful 类型的对象存储接口,其接口方式支持 S3(兼容 Amazon S3 RESTful API) 和 Swift(兼容 OpenStack Swift API) 两种类型。接着之前的文章,还是在之前搭建的ceph集群基础上操作。接下来就分别演示通过这两种方式使用 Ceph RGW。

1、首先需要安装 Ceph 对象网关。
Ceph 从 v0.80 开始,使用内嵌 Civetweb 作为 Web Server,无需额外安装 web 服务器或配置 FastCGI,其默认端口为 7480。在 mon节点目录通过 ceph-deploy 安装 Ceph RGW。一般是在管理节点下,但是搭建的ceph集群没有管理节点,所以就在mon节点下面,在这里我们还是使用 node1 节点(也就是我的mon节点)做测试。
首先进入到mon节点的my-cluster目录下面,然后执行下面命令:
$ ceph-deploy install –rgw node1
2、新建 Ceph 对象网关实例
在 mon节点工作目录创建一个 Ceph rgw 实例,一旦对象网关开始运行,我们就可以通过 http://node1:7480 地址访问啦。
$ ceph-deploy –overwrite-conf rgw create node1
[ceph_deploy.conf][DEBUG ] found configuration file at:
…….
省略
…….
[ceph_deploy.rgw][INFO ] The Ceph Object Gateway (RGW) is now running on host admin and default port 7480

从日志中可以看到 RGW 已经运行起来了,我们来访问以下试下。
$ curl http://node1:7480

#!/usr/bin/pyhton
import boto
import boto.s3.connection
access_key = 'OHP5X3XQSC1IOWQUYDNT'
secret_key = 'BqiUlhfWGvsz30FVCjzUhPesGH4NDa69joNHEYep'
conn = boto.connect_s3(
            aws_access_key_id = access_key,
                aws_secret_access_key = secret_key,
                    host = '192.168.1.220', port=80,
                        is_secure=False,
                            calling_format = boto.s3.connection.OrdinaryCallingFormat(),
                            )
bucket = conn.create_bucket('my-first-s3-bucket')
for bucket in conn.get_all_buckets():
            print "{name}\t{created}".format(
                                    name = bucket.name,
                                                    created = bucket.creation_date,)

“`

注意:这里使用了python-boto 包,使用认证信息连接 S3,然后创建了一个 my-first-s3-bucket 的 bucket,最后列出所有已创建的 bucket,打印名称和创建时间。
最后,执行脚本,看下结果是否正确。
lxl@lxl-virtual-machine:~$ python s3.py
my-first-s3-bucket 2018-03-04T08:17:40.921Z
测试通过。

我们可以看一下:
ceph对象存储的配置与S3、swift接口的使用_第1张图片
注意:default.rgw.data.root。它包含bucekt和bucket元数据,bucket创建了两个对象一个:一个是< bucket_name > 另一个是.bucket.meta.< bucket_name >.< marker > 这个marker是创建bucket中生成的。 同时用户创建的buckets在.rgw.buckets.index都对应一个object对象,其命名是格式:.dir.< marker >
然后查看:
[root@node1 ~]# rados -p default.rgw.data.root ls
.bucket.meta.my-first-s3-bucket:9ad5259a-77d7-4407-99b0-562c217cdb87.24101.1
my-first-s3-bucket
可以看到创建了my-first-s3-bucket

创建 Swift 用户
要通过 Swift 访问对象网关,需要 Swift 用户是作为子用户 subuser 被创建的。
$ sudo radosgw-admin subuser create –uid=rgwuser –subuser=rgwuser:swift –access=full
{
“user_id”: “rgwuser”,
“display_name”: “This is first rgw test user”,
“email”: “”,
“suspended”: 0,
“max_buckets”: 1000,
“auid”: 0,
“subusers”: [
{
“id”: “rgwuser:swift”,
“permissions”: “full-control”
}
],
“keys”: [
{
“user”: “rgwuser”,
“access_key”: “OHP5X3XQSC1IOWQUYDNT”,
“secret_key”: “BqiUlhfWGvsz30FVCjzUhPesGH4NDa69joNHEYep”
}
],
“swift_keys”: [
{
“user”: “rgwuser:swift”,
“secret_key”: “twTTtZ8pCVENvXJUbxfNj0lPogwaCWHdDRQpM9DK”
}
],
“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”: []
}

注意:返回的 Json 值中,我们要记住两个 secret_key 因为下边我们测试访问 Swift 接口时需要使用。
测试访问 Swift 接口
访问 Swift 接口可以通过 swift 命令行客户端来完成,然后通过客户端命令访问 Swift 接口。
# 安装 Swift 命令行客户端
sudoaptgetinstallpythonsetuptools s u d o a p t − g e t i n s t a l l p y t h o n − s e t u p t o o l s sudo easy_install pip
sudopipinstallupgradesetuptools s u d o p i p i n s t a l l – u p g r a d e s e t u p t o o l s sudo pip install –upgrade python-swiftclient
# 访问 Swift 接口
$ swift -A http://192.168.1.220:80/auth/1.0 -U rgwuser:swift -K ‘twTTtZ8pCVENvXJUbxfNj0lPogwaCWHdDRQpM9D\’ list my-first-s3-bucket
注意:192.168.1.220:80为网关服务器的外网访问 IP 地址,这里为mon节点 IP,端口默认 7480,因为上面已修改端口号,这里也需要对应修改为80。密钥 Key 为上边返回值中的 secret_key。
同样,测试通过。

参考:http://blog.csdn.net/aixiaoyang168/article/details/78825850

你可能感兴趣的:(swift,云存储,ceph)