带你读《存储漫谈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 客户端进行推送。

相关文章
|
22天前
|
监控 Java 持续交付
后端开发中的微服务架构实践与挑战####
在当今快速迭代的软件开发领域,微服务架构以其灵活性和可扩展性成为众多企业的首选。本文探讨了微服务架构的核心概念、实施策略及面临的主要挑战,旨在为后端开发者提供一个全面的指南。通过分析真实案例,揭示微服务在提升系统敏捷性的同时,如何有效应对分布式系统的复杂性问题。 ####
|
12天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
40 1
|
22天前
|
消息中间件 存储 缓存
十万订单每秒热点数据架构优化实践深度解析
【11月更文挑战第20天】随着互联网技术的飞速发展,电子商务平台在高峰时段需要处理海量订单,这对系统的性能、稳定性和扩展性提出了极高的要求。尤其是在“双十一”、“618”等大型促销活动中,每秒需要处理数万甚至数十万笔订单,这对系统的热点数据处理能力构成了严峻挑战。本文将深入探讨如何优化架构以应对每秒十万订单级别的热点数据处理,从历史背景、功能点、业务场景、底层原理以及使用Java模拟示例等多个维度进行剖析。
49 8
|
6天前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
22 1
|
7天前
|
消息中间件 运维 API
后端开发中的微服务架构实践####
本文深入探讨了微服务架构在后端开发中的应用,从其定义、优势到实际案例分析,全面解析了如何有效实施微服务以提升系统的可维护性、扩展性和灵活性。不同于传统摘要的概述性质,本摘要旨在激发读者对微服务架构深度探索的兴趣,通过提出问题而非直接给出答案的方式,引导读者深入
23 1
|
8天前
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####
|
14天前
|
消息中间件 运维 开发者
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在后端开发中的应用,从其核心概念、设计原则到实际部署过程中面临的挑战进行了全面剖析。不同于传统的单体应用,微服务通过将复杂系统拆解为一系列小型、独立的服务,提高了系统的灵活性和可维护性。然而,这种架构的转变也伴随着服务间通信、数据一致性、部署复杂性等新问题。本文旨在为开发者提供一套应对这些挑战的策略,同时分享一些成功案例,以期促进微服务架构的有效实施。 ####
|
16天前
|
缓存 负载均衡 API
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的可扩展性、灵活性及易于维护的特点,成为众多企业后端开发的首选架构模式。本文将深入探讨微服务架构的核心理念,通过具体案例分析其在实际应用中的实践策略与面临的挑战,为读者提供一份详尽的微服务架构实施指南。 ####
|
17天前
|
消息中间件 负载均衡 测试技术
后端开发中的微服务架构实践与挑战####
本文旨在探讨微服务架构在后端开发中的应用实践,深入分析其带来的优势与面临的挑战。通过剖析真实案例,揭示微服务转型过程中的关键技术决策、服务拆分策略、以及如何有效应对分布式系统的复杂性问题。文章还将提供一套评估企业是否适合采用微服务架构的框架,帮助读者更好地理解这一架构模式,并为企业的技术选型提供参考。 ####
|
16天前
|
运维 监控 安全
深入理解微服务架构:设计原则、挑战与实践
深入理解微服务架构:设计原则、挑战与实践