带你读《存储漫谈:Ceph原理与实践》——2.2.1 Ceph 寻址流程

简介: 带你读《存储漫谈:Ceph原理与实践》——2.2.1 Ceph 寻址流程

2.2  Ceph 数据寻址


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

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

CRUSH 算法有两个关键优点。

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

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

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


2.2.1  Ceph 寻址流程


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

File

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

Object

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

PG

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

Pool

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

OSD

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

PG 和 Object 是一对多的关系,1 个 PG 里面组织若干个 Object,但是 1 个 Object 只能被映射到 1 个 PG 中。

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

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

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

image.png

图 2-1 Ceph 寻址流程

首先,将 File 切分成多个 Object

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

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

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

我们认为得到的 pgid 是随机的,这与 PG 的数量和文件的数量有关系,在足够量级PG 数量的前提下,集群数据是均匀分布的。

最后,将 Object 所在的 PG 映射到实际的存储位置 OSD 上。

这里应用的就是 CRUSH 算法了,CRUSH 算法可以通过 pgid 得到多个 OSD(与副本或者纠删码的配置策略有关),数据最终的存放位置即为这些计算而来的 OSD 守护进程。

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

相关文章
|
28天前
|
机器学习/深度学习 数据采集 人工智能
揭秘!47页文档拆解苹果智能,从架构、数据到训练和优化
【8月更文挑战第23天】苹果公司发布了一份47页的研究文档,深入解析了其在智能基础语言模型领域的探索与突破。文档揭示了苹果在此领域的雄厚实力,并分享了其独特的混合架构设计,该设计融合了Transformer与RNN的优势,显著提高了模型处理序列数据的效能与表现力。然而,这种架构也带来了诸如权重平衡与资源消耗等挑战。苹果利用海量、多样的高质量数据集训练模型,但确保数据质量及处理噪声仍需克服。此外,苹果采取了自监督与无监督学习相结合的高效训练策略,以增强模型的泛化与稳健性,但仍需解决预训练任务选择及超参数调优等问题。
128 66
|
25天前
|
存储 缓存 前端开发
Django 后端架构开发:存储层调优策略解析
Django 后端架构开发:存储层调优策略解析
36 2
|
7天前
|
存储 搜索推荐 数据库
MarkLogic在微服务架构中的应用:提供服务间通信和数据共享的机制
随着微服务架构的发展,服务间通信和数据共享成为关键挑战。本文介绍MarkLogic数据库在微服务架构中的应用,阐述其多模型支持、索引搜索、事务处理及高可用性等优势,以及如何利用MarkLogic实现数据共享、服务间通信、事件驱动架构和数据分析,提升系统的可伸缩性和可靠性。
17 5
|
18天前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
50 9
|
19天前
|
存储 SQL Cloud Native
Hologres 的架构设计与工作原理
【9月更文第1天】随着大数据时代的到来,实时分析和处理数据的需求日益增长。传统的数据仓库在处理大规模实时数据分析时逐渐显露出性能瓶颈。为了解决这些问题,阿里巴巴集团研发了一款名为 Hologres 的新型云原生交互式分析数据库。Hologres 能够支持 SQL 查询,并且能够实现实时的数据写入和查询,这使得它成为处理大规模实时数据的理想选择。
40 2
|
21天前
|
存储 分布式计算 Hadoop
ChunkServer 原理与架构详解
【8月更文第30天】在分布式文件系统中,ChunkServer 是一个重要的组件,负责存储文件系统中的数据块(chunks)。ChunkServer 的设计和实现对于确保数据的高可用性、一致性和持久性至关重要。本文将深入探讨 ChunkServer 的核心原理和内部架构设计,并通过代码示例来说明其实现细节。
22 1
|
23天前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。
|
27天前
|
数据采集 存储 Java
Flume Agent 的内部原理分析:深入探讨 Flume 的架构与实现机制
【8月更文挑战第24天】Apache Flume是一款专为大规模日志数据的收集、聚合及传输而设计的分布式、可靠且高可用系统。本文深入解析Flume Agent的核心机制并提供实际配置与使用示例。Flume Agent由三大组件构成:Source(数据源)、Channel(数据缓存)与Sink(数据目的地)。工作流程包括数据采集、暂存及传输。通过示例配置文件和Java代码片段展示了如何设置这些组件以实现日志数据的有效管理。Flume的强大功能与灵活性使其成为大数据处理及实时数据分析领域的优选工具。
56 1
|
28天前
|
存储 监控 安全
大数据架构设计原则:构建高效、可扩展与安全的数据生态系统
【8月更文挑战第23天】大数据架构设计是一个复杂而系统的工程,需要综合考虑业务需求、技术选型、安全合规等多个方面。遵循上述设计原则,可以帮助企业构建出既高效又安全的大数据生态系统,为业务创新和决策支持提供强有力的支撑。随着技术的不断发展和业务需求的不断变化,持续优化和调整大数据架构也将成为一项持续的工作。
|
28天前
|
消息中间件 存储 SQL
Kafka架构及其原理
Kafka架构及其原理
68 1

热门文章

最新文章