Ceph Introduction

Ceph使用5个不同类别的守护进程:

  1. Clushter monitors (ceph-mon)

    保持跟踪活动及失效的节点,集群配置,数据放置信息以及全局集群状态

  2. Object storage devices (ceph-osd)

    直接访问日志磁盘系统 (BlueStore)

  3. Metadata servers (ceph-mds)

    缓存及代理访问Ceph文件系统上的inodes和目录

  4. HTTP gateways (ceph-rgw)

    将对象存储层公开为与Amazon S3或OpenStack Swift api兼容的接口

  5. Managers (ceph-mgr)

    执行集群监视、记账和维护任务,以及提供与外部监视系统和管理的接口(例如: balancerdashboardPrometheusZabbix plugin)

所有以上进程都是完全分布式的,可以在同一组的服务器上运行。有不同需求的客户端可以直接与它们中的不同子集直接交互。

Ceph通过数据条带化将单个文件存储在多个节点上以实现更高的吞吐率,类似于RAID0将一个文件按顺序块会依次写入阵列中的不同磁盘驱动器。支持自适应负载平衡,将经常访问的对象复制到更多的节点。

自2017年9月起,BlueStore就是在生产环境中默认和推荐的存储类型,作为Ceph自己的存储实现提供了比FileStore后端更优秀的延时及可配置性,并避免了基于文件系统的存储涉及额外处理和缓存层的缺点。FileStore后端仍然被认为是有用和非常稳定的;XFS过去是生产环境推荐的底层文件系统类型,而对于非生产环境则推荐使用Btrfs。ext4文件系统因为会限制RADOS对象的最大长度而不建议使用。即使使用BlueStore, XFS也只用于一个小的元数据分区。

Object storage

Ceph实现了分布式的对象存储——BlueStore。Ceph的软件库为客户端应用程序提供了对可靠的自主分布式对象存储(RADOS:reliable autonomic distributed object store)基于对象存储系统的直接访问,也为Ceph的一些功能提供了基础,包括RADOS Block Device (RBD), RADOS Gateway, 以及 Ceph File System。

“librados”软件库提供了C、C++、Java、PHP和Python的访问接口。RADOS Gateway将对象存储公开为RESTful形式的接口,可以同时作为原生的Amazon S3和OpenStack Swift的API接口。

Block storage

Ceph的对象存储系统允许用户将Ceph作为一个精简分配块设备(thin-provisioned block device)挂载。当应用程序通过Ceph将数据写入块设备时,Ceph会自动的对数据条带化并复制写入到集群中。Ceph的RADOS Block Device(RBD)也集成了基于内核的虚拟机(KVM)。

Ceph RBD接口和Ceph对象存储系统一样提供了librados接口和CephFS文件系统,它将块设备映像(images)存储为对象。因为RBD是基于librados构建的,所以RBD继承了librados的能力,包括只读快照以及恢复到快照。通过将映像(images)条带化到集群,Ceph提升了对大块设备映像(images)的读访问性能。

块设备可以被虚拟化,在Apache CloudStack、OpenStack、OpenNebula、Ganeti和Proxmox虚拟环境等虚拟化平台上为虚拟机提供块存储。

Ceph的文件系统(CephFS)运行在提供对象存储和块设备接口的同一对象存储系统之上。Ceph元数据服务器集群提供了一个服务,该服务将文件系统的目录和文件名映射到存储在RADOS集群中的对象。元数据服务器集群可以扩展或收缩,还可以动态地重新平衡文件系统,以便在集群主机之间均匀地分布数据。这确保了高性能,并防止集群中某个特定主机上的负载过重。

客户端使用Linux内核客户端工具挂载与Posix兼容的文件系统,也可以使用更旧的基于Fuse的客户端程序。这些服务器作为常规Unix守护进程运行。