本文介绍: 当所有的分段上传结束后,RGW 会从 data_extra_pool 中的分段上传临时对象读取各个分段信息,主要是各分段manifest 信息,组成一个 manifest;然后生成一个新的 RADOS 对象,即 head obj用来保存分段上传应用对象的元数据信息和各分段的manifest。RGW中的应用对象对应RADOS对象。应用对象上传整体上传和分段上传,不同的上传方式应用对象对应RADOS对象的方式不同。存储桶是对象的容器,是为了方便管理操作具有相同属性的一类对象而引入的一级管理单元

一、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的内部逻辑处理层级结构图:

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

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

1.用户

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

2.存储桶(bucket)

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

对于bucket placement rule

3.对象

RGW中的应用对象对应RADOS对象。应用对象上传分整体上传和分段上传,不同的上传方式应用对象对应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。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注