前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ceph:关于Ceph 集群中数据分布和容灾理论的一些笔记

Ceph:关于Ceph 集群中数据分布和容灾理论的一些笔记

作者头像
山河已无恙
发布2023-08-21 14:42:44
2510
发布2023-08-21 14:42:44
举报
文章被收录于专栏:山河已无恙山河已无恙

1写在前面


  • 准备考试,整理 Ceph 相关笔记
  • 博文内容涉及,Ceph 集群中数据如何分布以及不同的容灾池介绍
  • 理解不足小伙伴帮忙指正

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》


Part1Ceph 中的数据分布和整理

2使用池对存储进行分区

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

  1. Ceph 客户端从监控器获取集群映射的最新副本。集群映射向客户端提供有关集群中所有MON、OSD 和 MDS 的信息。它不会向客户端提供对象的位置,客户端必须使用CRUSH 来计算它需要访问的对象位置
  2. 当一个对象需要进行存储时,客户端需要根据对象 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 来访问和管理该对象。

  1. 然后,使用CRUSH 算法确定哪些 OSD 负责某一个 PG(操作集合)。操作集合中目前就绪的 OSD位于就绪集合中,就绪集合中的第一个 OSD 是对象放置组的当前主要 OSD,就绪集合中的所有其他OSD 为次要 OSD
  2. Ceph 客户端然后可以直接与主要 OSD 交互,以访问对象

数据保护

和 Ceph 客⼾端一样,OSD 守护进程使用 CRUSH 算法,但 OSD 守护进程使用它来计算对象副本的存储位置以及用于重新平衡存储

在典型的写入场景中,Ceph 客户端使用CRUSH 算法计算原始对象的存储位置,将对象映射到池和放置组,然后使用 CRUSH 映射来确定映射的放置组的主要 OSD。在创建池时,将它们设置为复制或纠删代码池

复制池和纠删码池

为了提高弹性,为池配置在出现故障时不会丢失数据的 OSD 数量。对于复制池(默认的池类型),该数量决定了在不同设备之间创建和分布对象的副本数。复制池以较低的可用存储与原始存储比为代价,在所有用例中提供更佳的性能

纠删代码提供了更经济高效的数据存储方式,但性能更低。对于纠删代码池,配置值确定要创建的编码块奇偶校验块的数量

纠删代码的主要优势是能够提供极高的弹性和持久性。还可以配置要使用的编码区块(奇偶校验)数量,RADOS 网关和 RBD 访问方法都支持纠删代码

下图演示了如何在Ceph集群中存储数据对象。Ceph 将池中的一个或多个对象映射到一个 PG,由彩色框表示。此图上的每一个 PG 都被复制并存储在 Ceph 集群的独立 OSD 上

存储流程

3博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知,这是一个开源项目,如果你认可它,不要吝啬星星哦 :)


https://docs.ceph.com/en/pacific/architecture/

https://github.com/ceph/ceph

https://docs.ceph.com

CL260 授课老师课堂笔记

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 山河已无恙 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1写在前面
  • Part1Ceph 中的数据分布和整理
    • 2使用池对存储进行分区
      • 放置组 PG
      • 将对象映射到其关联的 OSD
      • 数据保护
    • 3博文部分内容参考
    相关产品与服务
    对象存储
    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档