《存储漫谈Ceph原理与实践》第三章接入层3.2对象存储RGW(四)-阿里云开发者社区

开发者社区> 人民邮电出版社> 正文

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

简介: 《存储漫谈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对象包含了对象的一些元数据信息,如 ACL、manifest、etag等,作为 xattr保存。Head 对象本身可以包含 4MB 的数据。如果对象大于 4MB,就会生成tail 对象。

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

 

# ./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_size的 tail对象。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信息。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
带你读《存储漫谈Ceph原理与实践》第三章接入层3.2对象存储RGW(二)
《存储漫谈Ceph原理与实践》第三章接入层3.2对象存储RGW
14 0
带你读《存储漫谈Ceph原理与实践》第三章接入层3.1块存储 RBD
《存储漫谈Ceph原理与实践》第三章接入层3.1块存储 RBD
20 0
JavaScript 编程精解 中文第三版 六、对象的秘密
六、对象的秘密 原文:The Secret Life of Objects 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了《JavaScript 编程精解(第 2 版)》 抽象数据类型是通过编写一种特殊的程序来实现的,该程序根据可在其上执行的操作来定义类型。
1114 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4440 0
带你读《存储漫谈Ceph原理与实践》第三章接入层3.1块存储 RBD(六)
带你读《存储漫谈Ceph原理与实践》第三章接入层3.1块存储 RBD
15 0
带你读《存储漫谈Ceph原理与实践》第三章接入层3.1块存储 RBD(二)
《存储漫谈Ceph原理与实践》第三章接入层3.1块存储 RBD(二)
29 0
对象“变形记”——初识引用与GC | 带你学《Java面向对象编程》之三
作为Java世界的核心内容,类与对象凭借其引用数据类型的内在特质,实现了引用传递的能力,为整个Java世界添上了浓墨重彩的一笔。
2643 0
面象对象设计6大原则之三:里氏替换原则
里氏替换原则(LSP),The Liskov Substitution Principle 定义 所有引用基类的地方必须能透明地引用其子类的对象,即子类可以拓展父类的功能,但不能修改父类已有的功能。
863 0
472
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载