《存储漫谈Ceph原理与实践》第三章接入层3.2对象存储RGW(四)

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 《存储漫谈Ceph原理与实践》第三章接入层3.2对象存储RGW

2.  RGWData

 

RGW对象数据存储在 {zone}.rgw.buckets.data池里,一个 RGW对象包含一个或多RADOS对象。

RGW收到写请求时,会基于 rgw_obj_stripe_size配置的值默认为4MB)将数据切分为 stripe,并基于 rgw_max_chunk_size配置默认为 4MB)将这些stripes划分为更小的 chunks,并将这些 chunks写入 RADOS集群。

第一个 chunk写入时会创建 Head对象,随后的 chunks作为tail 追加到对象后面写入。其中 Head对象包含了对象的一些元数据信息,如 ACLmanifestetag等,作为 xattr保存。Head 对象本身可以包含 4MB 的数据。如果对象大于 4MB,就会生成tail 对象。

Head对象的 manifest 描述了对象的布局信息。查看对象的 xattrmanifest,可使用如下命令。

 

# ./bin/rados listxattr -p default.rgw.buckets.data 54dba15f-9c2e-40ea-8b87-fc5f2eb01236.154118.1_ceph.conf

user.rgw.acluser.rgw.content_typeuser.rgw.etaguser.rgw.idtaguser.rgw.manifestuser.rgw.pg_veruser.rgw.source_zoneuser.rgw.storage_classuser.rgw.tail_tag

user.rgw.x-amz-content-sha256user.rgw.x-amz-date

user.rgw.x-amz-meta-s3cmd-attrs

 

#./bin/ceph-dencoderimportmanifest.txttypeRGWObjManifestdecodedump_json

{

"objs":[]

"obj_size": 6775"explicit_objs": "false""head_size":6775

"max_head_size":4194304

"prefix":".dhrTwsaLcBPQOYPeIx2bImXjxO_WCKk_"

"rules": [

{

"key": 0

"val": {

"start_part_num":0

"start_ofs":4194304

"part_size":0

"stripe_max_size":4194304

 

 

"override_prefix":""

}

}

]

"tail_instance": """tail_placement":{

"bucket": {

"name":"john-bkt1"

"marker": "54dba15f-9c2e-40ea-8b87-fc5f2eb01236.154118.1""bucket_id": "54dba15f-9c2e-40ea-8b87-fc5f2eb01236.154118.1""tenant":""

"explicit_placement": {"data_pool": """data_extra_pool": """index_pool":""

}

}

"placement_rule":"default-placement"

}

"begin_iter": {"part_ofs":0

"stripe_ofs":0

"ofs": 0

"stripe_size":6775

"cur_part_id":0

"cur_stripe": 0"cur_override_prefix": """location":{

"placement_rule":"default-placement"

"obj": {

"bucket": {

"name":"john-bkt1"

"marker": "54dba15f-9c2e-40ea-8b87-fc5f2eb01236.154118.1""bucket_id": "54dba15f-9c2e-40ea-8b87-fc5f2eb01236.154118.1""tenant":""

"explicit_placement": {"data_pool": """data_extra_pool": """index_pool":""

}

}

"key": {

"name":"ceph.conf"

 

 

 

"instance": ""

"ns": ""

}

}

"raw_obj":{

"pool": ""

"oid: ""

"loc": ""

}

"is_raw":false

}

}

"end_iter": {"part_ofs":4194304

"stripe_ofs":0

"ofs":6775

"stripe_size":6775

"cur_part_id":0

"cur_stripe": 0"cur_override_prefix": """location":{

"placement_rule":"default-placement"

"obj": {

"bucket": {

"name":"john-bkt1"

"marker": "54dba15f-9c2e-40ea-8b87-fc5f2eb01236.154118.1""bucket_id": "54dba15f-9c2e-40ea-8b87-fc5f2eb01236.154118.1""tenant":""

"explicit_placement": {"data_pool": """data_extra_pool": """index_pool":""

}

}

"key": {

"name":"ceph.conf"

"instance":""

"ns":""

}

}

"raw_obj":{

"pool":""

"oid":""

"loc":""

 

 

}

"is_raw":false

}

}

}

 

RGW中的对象对应RADOS对象(一对多关系,对象上传分整体上传和分段上传,不同的上传方式,对应 RADOS对象的方式不同。

首先介绍 3个概念。

◆  rgw_max_chunk_size

RGW下发至 RADOS集群的单个 I/O的大小, 同时也决定了应用对象分成多个RADOS对象时首对象的大小。

◆  rgw_obj_stripe_size

条带大小,也是 RADOS对象最大大小,如果大于rgw_max_chunk_size的对象文件,后续部分会根据这个参数切成多个RADOS对象。

◆  rgwobjectmanifest

管理应用对象和 RADOS 对象的对应关系。

基于以上概念,我们分别介绍普通上传以及分块上传。普通上传的流程如下。

(1)  当对象大小小于等于 rgw_max_chunk_size 时,用户上传的一个对象只对应一个RADOS对象,该RADOS 对象以对象名称命名,对象元数据也保存在该RADOS对象的扩展属性中。

(2)  当对象大小大于 rgw_max_chunk_size 时,对象被划分为一个大小等于分块大小的head以及多个大小等于 rgw_obj_stripe_size 的中间对象,和一个大小小于或等于 rgw_obj_stripe_sizetail对象。head 以对象名称命名,该对象的数据部分保存了对象前 rgw_max_chunk_size字节的数据,扩展属性部分保存了对象的元数据信息和 manifest信息。中间对象和tail对象保存对象剩余的数据,对象名称为:''shadow_'+ '.' + '32bit随机字符串'

+ '_' + ' 条带编号',其中条带编号从1开始。分块上传的流程如下。

(1)  RGW根据条带大小 rgw_obj_stripe_size将对象的每一个分块分成多个 RADOS对象,每个分块的第一个 RADOS 对象名称为:'_multipart_'+ ' 用户上传对象名称 ' + ' 分块上传 ID' + ' 分段编号',其余对象的名称为:'_shadow_' + ' 用户上传对象名称' + ' 分块上传 ID'+ ' 分段编号' + '_' + ' 条带编号'

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

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
1月前
|
存储 弹性计算 数据管理
阿里云对象存储OSS收费标准:存储、流量和请求等多个计费项详解
阿里云对象存储OSS提供多样化的计费模式,涵盖存储、流量、请求等多项费用。存储费用方面,按量付费标准型为0.09元/GB/月,包年包月则有9元40GB等多种选择。流量费用仅对公网出方向收费,价格区间从0.25至0.50元/GB不等,支持按量付费与流量包抵扣两种方式。更多详情及精准报价,欢迎访问阿里云OSS官方页面。
1365 1
|
2月前
|
存储 弹性计算 数据管理
阿里云对象存储OSS收费标准,存储、流量和请求等多个计费项
阿里云对象存储OSS提供按量付费与包年包月两种计费方式,涵盖存储、流量、请求等费用。标准存储按量付费0.09元/GB/月,包年包月40GB起售,价格9元/年。公网流量出方向收费,内网及上传免费。具体费用视使用情况而定,详情见官网。
404 0
|
4月前
|
存储 API Swift
Ceph Reef(18.2.X)之Swift操作对象存储网关
这篇文章详细介绍了Ceph Reef(18.2.X)中通过Swift API操作对象存储网关的方法,包括创建用户、子用户、配置环境变量、以及使用swift命令行工具进行存储桶和对象的管理。
53 7
Ceph Reef(18.2.X)之Swift操作对象存储网关
|
4月前
|
存储 对象存储
Ceph Reef(18.2.X)的对象存储网关(rgw)组件搭建
这篇文章是关于Ceph Reef(18.2.X)版本中对象存储系统的配置和使用案例,包括对象存储网关的概述、核心资源介绍、Ceph RGW支持的接口、高可用radosgw的部署、s3cmd工具的使用以及如何通过HTTP方式访问对象存储。
162 3
Ceph Reef(18.2.X)的对象存储网关(rgw)组件搭建
|
4月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
197 9
|
4月前
|
对象存储 Python
Ceph Reef(18.2.X)之python操作对象存储网关
这篇文章介绍了如何在Ceph Reef(18.2.X)环境中使用Python操作对象存储网关(rgw),包括环境搭建、账号创建、使用s3cmd工具以及编写和测试Python代码。
57 3
|
5月前
|
存储 JavaScript 前端开发
Vue中实现图片上传,上传后的图片回显,存储图片到服务器 【使用对象存储OSS】
这篇文章介绍了在Vue中实现图片上传到阿里云OSS对象存储服务的完整流程,包括服务端签名直传的前提知识、后端设置、前端组件封装以及图片上传和回显的效果展示。
|
5月前
|
存储 Java 关系型数据库
实时计算 Flink版产品使用问题之以jar包方式同步数据是否需要定义存储oss的位置
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
存储 对象存储 云计算
|
6月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。