Ceph分布式存储系统

Ceph是根据加州大学Santa Cruz分校的Sage Weil的博士论文所设计开发的新一代自由软件分布式文件系统,其设计目标是良好的可扩展性(PB级别以上)、高性能及高可靠性。Ceph其命名和UCSC(Ceph 的诞生地)的吉祥物有关,这个吉祥物是“Sammy”,一个香蕉色的蛞蝓,就是头足类中无壳的软体动物。这些有多触角的头足类动物,是对一个分布式文件系统高度并行的形象比喻。
其设计遵循了三个原则:数据与元数据的分离,动态的分布式的元数据管理,可靠统一的分布式对象存储机制。本文将从Ceph的架构出发,综合性的介绍Ceph分布式文件系统特色及其实现方式。
1、Ceph基本架构
Ceph是一个高可用、易于管理、开源的分布式存储系统,能够在一套系统中同时提供对象存储、块存储以及文件存储服务。其主要由Ceph存储系统的核心RADOS以及块存取接口、对象存取接口和文件系统接口组成,如图所示
这里写图片描述linux

Ceph的底层是RADOS,它的意思是“A reliable,autonomous, distributed object storage”。 RADOS做为Ceph分布式文件系统的一个子项目,是为了知足Ceph的需求而设计的,可是,其也能够单独做为一种分布式数据存储系统,给其余的有相似需求的分布式文件系统提供数据存储服务。Ceph文件系统, Ceph对象存储和Ceph块设备从RADOS的存储集群中读去和写入数据。
Ceph做为一个分布式存储系统,其对外提供的接口,决定了其通用性以及扩展性。如上图架构图中所示的那样,Ceph对外提供了丰富多样的服务接口,包括多种编程语言接口LIBRADOS(备注,上图来自Ceph中文社区,社区人员在翻译的过程当中将字母L遗失掉了)、对象存储接口(RADOSGW)、块存储接口(RBD)以及文件系统接口(Ceph FS)。其中LIBRADOS编程接口是其余各类客户端接口的基础,其余接口都是基于LIBRADOS来进行扩展实现的。web

1.1. RADOS
Ceph中RADOS(Reliable Autonomic Distributed Object Store)存储集群是全部其余客户端接口使用和部署的基础。RADOS由两个组件组成:
OSD: Object StorageDevice,提供存储资源。
Monitor:维护整个Ceph集群的全局状态。
这里写图片描述算法

典型的RADOS部署架构由少许的Monitor监控器以及大量的OSD存储设备组成,它可以在动态变化的基于异质结构的存储设备集群之上提供一种稳定的、可扩展的、高性能的单一逻辑对象存储接口。
RADOS系统的架构如图所示:
这里写图片描述编程

咱们看到,RADOS不是某种组件,而是由OSD(Object Storage Device)集群和Monitor集群组成。一般,一个RADOS系统中,OSD集群是由大量的智能化的OSD节点组成;Monitor集群是由少许的Monitor节点组成。OSD集群负责存储全部对象的数据。Monitors集群负责管理Ceph集群中全部成员、关系、属性以及数据分发等信息。服务器

1.2. Ceph客户端接口(Clients)
咱们将Ceph架构中除了底层基础RADOS之上的LIBRADOS、RADOSGW、RBD以及Ceph FS统一称为Ceph客户端接口。而LIBRADOS又是Ceph其它如RADOSGW、RBD以及Ceph FS的基础。简而言之就是RADOSGW、RBD以及Ceph FS根据LIBRADOS提供的多编程语言接口开发。因此他们之间是一个阶梯级的关系。
1.2.1. RADOSGW
RADOSGW(RADOS Gmeway),又叫Ceph对象存储网关,是一个底层基于librados向客户端提供RESTful接口的对象存储接口。目前Ceph支持两种API接口:
(1) S3.compatible:S3兼容的接口,提供与Amazon S3大部分RESTfuI API接口兼容的API接口。
(2) Swift.compatible:提供与OpenStack Swift大部分接口兼容的API接口。Ceph的对象存储使用网关守护进程(radosgw), radosgw结构图如图所示:
这里写图片描述网络

在实际的Ceph集群中,radosgw是一个监听RESTfulAPI访问的后台进程,s3 API和Swift APl使用同一个命名空间,即共享同一个命名空间;因此,你能够用其中一个接口写入数据而又用另一个接口读出数据。
1.2.2. RBD
一个数据块是一个字节序列(例如,一个512字节的数据块)。基于数据块存储接口最多见的介质,如硬盘,光盘,软盘,甚至是传统的9磁道的磁带的方式来存储数据。块设备接口的普及使得虚拟块设备成为构建像Ceph海量数据存储系统理想选择。
在一个Ceph的集群中, Ceph的块设备支持自动精简配置,调整大小和存储数据。Ceph的块设备能够充分利用 RADOS功能,实现如快照,复制和数据一致性。Ceph的RADOS块设备(即RBD)经过RADOS协议与内核模块或librbd的库进行交互。。RBD的结构如图所示:
这里写图片描述架构

在Ceph中,若是客户端要想使用存储集群服务提供的块存储,必需要先安装相应的Linux内核模块Kernel Module,或者使用librbd编程接口。
1.2.3. Ceph FS
Ceph文件系统(CEPH FS)是一个POSIX兼容的文件系统,使用Ceph的存储集群来存储其数据。Ceph的文件系统使用相同的Ceph的存储集群系统好比Ceph的块设备,Ceph的S3和SwiftAPI对象存储,或本机绑定(librados)。CEPH FS的结构图以下所示:
这里写图片描述并发

CEPH FS是一个符合POSIX标准的文件系统接口,同时支持用户空间文件系统FUSE。在CEPH FS中,与对象存储接口与块存储接口最大的不一样就是在集群中增长了文件系统元数据服务节点MDS(Ceph Metadata Server)。MDS也支持多台机器分布式的部署,以实现系统的高可用性。文件系统客户端须要安装对应的Linux内核模块Ceph FS KernelObject或者Ceph FS FUSE组件。负载均衡

2、Ceph数据存储
2.1. 数据存储过程
Ceph存储集群从客户端接收文件,每一个文件都会被客户端切分红一个或多个对象,而后将这些对象进行分组,再根据必定的策略存储到集群的OSD节点中,其存储过程如图所示:
这里写图片描述编程语言

图中,对象的分发须要通过两个阶段的计算,才能获得存储该对象的OSD,而后将对象存储到OSD中对应的位置。
(1) 对象到PG的映射。PG(PlaccmentGroup)是对象的逻辑集合。PG是系统向OSD节点分发数据的基本单位,相同PG里的对象将被分发到相同的OSD节点中(一个主OSD节点多个备份OSD节点)。对象的PG是由对象ID号经过Hash算法,结合其余一些修正参数获得的。
(2) PG到相应的OSD的映射,RADOS系统利用相应的哈希算法根据系统当前的状态以及PG的ID号,将各个PG分发到OSD集群中。OSD集群是根据物理节点的容错区域(好比机架、机房等)来进行划分的。
Ceph中的OSD节点将全部的对象存储在一个没有分层和目录的统一的命名空问中。每一个对象都包含一个ID号、若干二进制数据以及相应的元数据。
ID号在整个存储集群中是惟一的;元数据标识了所存储数据的属性。一个对象在OSD节点中的存储方式大体如图所示。
这里写图片描述

而对存储数据的语义解释彻底交给相应的客户端来完成,好比,Ceph FS客户端将文件元数据(好比全部者、建立日期、修改日期等)做为对象属性存储在Ceph中。
2.2. CRUSH算法
Ceph做为一个高可用、高性能的对象存储系统,其数据读取及写入方式是保证其高可用性及高性能的重要手段。对于已知的数据对象,Ccph经过使用CRUSH(ControlledReplication Under Scalable Hashing)算法计算出其在Ceph集群中的位置,而后直接与对应的OSD设备进行交互,进行数据读取或者写入。
例如其写入数据的其主要过程如图所示。
这里写图片描述

首先,客户端获取Ceph存储系统的状态信息Cluster Map,而后根据状态信息以及将要写入的Pool的CRUSH相关信息,获取到数据将要写入的OSD,最后
OSD将数据写入到其中相应的存储位置。其中相关概念的解释以下:
(1) 集群地图(Cluster Map):Ceph依赖于客户端以及OSD进程中保存有整个集群相关的拓扑信息,来实现集群的管理和数据的读写。整个集群相关的拓扑信息就称之为“Cluster Map”。Cluster Map主要保存Monitor集群、OSD集群、MDS集群等相关的拓扑结构信息以及状态信息。
(2) 存储池(P001):是对Ceph集群进行的逻辑划分,主要设置其中存储对象的权限、备份数目、PG数以及CRUSH规则等属性。
在传统的存储系统中,要查找数据一般是依赖于查找系统的的文件索引表找到对应的数据在磁盘中的位置。而在Ceph对象存储系统中,客户端与OSD节点都使用CRUSH算法来高效的计算所存储数据的相关信息。相对于传统的方式,CRUSH提供了一种更好的数据管理机制,它可以将数据管理的大部分工做都分配给客户端和OSD节点,这样为集群的扩大和存储容量的动态扩展带来了很大的方便。CRUSH是一种伪随机数据分布算法,它可以在具备层级结构的存储集群中有效的分发对象副本。
CRUSH算法是根据集群中存储设备的权重来进行数据分发的,数据在各个OSD设备上近似均匀几率分布。CRUSH中,数据在存储设备上的分布是根据一个层次化的集群地图(Cluster Map)来决定的。集群地图是由可用的存储资源以及由这些存储资源构建的集群的逻辑单元组成。好比一个Ceph存储集群的集群地图的结构多是一排排大型的机柜,每一个机柜中包含多个机架,每一个机架中放置着存储设备。数据分发策略是依照数据的存放规则(placement rules)进行定义的,存放规则是指数据在备份以及存放时应该遵循的相关约定,好比约定一个对象的三个副本应该存放在三个不一样的物理机架上。
给定一个值为x的整数,CRUSH将根据相应的策略进行哈希计算输出一个
有序的包含n个存储目标的序列:
CRUSH(x)=(osd1,osd2,osd3osdn)
CRUSH利用健壮的哈希函数,其获得的结果依赖于集群地图Cluster Map、存放规贝则(placementmles)和输入x。而且CRUSH是一个伪随机算法,两个类似的输入获得的结果是没有明显的相关性的。这样就能确保Ceph中数据分布是随机均匀的。
2.3. 数据一致性
Ceph中,为了保持数据的一致性,在PG内部一般会进行对象的净化过程(scrubobjects)。数据净化一般天天进行一次(一般在数据I/O量不大,进行系统维护时进行)。OSD设备还可以经过进行数据对象bit-for-bit的对比进行深度的数据净化,用以找到普通数据净化中不易察觉的问题(好比磁盘扇区损坏等)。经过数据维护和净化,为数据的一致性提供了保障。

3、扩展性和高可用性
在传统的分布式系统中,客户端一般与一个中央节点进行交互,这样一般存在着单点故障问题,并且不利于系统的扩展。Ceph中客户端是直接与OSD节点进行交互,而不须要经过中心节点。对同一个对象,Ceph一般会在不一样的OSD节点上建立多个备份,这样就保证了数据可靠性和高可用性。Ceph对元数据服务器也采用高可用的集群管理,这样也提升了系统元数据的的高可用性。Ceph的良好的高可用性和扩展性是系统设计的核心,这其中用到了不少精巧的设计和算法,下面就对实现Ceph的一些关键的实现技术进行介绍。
3.1. 高可用性的Monitor集群
在Ceph的客户端读或者写数据以前,他们必须先经过Ceph Monitor来获取最新的Cluster Map的副本。若是只有一个Monitor节点,Ceph存储集群也能够正常工做,可是这样会有单点的风险(若是这一台Monitor节点宕机了,整个Ceph
集群就没法正常工做)。Ceph中支持多台Monitor节点组成高可用的集群来提升整个Ceph系统的高可用性。Ceph中经过Paxos算法来保持Monitor集群中各个节点的状态一致性。
3.2. 高可用性的MDS集群
在经过Ceph FS接口使用Ceph集群时,Ceph集群中须要部署MDS(Metadata Server)进程,一般也是使用集群的方式进行部署。MDS集群的主要做用是将全部的文件系统元数据(目录、文件拥有者、访问权限等)存放在高可用的内存中。这样,客户端简单的文件操做(ls,cd等)将由MDS集群快速的响应,而不用消耗OSD设备的I/O,实现了元数据与数据的分离。为Ceph FS文件系统接口将能提供了性能上的保证。
Ccph FS旨在提供POSIX兼容的文件系统接口,依赖于MDS中运行的ceph-mds进程,该进程不只可以做为一个单一的进程运行,还能够分布式的运行在多个服务器上,实现了高可用性和扩展性。
(1) 高可用性:一般在Ceph集群中有多个ceph-mds进程在运行。当一个Ceph-mds出现运行故障时,备用的其余的ceph-mds可以马上接替失效的ceph-mds的工做。这个过程主要依赖于Ceph中的日志机制而且经过高可用的Monitor进程来完成相关的恢复工做。
(2) 扩展性:Ceph集群中能够分布式的部署多个ceph-mds进程实例,他们共同完成Ceph文件系统相关的工做,而且可以动态的实现负载均衡。
3.3. 超大规模智能守护(OSD)
在许多传统的集群架构中,每每设立一个中心节点来掌控整个集群的所有元数据信息,这样不只会由于单点问题对系统的高可用性形成影响,并且中心节点的性能也会成为系统横向扩展的瓶颈。在Ceph就没有这样的瓶颈,在Ceph中,每一个Ceph的客户端和OSD节点都保存有整个系统相关的拓扑信息。这样,客户端就能直接和存储数据的OSD节点进行交互,OSD节点相互之间也能直接进行交互。Ceph中去中心节点的架构可以带来如下一些好处:
(1) OSD节点能直接为客户端提供服务:咱们知道,任何网络设备都有一个并发链接的上限。中心节点结构的分布式集群中,中心节点每每是整个系统性能的瓶颈。Ceph中客户端能与存放数据的OSD节点直接通讯,而不用通过任何的中心节点,这样整个系统不只没有单点问题,并且性能就获得了很大的提高。
(2) OSD节点参与系统的维护:一般一个OSD节点加入到Ceph存储集群中,要向集群中的Monitor节点汇报本身的状态。若是OSD节点宕机,则须要系统能自动检测出来。这一般是由Monitor节点周期性的对各个OSD节点中的相关服务进行检测来实现。若是Monitor节点检测的周期间隔过短会影响系统的性能;而若是检测周期间隔太长,则会使整个系统有较长的时间处于不一致的状态。Ceph中容许OSD节点对相邻的OSD节点的状态进行检测,若是相邻的节点有状态变化,OSD节点则会主动向整个集群进行汇报,同时集群中相关的Cluster Map获得更新。这样大大减轻了Monitor节点的压力。系统的扩展性和高可用性获得很大的提高。
(3) OSD节点按期的数据清洁:数据清洁是指,一个OSD节点中存储的对象与另一个存储该对象副本的OSD节点之间进行对象的元数据对比,依此来找出文件系统相关的错误。Ceph中OSD节点可以自动的进行数据清洁(一般是一天一次)。除了普通的数据清洁,Ceph中OSD节点还能够经过对相同对象不一样副本中的数据进行按位(bit-for-bit)的深度数据清洁(一般一周一次)。这种数据清洁机制对系统的数据一致性有很大的帮助。
(4) 数据智能备份:和Ceph客户端同样,Ceph OSD节点也使用CRUSH算法。可是和客户端使用CRUSH算法来查找数据不一样,Ceph OSD节点使用该算法来计算对象的备份副本应该被存储在哪一个位置。数据智能备份的大体流程如图所示:
这里写图片描述

3.4. 智能负载均衡
当在Ceph集群中增长或减小OSD设备时,集群会执行负载再均衡的过程(rebalancing)。首先,集群地图(Cluster Map)会获得更新,PG ID以及OSD集群相关的信息都会获得更新。以下图,简单展现了增长OSD存储设备时数据再均衡的大体过程。其中,一些PG从其原来所处的OSD存储设备迁移到了新的OSD存储设备。在数据再均衡过程当中,CRUSH保持稳定,有许多的PG仍是依然保留其原有的配置。而且因为进行了数据的迁出,原有OSD设备中的剩余容量也会相应的有所增长。整个数据再均衡过程也是利用的CRUSH算法,数据依然是均衡的分布在新的OSD集群中。
这里写图片描述

4、小结
在本文中,咱们介绍了Ceph分布式文件系统的基本架构、工做机制及原理。而且从架构和原理的基础上论述了其优良的特性。综合看来,Ceph分布式文件系统有以下的特色:
(1) Ceph的核心RADOS一般是由少许的负责集群管理的Monitor进程和大量的负责数据存储的OSD进程构成,采用无中心节点的分布式架构,对数据进行分块多份存储。具备良好的扩展性和高可用性。
(1) Ceph分布式文件系统提供了多种客户端,包括对象存储接口、块存储接口以及文件系统接口,具备普遍的适用性,而且客户端与存储数据的OSD设备直接进行数据交互,大大提升了数据的存取性能。
(2) Ceph做为分布式文件系统,其可以在维护 POSIX 兼容性的同时加入了复制和容错功能。从2010 年 3 月底,以及能够在Linux 内核(从2.6.34版开始)中找到 Ceph 的身影,做为Linux的文件系统备选之一,Ceph.ko已经集成入Linux内核之中。虽然目前Ceph 可能还不适用于生产环境,但它对测试目的仍是很是有用的。Ceph 不只仅是一个文件系统,仍是一个有企业级功能的对象存储生态环境。如今,Ceph已经被集成在主线 Linux 内核中,但只是被标识为实验性的。在这种状态下的文件系统对测试是有用的,可是对生产环境没有作好准备。可是考虑到Ceph 加入到 Linux 内核的行列,不久的未来,它应该就能用于解决海量存储的须要了。

原文
http://www.linuxidc.com/Linux/2016-04/130026.htm

在 CentOS 7.1 上安装分布式存储系统 Ceph http://www.linuxidc.com/Linux/2015-08/120990.htm
Ceph环境配置文档 PDF http://www.linuxidc.com/Linux/2013-05/85212.htm
CentOS 6.3上部署Ceph http://www.linuxidc.com/Linux/2013-05/85213.htm
Ceph的安装过程 http://www.linuxidc.com/Linux/2013-05/85210.htm
HOWTO Install Ceph On FC12, FC上安装Ceph分布式文件系统 http://www.linuxidc.com/Linux/2013-05/85209.htm
Ceph 文件系统安装 http://www.linuxidc.com/Linux/2013-05/85208.htm
CentOS 6.2 64位上安装Ceph 0.47.2 http://www.linuxidc.com/Linux/2013-05/85206.htm
Ubuntu 12.04 Ceph分布式文件系统 http://www.linuxidc.com/Linux/2013-04/82588.htm
Fedora 14上安装 Ceph 0.24 http://www.linuxidc.com/Linux/2011-01/31580.htm
Ceph 的详细介绍:请点这里
Ceph 的下载地址:请点这里
本文永久更新连接地址:http://www.linuxidc.com/Linux/2016-04/130026.htm