Ceph 核心概念解读
本文对 Ceph 中涉及到的概念进行解释分析,通读本文可以对 ceph 有一个比较全面的认识。
基本架构
ceph 是集成传统块,文件存储,对象存储于一体的分布式存储平台。ceph 整体架构如图 1 所示。
图 1 ceph架构图
从架构图中可以看到 RADOS 位于最底层,也是 ceph 中最核心的组成部分,RADOS 对外提供高性能和可扩展的存储服务。可以看到,CEPH FS 提供的文件存储功能,其实是基于 RADOS 来提供文件存储这一类的存储服务的;而 RADOSWGW 提供的对象存储,RBD 提供的块存储正是基于 LIBRADOS 这个标准库来提供相应的存储应用,当然,LIBRADOS 这个标准库也是基于 RADOS 实现的。当然,也可以基于 LIBRADOS 或者 RADOS 来扩展自定义的存储服务。
RADOS
RADOS 的提出是为了解决大规模异构存储集群中数据的动态分配:简单来说,就是在添加新设备,去除老设备等常见的场景下,如何使得存储数据的分布,能够非常均匀的存储到所有的磁盘上,不会造成某一个磁盘存储的数据量特别大等不均匀的分布场景。
OSD
为了达到 RADOS 的功能,对集群中的本地块设备(可以理解为一块主机上的磁盘)进行了抽象,并命名为 OSD(Object Store Device),来统一管理这个设备在工作期间占用的 CPU,内存等物理资源。相当于对我们的物理块设备赋予了智能,后面会看到抽象出 OSD 所显示的作用,而不是直接管理块设备。
Monitor
Monitor 的提出,是为了去除中性化的过程,通过 monitor 来管理 OSD,节点等关键的集群拓扑结构信息(这些信息是影响数据分布的一个影响因子),并发送给客户端,让客户端通过一定的算法(也就是提到的 CRUSH 算法)来计算数据存储的位置,从而让客户端直接和 OSD 通信进行数据的管理能力。可以看到,客户端和 OSD 直接通信的方式,不再经过某一个特定的节点(最多通过 monitor 来获取最新的集群拓扑结构信息),达到了去中性化的目的。
PG
PG 是 Ceph 中不得不提的一个概念,PG 相当于是对某一些对象的一个逻辑抽象,简单来说,某一些对象隶属于这个 PG,当然 PG 也不止一个。PG 的提出当然是为了更好的管理数据,相比于直接去管理所有的数据,粒度太细,不利于管理。关于 PG 对于数据的映射参考官网。在图 2 中可以看到一个简单的映射关系。
图 2 PG 组和 OSD 的映射
CRUSH
CRUSH(Controlled Replication Under Scalable Hashing)算法的提出,正是为了解决图 2 中,我们的存储数据对象(obj),如何映射到相应的 OSD 上,也就是我们的数据对象要存放到哪些 OSD 设备上。
具体的算法可以归纳为两次映射:
第一次映射:
hash(oid)& mask -> pgid
一般来讲,对于对象会按照一定的大小(4M)解析切割,比如对象的 ID 是 f1,大小是 15M,那么会切割为 f1.0 (4M 大小),f1.1(4M 大小),f1.2(4M 大小),f1.3(3M 大小)总共 4 个对象,我们把 f1.0 这种 ID 称为 oid(也就是 object id)。对 oid 做一次 hash 映射,得到一个 pgid,也就是映射到属于哪一个 pg 上。
第二次映射(CRUSH 算法的核心):
hash(map, pgid) -> (osd1, osd2, osd3)
这个 map 可以理解为一些元数据组成的要素,比如集群的拓扑结构。这一次映射根据 pgid 这个伪随机序列再做一次 hash 映射到相应的 osd 上,从而达到数据的随机分布。ceph 提供的一些高级特性,也正是提供多样的 map 来影响数据的 hash 分布,来达到数据分布的理想状态。
版权声明: 本文为 InfoQ 作者【总想做点什么】的原创文章。
原文链接:【http://xie.infoq.cn/article/2704c4a428800bef21458aec3】。文章转载请联系作者。
评论