【Ceph专题】 Ceph架构详细分析



Ceph专题一 Ceph架构详细分析


 

支持原创,支持ICT架构师技术交流(微信号ICT_Architect)

分析和交流ICT行业最前沿技术,分享云计算、存储、服务器、数据中心、网络、软件定义和虚拟化等相关知识,旨在知识交流、开放共享和共同进步。



Ceph是呼声很高的开源分布式的SDS产品存储系统。同时提供对象存储、块存储和文件系统存储三种功能,满足不同应用需求。Ceph使用C++语言开发,遵循LGPL协议开源。Sage Weil(Ceph论文发表者)2011年创立了以Inktank公司主导Ceph的开发和社区维护。2014Redhat收购inktank公司,并发布Inktank Ceph企业版(ICE)软件,业务场景聚焦云、备份和归档,支持对象和块存储应用。从此出现Ceph开源社区版本和Redhat企业版。

 

Cehp的基础服务架构

Cehp的基础服务架构主要包括了ObjectStorage Device(OSD)MonitorMDS。基于此,Ceph提供了Librados原生对象基础库、Librbd块存储库、Librgw基于S3Swift兼容的对象库和Libceph文件系统库。

OSD(ObjectStorage Device)负责存储数据,处理数据复制、数据恢复、数据再均衡以及通过心跳机制监测其它OSD状况并报告给Ceph Monitors

Monitor负责监控集群状态,包括监控自身状态、集群OSD状态、Placement Group(存储组织和位置映射)状态、CRUSH状态(Controlled Replication Under Scalable Hashing,一种伪随机数据分布算法)。同时,Monitor还会记录它们的每一个历史状态改变版本信息,以确定集群该遵循哪个版本。

MDS负责文件系统的元数据存储和管理,也就是如前所说,块存储和对象存储服务是不需要这个模块的。MDS负责提供标准的POSIX文件访问接口。

搭建一台Ceph系统至少需要1CephMonitor2Ceph OSD逻辑角色,而Ceph Metadata server仅仅是运行CephFS时存储文件元数据。但在物理部署上,这些逻辑角色可以运行在同一台物理机上的。Ceph存储数据默认是2副本拷贝,所以不管是提供ObjectBlock还是Filesystem服务,最小的Ceph系统需要2OSD存储服务器。

 

Cehp的软件体系架构

1)基础存储系统RADOS

RADOSReliable, Autonomic,Distributed Object Store),这一层本身就是一个完整的对象存储系统,包括Cehp的基础服务(MDSOSDMonitor),所有存储在Ceph系统中的用户数据事实上最终都是由这一层来存储的。而Ceph的高可靠、高可扩展、高性能、高自动化等等特性本质上也是由这一层所提供的。因此,理解RADOS是理解Ceph的基础与关键。

无标题5.png

RADOS在物理形态上由大量的存储设备节点组成,每个节点拥有自己的硬件资源(CPU、内存、硬盘、网络),并运行着操作系统和文件系统。

 

2)基础库librados

这一层的功能是对RADOS进行抽象和封装,并向上层提供不同API,以便直接基于RADOS进行原生对象或上层对象、块和文件应用开发。特别要注意的是,RADOS是一个对象存储系统,因此,基于librados实现的API也只是针对对象存储功能的。

RADOS所提供的原生librados API包括CC++两种。Librados在部署上和基于其上开发的应用位于同一台机器。应用调用本机上的librados API,再由后者通过socketRADOS集群中的节点通信并完成各种操作。

 

3)高层存储应用接口

这一层包括了RADOS GWRADOS Gateway)、 RBDReliable Block Device)和Ceph FSCeph File System)三个部分,其作用是在librados库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口。

RADOSGW是一个提供与AmazonS3Swift兼容的RESTful APIgateway,以供相应的对象存储应用开发使用。RADOS GW提供的API抽象层次更高,但功能则不如librados强大。因此,开发者应针对自己的需求选择使用。

RBD则提供了一个标准的块设备接口,常用于在虚拟化的场景下为虚拟机创建volume。如前所述,Red Hat已经将RBD驱动集成在KVM/QEMU中,以提高虚拟机访问性能。

CephFS是一个POSIX兼容的分布式文件系统。目前还处在开发状态,因而Ceph官网并不推荐将其用于生产环境中。

 

4)服务器客户端层

这一层就是不同场景下对于Ceph各个应用接口的各种应用方式,例如基于librados直接开发的对象存储应用,基于RADOS GW开发的对象存储应用,基于RBD实现的云硬盘等等。

figure3.gif

CephClient是基于Fuse(User SpacE)VFS文件系统开发,兼容Posix接口标准。在Ceph存储系统中,Ceph Metadata Daemon 提供了元数据服务器,而Ceph ObjectStorage Daemon 提供了数据和元数据的实际存储。CephDFSBlockObject数据写入和读取,都需Client利用Crush算法(负责集群中的数据放置和检索的算法)完成存储位置计算和数据组装。

 

Ceph内部数据存储视图

 

Ceph存储系统中,Cehp的基础服务架构主要包括了Object Storage Device(OSD)MonitorMDS。提供了Librados原生对象基础库、Librbd块存储库、基于S3Swift兼容的Librgw对象库和Libceph文件系统库。搭建一台Ceph系统至少需要1CephMonitor2Ceph OSD,一个Cluster可逻辑上划分为多个Pool,一个 Pool由若干个逻辑 PG( Placement Group)组成,Pool内的副本数量也是可以设置的。

Ceph底层是对象系统,所以一个文件会被切分为多个Object,每个Object会被映射到一个PG,每个PG会映射到一组 OSD(Object Storage Device),其中第一个OSD是主,其余的是备,OSD间通过心跳来相互监控存活状态。引入PG概念后,OSD只和PG相关,不但简化了OSD的数据存储,而且实现了ObjectOSD的动态映射,OSD的添加和故障不影响Object的映射。

 

Ceph数据存储过程

Ceph存储系统中,数据存储分三个映射过程,首先要将用户要操作的file,映射为RADOS能够处理的object。就是简单的按照objectsizefile进行切分,相当于RAID中的条带化过程。接着把Object映射到PG,在file被映射为一个或多个object之后,就需要将每个object独立地映射到一个PG中去。第三次映射就是将作为object的逻辑组织单元的PG映射到数据的实际存储单元OSD

文件存入时,首先把File切分为RADOS层面的Object,每个Object一般为2MB4MB(大小可设置)。每个Object通过哈希算法映射到唯一的PG。每个PG通过Crush算法映射到实际存储单元OSDPGOSD间是多对多的映射关系。OSD在物理上可划分到多个故障域中,故障域可以跨机柜和服务器,通过策略配置使PG的不同副本位于不同的故障域中

 

Ceph数据分布算法

Ceph以私有Client方式对外提供服务,支持Linux用户态(Fuse)和内核态(VFS)方式,Clinet还实现数据切片,通过Crush算法定位对象位置,并进行数据的读写。但在测试中,通常在Ceph服务器端将Ceph配置成NFS服务的ExportFS,通过标准NFS接口导出目录。 CephFS 支持POSIXHDFSNFSCIFS服务接口,其中NFSCIFS通过外置网关实现(通过Clinet导出)

 

PG通过Crush算法映射到数据的实际存储单元OSD时,需求通过Crush MapCrushRulesCrush算法配合才能完成。

http://hi3ms-image.huawei.com/hi/showimage-15993901-49674-3e7f3a553f760f80dc398cc706354c64.jpg

 

ClusterMap用来记录全局系统状态记数据结构,由Crush MapOSD Map两部分组成。 Crush Map包含当前磁盘、服务器、机架的层级结构,OSD Map包含当前所有Pool的状态和所有OSD的状态。

CrushRules就是数据映射的策略,决定了每个数据对象有多少个副本,这些副本如何存储。 Crush算法是一种伪随机算法,通过权重决定数据存放(如跨机房、机架感知等),通常采用基于容量的权重。Crush算法支持副本和EC两种数据冗余方式,还提供了四种不同类型的Bucket(UniformListTreeStraw),大多数情况下的都采用Straw

   

 

OpenStack的兼容和支持

Ceph存储软件最常见的用途之一是作为OpenStack云存储后端,另一个用途是在 RADOS中存放和检索VM镜像(OpenStackGlance镜像服务)。目前以HPDellIntel等为代表的企业IT领导厂商和以MirantiseNovanceUnitedStack为代表的OpenStack社区新兴厂商,都将Ceph作为重要的乃至于首选的开源存储解决方案。

Ceph事实上是目前OpenStack生态系统中呼声最高的开源存储解决方案。Ceph的对象存储(Object Storage)可以对接网盘等应用业务;块设备存储(Block Device Storage)可以对接(IaaS),例如OpenStack, CloudStack, Zstack, Eucalyptus以及KVM虚拟化等主流的IaaS云平台软件,文件系统(Ceph FS)尚不成熟。

目前已经与QEMU虚机化(硬件虚拟化)集成,通过相关命令调用管理Ceph块存储服务(RBD)。支持通过对OpenStacklibvirtQEMU之间的配置,来实现对KVMXENLXCVirtualBOX等各种虚机镜像管理。

http://ceph.com/docs/master/_images/ditaa-e4a4957f90e4d8ebac2608e1544c34bf784cfdfb.png

支持通过libvirtCeph块存储服务(RBD)加入到OpenStack,已经完成与GlanceVM镜像管理)、Cinder(块存储)集成。通过Glance存储虚机镜像到Ceph RBD或者通过Cinder启动虚机。

Ceph对象(Object Gateway)目前支持Amazon S3OpenStack Swift,集成支持了OpenStackkeystone身份认证。

9000目前计划支持Openstack MalinaNAS接口,实现也Openstack进行对接。另外也支持AmazonS3OpenStack Swift,集成支持了OpenStackkeystone身份认证。由于目前9000还不支持SAN存储,所以无法实现与OpenStack Glance镜像集成。


温馨提示:
请搜索“ICT_Architect”“扫一扫”下面二维码关注公众号,获取更多精彩内容。

 


你可能感兴趣的:(openstack,ceph,sds)