带你读《存储漫谈Ceph原理与实践》第二章Ceph 架构2.2 Ceph 数据寻址(一)

简介: 带你读《存储漫谈Ceph原理与实践》第二章Ceph 架构2.2Ceph 数据寻址

在从方案演进及变迁的较为宏观角度对比了分布式存储系统的有中心架构与无中心架构寻址方式之后,本小节将深入Ceph 存储系统的数据寻址方案,进行详细介绍。

在   PB   级数据存储和成百上千台存储服务器纳管的需求背景下,大规模分布式存储系统必须做到数据和负载的均衡分布,以此来提高资源利用率,最大化系统的性能输出,同   时要处理好系统的扩展和硬件失效问题。Ceph设计了一套 CRUSH 算法,用在分布式对象存储系统(RADOS)上,可以有效地将数据对象(Object)映射到存储设备(OSD)上。CRUSH     算法能够处理存储设备的添加和移除,并最小化由于存储设备的添加和移动而导致的数据迁移。

 

CRUSH 算法有两个关键优点。

(1)  任何组件都可以独立计算出 Object所在的位置(去中心化

(2)  运算过程只需要很少的集群元数据(ClusterMap,只有当存储集群添加或删除设备时,这些元数据才会发生改变。

这些特性使得 CRUSH 适合管理对象分布非常大的(PB级别)且要求可伸缩性、性能和可靠性非常高的存储系统。


2.2.1     Ceph寻址流程

为了讲清楚 Ceph 寻址流程,这里先介绍一下常用术语。

◆  File

File   是要存储和访问的文件,它是面向用户的,也是可直观操作的对象,在块存储使用场景,File 指挂载出去使用的RBD设备;在对象存储使用场景,File指用户可见的音视频或其他格式的用户数据;在文件存储使用场景File 指文件系统中存储的用户数据。

◆  Object

ObjectCeph底层 RADOS所看到的对象,也是在 Ceph中数据存储的基本单位,File过大时,需要将File切分成统一大小的 Object进行存储,每个 Object应包含 ID、BinaryDataMetadata信息。Object的大小可由 RADOS限定通常为 4MB,可依据需要进行配置

◆  PG

PG(PlacementGroup)是一个逻辑的概念,它的用途是对 RADOSObject的存储进行组织和位置的映射,通过PG概念的引入,Ceph 存储系统可以更好地分配数据和定位数据,PGCeph存储系统数据均衡和恢复的最小单位。

◆  Pool

Pool规定了数据冗余的类型,如副本模式、纠删码模式,对于不同冗余类型的数据存储,需要单独的 Pool划分,即每个 Pool只能对应一种数据冗余类型的规则。每个 Pool内可包含多个 PG。

◆  OSD

如第 1章介绍,OSD(ObjectStorageDevice)服务负责数据的存取,并处理数据的复制、恢复、回填、再均衡等任务。

PGObject 是一对多的关系,1PG里面组织若干个 Object,但是 1Object射到 1PG 中。

PGOSD是多对多的关系,1PG会映射到多个OSD(依照副本或者纠删码规则每个 OSD也会承载多个 PG

PGPool是多对一的关系1Pool内包含多个 PGPool创建时可指定其中 PG的数量(通常为2的指数次幂Pool创建之后,也可以通过命令对其进行调整。

2-1展示了 Ceph 的寻址流程,可以看到,Ceph的寻址需要经历 3次映射。

 

 image.png

2-1Ceph寻址流程

 

 

首先,将File切分成多个 Object

每个Object都有唯一的IDOID,OID根据文件名称得到,由inoono构成, ino为文件唯一ID(比如filename+timestampono则为切分后某个Object的序号(如0、 1、2、3、4、5,根据该文件的大小我们就会得到一系列的OID。

其次,将每个 Object映射到一个 PG中去。

实现方式也很简单,对 OID进行 Hash 运算,然后对运算结果进行按位与计算,即可得到某一个 PGID。图中的mask掩码设置为 PG的数量减 1

我们认为得到的 pgid是随机的,这与 PG的数量和文件的数量有关系,在足够量级PG数量的前提下,集群数据是均匀分布的。最后,将 Object所在的 PG映射到实际的存储位置 OSD上。

这里应用的就是 CRUSH算法了,CRUSH算法可以通过 pgid得到多个 OSD副本或者纠删码的配置策略有进程。

可以看到,Ceph 存储系统的数据寻址过程只需要输入文件的名称以及文件的大小等信息,所有计算过程都可以直接在客户端本地完成。Ceph客户端只要获得了 ClusterMap, 就可以使用 CRUSH算法计算出某个 Object所在OSDid,然后直接与它通信。Ceph客户端在初始化时会从Monitor服务获取最新的 Cluster   Map,随后采用反向订阅机制,仅当Monitor服务中记录的ClusterMap 发生变化时,才主动向Ceph 客户端进行推送。

相关文章
|
4月前
|
数据采集 监控 API
移动端性能监控探索:iOS RUM SDK 技术架构与实践
阿里云 RUM SDK 作为一款性能体验监控采集工具,可以作为辅助 App 运维的强有力助手,提升您的问题排查效率。
344 53
|
4月前
|
存储 运维 分布式计算
零售数据湖的进化之路:滔搏从Lambda架构到阿里云Flink+Paimon统一架构的实战实践
在数字化浪潮席卷全球的今天,传统零售企业面临着前所未有的技术挑战和转型压力。本文整理自 Flink Forward Asia 2025 城市巡回上海站,滔搏技术负责人分享了滔搏从传统 Lambda 架构向阿里云实时计算 Flink 版+Paimon 统一架构转型的完整实战历程。这不仅是一次技术架构的重大升级,更是中国零售企业拥抱实时数据湖仓一体化的典型案例。
310 0
|
5月前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
5月前
|
数据采集 存储 运维
MyEMS:技术架构深度剖析与用户实践支持体系
MyEMS 是一款开源能源管理系统,采用分层架构设计,涵盖数据采集、传输、处理与应用全流程,支持多协议设备接入与多样化能源场景。系统具备高扩展性与易用性,结合完善的文档、社区、培训与定制服务,助力不同技术背景用户高效实现能源数字化管理,降低使用门槛与运维成本,广泛适用于工业、商业及公共机构等场景。
230 0
|
4月前
|
存储 SQL 消息中间件
从 ClickHouse 到 StarRocks 存算分离: 携程 UBT 架构升级实践
查询性能实现从秒级到毫秒级的跨越式提升
|
6月前
|
数据采集 缓存 前端开发
如何开发门店业绩上报管理系统中的商品数据板块?(附架构图+流程图+代码参考)
本文深入讲解门店业绩上报系统中商品数据板块的设计与实现,涵盖商品类别、信息、档案等内容,详细阐述技术架构、业务流程、数据库设计及开发技巧,并提供完整代码示例,助力企业构建稳定、可扩展的商品数据系统。
|
5月前
|
数据采集 机器学习/深度学习 搜索推荐
MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构
MIT与丰田研究院研究发现,扩散模型的“局部性”并非源于网络架构的精巧设计,而是自然图像统计规律的产物。通过线性模型仅学习像素相关性,即可复现U-Net般的局部敏感模式,揭示数据本身蕴含生成“魔法”。
260 3
MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构
|
4月前
|
存储 NoSQL 前端开发
【赵渝强老师】MongoDB的分布式存储架构
MongoDB分片通过将数据分布到多台服务器,实现海量数据的高效存储与读写。其架构包含路由、配置服务器和分片服务器,支持水平扩展,结合复制集保障高可用性,适用于大规模生产环境。
398 1
|
5月前
|
JSON 供应链 监控
1688商品详情API技术深度解析:从接口架构到数据融合实战
1688商品详情API(item_get接口)可通过商品ID获取标题、价格、库存、SKU等核心数据,适用于价格监控、供应链管理等场景。支持JSON格式返回,需企业认证。Python示例展示如何调用接口获取商品信息。

热门文章

最新文章