Ceph是一个即让人印象深刻又让人畏惧的开源存储产品。通过本文,用户能确定Ceph是否满足自身的应用需求。在本文中,我们将深入研究Ceph的起源,研究其功能和基础技术,并讨论一些通用的部署方案和优化与性能增强方案。同时本文也提供了一些故障场景以及对应的解决思路。
背景Ceph是一个开源的分布式存储解决方案,具有极大的灵活性和适应性。Ceph项目最早起源于Sage就读博士期间的论文(最早的成果于年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。
Ceph在年被RedHat收购后,一直由RedHat负责维护。Ceph的命名和UCSC(Ceph的诞生地)的吉祥物有关,这个吉祥物是“Sammy”,一个香蕉色的蛞蝓,就是头足类中无壳的软体动物。这些有多触角的头足类动物,是对一个分布式文件系统高度并行的形象比喻。自从年7月3日发布第一个版本的Argonaut以来,随着新技术的整合,Ceph经历了几次开发迭代。借助适用于Openstack和Proxmox的虚拟化平台,Ceph可支持直接将iSCSI存储呈现给虚拟化平台。同时Ceph也拥有功能强大的API。在世界上的各大公司都能发现Ceph的身影——提供块存储,文件存储,对象存储。
由于Ceph是目前唯一提供以下所有功能的存储解决方案,因此Ceph越来越受欢迎,并吸引了许多大型企业的极大兴趣:
「软件定义」:软件定义存储(SDS)是一种能将存储软件与硬件分隔开的存储架构。不同于传统的网络附加存储(NAS)或存储区域网络(SAN)系统,SDS一般都在行业标准系统或x86系统上运行,从而消除了软件对于专有硬件的依赖性。借助Ceph,还可以为诸如纠错码,副本,精简配置,快照和备份之类的功能提供策略管理。
「企业级」:Ceph旨在满足大型组织在可用性,兼容性,可靠性,可伸缩性,性能和安全性等方面的需求。它同时支持按比例伸缩,从而使其具有很高的灵活性,并且其可扩展性潜力几乎无限。
「统一存储」:Ceph提供了块+对象+文件存储,从而提供了更大的灵活性(大多数其他存储产品都是仅块,仅文件,仅对象或文件+块;ceph提供的三种混合存储是非常罕见)。
「开源」:开源实现技术的敏捷性,通常提供多种解决问题的方法。开源通常也更具成本效益,并且可以更轻松地使组织开始规模更小,规模更大。开源解决方案背后的许多意识形态孕育了一个相互协作且参与度高的专业社区,这些社区反应灵敏且相互支持。更不用说开源是未来的方向。Web,移动和云解决方案越来越多地建立在开源基础架构上。
「为什么选择Ceph?」「Ceph分布式核心组件」集群文件系统最初始于年代末和年代初。Lustre是最早利用可伸缩文件系统实现产品化的产品之一。多年来,出现了其他一些Lustre衍生产品,包括GlusterFS,GPFS,XtreemFS和OrangeFS等。这些文件系统都集中于为文件系统实现符合POSIX的挂载,并且缺乏通用的集成API。
Ceph的架构并不需要考虑到需要与POSIX兼容的文件系统——这完全得益于云的时代。利用RADOS,Ceph可以扩展不受元数据约束限制的块设备。这极大地提高了存储性能,但是却使那些寻求基于Ceph的大型文件系统挂载方法的人们望而却步。直到CephJewel(10.2.0)版本发布为止,CephFS已经是稳定且可靠的文件系统——允许部署POSIX挂载的文件系统。
Ceph支持块,对象和文件存储,并且具有横向扩展能力,这意味着多个Ceph存储节点(服务器)共同提供了一个可快速处理上PB数据(1PB=1,TB=1,,GB)的存储系统。利用作为基础的硬件组件,它还可以同时提高性能和容量。
Ceph具有许多基本的企业存储功能,包括副本,纠错码,快照,自动精简配置,分层(在闪存和普通硬盘之间缓存数据的能力——即缓存)以及自我修复功能。为了做到这一点,Ceph利用了下面将要探讨的几个组件。
从CephNautilus(v14.2.0)开始,现在有五个主要的守护程序或服务,它们集成在一起以提供Ceph服务的正常运行。这些是:
「ceph-mon」:Monitor确实提供了其名称所暗示的功能——监视群集的运行状况。该监视器还告诉OSD在replication期间将数据放置在何处,并保留主CRUSHMap。「ceph-osd」:OSD是Ceph的基础数据存储单元,它利用XFS文件系统和物理磁盘来存储从客户端提供给它的块数据。「ceph-mds」:MDS守护程序提供了将Ceph块数据转换为存储文件的POSIX兼容挂载点的功能,就像您使用传统文件系统一样。「ceph-mgr」:MGR守护程序显示有关群集状态的监视和管理信息。「ceph-rgw」:RGW守护程序是一个HTTPAPI守护程序,对象存储网关实际上是调用librados的API来实现数据的存储和读取。而该网关同时提供了兼容AWSS3和OpenStackSwift的对象存储访问接口(API)。从术语的角度来看,Ceph需要了解一些重要的知识。
Ceph基于CRUSH算法构建,并支持多种访问方法(文件,块,对象)。CRUSH算法确定对象在OSD上的位置,并且可以将这些相同的块拉出以进行访问请求。
Ceph利用了可靠,自治,分布式的对象存储(或RADOS),该对象存储由自我修复,自我管理的存储节点组成。前面讨论的OSD守护程序是RADOS群集的一部分。
放置组(PG)的全称是placementgroup,是用于放置object的一个载体,所以群集中PG的数量决定了它的大小。pg的创建是在创建ceph存储池的时候指定的,同时跟指定的副本数也有关系,比如是3副本的则会有3个相同的pg存在于3个不同的osd上,pg其实在osd的存在形式就是一个目录。PG可以由管理员设置,新版本中也可以根据集群使用情况自动缩放。
RBD即RADOSBlockDevice的简称,RBD块存储是最稳定且最常用的存储类型。RBD块设备类似磁盘可以被挂载。RBD块设备具有快照、多副本、克隆和一致性等特性,数据以条带化的方式存储在Ceph集群的多个OSD中。可以在Ceph中用于创建用于虚拟化的镜像块设备,例如KVM和Xen。通过利用与RADOS兼容的APIlibrados,VM的访问不是通过iSCSI或NFS,而是通过存储API来实现的。
使用场景正如我们已经描述的那样,Ceph是一个非常灵活和一致的存储解决方案。对Ceph存储对象的访问可以通过多种方式来完成,因此Ceph具有其他类似产品所缺乏的大量生产用例。
可以将Ceph部署为S3/Swift对象存储的替代品。通过它的RADOS网关,可以使用