Ceph RGW架构简介

我们知道Ceph可以提供块、文件和对象三种形态的存储。而RGW就是提供对象存储的网关,也即对象存储网关。所谓对象存储网关,也就是对象存储的入口,本质上是一个HTTP服务器,与Nginx和Apache无异。通过这个入口,用户可以通过HTTP协议,以RESTful的方式访问Ceph的对象存储。 Ceph RGW的整体架构如图1所示,对象存储网关实际上是调用librados的API来实现数据的存储和读取。而该网关同时提供了兼容AWS S3和OpenStack Swift的对象存储访问接口(API)

另外,有些同学可能不清楚对象存储的特点。在介绍后续内容之前,我们大概了解一下对象存储是如何存储数据的。对象存储的应用场景通常是互联网场景,一个对象存储通常会给多个用户(租户)使用。而在一个用户下面可以创建多个(swift里面称为容器container)。在桶中可以存储对象,对象就是我们存储的数据,比如图片或者是视频等。如果将对象存储与我们常规存储做一个类比,就好比文件夹,而对象就好比文件,但不同之处在于桶里面只能存储对象,而不能嵌套桶。如图2是对象存储数据组织形式。

今天我们主要除了介绍Ceph对象存储网关基本架构外,我们重点介绍一下如何在几个Ceph集群上部署一个RGW,并且通过Swift客户端进行访问。

部署环境描述

为了简化环境,本文使用的是2副本Ceph集群,在实际生产中通常是3副本。另外,本文使用的是本地虚拟机,也就是通过VirtualBox或者其它虚拟化平台安装的虚拟操作系统。本文操作系统版本为CentOS 7.4。如图3所示,我们的RGW安装在ceph-s节点。

部署Ceph RGW

进入安装Ceph集群的时候创建的目录中,本文之前的目录为mycluster,因此进入该目录。

$ cd my-cluster

RGW默认使用Civetweb作为其Web Sevice,而Civetweb默认使用端口7480提供服务,如果想修改端口(如80端口),就需要修改Ceph的配置文件。在配置文件中增加一个section。 [client.rgw.ceph-s] rgw_frontends = "civetweb port=80" 注意: 这一步并不是必须的,根据实际情况进行设定

安装Ceph对象存储网关

我们可以通过ceph-deploy命令非常方便的安装Ceph的对象存储网关软件(也就是RGW)。如下是命令格式:

$ ceph-deploy install --rgw <gateway-node1> [<gateway-node2> ...]

比如在我们的ceph-s节点安装该软件,则可以执行如下命令:

$ ceph-deploy install –-rgw ceph-s

创建RGW实例

上面步骤只是安装了必要的软件,但并没有创建需要的存储资源(存储池)。之前版本的安装需要用户手动创建多个存储池,安装比较麻烦,且容易出错。目前安装非常方便,可以通过ceph-deploy命令直接创建需要的资源,具体执行如下命令即可:

$ ceph-deploy rgw create ceph-s

创建完成后我们可以看一下目前Ceph集群的资源情况,在管理节点输入如下命令查看存储池的情况:

$ rados lspools

具体结果如下:

基本验证

如果上述配置没有出现任何问题的话,其实Ceph的对象存储网关已经正常工作了。前面我们说了,对象存储其实是基于HTTP协议的,因此我们可以通过浏览器进行访问,比如在浏览器中输入如下内容: http://192.168.142.133:7480 回车后,可以看到如下内容:

对象存储访问验证

前面我们进行了安装和连通性的基本验证,对于对象存储的功能来说还差得远。下面我们通过swift的客户端工具进行验证。

注意:后续创建用户的操作应该在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": "U0IJ8M27SRME1XMZSYPA","secret_key": "YexQ1T1VVS8wIMgMp5KgAZsNjbF5OotTnDgavPdA"}],"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","access_key": "U0IJ8M27SRME1XMZSYPA","secret_key": "YexQ1T1VVS8wIMgMp5KgAZsNjbF5OotTnDgavPdA"}],"swift_keys": [{"user": "testuser:swift","secret_key": "ozmuwVXWSeUg30TO8qkYggmbM7dXy2a4VlGid2Sp"}],"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接口访问确认。

用Swift的客户端访问对象存储

我们前面说了Ceph对象存储是兼容Swift的,因此我们可以直接用Swift的客户端访问Ceph对象存储。当然,我们需要首先安装该客户端。 添加yum源 新建文件/etc/yum.repos.d/openstack.repo,然后写入如下内容:

[centos-openstack-liberty]
name=CentOS-7 - OpenStack liberty
baseurl=http://vault.centos.org/centos/7.3.1611/cloud/x86_64/openstack-liberty/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-7

更新yum缓存后就可以安装swift客户端了。

$ yum update
$ yum install python-swiftclient

命令样式 Swift客户端的命令格式如下所示:

$ swift -A http://{IP ADDRESS}:{port}/auth/1.0 -U testuser:swift -K '{swift_secret_key}' list

其中swift为主命令,而后面的list为子命令。在实际使用的时候,需要替换{IP ADDRESS}、{port}、{swift_secret_key}等相关参数,其中{swift_secret_key}为创建Swift用户时radosgw-admin命令返回的swift_keys->secret_key的值。如果忘记了上述内容,可以通过radosgw-admin命令查看创建容器/桶 首先是需要一容器,Swift创建容器的命令为swift post contaner_name。具体命令如下:

swift -A http://192.168.142.133:7480/auth/1.0 -U testuser:swift -K 'ozmuwVXWSeUg30TO8qkYggmbM7dXy2a4VlGid2Sp' post testbucket

可以通过list命令查看一下我们创建的容器:

swift -A http://192.168.142.133:7480/auth/1.0 -U testuser:swift -K 'ozmuwVXWSeUg30TO8qkYggmbM7dXy2a4VlGid2Sp' list

上传对象 有了容器后,我们就可以向容器上传对象了。具体命令如下,为了清晰一些,这里省略了认证相关的内容

swift upload testbucket ./mysql.yaml

成功后可以看一下容器中的内容,具体命令如下:

swift list testbucket

小结

至此,我们完成了本文要介绍的内容。这里我们介绍了Ceph对象存储的基本架构、安装和基于Swift客户端的使用。当然这里仅仅是入门级的,如果各位童鞋想继续深入学习,请关注本号,本号会持续更新Ceph相关的内容。

参考文献:

1. https://www.jianshu.com/p/f6e336bd9999

2. https://blog.csdn.net/u011446736/article/details/81083078

3. https://blog.csdn.net/Poo_Chai/article/details/80856662?utm_source=blogxgwz1

access 图片存储的格式_Ceph对象存储RGW架构及安装实战相关推荐

  1. 如何从零起步搭建一个分布式对象存储的架构

    早在几年前,云存储还只是存在于业界大佬们口中的一个概念,其应用场景仅供大公司使用.突飞猛进的网络技术似乎在一瞬间就把这个概念普及到千家万户,现在云存储已经是大家司空见惯的一个网络服务了.比如大家用的百 ...

  2. 【转】Ceph对象存储(rgw)的IPv6环境配置

    引言 在搭建成功Ceph集群后,对于如何使用,其实我还是一脸MB的,心想竟然提供三种存储接口(对象,文件,快),口气也未免太大.在结合项目需求之后,我选择了对象存储接口.那么问题又来了,如何配置IPv ...

  3. Ceph对象存储(rgw)的IPv6环境配置

    本文作者: lemon 本文链接: https://lemon2013.github.io/2016/11/09/Ceph对象存储-rgw-IPv6环境配置/ 版权声明: 本博客所有文章除特别声明外, ...

  4. oss图片跨域问题_图片存储解决方案-阿里云对象存储

    开通对象存储OSS 1. 打开阿里云官网,选择产品对象存储 OSS 2.开通对象存储OSS 需要支付宝扫码登录 3.进入管理控制台 4.新建存储空间 5.跨域资源共享(CORS)的设置 管理文件 整合 ...

  5. Ceph 认证授权和RBD块存储、对象存储使用(三)

    RBD块存储 RBD介绍 1.RBD是Ceph分布式集群中最常用的存储类型 2.块是一个有序字节,普通的一个块大小为512字节,基于块的存储是最常见的存储方式,比如常见的硬盘.软盘和CD光盘等,都是存 ...

  6. 对象存储,为什么那么火?

    作者|小枣君 来源|鲜枣课堂 引言 上期文章(链接:关于存储技术的最强入门科普),小枣君给大家详细介绍了数据存储技术的基本知识,其中重点对DAS.SAN和NAS技术进行了对比分析. 我们知道,在很长的 ...

  7. 文件服务和对象存储服务器,对象存储与块存储服务

    介绍 灵活和可扩展的数据存储是使用现代技术和工具开发的大多数应用程序和服务的基准要求. 无论存储大量或少量的图像,视频或文本块,应用程序开发人员都需要一个用于存储和检索用户生成的内容,日志,备份等的解 ...

  8. 对象存储只能按文件名搜索,你out了吧

    摘要:不少大公司的一个桶里都是几亿几十亿的对象,那他们都是怎么检索的呢? 本文分享自华为云社区<对象存储只能按文件名搜索? 用 DWR + ElasticSearch 实现文件名.文件内容.图片 ...

  9. commvault备份mysql_CommVault备份到华为云对象存储实践

    本文来自客户使用CommVault备份软件备份到华为云对象存储的实践.使用CommVault备份软件的可以参考.备份到华为云的优势:公有云可以天生充当客户的异地备份中心,省去客户自建异地备份中心的成本 ...

最新文章

  1. OpenCV视频分析背景提取与前景提取
  2. ros与下位机通信常用的c++ boost串口应用
  3. 4.5.1 RIP协议与距离向量算法
  4. 【Android 安全】DEX 加密 ( 常用 Android 反编译工具 | apktool | dex2jar | enjarify | jd-gui | jadx )
  5. java卡片布局显示效果_三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)...
  6. 如果Laravel 报错 file_put_contents(): failed to open stream
  7. 多mysql实例下开发需要注意主从同步延迟
  8. python中ndim是什么_Numpy中ndim、shape、dtype、astype的用法详解
  9. javascript日期格式化 转换
  10. 拼接SQL文的测试方法
  11. Gitlab-API各状态码解释
  12. Linux局域网多人聊天软件
  13. 趣图:说一说你不知道的世界
  14. 初级会计最后一个月稳过秘籍
  15. vscode连接安卓模拟器上autojs
  16. 以太网识别标准及接线标准、接线方法详解
  17. order by 1含义
  18. 5G工业物联网环境下多方认证性能评估
  19. JS基础-尚硅谷-滚动条-视频P110
  20. 蓝桥杯每日一题(17):神奇算式(python)

热门文章

  1. codeforces 379F-New Year Tree
  2. ThinkPHP---rbac权限管理
  3. 细说IIS异常日志 — 你必须知道的功能
  4. Linux下profile environment bashrc的区别
  5. PHPExcel+phalcon+yii批量导入
  6. 总奖金100万!2021SEED江苏大数据开发与应用大赛(华录杯)正式开赛!
  7. 没想到我的粉丝里还有这么多C++er,瑞思拜!
  8. OpenCV 发起 Spatial AI挑战赛
  9. 疑惑?人工智能兴起为什么带火了Python,看完这篇你就明白了
  10. 李沐分享斯坦福2021秋季新课:实用机器学习