ceph是一种分布式存储系统,包括块存储、对象存储和文件系统。
块存储(RBD)
块是一个字节序列,通常包含512个字节。基于块的存储接口是一种数据存储方式,通过将数据划分为块,并通过特定的接口来访问和管理这些数据块,进行高效的数据存储。常见的存储接口包括SCSI、iSCSI和NVMe等。
基于块的存储接口是旋转介质(硬盘、CD等)存储数据最常见的方法。
RADOS:即 Reliable Autonomic Distributed Object Store,是 Ceph 的底层存储系统,提供可靠的对象存储功能。而这里的块存储RBD的意思是RADOS block device。
对象存储
文件系统(cephfs)
Ceph核心组件
OSD
OSD(Object Storage Daemon) 是 Ceph 中负责存储数据的守护进程,每个 OSD 管理一个存储设备(如硬盘或 SSD)并处理数据的读写请求。它执行数据复制、恢复和再平衡操作,同时监控自身健康状态并与其他 OSD 交换心跳信息,以确保集群的稳定性和冗余性。此外,OSD 采用数据条带化存储技术,将数据分割成多个小块并分散存储在不同的 OSD 上,从而提升存储性能和容错能力,确保在部分节点故障时依然可以可靠地访问数据。
在条带化存储中,数据被分割成多个小块(或称为条带),并将这些条带分散存储在不同的 OSD(Object Storage Daemon)上。例如,假设有一个大文件,如果将它分成 4 个部分(条带),这 4 个部分可能分别存储在 4 个不同的 OSD 上。这样做的好处是提高了数据访问的并行性。例如,当一个客户端请求读取这个大文件时,可以同时从多个 OSD 中获取各个部分的数据,从而加快读取速度。
由于数据被分散存储,多个 OSD 可以同时处理 I/O 请求,因此整体的读写性能得到了提升。尤其在大文件存储或高负载情况下,这种并行访问能显著减少延迟。
Monitor(MON)
Ceph Monitor 负责维护集群的全局状态,包括 OSD 节点的状态、认证信息和集群配置。MON 的主要职责是保证 Ceph 集群的正常运行,跟踪集群中的OSD状态,管理集群配置和状态变化,维护CRUSH映射,并为 OSD 和客户端提供集群状态的最新视图。
MDS(Metadata Server)
MDS 是 Ceph 文件系统(CephFS)的元数据服务器,用于管理文件系统中的元数据(如文件名、目录结构、文件权限等)。MDS 管理CephFS的文件和目录结构,允许 CephFS 提供高效的 POSIX 文件系统访问。多个 MDS 可以并行工作,以提高大规模文件系统的元数据性能。
Ceph 对象网关(RADOS Gateway,RGW)
Ceph对象用于访问Ceph的对象存储,RGW 使 Ceph 支持与 Amazon S3 和 OpenStack Swift 兼容的对象存储 API,适合基于 HTTP 的对象存储访问。
CRUSH(Controlled Replication Under Scalable Hashing)算法
CRUSH 是 Ceph 中用于决定数据如何分布在 OSD 上的算法。与传统的中心化映射不同,CRUSH 算法通过分布式的哈希机制将数据智能分布到 OSD 中,使 Ceph 具备高可扩展性和灵活的数据再平衡能力。
- RADOS 是 Ceph 存储系统的核心,所有的存储操作最终都在 RADOS 中进行。无论是对象存储、块存储还是文件系统,都依赖 RADOS。
- OSD 负责具体的对象数据存储,是 RADOS 的核心执行单元。
- MON 维护集群的全局状态并确保集群的一致性。
- MDS 则负责 CephFS 的元数据管理,专为文件系统提供服务。
- RGW 提供对象存储接口,允许用户通过 HTTP 协议操作 Ceph 中的对象。
- CRUSH 算法确保数据分布在 OSD 上时的高可用性和冗余性。