Ceph 入门——内部构件

1 对象

一个对象包含绑定在一起的数据和元数据,并有唯一标识的表示符(ID)。另外对象的大小是可以随着大小可变的元数据而变得更大的。元数据是数据的数据。在一个对象中,数据存储为丰富的元数据,它们存储上下文和数据的实际内容等信息。

一个对象的元数据并不受限于类型或者数量,可以在元数据中添加自定义的类型。对象不是不使用层次结构或者树状结构,而是使用没有任何复杂度的线性地址空间中。对象可以存储在本地,也可以是地理上分开的线性地址空间。这种机制可以帮助对象唯一的标识自己。对象以复制的方式存储在基于对象存储的设备中(OSD)。

Ceph中的所有数据单元都是以对象的形式存储在一个池中。Ceph的池是一个用来存储对象的逻辑分区。

2 CRUSH

元数据是数据的数据,存储的信息是数据存储在存储节点和磁盘阵列的位置信息。添加数据时,元数据最新更新,然后才是实际的数据存储。如果失去元数据,将会失去所有的数据。因此为了防止元数据丢失,所做出的处理,如在单节点上保持多个副本或者复制整个数据和元数据来保证容错度,将会造成伸缩、可用性、性能上的瓶颈。

Ceph使用可扩展散列下的受控复制(Controlled Replication Under Scalable Hashing,CRUSH)算法,它是Ceph的智能数据分发机制。与传统的依赖于存储和管理一个核心元数据/索引不同的是,Ceph使用CRUSH算法来准确计算数据写入或者读取的位置。CRUSH按需计算元数据,而不是存储元数据。

2.1 CRUSH 查找

CRUSH 机制的运行方式:元数据计算的负载是分布式的、按需的。元数据计算的过程也叫 CRUSH查找,CRUSH不依赖于系统。Ceph给客户端提供了足够的灵活性来按需执行元数据计算,客户端可以使用自己的系统资源来执行CRUSH查找,从而取消中心查找。


这里写图片描述

对于一次读写操作,客户端先从monitor获取集群的map。从map中获取集群的状态和信息配置,使用对象和池名/ID 将数据转化为对象。然后将对象和PG(placement groups,归置组)数经过散列来生成应当存放的PG。针对这个PG ID经过CRUSH查找来确定存储或者获取数据所需的OSD的位置。得到OSD ID之后,客户端直接联系OSD存取数据。计算都有客户端来执行,不会影响集群的性能,数据写入OSD后,主OSD所在节点将执行CRUSH查找操作来计算辅助归置组和OSD的位置来实现数据复制。

2.2 CRUSH 层级结构

CRUSH 了解所有的基础设施并支持自定义配置,它维护一个所有基础设施组件的一个嵌套层次结构。CRUSH层次列表通常包含数据中心、房间、组、机架等,这些组件称为故障域或者CRUSH bucket。CRUSH包含可用的bucket,这些bucket表明了设备的具体物理位置。还包含一些规则,告诉CRUSH如何为不同的Ceph池复制数据。


这里写图片描述

根据基础设施,CRUSH扩故障域来传播数据及其副本,解决了单点故障问题,同事保证高可用性。CRUSH均匀地在整个集群磁盘上写数据,确保所有磁盘都同等的利用,而不考虑他们的能力。CRUSH为每个OSD分配权重,OSD权重越高,表示物理存储容量越大,CRUSH会写入更多的数据到这个OSD上。

2.3 恢复和再平衡

故障域内任何组件发生故障以后,默认下Ceph会等待300s ,而后Ceph将该OSD标记为down和out并初始化恢复操作。CRUSH会复制数据到多个磁盘,这些复制的数据在恢复的时候使用。

CRUSH会复制数据到多个磁盘,这些复制的数据在恢复的时候使用。恢复期间CRUSH试图移动尽量少的数据来构建一个新的集群布局。

当一个新的主机或者磁盘添加到Ceph集群中时,CRUSH开始执行再平衡,从现有的主机/磁盘 移动数据到新的主机磁盘。再平衡保证所有磁盘能够均匀的使用,在再平衡期间要注意集群的性能,不能因为再平衡而下降。可以在新加入的OSD设置权重为0,然后依次提升到容量对应水平的权重。

2.4 编辑 CRUSH map

使用ceph-deploy 部署Ceph后,它会为配置文件生成一个默认的CRUSH map。Ceph提供定制CRUSH map的功能。

1) 提取现有的CRUSH map

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ceph是一个分布式存储系统,包括多个组件,其中包括Librbd块存储库。在Ceph中,Librbd提供了一种将RBD(块设备)映射到客户端的方法,并使客户端能够读写这些设备。在本文中,我们将分析Librbd块存储库的源代码以及RBD的读写过程。 1. Librbd源码分析 Librbd块存储库的源代码位于src/librbd目录下。其中,包括librbd.cc、ImageCtx.cc、ImageWatcher.cc、Journal.cc等多个源代码文件。这些源代码文件组成了Librbd块存储库的核心。 其中,librbd.cc是Librbd块存储库的主要源代码文件。在这个文件中,包括了Librbd的初始化、映射、卸载等方法。ImageCtx.cc则是Image上下文,用于管理Image的状态、锁定、映射等信息。ImageWatcher.cc用于监控Image的状态变化,Journal.cc则是Librbd的Journal日志管理。 2. RBD读写流程源码分析 在Ceph中,RBD由client和server两个部分组成。client在客户端上运行,提供了将RBD映射到客户端的方法。server在存储集群中运行,提供了RBD的存储和管理。 RBD的读写流程如下: 1)客户端向Ceph Monitor请求RBD映射信息,Monitor返回Image ID和Image特性; 2)客户端向Ceph OSD请求RBD数据块,OSD返回数据块内容; 3)客户端将数据写入或读取到本地块设备; 4)客户端向Ceph OSD写入或读取数据块,OSD返回操作结果; 5)客户端向Ceph Monitor请求解除RBD映射,Monitor返回解除结果。 在上述过程中,涉及到的源代码文件有:librbd.cc、ImageCtx.cc、ImageWatcher.cc、Journal.cc等。 总结 Librbd块存储库和RBD读写流程是Ceph存储系统的核心组件之一,通过分析源代码可以更加深入地了解Ceph存储系统的实现原理。同时,对于开发者来说,也有助于在Ceph存储系统上构建更加高效、稳定的存储应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值