Ceph 是一个符合 POSIX (Portable Operating System for UNIX®)、开源的分布式存储系统,依据 GNU 次通用公共许可而运行。该项目最初由 Sage Weill 于 2007 年开发,该项目的理念是提出一个没有任何单点故障的集群,确保能够跨集群节点进行永久数据复制。
与在任何经典的分布式文件系统中一样,放入集群中的文件是条带化的,依据一种称为 Ceph Controlled Replication Under Scalable Hashing (CRUSH) 的伪随机的数据分布算法放入集群节点中。
Ceph 是一种有趣的存储替代方案,这得益于它实现的一些概念,比如元数据分区,以及一种复制或放置组策略(将一系列对象聚合到一个分组中,然后将该分组映射到一系列对象存储后台进程 (OSD))。
这些特性支持自动扩展、恢复和自主管理集群,因为他们使用以下绑定(在不同的级别上)提供了与您的 Ceph 集群的交互方式:
- Reliable Autonomic Distributed Object Store (RADOS) 网关是一种 RESTful 接口,您的应用程序可与其通信,以便将对象直接存储在集群中。
-
librados
库是一种访问 RADOS 的便利方式,它支持 PHP、Ruby、Java™、Python 和 C/C++
编程语言。 - Ceph 的 RADOS 块设备 (RBD) 是一个完全分布式的块设备,它使用一个 Linux® 内核和一个 Quick EMUlator (QEMU)/基于内核的虚拟机 (KVM) 驱动程序。
- 原生 CephFS 是一个分布式文件系统,全面支持 Filesystem in Userspace (FUSE)。
如 图 1 中所示,Ceph 生态系统可分解为 5 个组成部分:
-
librados
库 - RADOS 网关
- RBD
- CephFS
- 集群中的各种节点
图 1. Ceph 生态系统
Ceph 生态系统原生支持许多与其交互的方式,这使得在已运行的基础架构中集成它变得既轻松又便捷,即使它执行的是一个在统一项目文件中提供块和对象存储功能的复杂任务。
接下来我们来看一下组成 Ceph 的各个部分以及它们在 Ceph 中分别扮演的角色。
RADOS 对象存储
图 1 表明 RADOS 对象存储是存储集群的基础。对于通过众多客户端或网关(RADOSGW、RBD 或 CephFS)执行的每个操作,数据会进入 RADOS 或者可以从中读取数据。图 2 显示了 RADOS 集群,它包含两个后台守护进程:Ceph 对象存储后台进程 (OSD) 和维护集群映射的主要副本的 Ceph 监视器。
图 2. The RADOS 对象存储
集群映射描述了对象块的物理位置,以及一个将设备聚合到物理位置的 “桶” 列表。该映射由 Ceph 的高级放置算法控制,该算法在物理位置上建模逻辑位置。图 3 描绘了集群内的 “池”,即存储对象的逻辑分区。每个池被动态映射到 OSD。
图 3. RADOS 位置分组
现在让我们看看第一组后台进程 OSD,然后再看看监视器,最后看看属于 CephFS 分布式文件系统的 Ceph 元数据服务器。