写在前面
- 准备考试,整理 Ceph 相关笔记
- 博文内容涉及,Ceph 集群中数据如何分布以及不同的容灾池介绍
- 理解不足小伙伴帮忙指正
对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》
Ceph 中的数据分布和整理
使用池对存储进行分区
Ceph
中的 pool
可以看作是传统文件系统中的目录
,但它们不仅仅是简单的目录。可以这样讲,如果要在 ceph 中存储东西,那么最先需要确认的就是要存储在那个池里,池最主要区别是,保护容灾类型不同,有复制池和纠删码池两种
在 Ceph 中 OSD
保护并持续检查集群中存储的数据的完整性, Pools(池) 是 Ceph 存储集群的逻辑分区
,用于将对象存储在共同的名称标签
下。
Ceph 给每个 池
分配 特定数量
的 哈希存储桶
,名为放置组 (PG)
,将对象分组到一起进行存储。每个池具有下列可调整属性:
- 不变 ID
- 名称
- 在 OSD 之间分布对象的 PG 数量
- CRUSH 规则,用于确定这个池的 PG 映射
- 保护类型冗余(
复制
或纠删代码
) - 与保护类型相关的参数
- 影响集群行为的各种标志
分配给每个池的放置组(PG
)数量可以独立配置,以匹配数据的类型以及池所需要的访问权限
CRUSH
算法用于确定托管池数据的OSD
,每个池分配一条 CRUSH
规则作为其放置策略,CRUSH 规则决定哪些 OSD 存储分配了该规则的所有池的数据
放置组 PG
放置组 (PG)
将一系列对象聚合到一个哈希存储桶
或组中。Ceph 将每个 PG 映射到一组 OSD
。
一个对象 属于一个
PG,属于 同一
PG 的所有对象返回相同的散列结果
根据对象名称的散列
将对象映射至其 PG
。由 CRUSH 算法将 PG 放置到OSD 这种放置策略也被称为 CRUSH
放置规则,放置规则标识在 CRUSH 拓扑中选定的故障域
,以接收各个副本或纠删码区块
当客户端将对象写入到池时,它使用池的 CRUSH
放置规则来确定对象的放置组
。
客户端然后使用其集群映射的副本
、放置组
以及 CRUSH 放置规则
来计算对象的副本(或其纠删码区块)应写入到哪些 OSD 中,从而确保数据分布到不同的故障域
当新
的 OSD 可供 Ceph 集群使用时,放置组提供的间接层
非常重要。在集群中添加或移除 OSD 时,放置组会自动在正常运作的 OSD 之间重新平衡
将对象映射到其关联的 OSD
-
Ceph 客户端从监控器获取集群映射的最新副本。
集群映射向客户端提供有关集群中所有MON、OSD 和 MDS 的信息
。它不会向客户端提供对象的位置,客户端必须使用CRUSH 来计算它需要访问的对象位置 -
当一个对象需要进行存储时,客户端需要根据
对象 ID
和存储池名称
来计算出该对象所属的PG ID
。为了计算PG ID
,客户端需要将对象 ID
做模运算
,得到PG
数量,然后再将PG ID
添加到池 ID
的前缀上,以得到完整的PG ID
。
例如,假设某个存储池的名称为 my-pool,其对应的数字 ID 是 1,同时该存储池被分成了 64 个 PG 组。当客户端需要为一个对象计算存储位置时,它首先根据对象的 ID 计算出对象所在的 PG ID(例如是 26),然后将池 ID 的前缀添加进去,得到最终的 PG ID:1.26。这个 PG ID 就代表了对象在 Ceph 存储集群中的存储位置,客户端可以通过该 ID 来访问和管理该对象。
-
然后,使用CRUSH 算法确定哪些 OSD 负责某一个 PG(操作集合)。操作集合中目前就绪的 OSD位于就绪集合中,就绪集合中的第一个 OSD 是对象放置组的当前主要 OSD,就绪集合中的所有其他OSD 为次要 OSD
-
Ceph 客户端然后可以直接与主要 OSD 交互,以访问对象
数据保护
和 Ceph 客⼾端一样,OSD 守护进程使用 CRUSH 算法,但 OSD 守护进程使用它来计算对象副本的存储位置以及用于重新平衡存储
。
在典型的写入场景中,Ceph 客户端使用CRUSH 算法计算原始对象的存储位置,将对象映射到池和放置组,然后使用 CRUSH 映射来确定映射的放置组的主要 OSD。在创建池时,将它们设置为复制或纠删代码池
为了提高弹性,为池配置在出现故障时不会丢失数据的 OSD 数量。对于复制池(默认的池类型)
,该数量决定了在不同设备之间创建和分布对象的副本数。复制池以较低的可用存储与原始存储比为代价,在所有用例中提供更佳的性能
纠删代码
提供了更经济高效的数据存储方式,但性能更低
。对于纠删代码池,配置值确定要创建的编码块
和奇偶校验块
的数量
纠删代码
的主要优势是能够提供极高的弹性和持久性。还可以配置要使用的编码区块(奇偶校验)数量,RADOS 网关和 RBD 访问方法都支持纠删代码
下图演示了如何在Ceph集群中存储数据对象。Ceph 将池中的一个或多个对象映射到一个 PG,由彩色框表示。此图上的每一个 PG 都被复制并存储在 Ceph 集群的独立 OSD 上
博文部分内容参考
© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知,这是一个开源项目,如果你认可它,不要吝啬星星哦 😃
https://docs.ceph.com/en/pacific/architecture/
https://github.com/ceph/ceph
https://docs.ceph.com
CL260 授课老师课堂笔记
© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)