本文共 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 测试通过。我们可以看一下:
创建 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 命令行客户端 sudoapt−getinstallpython−setuptools 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 sudopipinstall–upgradesetuptools 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。 同样,测试通过。参考: