Ceph 核心组件:MON、OSD、MGR、MDS、RGW 的角色与功能详解

Ceph 是一个高度可扩展、无单点故障的分布式存储系统,其核心架构由五个关键守护进程(Daemon)组成。理解每个组件的角色与交互方式是掌握 Ceph 运维与 Rook 集成的基石。本章将逐一剖析 MON、OSD、MGR、MDS 和 RGW 的功能定位、通信机制及在 Kubernetes 环境下的部署形态。

1. 组件全景概览

下表从功能定位、数据角色、关键端口和故障影响四个维度,对五大核心组件进行横向对比:

组件 功能定位 数据角色 关键端口 故障影响
MON 集群仲裁与元数据管理 存储 Cluster Map 3300 / 6789 多数 MON 宕机 → 集群不可写
OSD 数据存储与复制 存储实际对象数据 6800-7300 部分 OSD 宕机 → 数据降级,自动恢复
MGR 集群监控与扩展接口 聚合运行时指标 6800 / 8443 MGR 宕机 → 监控/仪表盘不可用,数据读写不受影响
MDS 文件系统元数据管理 管理 CephFS 元数据缓存 6800 MDS 宕机 → CephFS 不可用,块/对象存储不受影响
RGW 对象存储网关 提供 S3/Swift 协议转换 7480 / 8080 RGW 宕机 → 对象存储 API 不可用,内部数据完整
关键认知:MON 是集群的“大脑”,OSD 是“肌肉”,MGR 是“神经中枢”,MDS 和 RGW 是面向不同协议的“接口层”。在 Rook 部署中,这些组件均以 Kubernetes Deployment 或 DaemonSet 形式运行,并通过 Service 暴露端口。

2. MON — 集群仲裁与元数据核心

Monitor(MON)是 Ceph 集群的仲裁节点,负责维护整个集群的权威状态视图——Cluster Map。Cluster Map 包含五个子图:Monitor Map、OSD Map、PG Map、MDS Map 和 CRUSH Map。

  • 仲裁机制:MON 使用 Paxos 或 Raft 协议实现强一致性。通常部署奇数个(3 或 5 个)MON 节点,多数存活(quorum)才能对外提供服务。
  • 客户端交互:客户端(如 RBD 或 RGW)首先连接 MON 获取最新的 Cluster Map,然后直接与 OSD 通信,不再经过 MON 转发。
  • Rook 部署形态:在 Rook 中,MON 以 rook-ceph-mon Pod 形式运行,每个 MON 对应一个 PVC 持久化存储,用于保存关键元数据。
# 查看 MON 状态(在 Ceph 工具箱 Pod 内执行)
ceph mon stat
ceph quorum_status --format json-pretty

3. OSD — 数据存储与自愈引擎

Object Storage Daemon(OSD)是 Ceph 中唯一负责实际数据读写的组件。每个 OSD 通常对应一个物理磁盘或逻辑卷,存储数据并处理数据复制、恢复、再平衡等操作。

  • 数据分布:OSD 通过 CRUSH 算法计算数据放置位置,无需中心化元数据查询。
  • 故障自愈:当 OSD 宕机时,集群自动将其标记为 down 和 out,并触发 PG 迁移和数据恢复。
  • Rook 部署形态:Rook 通过 CephCluster CRD 中的 storage.nodes 或 storage.deviceFilter 自动发现并格式化磁盘,以 rook-ceph-osd-N Pod 形式运行。
生产注意事项:OSD 的 bluestore 模式是默认推荐选项,性能优于 filestore。在 Kubernetes 中,务必为 OSD 设置 lvm-mode 或 raw-mode,避免数据路径冲突。

4. MGR — 集群监控与扩展框架

Ceph Manager(MGR)自 Luminous 版本引入,负责收集集群运行时指标、提供 RESTful API 和仪表盘功能。MGR 是 MON 的“副手”,分担了监控和扩展模块的负载。

  • 高可用:通常部署 2 个 MGR,一个为 active,另一个为 standby,故障时自动切换。
  • 模块生态:MGR 支持插件化模块,如 dashboard、prometheus、balancer、pg_autoscaler 等。
  • Rook 集成:Rook 默认启用 MGR 并暴露 Dashboard 服务,可通过 Ingress 或 NodePort 访问。
# 查看 MGR 状态和启用的模块
ceph mgr stat
ceph mgr module ls

5. MDS — 文件系统元数据管理

Metadata Server(MDS)是 CephFS 的核心组件,管理文件系统的命名空间、目录结构、文件属性和权限。MDS 不存储文件数据,只缓存元数据到内存,并将变更持久化到 RADOS 池中。

  • 动态子树分区:多个 MDS 可以分担元数据负载,通过动态子树分区实现水平扩展。
  • 故障切换:MDS 支持 standby-replay 模式,实现秒级故障切换。
  • Rook 部署形态:Rook 通过 CephFilesystem CRD 创建 CephFS,自动部署 MDS Pod,并管理其扩缩容。
适用场景:MDS 仅在需要 CephFS(共享文件系统)时部署。如果只使用 RBD 块存储或 RGW 对象存储,可以不部署 MDS。

6. RGW — 对象存储协议网关

RADOS Gateway(RGW)提供与 Amazon S3 和 OpenStack Swift 兼容的对象存储接口。RGW 作为无状态代理,将 HTTP 请求转换为 librados 操作,直接与 OSD 交互。

  • 多租户:支持用户、桶(Bucket)和访问策略的隔离。
  • 生命周期管理:支持对象过期、存储类转换、多部分上传等高级特性。
  • Rook 部署形态:Rook 通过 CephObjectStore CRD 创建 RGW 实例,通常以 Deployment 形式运行,并配合 Service 和 Ingress 对外暴露。
# 通过 RGW 创建 S3 桶(使用 s3cmd 或 awscli)
s3cmd mb s3://my-bucket --host=rgw.example.com --host-bucket=rgw.example.com

7. 组件交互流程与架构图

下图展示了 Ceph 核心组件之间的数据流与控制流关系:

Ceph 核心组件交互架构图 Ceph 核心组件交互架构 客户端(K8s Pod / 外部应用) 获取 Cluster Map MON(仲裁 & 元数据) 分发 OSD Map OSD 1(数据) OSD 2(数据) OSD 3(数据) 直接读写 MGR(监控 & 仪表盘) MDS(CephFS 元数据) RGW(S3/Swift 网关) 说明: 1. 客户端从 MON 获取 Cluster Map 后,直接与 OSD 通信,不经过 MON 转发。 2. MGR 从 MON 和 OSD 收集指标,提供 Dashboard 和 Prometheus 接口。 3. MDS 和 RGW 作为协议转换层,底层数据仍由 OSD 存储。

8. 组件在 Rook 中的映射关系

在 Rook 中,每个 Ceph 组件都对应一个 Kubernetes CRD(Custom Resource Definition),通过声明式配置实现生命周期管理:

Ceph 组件 Rook CRD K8s 资源类型 关键配置字段
MON CephCluster Deployment spec.mon.count、spec.mon.allowMultiplePerNode
OSD CephCluster Deployment / DaemonSet spec.storage.nodes、spec.storage.deviceFilter
MGR CephCluster Deployment spec.mgr.count、spec.mgr.modules
MDS CephFilesystem Deployment spec.metadataServer.activeCount、spec.metadataServer.placement
RGW CephObjectStore Deployment spec.gateway.port、spec.gateway.instances
实践要点:在 Rook 中,MON 和 MGR 通常由 CephCluster 统一管理,而 MDS 和 RGW 需要单独创建 CRD 实例。OSD 的自动发现机制依赖于 rook-ceph-osd 的 prepare Job 和 activate Pod 的协作。

9. 组件健康检查与故障排查

在 Kubernetes 环境中,通过 Rook 提供的工具箱 Pod 可以快速诊断各组件状态:

# 进入 Rook 工具箱
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash

# 检查集群整体健康状态
ceph status
ceph health detail

# 检查各组件状态
ceph mon stat
ceph osd stat
ceph mgr stat
ceph mds stat
ceph rgw stat

常见故障场景与排查方向:

  • MON 仲裁丢失:检查 MON Pod 日志,确认网络连通性和时间同步(NTP)。
  • OSD down:查看 OSD Pod 状态,检查磁盘健康(smartctl)和存储路径权限。
  • MGR 切换失败:确认 MGR 的 standby 副本是否就绪,检查 Dashboard 模块是否加载。
  • MDS 延迟高:查看 MDS 缓存大小和活跃客户端数量,考虑增加 MDS 副本。
  • RGW 连接超时:检查 RGW Service 和 Ingress 配置,确认后端 OSD 是否正常。
推荐工具:结合 Prometheus + Grafana 监控 Ceph 组件指标,Rook 默认集成 prometheus 模块,可通过 ServiceMonitor 自动采集数据。