平台人生
作者平台人生2018-11-13 11:54
软件开发工程师, 平台人生

大咖带你揭秘CEPH对象存储底层对象分布

字数 2583阅读 6386评论 1赞 5

作者:林青


对象存储是公有云中常见的非结构化数据存储解决方案,常被作为网站、移动应用、图片、视频数据的主要存储方式,也是CDN回源及云上数据备份的不二选择。
对象存储采用无层次结构的数据存储方法。基于对象的存储不使用目录树,数据组织采用桶作为划分域,对象存储于桶中;各个单独的数据(对象)单元存在于存储池中的同一级别;每个对象都有唯一的识别名称,供应用进行检索。租户通过API管理云上数据。
目前对象存储已成为公有云服务商所具备的基本存储服务,亚马逊S3、阿里OSS、微软Bolb、华为OBS、金山KS3、腾讯COS。Ceph则是开源生态中至今为止软件定义存储中最成功的产品,其通过RGW组件对外提供对象存储服务,本文将探讨Ceph RGW中数据的分布原理。

Ceph数据存储原理

Ceph的对象存储接口是由RGW组件提供的。RGW为用户提供了一套兼容S3及Swift协议的API。用户通过RGW API完成上传、下载等数据相关操作。
在RGW提供了整体上传和分段上传两种文件上传方式。
每部分RGW上传的文件片段根据配置进行切块,形成若干个Object,Object逻辑归属于某个PG中,最终Object存储在PG映射的一组OSD磁盘上,Ceph最终存储的是对象(内容+属性),通过后端存储引擎Object Store(src/os/ObjectStore.cc) 封装了底层Rados对象操作。
无论是块存储、文件存储、还是对象存储存入Ceph的数据都以如下方式组织:
rrmtnr41efil

rrmtnr41efil

File:client读写的文件
object:是将File切块后的存储实体
oid:(object id) = ino(File的ID)+ono(切块序号)
mask:PG总数m(m为2的整数幂)-1
PG(Placement Group):放置组(标识为 PGID)是一个逻辑的概念,一个PG存放多个对象,每个存储节点有上百个PG。
OSD(Object Storage Device):对象存储设备,提供存储资源。

Ceph存储引擎ObjectStore

后端存储引擎由ObjectStore提供, ObjectStore API分主要为三部分:
(1)Object内容的读写操作 ;
(2)Object扩展属性的读写操作;
(3)Object关联的Omap的操作,Omap在概念上与扩展属性相似,但有不同的存储限制及存储方式,通常为KV数据库。
实现一套ObjectStore的接口即提供了一种存储引擎,目前常用存储引擎类型为FileStore和BlueStore。
j6zr0t2t2n2t

j6zr0t2t2n2t

其中使用最为广泛的CEPH后端存储引擎为FileStore。
(1)利用文件系统的POSIX接口实现Object的内容读写操作;
(2)利用文件系统的扩展属性功能实现Object的属性操作
(3)利用LevelDB、RocksDB等KV数据库实现Omap操作。
FileStore中每个Object会被看成是一个文件,Object的属性会利用文件的扩展属性存取,超出文件系统限制(filestore_max_xattr_value_size,xfs默认64KB)的扩展属性会存储在KV数据库中。

Ceph RGW对象存储模型

在RGW提供了整体上传和分段上传两种文件上传方式。

1、RGW对象整体上传

2l9boxfqr9xv

2l9boxfqr9xv

rgw_max_chunk_size:首部对象切片大小(默认1M)
rgw_obj_stripe_size:除首部对象外的其他切片大小(默认8M)
rgw_max_put_size:整体上传文件限制(默认512G)
整体上传的文件,将会切分为一个大小为rgw_max_chunk_size的首部Rados对象,及若干个大小为rgw_obj_stripe_size的中间Rados对象(最后一个对象可以小于rgw_obj_stripe_size)。其中,扩展属性存在于首部Rados对象的扩展属性中,包含了分片信息。

2、RGW对象分段上传

6m1cur05teoq

6m1cur05teoq

rgw_multipart_min_part_size:分段最小大小(默认1M)
rgw_multipart_part_upload_limit:最大分段数(默认10000)
分段上传,用户上传时自主对上传文件进行分段,除最后一个分段外必须大于rgw_multipart_min_part_size,每段文件独立上传,每段都可看作一个整体上传。上传完成后,会生成一个内容为空的首部Rados对象,用于存储RGW对象的属性信,其中包含分段及分片信息。

Ceph RGW对象存储实践

5n8i4sxleqc4

5n8i4sxleqc4

接下来我们就进入到Ceph中一探究竟。
首先搭建一个三副本的Ceph(Luminous版)集群,部署图如上图所示。
下面我们来查看RGW对象在Ceph中是如何存储的。

1、整体上传

dx5bvoy4q1lq

dx5bvoy4q1lq

整体上传file10MB.dat对象分布图如上所示。
(1)整体上传文件
3udpejppy1rd
3udpejppy1rd

(2)定位首部对象
9dhwyadsnkea
9dhwyadsnkea

(3)定位除首部对象外的其他分片对象
vyxljq4sqjh1
vyxljq4sqjh1

我们可以看到有很多扩展属性,介绍常见的几个:
"cephos.spillout":记录文件的扩展属性是否溢出到了Omap
“ceph.
”:对象信息
“ceph._user.rgw.acl”:对象ACL
“ceph._user.rgw.manifest”:对象rgw相关信息,包含分片信息。
u5swtxfjjpu4
u5swtxfjjpu4

0h8nn3e4auy90
0h8nn3e4auy90

35nhugbh27u7
35nhugbh27u7

0r401dhoum0mo
0r401dhoum0mo

从上面实践结果可以看到,我们手动构建的文件MD5和原文件一致。

2、分段上传

lkm7pe33zdc1

lkm7pe33zdc1

分段上传file20MB.dat对象分布图如上图所示。
(1)分段上传文件
lidtrye4yzd7
lidtrye4yzd7

(2)定位首部对象
e8rdetclbtv7
e8rdetclbtv7

(3)定位除首部对象外的其他分片对象
nj9dmxjw1kyw
nj9dmxjw1kyw

yjvakop5j4i9
yjvakop5j4i9

s8yrkebpl0zl
s8yrkebpl0zl

q7mrkov3e9qz
q7mrkov3e9qz

从上面实践结果可以看到,我们手动构建的文件MD5和原文件一致。
至此,我们完成了全部实践,通过研究Ceph RGW及Rados存储原理,手动还原用户数据再对象存储中完整分布。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

5

添加新评论1 条评论

#wuwenpin软件开发工程师, 南京
2018-11-13 17:56
非常有用,值得学习!
Ctrl+Enter 发表

本文隶属于专栏

关于TWT  使用指南  社区专家合作  厂商入驻社区  企业招聘  投诉建议  版权与免责声明  联系我们
© 2019  talkwithtrend — talk with trend,talk with technologist 京ICP备09031017号-30