一、Ceph RGW介绍
Ceph RGW(RADOS GateWay)是ceph对象存储网关,是在librados之上构建的对象存储服务,对外提供对象存储接口,为应用程序提供通往Ceph集群的RESTful网关。Ceph对象网关守护进程radosgw是用于与Ceph集群进行交互的HTTP服务器,为了有利于Ceph在云存储中迅速普及,RGW选择适配云存储领域应用最广的Amazon S3和OpenStack Swift的对象存储接口。
二、Ceph RGW对外接口基础实体
RGW作为对象存储网关系统,向上充当着HTTP服务端角色,接收并解析互联网传送的数据。向下又承担着RADOS集群客户端角色,为对象存储应用提供数据存储的通道。RGW对外接口有3个基础实体:用户、存储桶、对象。
- 用户。用户(User)是对象存储应用的使用者,一个用户可以拥有一个或者多个存储桶。RGW提供用户的AK(AccessKeyID)和SK(SecretAccessKeyID),通过使用AK和SK对称加密的方法验证某个请求的发送者身份。用户的账户有两种类型,包括用户和子用户(SubUser),用户是作为s3接口的,子用户是作为swift接口的,子用户附属于用户。
- 桶。桶(Bucket)是RGW中存储对象的容器。对象存储提供了基于桶和对象的扁平化存储方式,桶中的所有对象都处于同一逻辑层次,去除了文件系统中多层级树形目录结构。
- 对象。对象(object)是RGW中数据存储的基本单位,一个对象实际是一个文件的数据与其相关元数据的集合体,用户上传至RGW的数据都以对象的形式保存在桶里面,对象可以是泛指一个文档、图片或者视频文件等。此外,对象必须作为一个整体单元操作,对象存储不提供编辑对象部分内容的功能,即使只更新对象中的某一个字符,也必须将整个对象从云端下载下来,更新后再重新上传。
各实体间关系的示意图如下所示:
三、Ceph RGW命令行使用示例
3.1、radosgw命令行
部署好后Ceph对象存储服务后,可以通过radosgw-admin命令操作RGW。radosgw的一些比较常用的命令如下所示:
#创建用户
radosgw-admin user create --uid='mytest' --display-name='mytest'
创建完用户会生成两个key,这两个key可用于后面的身份认证。
#创建子用户
如果是使用swift接口,创建用户后还需要创建子用户。
radosgw-admin subuser create --uid='mytest' --subuser='mytest:swift' --access=full
#列出所有用户
radosgw-admin user list
#查看某个用户信息
radosgw-admin user info --uid mytest
#列出所有的存储桶
radosgw-admin bucket list
#查看某个桶信息
radosgw-admin bucket stats --bucket=quota-bucket
#查看某个桶里面的所有对象
radosgw-admin bucket list --bucket=quota-bucket
#设置配额,可从用户维度进行配额,也可只对用户的bucket配额,比如限制用户mytest的bucket配额最大100M
radosgw-admin quota enable --uid mytest --quota-scope=bucket
radosgw-admin quota set --quota-scope=bucket --uid=mytest --max-objects=-1 --max-size=100M
#若是设置用户的配额,只需要将上述两条命令的quota-scope改为user即可。
3.2、s3cmd命令行
在生产环境一般是通过s3接口或者swift接口来操作RGW,s3接口用的比较多,这里介绍使用s3接口的客户端工具s3cmd来操作RGW:
#创建bucket
s3cmd mb s3://bucket
#删除bucket
s3cmd rb s3://bucket
#列出所有bucket的所有文件
s3cmd la
#将文件上传到bucket中,支持单个、批量
s3cmd put file1 file2 s3://bucket/prefix
#从bucket中下载文件,支持单个、批量
s3cmd get s3://BUCKET/OBJECT LOCAL_FILErm
#从bucket中删除文件,支持单个、批量
s3cmd del s3://BUCKET/OBJECT
s3cmd rm s3://BUCKET/OBJECT
#本地文件夹和bucket同步
s3cmd sync LOCAL_DIR s3://BUCKET[/PREFIX]
#查看bucket占用存储空间大小
s3cmd du s3://bucket
#在bucket里面拷贝文件
s3cmd cp s3://bucket/a.txt s3://bucket/b.txt
#在bucket里面移动文件
s3cmd mv s3://BUCKET1/OBJECT1 s3://BUCKET2[/OBJECT2]
除了radosgw-admin命令行、s3cmd客户端工具,Ceph官网还提供了REST api接口用于操作RGW,具体接口可参考官网文档http://docs.ceph.org.cn/radosgw/s3/commons/。