MDS 只做元数据
MDS(Metadata Server)为 CephFS 提供目录树、inode 与文件属性等元数据服务,文件内容依旧以对象形式存放在 OSD 池中。RADOS 与对象网关不需要 MDS,只有要提供 POSIX 文件语义的 CephFS 才必须部署。它是 Ceph 中唯一需要维护本地 journal 的状态型守护进程。
基本信息
| 服务对象 | 仅 CephFS,RBD 与对象网关不依赖 |
|---|---|
| 运行模式 | 多实例并存,max_mds 决定同时活跃的数量 |
| 热备形态 | standby-replay 持续重放主实例 journal,接管更快 |
| 元数据池 | 保存目录与 inode,建议放在低延迟介质 |
| 数据池 | 保存文件内容,可与元数据池分层配置 |
| 本地状态 | 元数据 journal 落在 MDS 本地设备,影响启动重放时间 |
典型使用场景
- 给计算集群或容器平台提供共享的 POSIX 目录
- 元数据热点排查:某目录被大量并发创建删除时观察单个 rank 的负载
- 高并发客户端场景:提高 max_mds 并依赖目录子树切分分担压力
- 元数据池容量规划:目录与 inode 数量而非文件大小决定占用
- 故障切换验证:确认备实例是否处于 standby-replay 状态
状态查看命令
状态查看命令
ceph fs ls # 文件系统及其元数据池与数据池
ceph fs status # MDS 角色分布与客户端数量
ceph mds stat # MDS 汇总状态
ceph fs dump # 详细状态、max_mds 与各 rank 归属
ceph mds fail <name> # 将某实例标记为失效
ceph fs set <fs> max_mds 2 # 调整活跃 MDS 数量MDS 角色读法
| 角色状态 | 含义 | 判读要点 |
|---|---|---|
| active | 正在服务某个 rank | 数量应与 max_mds 一致 |
| standby | 待命但未跟随 journal | 接管较慢,需要重新加载元数据 |
| standby-replay | 持续重放主实例 journal | 切换最快,代价是额外的元数据池读取 |
| up:replay | 启动时重放 journal | 长时间停留说明 journal 较大或负载偏高 |
| up:resolve | 解析目录子树归属 | 出现说明正在重新分片 |
| up:stopping | 正在退出服务 | 缩容 max_mds 后的正常过渡状态 |
提高 max_mds 不等于线性提速:只有当客户端访问的目录能被切分到不同子树时,多活跃实例才有收益;单一热点目录仍集中在一个 rank 上。评估前先看 fs status 中各 rank 的实际请求分布。
MDS 状态异常时不要直接删除其数据目录重建。应先确认 journal 能否重放,必要时使用 journal 处理工具修复,直接删除可能造成整个文件系统的元数据不可用。
元数据池的规划要点
元数据池容量取决于目录与 inode 数量,而不是文件总大小:海量小文件会显著放大元数据占用,并带来大量随机读。规划时优先给元数据池低延迟介质并预留充足空间,同时关注目录分片产生的额外元数据对象。