一 Ceph简介
Red Hat Ceph是一个分布式的数据对象存储,系统设计旨在性能、可靠性和可扩展性上可以提供优秀的存储服务。分布式对象存储是存储的将来,由于它们适应非结构化数据,而且客户端能够同时使用当前及传统的对象接口进行数据存取。例如:
- 本地语言绑定接口(C/C++, Java, Python)
- RESTful 接口(S3/Swift)
- 块设备接口
- 文件系统接口
Red Hat Ceph具备很是好的可扩展性——数以千计的客户端能够访问PB级到EB级甚至更多的数据。
二 Ceph优点及特色
2.1 Ceph优点
Ceph区别于其余文件系统(如glusterfs、swift等)主要具备如下优点:
CRUSH算法运行在Ceph Clients和Ceph OSD上,用于计算对象的位置信息,它代替了传统的查表的思想,把工做分摊到全部Ceph Clients和Ceph OSD上,加强了弹性扩展和高可用性,是ceph的两大创新之一。ceph摒弃了传统的集中式存储元数据寻址的方案,而使用CRUSH算法完成数据的寻址操做。CRUSH在一致性哈希基础上很好的考虑了容灾域的隔离,可以实现各种负载的副本放置规则,例如跨机房、机架感知等。Crush算法有至关强大的扩展性,理论上支持数千个存储节点。
Ceph中的数据副本数量能够由管理员自行定义,并能够经过CRUSH算法指定副本的物理存储位置以分隔故障域,支持数据强一致性;ceph能够忍受多种故障场景并自动尝试并行修复。
Ceph不一样于swift,客户端全部的读写操做都要通过代理节点,一旦集群并发量增大时,代理节点很容易成为单点瓶颈。Ceph自己并无主控节点,扩展起来比较容易,而且理论上,它的性能会随着磁盘数量的增长而线性增加。
Ceph支持三种调用接口:对象存储,块存储,文件系统挂载。三种方式能够一同使用。
2.2 Ceph特色
- 统一存储
- 无任何单点故障
- 数据多份冗余
- 存储容量可扩展
- 自动容错及故障自愈
三 体系架构
体系架构示意图(来源于官方):
3.1 RADOS
Ceph的底层核心为RADOS(Reliable, Autonomic Distributed Object Store),RADOS自己也是分布式存储系统,CEPH全部的存储功能都是基于RADOS实现。Ceph的上层应用调用本机上的librados API,再由后者经过socket与RADOS集群中的其余节点通讯并完成各类操做。
Ceph的本质是一个对象存储。RADOS由两个组件组成:OSD和Monitor。
OSD主要提供存储资源,每个disk、SSD、RAID group或者一个分区均可以成为一个OSD,而每一个OSD还将负责向该对象的复杂节点分发和恢复;
Monitor维护Ceph集群并监控Ceph集群的全局状态,提供一致性的决策。
RADOS分发策略依赖于CRUSH(Controlled Replication Under Scalable Hashing)算法(基于可扩展哈希算法的可控复制)。
3.2 RADOS GW和RBD
RADOS GateWay、RBD其做用是在librados库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口。其中,RADOS GW是一个提供与Amazon S3和Swift兼容的RESTful API的gateway,以供相应的对象存储应用开发使用。
RBD则提供了一个标准的块设备接口,经常使用于在虚拟化的场景下为虚拟机建立volume。目前,Red Hat已经将RBD驱动集成于KVM/QEMU中,以提升虚拟机访问性能。这两种方式目前在云计算中应用的比较多。
3.3 CEPHFS
CEPHFS则提供了POSIX接口,用户可直接经过客户端挂载使用。它是内核态的程序,因此无需调用用户空间的librados库。它经过内核中的net模块来与Rados进行交互。
四 Ceph角色及原理
4.1 角色及做用
全部Ceph存储集群的部署都始于部署一个个Ceph节点、网络和Ceph存储集群。Ceph存储集群至少须要一个Ceph Monitor和两个OSD守护进程。而运行Ceph文件系统客户端时,则必需要有元数据服务器(Metadata Server)。
- Ceph OSDs:Ceph OSD守护进程( Ceph OSD )的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并经过检查其余OSD守护进程的心跳来向Ceph Monitors提供一些监控信息。当Ceph存储集群设定为有2个副本时,至少须要2个OSD守护进程,集群才能达到active+clean状态(Ceph默认有3个副本)。
- Monitors:Ceph Monitor维护着展现集群状态的各类图表,包括监视器图、OSD图、归置组(PG)图、和CRUSH 图。Ceph 保存着发生在Monitors、OSD和PG上的每一次状态变动的历史信息(称为epoch)。
- MDSs: Ceph元数据服务器(MDS)为Ceph文件系统存储元数据(也就是说,Ceph块设备和Ceph 对象存储不使用MDS)。元数据服务器使得POSIX文件系统的客户端,能够在不对Ceph存储集群形成负担的前提下,执行诸如ls、find等基本命令。
4.2 存储通讯机制
当一个OSD须要存储数据时(不论是来自Ceph块设备、Ceph对象存储、Ceph文件系统、仍是基于librados的自定义实现),Ceph OSD在扁平的命名空间内把全部数据都存储为对象。
提示:对象包含一个标识符、二进制数据、和由名字/值对组成的元数据,元数据语义彻底取决于Ceph客户端。例如,CephFS用元数据存储文件属性,如文件全部者、建立日期、最后修改日期等等。一个对象ID不止在本地惟一 ,它在整个集群内都是惟一的。
Ceph客户端维护对象ID和存储对象的存储池名称,但它们既不须要维护对象到OSD的索引,也不须要与一个集中的对象索引进行通讯来查找数据对象的位置。
为了可以存储并获取数据,Ceph客户端首先会访问一台Ceph mon并获得最新的存储集群映射关系,而后Ceph客户端能够经过提供的对象名称与存储池名称,使用集群映射关系和CRUSH算法(可控的、可扩展的、分布式的副本数据放置算法)来计算出提供对象所在的归置组(PG)和主Ceph OSD。
最后,Ceph客户端链接到可执行读写操做的主OSD上进而达到数据的存储与获取。客户端和OSD之间没有中间服务器,中间件或总线。
五 Ceph应用场景
Ceph的应用场景主要由它的架构肯定,Ceph提供对象存储、块存储和文件存储。
5.1 LIBRADOS应用
通俗理解,Librados提供了应用程序对RADOS的直接访问,目前Librados已经提供了对C、C++、Java、Python、Ruby和PHP的支持。它支持单个单项的原子操做,如同时更新数据和属性、CAS操做,同时有对象粒度的快照操做。它的实现是基于RADOS的插件API,也就是在RADOS上运行的封装库。
5.2 RADOSGW应用
此类场景基于Librados之上,增长了HTTP协议,提供RESTful接口而且兼容S三、Swfit接口。RADOSGW将Ceph集群做为分布式对象存储,对外提供服务。
5.3 RBD应用
此类场景也是基于Librados之上的,细分为下面两种应用场景。
第一种应用场景为虚拟机提供块设备。经过Librbd能够建立一个块设备(Container),而后经过QEMU/KVM附加到VM上。经过Container和VM的解耦,使得块设备能够被绑定到不一样的VM上。
第二种应用场景为主机提供块设备。这种场景是传统意义上的理解的块存储。
以上两种方式都是将一个虚拟的块设备分片存储在RADOS中,都会利用数据条带化提升数据并行传输,都支持块设备的快照、COW(Copy-On-Write)克隆。最重要的是RBD还支持Live migration。
5.4 CephFS(Ceph文件系统)应用
此类场景是基于RADOS实现的PB级分布式文件系统,其中引入MDS(Meta Date Server),它主要为兼容POSIX文件系统提供元数据,好比文件目录和文件元数据。同时MDS会将元数据存储在RADOS中,这样元数据自己也达到了并行化,能够大大加快文件操做的速度。MDS自己不为Client提供数据文件,只为Client提供对元数据的操做。当Client打开一个文件时,会查询并更新MDS相应的元数据(如文件包括的对象信息),而后再根据提供的对象信息直接从RADOS中获得文件数据。
更多有趣知识可见:https://blog.csdn.net/sunhf_csdn/article/details/79797186
官方文档:http://docs.ceph.org.cn
参考:http://ceph.org.cn/2018/06/29/red-hat-ceph%E5%AD%98%E5%82%A8-%E3%80%8A%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3ceph%E6%9E%B6%E6%9E%84%E3%80%8B/
https://www.jianshu.com/p/25163032f57f
http://www.51niux.com/?id=161