1.1 ceph 特点
高性能 高可用性 高可扩展性 特性丰富
1.2 架构
对象(object): 原生API 块 (block): 支持精简配置、快照、克隆 文件 (File): Posix接口 , 支持快照
1.3 核心组件
Monitor : 一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用 来保存OSD的元数据。监控整个集群的状态,维护集群的cluster MAP 二进制表,保证 集权数据的一致性。 OSD : OSD全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进 程。一个Ceph集群一般都有很多个OSD(最少得有两个(为了满足副本机制))。 MDS : MDS全称Ceph Metadata Server,是CephFS(文件系统存储)服务依赖的元数 据服务。 object : Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据。 PG : PG全称Placement Groups,是一个逻辑的概念,一个PG包含多个OSD(取决于 副本数量)。引入PG这一层其实是为了更好的分配数据和定位数据。 RADOS : RADOS全称Reliable Autonomic Distributed Object Store,真正提供存储功能 的那一层,是Ceph集群的精华,用户实现数据分配、Failover(故障转移)等集群操 作。 Libradio : Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的 RBD(块存储)、RGW(对象存储)和CephFS(文件系统存储)都是通过librados访 问的,目前提供PHP、Ruby、Java、Python、C和C++支持。 CRUSH : CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的 地方。 RBD : RBD全称RADOS block device,是Ceph对外提供的块设备服务。块存储。 RGW : RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和 Swift兼容。对象存储。 CephFS : CephFS全称Ceph File System,是Ceph对外提供的文件系统服务。文件系统 存储。
ceph的数据存储过程
首先我们看到的是一个File,File是一个文件,这个文件也相当于是我们要存储的数据,我 们在存储这个数据的时候会给它分成对象(object),我们分成的对象的大小是由管理 员调整的,每一个对象都有一个oid(对象id),它是由ino(文件id--也是全局的唯一标 识)和non(文件分片的id) 组成。(例如文件id为A,分片之后的第一个片的non id为 0,则第一个对象的id 为 A0)oid 有利于唯一标识每个对象,从而知道每个对象分属于 哪个文件。由于分割出来的对象很多,如果直接存储到OSD(object storage device)中, 速度会很慢,同时若OSD损坏,将无法迁移到其他的OSD上去。为了解决这个问题,引 入了PG(placement groups)(PG是一个逻辑概念,在linux上是可以直接看到对象 的,但是无法直接看到PG)我们每个对象都会固定映射进一个PG中,当我们要查一个 对象的时候,只需要找到这个对象存到哪个PG中,然后遍历这个PG,无需遍历所有对 象。同时在数据迁移(保证数据存储的均衡性,当扩展新的服务器设备时,会向新的服 务器设备进行数据迁移,防止单点过热)的过程中,也是以PG为基本单位进行迁移。我 们的对象是怎么映射进我们的PG(placement groups)? 这里主要是通过一个哈希算法, 对我们的oid(object id)进行了哈希运算(hash(oid) % mask -> pgid) ,然后他会得出一 个值, 再用这个值模上pg的数量(mask)获得的余数就是我们的pgid, 最后我们的PG会 根据我们管理员设置的一个副本数量进行复制(副本机制),通过CRUSH算法 (CRUSH(pgid)->(osd1,osd2,....))存储到不同的osd中。
ceph的存储方式
对象存储
radosgw : ceph对象网关 ceph对象网关是一个对象存储接口,建立在该对象之上,librados 为应用程序提供了通 往ceph存储集群的RESTful网关,ceph对象存储支持两个接口:s3 和 Swift ceph的对象存储使用的是ceph对象网关守护进程(radosgw),他是用于与ceph集群进行交互的一个HTTP服务器。 文件系统存储 Ceph文件系统 (Ceph FS)是个POSIX兼容的文件系统,它使用Ceph存储集群来存储数据。Ceph文件系统与Ceph块设备、同时提供S3和Swift APl的Ceph对象存储、或者原生库( librados )一样,都使用着相同的Ceph存储集群系统。 块存储 块是一个字节序列(例如,一个512字节的数据块)。基于块的存储接口是最常见的存储数据方法,它们基于旋转介质,像硬盘、CD、软盘。无处不在的块设备接口使虚拟块设备成为与ceph这样的海量存储系统交互的理想之选。 Ceph块设备是精简配置的、大小可调且将数据条带化存储到集群内的多个OSD。Ceph块设备利用RADOS的多种能力,如快照、复制和一致性。Ceph的RADOS块设备(RBD)使用内核模块或 librbd库与OSD交互。