Ceph是呼声很高的开源分布式的SDS产品存储系统。同时提供对象存储、块存储和文件系统存储三种功能,满足不同应用需求。Ceph使用C++语言开发,遵循LGPL协议开源。Sage Weil(Ceph论文发表者)于2011年创立了以Inktank公司主导Ceph的开发和社区维护。2014年Redhat收购inktank公司,并发布Inktank Ceph企业版(ICE)软件,业务场景聚焦云、备份和归档,支持对象和块存储应用。从此出现Ceph开源社区版本和Redhat企业版。
Cehp的基础服务架构主要包括了ObjectStorage Device(OSD),Monitor和MDS。基于此,Ceph提供了Librados原生对象基础库、Librbd块存储库、Librgw基于S3和Swift兼容的对象库和Libceph文件系统库。
OSD(ObjectStorage Device)负责存储数据,处理数据复制、数据恢复、数据再均衡以及通过心跳机制监测其它OSD状况并报告给Ceph Monitors。
Monitor负责监控集群状态,包括监控自身状态、集群OSD状态、Placement Group(存储组织和位置映射)状态、CRUSH状态(Controlled Replication Under Scalable Hashing,一种伪随机数据分布算法)。同时,Monitor还会记录它们的每一个历史状态改变版本信息,以确定集群该遵循哪个版本。
MDS负责文件系统的元数据存储和管理,也就是如前所说,块存储和对象存储服务是不需要这个模块的。MDS负责提供标准的POSIX文件访问接口。
搭建一台Ceph系统至少需要1个CephMonitor和2个Ceph OSD逻辑角色,而Ceph Metadata server仅仅是运行CephFS时存储文件元数据。但在物理部署上,这些逻辑角色可以运行在同一台物理机上的。Ceph存储数据默认是2副本拷贝,所以不管是提供Object、Block还是Filesystem服务,最小的Ceph系统需要2台OSD存储服务器。
RADOS(Reliable, Autonomic,Distributed Object Store),这一层本身就是一个完整的对象存储系统,包括Cehp的基础服务(MDS,OSD,Monitor),所有存储在Ceph系统中的用户数据事实上最终都是由这一层来存储的。而Ceph的高可靠、高可扩展、高性能、高自动化等等特性本质上也是由这一层所提供的。因此,理解RADOS是理解Ceph的基础与关键。
RADOS在物理形态上由大量的存储设备节点组成,每个节点拥有自己的硬件资源(CPU、内存、硬盘、网络),并运行着操作系统和文件系统。
这一层的功能是对RADOS进行抽象和封装,并向上层提供不同API,以便直接基于RADOS进行原生对象或上层对象、块和文件应用开发。特别要注意的是,RADOS是一个对象存储系统,因此,基于librados实现的API也只是针对对象存储功能的。
RADOS所提供的原生librados API包括C和C++两种。Librados在部署上和基于其上开发的应用位于同一台机器。应用调用本机上的librados API,再由后者通过socket与RADOS集群中的节点通信并完成各种操作。
这一层包括了RADOS GW(RADOS Gateway)、 RBD(Reliable Block Device)和Ceph FS(Ceph File System)三个部分,其作用是在librados库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口。
RADOSGW是一个提供与AmazonS3和Swift兼容的RESTful API的gateway,以供相应的对象存储应用开发使用。RADOS GW提供的API抽象层次更高,但功能则不如librados强大。因此,开发者应针对自己的需求选择使用。
RBD则提供了一个标准的块设备接口,常用于在虚拟化的场景下为虚拟机创建volume。如前所述,Red Hat已经将RBD驱动集成在KVM/QEMU中,以提高虚拟机访问性能。
CephFS是一个POSIX兼容的分布式文件系统。目前还处在开发状态,因而Ceph官网并不推荐将其用于生产环境中。
这一层就是不同场景下对于Ceph各个应用接口的各种应用方式,例如基于librados直接开发的对象存储应用,基于RADOS GW开发的对象存储应用,基于RBD实现的云硬盘等等。
CephClient是基于Fuse层(User SpacE)和VFS文件系统开发,兼容Posix接口标准。在Ceph存储系统中,Ceph Metadata Daemon 提供了元数据服务器,而Ceph ObjectStorage Daemon 提供了数据和元数据的实际存储。Ceph对DFS、Block和Object数据写入和读取,都需Client利用Crush算法(负责集群中的数据放置和检索的算法)完成存储位置计算和数据组装。
在Ceph存储系统中,Cehp的基础服务架构主要包括了Object Storage Device(OSD),Monitor和MDS。提供了Librados原生对象基础库、Librbd块存储库、基于S3 和Swift兼容的Librgw对象库和Libceph文件系统库。搭建一台Ceph系统至少需要1个CephMonitor和2个Ceph OSD,一个Cluster可逻辑上划分为多个Pool,一个 Pool由若干个逻辑 PG( Placement Group)组成,Pool内的副本数量也是可以设置的。
Ceph底层是对象系统,所以一个文件会被切分为多个Object,每个Object会被映射到一个PG,每个PG 会映射到一组 OSD(Object Storage Device),其中第一个OSD 是主,其余的是备,OSD间通过心跳来相互监控存活状态。引入PG概念后,OSD只和PG相关,不但简化了OSD的数据存储,而且实现了Object到OSD的动态映射,OSD的添加和故障不影响Object的映射。
在Ceph存储系统中,数据存储分三个映射过程,首先要将用户要操作的file,映射为RADOS能够处理的object。就是简单的按照object的size对file进行切分,相当于RAID中的条带化过程。接着把Object映射到PG,在file被映射为一个或多个object之后,就需要将每个object独立地映射到一个PG中去。第三次映射就是将作为object的逻辑组织单元的PG映射到数据的实际存储单元OSD。
文件存入时,首先把File切分为RADOS层面的Object,每个Object一般为2MB或4MB(大小可设置)。每个Object通过哈希算法映射到唯一的PG。每个PG通过Crush算法映射到实际存储单元OSD,PG和OSD间是多对多的映射关系。OSD在物理上可划分到多个故障域中,故障域可以跨机柜和服务器,通过策略配置使PG的不同副本位于不同的故障域中
Ceph以私有Client方式对外提供服务,支持Linux用户态(Fuse)和内核态(VFS)方式,Clinet还实现数据切片,通过Crush算法定位对象位置,并进行数据的读写。但在测试中,通常在Ceph服务器端将Ceph配置成NFS服务的ExportFS,通过标准NFS接口导出目录。 CephFS 支持POSIX、HDFS、NFS、CIFS服务接口,其中NFS和CIFS通过外置网关实现(通过Clinet导出)。
在PG通过Crush算法映射到数据的实际存储单元OSD时,需求通过Crush Map、CrushRules和Crush算法配合才能完成。
ClusterMap用来记录全局系统状态记数据结构,由Crush Map和OSD Map两部分组成。 Crush Map包含当前磁盘、服务器、机架的层级结构,OSD Map包含当前所有Pool的状态和所有OSD的状态。
CrushRules就是数据映射的策略,决定了每个数据对象有多少个副本,这些副本如何存储。 Crush算法是一种伪随机算法,通过权重决定数据存放(如跨机房、机架感知等),通常采用基于容量的权重。Crush算法支持副本和EC两种数据冗余方式,还提供了四种不同类型的Bucket(Uniform、List、Tree、Straw),大多数情况下的都采用Straw。
Ceph存储软件最常见的用途之一是作为OpenStack云存储后端,另一个用途是在 RADOS中存放和检索VM镜像(OpenStackGlance镜像服务)。目前以HP、Dell、Intel等为代表的企业IT领导厂商和以Mirantis、eNovance、UnitedStack为代表的OpenStack社区新兴厂商,都将Ceph作为重要的乃至于首选的开源存储解决方案。
Ceph事实上是目前OpenStack生态系统中呼声最高的开源存储解决方案。Ceph的对象存储(Object Storage)可以对接网盘等应用业务;块设备存储(Block Device Storage)可以对接(IaaS),例如OpenStack, CloudStack, Zstack, Eucalyptus以及KVM虚拟化等主流的IaaS云平台软件,文件系统(Ceph FS)尚不成熟。
目前已经与QEMU虚机化(硬件虚拟化)集成,通过相关命令调用管理Ceph块存储服务(RBD)。支持通过对OpenStacklibvirt和QEMU之间的配置,来实现对KVM、XEN、LXC、VirtualBOX等各种虚机镜像管理。
支持通过libvirt将Ceph块存储服务(RBD)加入到OpenStack,已经完成与Glance(VM镜像管理)、Cinder(块存储)集成。通过Glance存储虚机镜像到Ceph RBD或者通过Cinder启动虚机。
Ceph对象(Object Gateway)目前支持Amazon S3和OpenStack Swift,集成支持了OpenStack的keystone身份认证。
9000目前计划支持Openstack MalinaNAS接口,实现也Openstack进行对接。另外也支持AmazonS3和OpenStack Swift,集成支持了OpenStack的keystone身份认证。由于目前9000还不支持SAN存储,所以无法实现与OpenStack Glance镜像集成。
温馨提示:
请搜索“ICT_Architect”或“扫一扫”下面二维码关注公众号,获取更多精彩内容。