ceph(第一步) 基础架构

前言

ceph 是什么?
ceph 是一种开源存储软件。底层实现了对象存储,并以此为基础对外提供对象存储接口、块存储接口、文件级存储接口。

ceph 结构包含两个部分:

  • ceph client:访问 ceph 底层服务或组件,对外提供各种接口。比如:对象存储接口、块存储接口、文件级存储接口。
  • ceph node:ceph 底层服务提供端,也就是 ceph 存储集群。

环境

ceph 版本:Nautilus

正文

架构图

官网的一张架构图:


ceph 架构图 - 1

对于这张图,一开始没有看懂它想表达什么,后来明白了。如下图:

ceph 架构图 - 2

相关名词解释:

  • RADOS:Reliable Autonomic Distributed Object Store(可靠的,自主的,分布式的对象存储)。在 ceph 中这个名词经常出现,有时会以 R 表示 RADOS。实际上这个词仅仅是对 ceph 的一个修饰词,并不代表 ceph 的组件什么的。粗暴的认为, RADOS = ceph 对象存储集群 即可。
  • RGW、RBD、CEPH FS: 这三个就是 ceph clients。
    RGW:对象存储网关,也就是对象存储接口。
    RBD:块设备,也就是块存储接口。
    CEPH FS:ceph 文件系统,也就是文件级存储接口。

ceph 基础架构

ceph 组件分为两部分:

  • ceph node:构成 ceph 集群的基础组件。
  • ceph client:对外提供多种方式使用 ceph 存储的组件。
ceph 基础组件

此部分介绍构成 ceph 集群的基础组件。
其中包含 OSD、Manager、MDS、Monitor。

  • OSD(ceph-osd):object storage daemon,对象存储进程。ceph 管理物理硬盘时,引入了OSD概念,每一块盘都会针对的运行一个OSD进程。换句话说,ceph 集群通过管理 OSD 来管理物理硬盘。OSD 一般功能为:存储数据、维护数据副本、数据恢复、数据再平衡以及对ceph monitor组件提供相关监控信息。

  • Manager(ceph-mgr):用于收集ceph集群状态、运行指标,比如存储利用率、当前性能指标和系统负载。对外提供 ceph dashboard(ceph ui)和 resetful api。Manager组件开启高可用时,至少2个。

  • MDS(ceph-mds):Metadata server,元数据服务。为ceph 文件系统提供元数据服务(ceph 对象存储和块存储不需要MDS)。为 posix 文件系统用户提供性能良好的基础命令(ls,find等)。

  • Monitor(ceph-mon):维护集群的状态,包含monitor组件信息,manger 组件信息,osd组件信息,mds组件信息,crush 算法信息。还负责ceph集群的身份验证功能,client在连接ceph集群时通过此组件进行验证。Monitor组件开启高可用时,至少3个。

ceph clients

此部分介绍 ceph 对外提供各种功能的组件。
其中包含:Block Device、Object Storage、Filesystem。

  • Block Device:块存储设备,RBD。
  • Object Storage: 对象存储,RGW。对外可提供 swift 、s3 接口类型的restful api。
  • Filesystem:文件系统,CephFS。提供一个兼容POSIX的文件系统。
ceph 存储过程

前面两个部分主要介绍了 ceph 的一些组件及对外提供的功能。
这部分主要介绍 ceph 的存储逻辑。

首先,在对象存储中,一切都是扁平化的,并且存储的最小单元为对象(obj)。存储 obj 如下图:


image.png

ceph 在对象存储的基础上提供了更加高级的思想。

当对象数量达到了百万级以上,原生的对象存储在索引对象时消耗的性能非常大。ceph 因此引入了 placement group (pg)的概念。一个 pg 就是一组对象的集合。如下图:


image.png

obj 和 pg 之间的映射由 ceph client 计算得出。

讨论 pg 时,不得不提的另外一个名词:pgp。
pgp 决定了 pg 和 osd 之间的映射关系。一般将 pgp_num 设置成和 pg_num 一样大小。

这里还有一个名词需要提一下,在 ceph 中会经常见到 crush 算法。简单来说,crush 算法就是指 ceph 中数据如何存储、读取的过程。

由于 ceph 集群面对许多的独立项目,因此 ceph 还引入了 ceph pool 的概念用于划分不同的项目。
ceph pool 是对 ceph 对象的逻辑划分,并不是物理划分。

pg 和 ceph pool 的区别:

  • pg 对于用户来说是透明的,只是底层的一种优化方案。
  • ceph pool 对于用户来说,就像 mysql 中的 database。

像大多数集群软件一样,ceph 也提供了缓存的概念。称之为 Cache Tier(缓存层,在具体使用时有时会称之为缓存池)。
缓存池对用户来说是透明的,因此不会改变用户的原有使用逻辑。以下缓存池的介绍,均为底层逻辑。
在没有缓存池时,ceph client 直接指向存储池。
在添加缓存池后,ceph client 指向缓存池,缓存池再指向存储池。

扩展

1. 关于 osd、pg、pgp 的猜想

官方原话:
When pg_num is increased for any pool, every PG of this pool splits into half, but they all remain mapped to their parent OSD.
Until this time, Ceph does not start rebalancing. Now, when you increase the pgp_num value for the same pool, PGs start to migrate from the parent to some other OSD, and cluster rebalancing starts. This is how PGP plays an important role.
By Karan Singh
个人翻译:
当一个池增加 pg 数量时,这个池中的所有 pg 都会变化。但是原 pg 的实际物理存储位置不会改变。
当一个池增加 pgp 的数量时,pg 的实际物理存储位置会发生改变。

首先,截至目前,没有具体查到资料证明以下观点。(基于一致性hash的猜想)

宏观上,大量的 obj 存储过程如下:
image.png
由上图,引发几个问题:
  1. obj 如何存储到 pg 上?
  2. pg 如何存储到 osd 上?
  3. 那 pgp 又是什么?
  4. 为什么要有 pg 这个东西?
一幅猜想图:
猜想图.png

图中出现了一个新词: vosd ,这个是指虚拟 osd。它的数量等于 pgp 的数量,而 pgp 一般又等于 pg。

猜想:
  1. obj 在存储时,首先经过 hash 算法决定存储在哪个 pg 上。
  2. 再次经过 hash 算法,计算出 pg 位于哪个 vosd 上。
  3. vosd 中存储了与物理 osd 之间的映射。

pgp 的数量就是 vosd 的数量。

引入 pg 可以实现 pool 概念,以及优化碎片管理(这一点十分不确定)。

引入 pgp(vosd),是为了在增加 osd 时可以让数据更加均衡的分布。

如猜想图:
当我们增加池的 pg 数量时,不会改变 vosd,因此原 pg 与 vosd 之间的映射未变,原 pg 的实际物理位置也不会发生变化。只是会影响同一个池中 obj 的分布。
当我们增加池的 pgp 数量时,相当于改变了 vosd,通过 hash 计算出的部分 pg 与 vosd 之间的映射就要发生改变,从而导致 pg 的实际物理位置发生改变。

与一致性hash不同的地方:
一般情况下,一致性hash只有一层虚拟化层,并且虚拟化层是根据物理硬件而变化的。但是ceph却是一种反着来的意思。

当 ceph 增加一个 osd 时,pg 的物理位置也会发生改变。
在该猜想下:
当增加 osd 时,并不会增加 vosd 的数量,原部分 vosd 会映射到新的 osd 上,因此产生一种部分 pg 的实际物理位置发生变化的情况。

2. 关于 pg pgp 数量设定

创建池时,会分配固定的 pg,以及设置与 pg 一样大小的 pgp。
注意,一般 pg 数量都设置为 2 的次方。

严格意义上,我们无论为池分配多少个 pg 都没有问题。但有时候 pg num 配置小了会报错,配置大了也会报错。这不是因为这么配置不对,是因为有其它的参数在限制我们随意配置 pg num。

比如:
osd 有两个配置,当每个 osd 的 pg num 过少(默认30)时会告警,当每个 osd 的 pg num 过多(默认300)也会告警。

所以,想要入门使用 ceph,还是需要了解许多基础知识才可以。否则,各种意外。

参考

https://docs.ceph.com/docs/master/architecture/

https://ceph.com/pgcalc/

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

推荐阅读更多精彩内容