Ceph Monitor 管理职责全景解析
【Claude Sonnet 4.6 生成】
本文基于 Ceph 源码(
mon/Monitor.h、mon/mon_types.h及各 PaxosService 子模块)系统梳理 Monitor 的全部管理职责,并深入介绍每个子模块管理的数据与功能边界。
一、Monitor 的定位
Monitor 是 Ceph 集群的控制平面中枢。它本身不存储用户数据,而是维护整个集群的全局元数据与状态视图:
- 哪些 OSD 在线?CRUSH 规则是什么?
- 哪些 MDS 负责哪个 FS?
- 哪个客户端有权限访问哪个 pool?
- 集群当前的健康状态如何?
所有这些信息都由 Monitor 集中管理,并通过 Paxos 分布式共识协议保证多个 Monitor 节点之间的强一致性。
二、架构总览
Monitor 进程内部由多个独立的 PaxosService 子模块组成,每个子模块负责一类资源,拥有独立的存储空间(RocksDB 中的独立 prefix)和独立的 Paxos 日志。
Monitor 进程
│
├── Paxos(共识引擎)
│ └── 为所有 PaxosService 提供多数派一致性保证
│
├── Elector(选举模块)
│ └── Monitor 间选举 Leader,保证只有一个写入节点
│
└── PaxosService 子模块(共 9 个)
├── [0] MDSMonitor → FS 实例 + MDS 拓扑管理
├── [1] OSDMonitor → OSD + Pool + PG 管理
├── [2] LogMonitor → 集群日志管理
├── [3] MonmapMonitor → Monitor 节点管理
├── [4] AuthMonitor → 身份认证(CephX keyring)
├── [5] MgrMonitor → Mgr 守护进程管理
├── [6] MgrStatMonitor→ 集群统计数据聚合
├── [7] HealthMonitor → 健康状态聚合
└── [8] ConfigMonitor → 集中配置管理
编号来自源码 mon/mon_types.h:
#define PAXOS_MDSMAP 0
#define PAXOS_OSDMAP 1
#define PAXOS_LOG 2
#define PAXOS_MONMAP 3
#define PAXOS_AUTH 4
#define PAXOS_MGR 5
#define PAXOS_MGRSTAT 6
#define PAXOS_HEALTH 7
#define PAXOS_CONFIG 8
三、各子模块详解
3.1 MDSMonitor — FS 实例 + MDS 拓扑管理
管理数据:FSMap
FSMap 是 Monitor 内部维护的全局文件系统视图,包含所有 FS 实例(Filesystem)和所有 MDS daemon 的状态。
管理功能
| 功能 | 命令示例 | 说明 |
|---|---|---|
| FS 生命周期 | ceph fs new/rm/reset |
创建/删除/重置 FS 实例 |
| FS 配置 | ceph fs set max_mds 2 |
修改目标 active MDS 数、session 参数、功能开关 |
| MDS 拓扑 | 自动化 | Rank 分配(standby→active)、failover、promote |
| 故障检测 | 自动化 | beacon 超时检测,标记 laggy/failed,触发 failover |
| MDS 运维 | ceph mds fail/rm |
强制下线 MDS daemon |
| 地图推送 | 自动化 | 向 MDS daemon 和客户端推送最新 FSMap |
关键数据结构
FSMap
├── epoch 全局版本号(每次变更 +1)
├── filesystems: map<fscid, Filesystem>
│ └── Filesystem
│ ├── fscid FS 唯一 ID
│ └── MDSMap
│ ├── fs_name FS 名称
│ ├── metadata_pool 元数据 pool
│ ├── data_pools[] 数据 pool 列表
│ ├── max_mds 目标 active MDS 数
│ ├── up: map<rank, gid> Rank → active MDS 映射
│ ├── failed/damaged/stopped Rank 健康状态集合
│ └── mds_info: map<gid, mds_info_t> MDS daemon 详情
└── standby_daemons 全局 standby 池
3.2 OSDMonitor — OSD + Pool + PG 管理
管理数据:OSDMap
OSDMap 描述了整个存储层的拓扑:哪些 OSD 在线、数据如何分布(CRUSH)、有哪些 pool。
管理功能
| 功能 | 命令示例 | 说明 |
|---|---|---|
| OSD 状态 | 自动化 | 处理 OSD failure 报告,管理 up/down/in/out 状态转换 |
| Pool 管理 | ceph osd pool create/delete/set |
创建/删除/配置存储池(副本数、EC、应用标记) |
| CRUSH 管理 | ceph osd crush add/move/rule |
修改数据放置规则和拓扑树 |
| Blacklist | 自动化 | 将异常客户端/MDS 加入 blacklist,阻止写入 |
| 容量管理 | 自动化 | OSD 容量统计,触发 nearfull/full 告警 |
| PG 创建 | 自动化 | pool 创建后协调 PG 初始化,跟踪 PG 创建进度 |
OSDMonitor 是代码量最大的子模块(OSDMonitor.cc 约 424KB),因为存储层的逻辑最为复杂。
3.3 AuthMonitor — 身份认证(CephX)
管理数据:KeyStore(所有 entity 的 key + caps)
CephX 是 Ceph 自研的对称密钥认证协议,AuthMonitor 是认证体系的权威管理者。
管理功能
| 功能 | 命令示例 | 说明 |
|---|---|---|
| entity 管理 | ceph auth add/del/get/ls |
增删改查 client/osd/mds 凭证 |
| caps 管理 | ceph auth caps |
修改某 entity 的 mds/osd/mon 权限字符串 |
| rotating key | 自动化 | 周期性轮换 MDS/OSD service secret,增强安全性 |
| ticket 颁发 | 自动化 | 处理 CephX 握手请求,颁发 service ticket |
| bootstrap | 自动化 | 管理 bootstrap keyring(新 OSD 注册时使用) |
核心数据结构
struct EntityAuth {
CryptoKey key; // AES-128 共享密钥
map<string, bufferlist> caps; // 权限字符串
// "mds" → "allow rw fsname=myfs"
// "osd" → "allow rw pool=data"
// "mon" → "allow r"
};
// AuthMonitor 持有
KeyServerData {
map<EntityName, EntityAuth> secrets; // 所有 entity 的完整信息
map<service_type, RotatingSecrets> rotating_secrets; // 服务轮换密钥
}
AuthMonitor 与其他模块的联动:
MDSMonitor创建 FS 后,MDS daemon 需要 AuthMonitor 颁发 ticket 才能连接 OSDOSDMonitor在 OSD 加入时需要 AuthMonitor 为其分配 key
3.4 MonmapMonitor — Monitor 节点管理
管理数据:MonMap
| 功能 | 说明 |
|---|---|
| 成员管理 | ceph mon add/remove:增删 Monitor 节点 |
| 地址管理 | 维护每个 Monitor 的名称、地址、端口 |
| 特性集管理 | 记录 quorum 要求的最低特性集(滚动升级时用于兼容性控制) |
| 新节点同步 | 新 Monitor 加入时同步 MonMap,再接入 quorum |
3.5 MgrMonitor — Mgr 守护进程管理
管理数据:MgrMap
Mgr(Manager)是 Ceph 的扩展管理进程,提供 Dashboard、REST API、告警插件等能力。MgrMonitor 负责管理 Mgr 进程的生命周期。
| 功能 | 说明 |
|---|---|
| Mgr 选主 | 管理 active/standby Mgr,active 宕机后自动切换 |
| 模块管理 | ceph mgr module enable/disable:启停 Mgr 插件模块 |
| 地址发布 | 向客户端推送当前 active Mgr 地址(Dashboard、REST API 用) |
| 命令代理 | 部分 ceph 命令透传给 Mgr 执行(如 ceph df detail) |
3.6 MgrStatMonitor — 集群统计聚合
管理数据:从 Mgr 汇总的 PGMap 统计信息
| 功能 | 说明 |
|---|---|
| 统计聚合 | 接收并汇总 Mgr 上报的 PG 状态、容量、IO 吞吐等统计 |
ceph status |
提供 ceph status / ceph df 的数据来源 |
| 健康数据 | 提供 PG 层面的健康状态(降级、不完整、misplaced 等) |
3.7 HealthMonitor — 健康状态聚合
管理数据:health_check_map
| 功能 | 说明 |
|---|---|
| 健康聚合 | 汇总所有 PaxosService 子模块上报的健康检查项 |
ceph health |
输出 HEALTH_OK / HEALTH_WARN / HEALTH_ERR 及详细告警 |
| 时钟偏移检测 | Leader 周期性 ping 所有 Monitor,检测时钟偏差,超阈值告警 |
3.8 LogMonitor — 集群日志管理
管理数据:LogSummary(集群事件日志)
| 功能 | 说明 |
|---|---|
| 日志收集 | 汇聚 OSD/MDS/Monitor 上报的集群事件日志(故障、恢复等) |
| 日志查询 | ceph log last N:查看最近 N 条集群日志 |
| 外部推送 | 支持推送到 syslog / graylog 等外部日志系统 |
3.9 ConfigMonitor — 集中配置管理
管理数据:ConfigMap(KV 配置树)
| 功能 | 说明 |
|---|---|
| 配置存储 | ceph config set/get/rm:集中管理 daemon 配置,覆盖本地配置文件 |
| 配置推送 | daemon 启动时自动从 Monitor 拉取最新配置 |
| 分级配置 | 支持 global / osd / mds / client / 具体 daemon 分级生效 |
| 配置查询 | ceph config dump:查看当前全量配置 |
四、Monitor 的基础设施能力
除上述 9 个业务子模块,Monitor 还提供以下基础能力:
| 能力 | 说明 |
|---|---|
| Paxos 共识 | 所有状态变更通过 Paxos 多数派同意后生效,保证强一致性 |
| Leader 选举 | Elector 模块,Monitor 集群中选出唯一 Leader 负责写入 |
| 数据同步 | 新加入或落后的 Monitor 从 Leader 全量/增量同步状态 |
| 订阅推送 | map 变更后主动推送给订阅者(MDS/OSD/客户端),无需轮询 |
| Store Scrub | 定期验证所有 Monitor 节点存储内容一致(防数据静默损坏) |
| RocksDB 持久化 | 所有 map 版本持久化到本地 RocksDB,支持 epoch 级别历史回溯 |
| ConfigKeyService | 额外提供 ceph config-key:通用 KV 存储,存放少量任意元数据 |
五、各子模块关系图
┌──────────────────────────────┐
│ Ceph Monitor │
│ │
┌──────────────┤ Paxos (共识引擎) ├──────────────┐
│ │ Elector (Leader 选举) │ │
│ └──────────────────────────────┘ │
│ │ │
FS/MDS层 存储层 管理支撑层
│ │ │
┌────────▼────────┐ ┌───────────▼────────┐ ┌───────────────▼────┐
│ MDSMonitor │ │ OSDMonitor │ │ AuthMonitor │
│ - FSMap │ │ - OSDMap │ │ - CephX Keyring │
│ - FS CRUD │ │ - Pool/PG 管理 │ │ - Ticket 颁发 │
│ - MDS 拓扑 │ │ - CRUSH 规则 │ │ - caps 权限 │
└─────────────────┘ │ - OSD 故障检测 │ └────────────────────┘
└────────────────────┘
┌────────────────────┐
│ MonmapMonitor │
│ - Monitor 成员 │
└────────────────────┘
┌────────────────────┐
│ MgrMonitor │
│ - Mgr 生命周期 │
│ - 模块管理 │
└────────────────────┘
┌────────────────────┐
│ MgrStatMonitor │
│ - PG 统计聚合 │
│ - ceph status 数据 │
└────────────────────┘
┌────────────────────┐
│ HealthMonitor │
│ - 健康检查汇总 │
│ - 时钟偏移检测 │
└────────────────────┘
┌────────────────────┐
│ LogMonitor │
│ - 集群事件日志 │
└────────────────────┘
┌────────────────────┐
│ ConfigMonitor │
│ - 集中配置管理 │
└────────────────────┘
六、总结
| 子模块 | 管理对象 | 最核心的职责 |
|---|---|---|
| MDSMonitor | FSMap / MDSMap | FS 生命周期 + MDS 故障检测与 failover |
| OSDMonitor | OSDMap | 存储拓扑 + Pool 管理 + OSD 故障处理 |
| AuthMonitor | KeyStore | CephX 认证、ticket 颁发 |
| MonmapMonitor | MonMap | Monitor 集群成员管理 |
| MgrMonitor | MgrMap | Mgr 守护进程管理 |
| MgrStatMonitor | PGMap 统计 | 集群容量与 PG 状态聚合 |
| HealthMonitor | health_check_map | 健康告警聚合 |
| LogMonitor | LogSummary | 集群事件日志 |
| ConfigMonitor | ConfigMap | 集中配置管理 |
Monitor 是 Ceph 的控制平面,通过 9 个独立 PaxosService 子模块,以 Paxos 强一致性保证,统一管理集群的 FS/MDS、存储、认证、配置、日志、健康等全部控制面职责。
参考源码
| 文件 | 内容 |
|---|---|
mon/Monitor.h |
Monitor 主类,paxos_service[] 数组,基础设施能力 |
mon/mon_types.h |
PAXOS_* 常量定义(子模块编号) |
mon/MDSMonitor.cc |
FS/MDS 管理核心逻辑 |
mon/OSDMonitor.cc |
OSD/Pool/PG 管理核心逻辑(最大文件,~424KB) |
mon/AuthMonitor.cc |
CephX 认证管理 |
mon/MgrMonitor.cc |
Mgr 守护进程管理 |
mon/HealthMonitor.cc |
健康状态聚合 |
mon/ConfigMonitor.cc |
集中配置管理 |
mon/Paxos.cc |
Paxos 共识引擎实现 |
mon/Elector.cc |
Monitor Leader 选举实现 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)