Ceph核心概念解读
本文对Ceph中涉及到的概念进行解释分析,通读本文可以对ceph有一个比较全面的认识。
基本架构
ceph是集成传统块,文件存储,对象存储于一体的分布式存储平台。ceph整体架构如图1所示。

从架构图中可以看到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设备上。
具体的算法可以归纳为两次映射:
第一次映射:
一般来讲,对于对象会按照一定的大小(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算法的核心):
这个map可以理解为一些元数据组成的要素,比如集群的拓扑结构。这一次映射根据pgid这个伪随机序列再做一次hash映射到相应的osd上,从而达到数据的随机分布。ceph提供的一些高级特性,也正是提供多样的map来影响数据的hash分布,来达到数据分布的理想状态。