博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ceph对象存储的配置与S3、swift接口的使用
阅读量:2433 次
发布时间:2019-05-10

本文共 4965 字,大约阅读时间需要 16 分钟。

首先简单了解一下一些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 实例,一旦对象网关开始运行,我们就可以通过 地址访问啦。
$ 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

 
#!/usr/bin/pyhtonimport botoimport boto.s3.connectionaccess_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
测试通过。

我们可以看一下:

注意: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 -U rgwuser:swift -K ‘twTTtZ8pCVENvXJUbxfNj0lPogwaCWHdDRQpM9D\’ list my-first-s3-bucket
注意:192.168.1.220:80为网关服务器的外网访问 IP 地址,这里为mon节点 IP,端口默认 7480,因为上面已修改端口号,这里也需要对应修改为80。密钥 Key 为上边返回值中的 secret_key。
同样,测试通过。

参考:

你可能感兴趣的文章
通过Form表单一次性拿到json格式数据,及后台接收
查看>>
## EL表达式与JSTL标签用法解读
查看>>
Mybatis异常:The content of elements must consist of well-formed.......(一般出现在写分页/带大于小于号的SQL)
查看>>
Mybatis光速入门(配置文件模块)
查看>>
关于Oracle的主键自增如何设置
查看>>
手撕HashMap的resize()方法源码渗透解析+图解
查看>>
Mybatis常见异常类型Could not set parameters for mapping离不开这个原因!
查看>>
Thymeleaf中一个页面怎么嵌套另一个页面,关于页面嵌套,标签告诉你应该知道的
查看>>
JAVA如何实现短信验证码--阿里云接口,新手式图文教学,个人项目有这一篇就够了
查看>>
Java中大小数BigDecimal的加减乘除用法及场景的详细介绍,看完不信你还会报Syntax error on token “+/-/*“, invalid AssignmentOperat异常
查看>>
UVa 10917 Dijkstra
查看>>
CF403B/CF402D
查看>>
CF402E / 403C
查看>>
cf404b
查看>>
cf404c
查看>>
cf404d
查看>>
武大网络预赛 Problem 1537 - A - Stones I
查看>>
武大网络预赛 Problem 1545 - I - Twenty-four
查看>>
ZOJ Problem Set - 3772 Calculate the Function 矩阵+线段树
查看>>
ZOJ Problem Set - 3768 Continuous Login
查看>>