「Ceph – 简介」
Ceph
是一个即让人印象深刻又让人畏惧的开源存储产品。通过本文,用户能确定Ceph
是否满足自身的应用需求。在本文中,我们将深入研究Ceph
的起源,研究其功能和基础技术,并讨论一些通用的部署方案和优化与性能增强方案。同时本文也提供了一些故障场景以及对应的解决思路。
背景
Ceph
是一个开源的分布式存储解决方案,具有极大的灵活性和适应性。Ceph
项目最早起源于Sage
就读博士期间的论文(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat
及OpenStack
都可与Ceph
整合以支持虚拟机镜像的后端存储。
Ceph
在2014年被RedHat
收购后,一直由RedHat
负责维护。Ceph
的命名和UCSC
(Ceph
的诞生地)的吉祥物有关,这个吉祥物是 “Sammy
”,一个香蕉色的蛞蝓,就是头足类中无壳的软体动物。这些有多触角的头足类动物,是对一个分布式文件系统高度并行的形象比喻。自从2012年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 分布式核心组件」
集群文件系统最初始于1990年代末和2000年代初。Lustre
是最早利用可伸缩文件系统实现产品化的产品之一。多年来,出现了其他一些Lustre
衍生产品,包括GlusterFS
,GPFS
,XtreemFS
和OrangeFS
等。这些文件系统都集中于为文件系统实现符合POSIX
的挂载,并且缺乏通用的集成API
。
Ceph
的架构并不需要考虑到需要与POSIX
兼容的文件系统——这完全得益于云的时代。利用RADOS
,Ceph
可以扩展不受元数据约束限制的块设备。这极大地提高了存储性能,但是却使那些寻求基于Ceph
的大型文件系统挂载方法的人们望而却步。直到Ceph Jewel
(10.2.0
)版本发布为止,CephFS
已经是稳定且可靠的文件系统——允许部署POSIX
挂载的文件系统。
Ceph
支持块,对象和文件存储,并且具有横向扩展能力,这意味着多个Ceph
存储节点(服务器)共同提供了一个可快速处理上PB
数据(1PB = 1,000 TB = 1,000,000 GB
)的存储系统。利用作为基础的硬件组件,它还可以同时提高性能和容量。
Ceph
具有许多基本的企业存储功能,包括副本,纠错码,快照,自动精简配置,分层(在闪存和普通硬盘之间缓存数据的能力——即缓存)以及自我修复功能。为了做到这一点,Ceph
利用了下面将要探讨的几个组件。
从Ceph Nautilus
(v14.2.0
)开始,现在有五个主要的守护程序或服务,它们集成在一起以提供Ceph
服务的正常运行。这些是:
「ceph-mon」:
Monitor
确实提供了其名称所暗示的功能——监视群集的运行状况。该监视器还告诉OSD
在replication
期间将数据放置在何处,并保留主CRUSH Map
。「ceph-osd」:
OSD
是Ceph
的基础数据存储单元,它利用XFS
文件系统和物理磁盘来存储从客户端提供给它的块数据。「ceph-mds」:
MDS
守护程序提供了将Ceph
块数据转换为存储文件的POSIX
兼容挂载点的功能,就像您使用传统文件系统一样。「ceph-mgr」:
MGR
守护程序显示有关群集状态的监视和管理信息。「ceph-rgw」:
RGW
守护程序是一个HTTP API
守护程序,对象存储网关实际上是调用librados
的API
来实现数据的存储和读取。而该网关同时提供了兼容AWS S3
和OpenStack Swift
的对象存储访问接口(API
)。
从术语的角度来看,Ceph
需要了解一些重要的知识。
Ceph
基于CRUSH
算法构建, 并支持多种访问方法(文件,块,对象)。CRUSH
算法确定对象在OSD
上的位置,并且可以将这些相同的块拉出以进行访问请求。
Ceph
利用了可靠,自治,分布式的对象存储(或RADOS
),该对象存储由自我修复,自我管理的存储节点组成。前面讨论的OSD
守护程序是RADOS
群集的一部分。
放置组(PG
)的全称是placement group
,是用于放置object
的一个载体,所以群集中PG的数量决定了它的大小。pg
的创建是在创建ceph
存储池的时候指定的,同时跟指定的副本数也有关系,比如是3副本的则会有3个相同的pg
存在于3个不同的osd
上,pg
其实在osd
的存在形式就是一个目录。PG
可以由管理员设置,新版本中也可以根据集群使用情况自动缩放。
RBD
即RADOS Block Device
的简称,RBD
块存储是最稳定且最常用的存储类型。RBD
块设备类似磁盘可以被挂载。RBD
块设备具有快照、多副本、克隆和一致性等特性,数据以条带化的方式存储在Ceph
集群的多个OSD
中。可以在Ceph
中用于创建用于虚拟化的镜像块设备,例如KVM
和Xen
。通过利用与RADOS
兼容的API librados
,VM
的访问不是通过iSCSI
或NFS
,而是通过存储API
来实现的。
使用场景
正如我们已经描述的那样,Ceph
是一个非常灵活和一致的存储解决方案。对Ceph
存储对象的访问可以通过多种方式来完成,因此Ceph
具有其他类似产品所缺乏的大量生产用例。
可以将Ceph
部署为S3/Swift
对象存储的替代品。通过它的RADOS
网关,可以使用http GET
请求以及大量可用的Amazon S3 API
工具箱访问存储在Ceph
中的对象。
也可以通过librados API
或iSCSI/NFS
在包括VMWare
和其他专有虚拟化平台在内的虚拟化环境中直接使用Ceph
。
可以部署CephFS
为需要访问大型文件系统的操作系统提供POSIX
兼容的挂载点。
根据以上的这些场景,我们可以利用单个存储平台来满足各种计算和存储需求。
「潜在的部署方案」
常用的Ceph
部署工具主要有:ceph-deploy
,ceph-ansible
,基于kubernetns
的Rook
以及新版本基于容器的kubeadm
等。当然工具不仅仅是这些。每一种部署方案都有大量的生产实践。以下简单介绍以下这几种常用的部署方式:
「Ceph-deply」:该工具可用于简单、快速地部署 Ceph
集群,而无需涉及繁杂的手动配置。它在管理节点上通过 ssh
获取其它 Ceph
节点的访问权、通过 sudo
获取其上的管理权限、通过底层 Python
脚本自动化各节点上的 Ceph
安装进程。它简单到可以运行在工作站上,不需要服务器、数据库或任何其它的自动化工具。使用ceph-deploy
安装和拆除集群非常简单。然而它不是通用部署工具,是专为想快速安装、运行 Ceph
的人们设计的专用工具,这样的集群只包含必要的的初始配置选项,就没必要安装像 Chef
、 Puppet
或 Juju
这样的部署工具。
「Ceph-ansible」:用于部署Ceph
分布式系统的ansible playbook
,ceph-ansible
是安装和管理完整ceph
集群的最灵活的方法,当前大量的生产环境都会使用该安装方式。
「Rook」:Rook
是一个编排器,能够支持包括 Ceph
在内的多种存储方案。Rook
简化了 Ceph
在 Kubernetes
集群中的部署过程。Rook
是一个可以提供 Ceph
集群管理能力的 Operator
。Rook
使用 CRD
一个控制器来对 Ceph
之类的资源进行部署和管理。
「Cephadm」:较新的集群自动化部署工具,支持通过图形界面或者命令行界面添加节点,目前不建议用于生产环境。cephadm
的目标是提供一个功能齐全、健壮且维护良好的安装和管理层,可供不在Kubernetes
中运行Ceph
的任何环境使用。Cephadm
通过SSH
从manager
守护进程连接到主机来部署和管理Ceph
集群,以添加、删除或更新Ceph
守护进程容器。它不依赖于外部配置或编排工具,如Ansible