一、Ceph整体架构及RGW在Ceph中的位置

1.Ceph的整体架构

Ceph是一个统一的、分布式的的存储系统,具有优秀的性能、可靠性和可扩展性。Ceph支持对象存储(RADOSGW)、块存储(RBD)和文件存储(CephFS)。一个Ceph存储集群至少包含一个Ceph monitor、Ceph manager及Ceph OSD(Object Store Daemon)。若要运行CephFS client,还需要Ceph metadata server。以下是Ceph的整体架构图:

由上面的架构图可以看到,对于RGW来说,它对上层APP扮演一个HTTP server,对下层RADOS集群作为RADOS client。RGW作为HTTP server接收和解析HTTP客户端请求,RGW作为RADOS client为对象存储应用提供数据存储的通道,将应用请求数据处理并发送至RADOS存储。

2.RGW的内部结构和处理流

以下是RGW的内部逻辑处理层级结构图:

  • HTTP 前端接收请求数据并保存在相应的数据结构中。

  • REST API 通用处理层从 HTTP 语义中解析出 S3 或 Swift 数据并进行一系列检查。

  • 检查通过后,根据不同 API 操作请求执行不同的处理流程。

  • 如需从 RADOS 集群中获取数据或者往 RADOS 集群中写入数据,则通过 RGW 与 RADOS 接口适配层调用 librados 接口将请求发送到 RADOS 集群中获取或写入相应数据。

二、RGW对外的的三类基础数据逻辑实体

RGW对外提供三种基础数据逻辑实体:

  • 用户
  • 存储桶
  • 对象

1.用户

RGW兼容AWS S3和OpenStack Swift。RGW user对应S3 user,RGW user对应Swift Account,RGW subuser对应Swift user。
用户数据信息包含:

  • 用户认证信息:S3(access key, secret key), Swift(secret key)
  • 访问控制权限信息:包含操作访问权限(read、write、delete等)和访问控制列表ACL
  • 用户配额信息:防止某些用户占用过多存储空间,根据用户付费情况配置存储空间。

2.存储桶(bucket)

存储桶是对象的容器,是为了方便管理和操作具有相同属性的一类对象而引入的一级管理单元。
存储桶信息包含:

  • 基础信息:(保存在对应RADOS对象的数据部分)RGW关注的信息,包含bucket配额信息(最大对象数目或最大对象大小总和),bucket placement rule,bucket中的索引对象数目等等。
  • 扩展信息:(保存在对应RADOS对象的扩展属性)对RGW透明的一些信息,如用户自定义的元数据信息。

对于bucket placement rule,

3.对象

RGW中的应用对象对应RADOS对象。应用对象上传分整体上传和分段上传,不同的上传方式应用对象对应RADOS对象的方式不同。
首先介绍三个概念:

  • rgw_max_chunk_size:分块大小,RGW下发至RADOS集群的单个IO的大小。
  • rgw_obj_stripe_size:条带大小,multipart除首对象外的分段其他大小
  • class RGWObjManifest:管理应用对象和RADOS对象的对应关系。

3.1 整体上传

  • 应用对象大小小于等于分块大小:用户上传的一个对象只对应一个 RADOS 对象,该 RADOS 对象以应用对象名称命名,应用对象元数据也保存在该 RADOS 对象的扩展属性中。
  • 应用对象大小大于分块大小:应用对象被分解成一个大小等于分块大小的首对象,多个大小等于条带大小的中间对象,和一个大小小于等于条带大小的尾对象。首对象以应用对象名称命名,在 RGW 中将该对象称为head_obj,该对象的数据部分保存了应用对象前 rgw_max_chunk_size 字节的数据,扩展属性部分保存了应用对象的元数据信息和manifest信息。中间对象和尾对象保存应用对象剩余的数据,对象名称为“shadow_” + “.” + “32bit 随机字符串” + “_” + “条带编号”,其中条带编号从1开始。

3.2 分段上传

RGW依照条带大小将应用对象的每一个分段分成多个RADOS对象,每个分段的第一个 RADOS 对象名称为:

  • “_multipart_” + “用户上传对象名称” + “分段上传ID” + “分段编号”
    其余对象的名称为:
  • “_shadow_” + “用户上传对象名称” + “分段上传ID” + “分段编号” +
 “_” + “条带编号”

当所有的分段上传结束后,RGW 会从 data_extra_pool 中的分段上传临时对象中读取各个分段信息,主要是各分段的 manifest 信息,组成一个 manifest;然后生成一个新的 RADOS 对象,即 head obj,用来保存分段上传的应用对象的元数据信息和各分段的manifest。

Ceph之对象存储网关RADOS Gateway(RGW)的更多相关文章

  1. Ceph对象存储网关中的索引工作原理<转>

    Ceph 对象存储网关允许你通过 Swift 及 S3 API 访问 Ceph .它将这些 API 请求转化为 librados 请求.Librados 是一个非常出色的对象存储(库)但是它无法高效的 ...

  2. CEPH-4:ceph RadowGW对象存储功能详解

    ceph RadosGW对象存储使用详解 一个完整的ceph集群,可以提供块存储.文件系统和对象存储. 本节主要介绍对象存储RadosGw功能如何灵活的使用,集群背景: $ ceph -s clust ...

  3. Ceph对象存储 S3

    ceph对象存储 作为文件系统的磁盘,操作系统不能直接访问对象存储.相反,它只能通过应用程序级别的API访问.ceph是一种分布式对象存储系统,通过ceph对象网关提供对象存储接口,也称为RADOS网 ...

  4. 一篇文章让你理解Ceph的三种存储接口(块设备、文件系统、对象存储)

    “Ceph是一个开源的.统一的.分布式的存储系统”,这是我们宣传Ceph时常说的一句话,其中“统一”是说Ceph可以一套存储系统同时提供块设备存储.文件系统存储和对象存储三种存储功能.一听这句话,具有 ...

  5. ceph 007 双向池同步 rgw对象网关配置 s3对象存储

    增量导入导出要基于快照 导出的过程当中害怕镜像被修改所以打快照.快照的数据是不会变化的 镜像级别的双向同步 镜像主到备,备到主.一对一 就算是池模式的双向同步,镜像也具有主备关系 双向同步,池模式 [ ...

  6. 010 Ceph RGW对象存储

    一.对象存储 1.1 介绍 通过对象存储,将数据存储为对象,每个对象除了包含数据,还包含数据自身的元数据 对象通过Object ID来检索,无法通过普通文件系统操作来直接访问对象,只能通过API来访问 ...

  7. 006.Ceph对象存储基础使用

    一 Ceph文件系统 1.1 概述 Ceph 对象网关是一个构建在 librados 之上的对象存储接口,它为应用程序访问Ceph 存储集群提供了一个 RESTful 风格的网关 . Ceph 对象存 ...

  8. 4.Ceph 基础篇 - 对象存储使用

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485256&idx=1&sn=39e07215 ...

  9. 初试 Ceph 存储之块设备、文件系统、对象存储

    转载自:https://cloud.tencent.com/developer/article/1010543 1.Ceph 存储介绍 Ceph 是一个开源的分布式存储系统,包括对象存储.块设备.文件 ...

随机推荐

  1. Rem 字体设置学习一

    JS方法动态计算根元素的字体大小: [淘宝首页:m.taobao.com] (function (doc, win) { var docEl = doc.documentElement, resize ...

  2. type和metaclass元类

    元类type 1. 创建类的两种方式 (都是由type元类创建) 方式一: class Foo(object): # 默认metaclass = type, 当前类, 由type类创建 a = 'aa ...

  3. c++ 实现 key-value缓存数据结构

    c++ 实现 key-value缓存数据结构 概述 最近在阅读Memcached的源代码,今天借鉴部分设计思想简单的实现了一个keyvalue缓存. 哈希表部分使用了unordered_map,用于实 ...

  4. CSY版最大团,速度快一倍

    #include <bits/stdc++.h> using namespace std; #define REP(i, n) for(int i(0); i < (n); ++i) ...

  5. HDU 1244 【DP】

    题意: 中文. 思路: 先初步处理,用give-take求出每个城市剩的钱. 求解问题转化成使得和不小于0的最长连续字串. 枚举起点,然后当该起点加的和为负时开始枚举下一起点.(这个状态的转移) 2W ...

  6. Eclipse的JQuery提示插件-Spket(别试了,没什么效果,且安装设置麻烦)

    参考: http://www.cnblogs.com/shulin/archive/2010/08/09/1796146.html 我测试了,但是没用起来,原因有如下几点: 1.配置复杂,且提示效果不 ...

  7. VB程序逆向反汇编常见的函数(修改版)

    VB程序逆向常用的函数 1) 数据类型转换: a) __vbaI2Str    将一个字符串转为8 位(1个字节)的数值形式(范围在 0 至 255 之间) 或2 个字节的数值形式(范围在 -32,7 ...

  8. Python遍历路径下文件并转换成UTF-8编码

    http://www.cnblogs.com/wuyuegb2312/archive/2013/01/11/2856772.html 开始学Python,这篇文章来自于应用需求. os.walk很方便 ...

  9. Android手机中UID、PID作用及区别

    PID 指进程ID. PID是进程的身份标识,程序一旦运行,就会给应用分配一个独一无二的PID(ps:一个应用可能包含多个进程,每个进程有唯一的一个PID) 进程终止后PID会被系统收回,再次打开应用 ...

  10. easyUI 验证控件应用、自己定义、扩展验证 手机号码或电话话码格式

    easyUI 验证控件应用.自己定义.扩展验证 手机号码或电话话码格式 在API中   发现给的demo 中没有这个验证,所以就研究了下. 相关介绍省略,直接上代码吧! watermark/2/tex ...