ceph rgw:s3基本概念在rados中的组织方式

架构

ceph radosgw(rgw)是ceph提供的对象存储服务,对外提供s3和swift两套API,API实现需要的各种特性都是基于rados来实现的,架构图如下:


image.png

图中第一层代表rgw对外提供的接口,第二层表示rgw作为对外API和底层rados的转换层,第三层表示rgw通过librados与rados集群进行交互,第四层表示rados集群的结构。

各部分的概念可以去ceph文档和s3文档方便得获得。


数据布局

以s3为例,说下rgw的整体数据布局。

rados存储组织

这边假设rados底层存储以使用的是默认的FileStore,假设FileStore底层是linux的ext4文件系统,那么最底层的存储方式就是一个ext4文件系统下的文件。所以其存储层次和位置如下所示:

  • pool
    • object
      • xattr
        • ext4文件属性(最大4KB)
        • omap
      • data
        • ext4文件内容

解释下:

  1. rados以pool来组织数据,一个pool中包含大量object。
  2. 而一个object包含两部分内容,一部分是要存储的对象数据data,一部分是该对象的额外属性xattr。
  3. 对象的数据存储在ext文件的内容部分。
  4. 对象的额外属性可以有两个存储的部分:一个是ext4文件的属性部分,这部分往往受底层文件系统的约束,比如ext4文件系统要求其最大不超过4KB;另一个是rados实现的omap,rados使用一种机制,可以为每一个object关联一个omap。
  5. omap是一个key-value存储系统,最早是leveldb,当然也有其他选择,比如rocksdb。

radosgw为s3 API提供的实现

s3除了基本的对象,还包括一些新的概念,比如user、bucker等。究其本质,无非是属性和关系,属性本身就是一种数据,而关系也可以通过映射表等数据结构来表达,所以这些对象在rados中都可以通过在特定的pool下用object方式来存储。

metadata:user、bucket、bucket.instance

其内容如下:

  • user: Holds user information and a mapping between user id and bucket name
  • bucket: Holds a mapping between bucket name and bucket instance id(marker)
  • bucket.instance: Holds bucket instance information[2]

可以通过下面的命令来查看和获得。
注:<bucket>指bucket name; <marker>指bucker id; <user>指user id。

$ radosgw-admin metadata list
$ radosgw-admin metadata list bucket
$ radosgw-admin metadata list bucket.instance
$ radosgw-admin metadata list user

$ radosgw-admin metadata get bucket:<bucket>
$ radosgw-admin metadata get bucket.instance:<bucket>:<marker>
$ radosgw-admin metadata get user:<user>   # get or set

user 数据被以<user>作为object name存储在default.rgw.meta pool中,其namespace是users.uid。

bucket 数据以<bucket>作为object name存储在default.rgw.meta pool中,其namespace是root。

bucket.instance 数据以.bucket.meta.<bucket>:<marker>作为 object name存储在default.rgw.meta pool中,其namespace是root。

bucket index

bucket index是将bucket和其包含的object关联起来的映射。它算是一类特别的metadata,但和metadata分开存储。一般情况下,一个bucket会对应一个存储bucket index的object,bucket index是存储在这个object的omap中的。bucket index中的key是根据bucket所包含的object的id得到的一个seq,value是具体obejct的一些元数据(会被list buckets返回)。

之前有提到,omap是通过某种机制关联到object上的,如下图。

image.png

可以这么理解,rgw首先根据object id,存放一个Header类型的数据结构到omap中,其中Header中的一个成员变量为seq,然后object具体的metadata是以seq作为key存到omap中的。

bucket index被以.dir.<marker>作为object name 存储在default.rgw.buckets.index pool中。

obeject

一个s3 object存储在一个或多个rgw object中。

object被以 <marker>_<key>作为object name存储在default.rgw.buckets.data pool中,


访问流程

以s3接口为例,当用户访问rgw时,需要提供账户信息、bucket name和object name。账户信息用来获取user id,做access control;bucket name和object name用来在pool中访问object。

附录:常见pool及其内容

.rgw.root
    Unspecified region, zone, and global information records, one per object.

<zone>.rgw.control
    notify.<N>

<zone>.rgw.meta
    Multiple namespaces with different kinds of metadata:

    namespace: root
        <bucket> .bucket.meta.<bucket>:<marker> # see put_bucket_instance_info()

        The tenant is used to disambiguate buckets, but not bucket instances. Example:

            .bucket.meta.prodtx:test%25star:default.84099.6
            .bucket.meta.testcont:default.4126.1
            .bucket.meta.prodtx:testcont:default.84099.4
            prodtx/testcont
            prodtx/test%25star
            testcont
            
    namespace: users.uid
        Contains _both_ per-user information (RGWUserInfo) in “<user>” objects  and per-user lists of buckets in omaps of “<user>.buckets” objects. The “<user>” may contain the tenant if non-empty, for example:

            prodtx$prodt
            test2.buckets
            prodtx$prodt.buckets
            test2
            
    namespace: users.email
        Unimportant
    namespace: users.keys
        47UA98JSTJZ9YAN3OS3O

        This allows radosgw to look up users by their access keys during authentication.

    namespace: users.swift
        test:tester
        
<zone>.rgw.buckets.index
    Objects are named “.dir.<marker>”, each contains a bucket index. If the index is sharded, each shard appends the shard index after the marker.
    
<zone>.rgw.buckets.data
    default.7593.4__shadow_.488urDFerTYXavx4yAd-Op8mxehnvTI_1 <marker>_<key>
    
An example of a marker would be “default.16004.1” or “default.7593.4”. The current format is “<zone>.<instance_id>.<bucket_id>”. But once generated, a marker is not parsed again, so its format may change freely in the future.

更多细节请参考:
http://docs.ceph.com/docs/master/radosgw/layout/
http://www.wzxue.com/ceph-filestore/
http://bean-li.github.io/ceph-omap/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 说明:多数据中心(multisite)功能oNest v6.1新增的功能,旨在实现异地双活,提供了备份容灾的能力。...
    ScottJing阅读 6,609评论 4 11
  • 原因:2017年4月14日 星期五 学习记录。说明:整理ceph资料。我的博客 : http://minichao...
    nicocoi阅读 8,181评论 1 9
  • ceph简介 Ceph是一个分布式存储系统,诞生于2004年,是最早致力于开发下一代高性能分布式文件系统的项目。随...
    爱吃土豆的程序猿阅读 6,011评论 0 21
  • 系统环境: centos73.10.0-514.26.2.el7.x86_64 机器数量:五台 硬盘:四块一块为系...
    think_lonely阅读 4,623评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,587评论 18 139