ceph概述
1. 什么是Ceph?
Ceph的官方网站Ceph.com上用如下这句话简明扼要地定义了Ceph:
“Ceph is a unified, distributed storage system designed for excellent performance, reliability and scalability.”
Ceph是一种分布式存储系统,所谓分布式,指的是Ceph可以部署在多台服务器上,通过多台服务器并行处理来对外提供高性能的读写块。同时Ceph除了能提供块存储,还可以提供文件存储、对象存储。
2.Ceph的优势
实际上Ceph不是一个才出现的开源项目,而是走过了 7年的路程,那么Ceph有什么样的优势呢?
- Ceph的优势在于它的设计思想:无需查表,算算就好。也就是说它可以充分利用服务器的计算能力,消除了对单一中心节点的依赖,可以实现真正的无中心结构
这样Ceph的可靠性和可扩展性都很强,而且客户端访问延迟也比较少;其他特点如:统一存储能力、性能、自动化的维护 - Ceph在OpenStack开源社区中备受重视。
OpenStack是现在最为流行的开源云操作系统,目前Ceph已经成为OpenStack中呼声最高的开源存储方案之一。
- 高性能
a. 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
c. 能够支持上千个存储节点的规模,支持TB到PB级的数据。 - 高可用性
a. 副本数可以灵活控制。
b. 支持故障域分隔,数据强一致性。
c. 多种故障场景自动进行修复自愈。
d. 没有单点故障,自动管理。 - 高可扩展性
a. 去中心化。
b. 扩展灵活。
c. 随着节点增加而线性增长。 - 特性丰富
a. 支持三种存储接口:块存储、文件存储、对象存储。
b. 支持自定义接口,支持多种语言驱动。
3.Ceph的产生和发展
一般来说开源项目的来源主要有两个,一个是从学校里面的一些课题,一个是企业里面的大牛对产品进行开源。Ceph就是典型的学院派,它起源于Sage Weil博士期间的课题,使用C++开发。
2011年Sage创建了Inktank公司以主导Ceph的开发和社区维护。
4.Ceph的设计思想
4.1Ceph的应用场景
要理解Ceph的设计思想,我们首先应该研究这个东西的应用场景,因为它的应用场景关系到它为什么这么设计。
Ceph最初的目标场景是大规模、分布式存储系统,Ceph起源于04年,那个时候CPU还是单核,硬盘容量只有几十GB,所以当时的想法是至少能承载PB级别的数据。
而Ceph与传统的存储不太一样的地方在于,它的眼光是动态的
- 首先是存储规模是会变的。也就是可以根据业务的规模扩展存储的容量。
- 存储的设备会变。我们使用的不是高可靠性的小机,而是可能发生故障的x86服务器,所以极有可能某个节点发生故障,那么需要在软件层面进行保障。
- 存储数据也会变。也就是,需要考虑到存储的数据可能被增删读写,而不是一层不变的。
这就是Ceph的目标场景,它希望能应对存储容量会变,同时可以对数据进行快速的增删读写的场景,而且底层的硬件主要使用廉价的X86服务器,使用上层软件来保证可靠性。
针对这种场景,Ceph应具有
- 高可靠性:
首先存储在里面的数据不会丢失,同时数据在写入的时候,需要保证原子性。 - 另外因为数据会经常迁移,而且故障了以后会有恢复的过程,我们希望Ceph能自动完成这些工作,而不需要人为参与。
- 高扩展性,就是希望节点数增加了,数据的访问带宽也线性增加,不能是节点增加了很多,性能增加不明显
4.2Ceph的设计思路
那么Ceph要怎么样实现高可靠、高扩展,还要同时保证自动化呢?
之前已经概括过,Ceph的主要思路是
- 充分发生节点的计算能力
也就是用算来代替找,这就有对象存储的思想了。 - 去中心化。
我们知道分布式架构一般可以分为有中心的非对称架构和无中心对称架构两种。
非对称架构有Master和Slave之分,Master一般存放了数据块与实际节点的映射关系,所以客户端会先向Master查找数据块存放的位置, 然后再访问Slave。
这样的好处是简单,缺点是Master节点会出现单点故障,而且也会成为性能瓶颈。
而对称节点中每个节点的地位相同,都保存了全局的映射关系,所以它们会花大量的功夫来进行映射关系的同步,不利于扩展。Ceph则使用了更创新的方法来解决这个问题。下面我们来看看它使用了什么方法?
对于一个分布式系统,它最关键的要解决两个问题:
- “写的问题”,也就是把数据写到什么地方。
写的方法合不合理,要看最终的数据分布是否均匀,这又会进一步影响到节点的访问速度等 - “读的问题”,应该从哪里去读。
因为读的概率远大于写,所以能否高效准确的找到之前存放的数据在哪里,也是存储的系统应该考虑的非常重要的问题。
之前我们说过对于对称结构的分布式系统,它会引入专门的节点, 在里面存放数据块与节点映射关系,客户端需要先从这个节点上获取实际的位置再进行后续的操作。
而Ceph的创新在于,不再使用查表的寻址方式,而是使用计算的方式。也就是一个客户端只需要使用少量的本地元数据,就可以计算出存储位置。这就是Ceph最关键的地方。