[00]ceph介绍


1.前言 Ceph是一个 PB 级分布式文件系统。提供块存储,文件存储,对象存储。

Ceph 最初是一项关于存储系统的 PhD 研究项目,由 Sage Weil 在 University of California, Santa Cruz(UCSC)实施。但是到了 2010 年 3 月底,您可以在主线 Linux 内核(从 2.6.34 版开始)中找到 Ceph 的身影。

之前Inktank公司掌控Ceph的开发,但Ceph是开源的,遵循LGPL协议。Inktank还积极整合Ceph和其他云计算和大数据平台,目前Ceph支持OpenStack、CloudStack、OpenNebula、Hadoop等。

但Inktank公司于2014年下半年被redhat以1.4亿美元收购。

当前Ceph的最新稳定版本0.94,它的objects storage和block storage已经足够稳定,而且Ceph社区还在继续开发新功能,包括跨机房部署和容灾、支持Erasure encoding等。Ceph具有完善的社区设施和发布流程(每三个月发布一个稳定版本) 。

目前Ceph有很多用户案列,这是2013.03月Inktank公司在邮件列表中做的调查,共收到了81份有效反馈。从调查中可以看到有26%的用户在生产环境中使用Ceph,有37%的用户在私有云中使用Ceph,还有有16%的用户在公有云中使用Ceph。

国内使用也有很多公司私有云使用ceph做对象,块存储,例如小米,完美世界等公司。

2.架构 2.1组件

Ceph的底层是RADOS,它的意思是“A reliable, autonomous, distributed object storage”。 RADOS由两个组件组成:

OSD: Object Storage Device,提供存储资源。

Monitor:维护整个Ceph集群的全局状态。 RADOS具有很强的扩展性和可编程性,Ceph基于RADOS开发了 Object Storage、Block Storage、FileSystem。Ceph另外两个组件是:

MDS:用于保存CephFS的元数据。

RADOS Gateway:对外提供REST接口,兼容S3和Swift的API。 2.2数据映射 Ceph的命名空间是 (Pool, Object),每个Object都会映射到一组OSD中(由这组OSD保存这个Object):

(Pool, Object) → (Pool, PG) → OSD set → Disk

Ceph中Pools的属性有:

Object的副本数 Placement Groups的数量 所使用的CRUSH Ruleset 在Ceph中,Object先映射到PG(Placement Group),再由PG映射到OSD set。每个Pool有多个PG,每个Object通过计算hash值并取模得到它所对应的PG。PG再映射到一组OSD(OSD的个数由Pool 的副本数决定),第一个OSD是Primary,剩下的都是Replicas。

数据映射(Data Placement)的方式决定了存储系统的性能和扩展性。(Pool, PG) → OSD set 的映射由四个因素决定:

CRUSH算法:一种伪随机算法。 OSD MAP:包含当前所有Pool的状态和所有OSD的状态。 CRUSH MAP:包含当前磁盘、服务器、机架的层级结构。 CRUSH Rules:数据映射的策略。这些策略可以灵活的设置object存放的区域。比如可以指定 pool1中所有objecst放置在机架1上,所有objects的第1个副本放置在机架1上的服务器A上,第2个副本分布在机架1上的服务器B上。 pool2中所有的object分布在机架2、3、4上,所有Object的第1个副本分布在机架2的服务器上,第2个副本分布在机架3的服 器上,第3个副本分布在机架4的服务器上。

Client从Monitors中得到CRUSH MAP、OSD MAP、CRUSH Ruleset,然后使用CRUSH算法计算出Object所在的OSD set。所以Ceph不需要Name服务器,Client直接和OSD进行通信。

这种数据映射的优点是:

把Object分成组,这降低了需要追踪和处理metadata的数量(在全局的层面上,我们不需要追踪和处理每个object的metadata和placement,只需要管理PG的metadata就可以了。PG的数量级远远低于object的数量级)。 增加PG的数量可以均衡每个OSD的负载,提高并行度。 分隔故障域,提高数据的可靠性。

2.3优点 强一致性 容错性 高性能 高可靠性 高扩展性 强一致性

–Ceph的读写操作采用Primary-Replica模型,Client只向Object所对应OSD set的Primary发起读写请求,这保证了数据的强一致性。 –由于每个Object都只有一个Primary OSD,因此对Object的更新都是顺序的,不存在同步问题。 –当Primary收到Object的写请求时,它负责把数据发送给其他Replicas,只要这个数据被保存在所有的OSD上时,Primary才应答Object的写请求,这保证了副本的一致性。

容错性

–在分布式系统中,常见的故障有网络中断、掉电、服务器宕机、硬盘故障等,Ceph能够容忍这些故障,并进行自动修复,保证数据的可靠性和系统可用性。 –Mon是Ceph管家,维护着Ceph的全局状态。Mon的功能和zookeeper类似,它们使用Quorum和Paxos算法去建立全局状态的共识。 高性能

–Client和Server直接通信,不需要代理和转发 –多个OSD带来的高并发度。objects是分布在所有OSD上。 –负载均衡。每个OSD都有权重值(现在以容量为权重)。 –client不需要负责副本的复制(由primary负责),这降低了client的网络消耗。 高可靠性

数据多副本。可配置的per-pool副本策略和故障域布局。 支持强一致性。没有单点故障。可以忍受许多种故障场景;防止脑裂;单个组件可以滚动升级并在线替换。 所有故障的检测和自动恢复。恢复不需要人工介入,在恢复期间,可以保持正常的数据访问。 并行恢复。并行的恢复机制极大的降低了数据恢复时间,提高数据的可靠性。 高拓展性

高度并行。没有单个中心控制组件。所有负载都能动态的划分到各个服务器上。把更多的功能放到OSD上,让OSD更智能。 自管理。容易扩展、升级、替换。当组件发生故障时,自动进行数据的重新复制。当组件发生变化时(添加/删除),自动进行数据的重分布。