1. Ceph 存储基础:核心组件介绍与架构原理

Ceph 是一个统一、分布式存储系统,设计目标为高性能、高可靠性与可扩展性。其核心设计哲学是无单点故障与自愈自管理。理解 Ceph 的五大核心组件——MON、OSD、MGR、MDS、RGW——是掌握 Rook 编排与网关优化的前提。

1.1 核心组件总览

下表从功能、集群角色、关键特性三个维度对比五大组件:

组件 全称 核心职责 关键特性
MON Monitor 集群状态维护、选举与一致性 Paxos 变体、奇数节点、轻量级
OSD Object Storage Daemon 数据存储、复制、恢复与再平衡 每盘一守护进程、直接管理磁盘
MGR Manager 集群监控、指标收集与扩展模块 RESTful API、Dashboard、Balancer
MDS Metadata Server CephFS 元数据管理 动态子树分区、多活热备
RGW RADOS Gateway S3/Swift 对象存储接口 无状态、可水平扩展、多站点同步
架构要点:MON 与 MGR 属于控制面,OSD 属于数据面,MDS 与 RGW 属于接入面。Rook 在 Kubernetes 中分别以 Deployment、StatefulSet 或 DaemonSet 管理这些组件。

1.2 组件架构关系图

下图展示了 Ceph 集群中五大组件的逻辑分层与数据流关系:

Ceph 核心组件架构关系 Ceph 核心组件架构关系 接入层(Access Layer) RGW (S3/Swift) MDS (CephFS) 原生客户端 (librados) 控制层(Control Plane) MON (Cluster Map) MGR (Metrics & Modules) 数据层(Data Plane) OSD 集群(数据存储、复制、恢复、再平衡) 说明:客户端通过 RGW、MDS 或 librados 接入;MON 维护集群拓扑(Cluster Map);MGR 提供监控与扩展能力; OSD 负责实际数据存储。所有组件均通过 RADOS 协议通信,无单点瓶颈。

1.3 各组件深度解析

1.3.1 MON(Monitor)——集群大脑

  • 职责:维护 Cluster Map(包括 MON Map、OSD Map、PG Map、MGR Map、CRUSH Map),保证所有节点看到一致的集群视图。
  • 一致性协议:基于 Paxos 变体,要求奇数个 MON(通常 3 或 5 个)以容忍少数派故障。
  • 性能特征:轻量级,不参与数据路径;写操作极少,读操作频繁。
  • 高可用:MON 之间自动选举 Leader,Leader 故障时秒级切换。
Rook 实践:在 Kubernetes 中,MON 以 Deployment 形式部署,每个 MON 对应一个 PVC。Rook 自动处理 MON 的扩缩容与故障迁移,无需手动干预。

1.3.2 OSD(Object Storage Daemon)——数据基石

  • 职责:每个 OSD 管理一块独立磁盘(HDD/SSD/NVMe),负责数据对象的存储、读取、复制、恢复与再平衡。
  • 数据分布:通过 CRUSH 算法计算数据放置位置,无需元数据查询,实现 O(1) 寻址。
  • 副本与纠删码:支持多副本(默认 3 副本)与纠删码(Erasure Code)两种数据冗余策略。
  • 自愈能力:OSD 故障后,集群自动将 PG 迁移至其他健康 OSD,触发数据恢复。
OSD 状态 含义 对集群影响
up/in 正常运行,参与数据服务 正常
up/out 进程存活,但被移出集群 触发 PG 迁移
down/in 进程挂掉,但仍在集群中 触发 PG 恢复
down/out 进程挂掉且被移出 数据重新分布

1.3.3 MGR(Manager)——集群管家

  • 职责:收集集群统计信息(IOPS、吞吐量、容量、延迟),提供 RESTful API 与 Dashboard。
  • 扩展模块:支持插件式模块,如 Balancer(自动调整 PG 分布)、Zabbix/Prometheus 集成、Telemetry 上报。
  • 高可用:通常部署 2 个 MGR,一个 Active,一个 Standby,故障自动切换。

1.3.4 MDS(Metadata Server)——CephFS 元数据引擎

  • 职责:管理 CephFS 文件系统的目录树、文件属性、权限等元数据。
  • 动态子树分区:MDS 将元数据负载按目录子树动态分片,支持多 MDS 并行服务。
  • 缓存与持久化:元数据缓存在 MDS 内存中,定期刷入 RADOS 中的元数据池。
  • 适用场景:共享文件系统(NFS 替代、HPC、CI/CD 缓存)。
注意:MDS 是 CephFS 的元数据瓶颈。在大量小文件操作场景下,MDS 的 CPU 与内存资源需要重点监控。Rook 支持为 MDS 设置资源限制与反亲和性调度。

1.3.5 RGW(RADOS Gateway)——对象存储网关

  • 职责:提供兼容 Amazon S3 与 OpenStack Swift 的 RESTful 对象存储接口。
  • 无状态设计:RGW 本身不存储状态,所有数据与元数据均存储在 RADOS 中,支持水平扩展。
  • 多站点同步:支持跨地域的 Active-Active 或 Active-Passive 数据同步。
  • 性能优化点:Bucket 索引分片、Lua 脚本、缓存层(Redis/Memcached)、TLS 卸载。

1.4 数据读写流程(以 RGW 为例)

下图展示客户端通过 RGW 写入一个对象的完整数据流:

RGW 对象写入流程 RGW 对象写入流程 1. 客户端 PUT 2. RGW 接收 3. 分片与元数据 4. 写入 OSD 5. 副本写入(3 副本) 6. 返回 ACK 7. 响应客户端 说明:RGW 将对象拆分为多个 rados object(默认 4MB),每个 rados object 对应一个 PG, PG 通过 CRUSH 映射到 3 个不同 OSD。所有副本写入成功后才返回客户端成功。 元数据(bucket index、user info)写入独立的元数据池。

1.5 关键架构原则

  1. 无单点故障:所有组件均可冗余部署,MON 使用 Paxos 选举,MGR 主备切换,OSD 自动恢复。
  2. 数据自管理:CRUSH 算法决定数据分布,无需中心化元数据查询;PG 自动分裂、合并与迁移。
  3. 统一存储:同一套 RADOS 集群同时提供块存储(RBD)、文件存储(CephFS)、对象存储(RGW)。
  4. 水平扩展:增加 OSD 即可线性提升容量与性能;RGW 与 MDS 可随负载增加实例数。
Rook 视角:在 Kubernetes 中,Rook 将上述组件封装为 CRD(Custom Resource Definition),通过 Operator 模式自动化部署、配置、扩缩容与故障恢复。理解原生 Ceph 组件是排查 Rook 集群问题的基础。