在企业级存储和云原生场景中,Ceph 是一个非常重要的分布式存储系统:它既可以做对象存储、块存储,也可以做分布式文件系统,被广泛用于 OpenStack、公有云、私有云以及大规模数据平台。
如果你刚准备入门 Ceph,可以按照下面这条路线循序渐进,从概念到实践、从单机实验到小集群搭建,快速上手。
文中示例更偏实践入门,适合运维 / SRE / 云原生工程师作为第一站;真正上生产前,一定要在测试环境充分演练与压测。
1. 先搞清楚:Ceph 是什么、能做什么?
Ceph 的核心目标是:统一存储平台。简单理解就是:
- 一套集群,统一提供三种能力:
- 对象存储:类似 S3,适合备份、归档、日志、图片、视频等海量数据
- 块存储(RBD):类似云硬盘,挂在虚拟机或容器上当系统盘 / 数据盘
- 分布式文件系统(CephFS):类似 NFS / HDFS,可多节点共享访问
- 具备以下特性:
- 高可用:多副本或纠删码,单盘 / 单机坏掉不会影响整体服务
- 水平扩展:通过简单加机器、加硬盘扩容
- 自动修复与均衡:后台自动迁移数据、重平衡副本
要理解 Ceph,建议先从它的核心组件入手。
2. Ceph 基础架构速读:RADOS / RBD / RGW / CephFS
2.1 RADOS:一切的底座
RADOS(Reliable Autonomic Distributed Object Store) 是 Ceph 的核心底层,所有上层功能都建立在 RADOS 之上。
在 RADOS 层,有几个关键概念:
- Monitor(MON):负责集群元数据和一致性(谁在线、谁是领导节点等)
- OSD(Object Storage Daemon):负责真正的数据存储,每块数据盘通常对应一个 OSD 进程
- MGR(Manager):负责监控、统计、仪表盘等辅助管理功能
- PG(Placement Group):逻辑分片,介于对象和 OSD 之间,用于降低数据分布的复杂度
可以先记住一句话:
客户端不会直接找具体盘,而是通过 CRUSH 算法映射到 PG,再映射到一组 OSD。
2.2 RBD:块存储
RBD(RADOS Block Device) 是 Ceph 提供的块存储能力,常见用法:
- 给 KVM 虚拟机提供系统盘 / 数据盘
- 给 Kubernetes 提供持久卷(通过 CSI 插件)
特点:
- 支持快照、克隆、精简置备
- 后端依赖 RADOS,多副本保证可靠性
2.3 RGW:对象存储网关
RGW(RADOS Gateway) 提供兼容 S3 / Swift 的接口:
- 适合应用直接通过 HTTP 访问对象存储
- 常用于备份系统、日志系统、图床、音视频存储等
2.4 CephFS:分布式文件系统
CephFS 提供 POSIX 兼容的分布式文件系统:
- 多个客户端可以同时挂载同一个文件系统
- 适合大数据分析、工程研发共享目录、模型文件存储等
3. 入门第一步:学习基础知识(推荐学习路径)
3.1 官方文档:Ceph Documentation
入门 Ceph,最权威的资料依然是 官方文档。建议按以下顺序阅读:
- 概览(Overview):了解 Ceph 能力边界和典型应用场景
- Architecture:重点看 RADOS / MON / OSD / MGR / CRUSH
- Getting Started / Quick Start:跟着官方示例跑一遍
- 针对具体方向再深入:
- 做云盘 / 虚拟机存储:重点看 RBD
- 做对象存储:重点看 RGW
- 做共享文件系统:重点看 CephFS
建议边看边记几个关键问题:
- Ceph 如何决定一个对象存在哪几块盘上?
- OSD 挂掉了,数据如何恢复?
- 扩容时,数据是怎么自动重分布的?
3.2 结合博客 / 视频理解整体框架
可以搭配一些高质量的技术博客、会议分享或 B 站视频:
- 用「Ceph 架构原理」「Ceph RADOS 原理」等关键词检索
- 找 2~3 篇 / 部视频,把架构图看懂、核心概念串起来
目标不是记住所有命令,而是先形成一张「脑内架构图」。
4. 第二步:搭建一个可折腾的实验环境
学习 Ceph 最怕只停留在概念,必须上手搭一个能“搞坏了再重装”的实验环境。
4.1 环境选择建议
- 首选:虚拟机环境
- 如 VMware / VirtualBox / Proxmox / KVM
- 建议至少 3 台虚拟机(最低跑个简单集群)
- 也可以:云服务器
- 多台小规格 ECS / VPS 组成测试集群
- 注意公网成本和流量
4.2 部署方式推荐
当前主流是使用 cephadm 部署:
- cephadm:基于容器和 systemd 的官方推荐部署方式
- 优点:自动拉镜像、自动生成配置、方便扩容
- 缺点:需要一定的容器基础
也可以了解(但不建议新手主用):
- ceph-ansible:基于 Ansible 的自动化部署
- ceph-deploy:较老的工具,适合理解早期流程,不推荐生产使用
5. 动手实践:从单节点到小集群
5.1 单节点快速体验(理解概念为主)
单节点部署不适合生产,但非常适合验证命令、熟悉基本操作。
大致步骤:
- 准备一台 Linux(如 CentOS / Rocky / Ubuntu)
- 安装 cephadm 或使用发行版自带的 Ceph 包
- 创建一个最小化集群(MON、MGR、OSD 都在一台机器上)
在这个阶段,建议你重点做几件事:
ceph status:随时查看集群整体健康- 查看 OSD、MON、MGR 的状态:
ceph osd treeceph orch ps
- 尝试:
- 创建一个存储池(pool)
- 写入 / 读取一些测试数据
目标:先把“命令 + 输出”看顺眼,理解每个字段大致含义。
5.2 小型多节点集群(至少 3 节点)
当你对基本概念有感觉后,可以搭一个最小 3 节点的实验集群:
- 节点角色可以混合:
- 所有节点既做 MON/MGR,又有 OSD
- 或者单独放一台做 MON/MGR,另外几台做 OSD
- 每个节点至少一块数据盘(虚拟磁盘也可以)
在这个环境中,你可以练习:
- 模拟 OSD 故障(停止服务 / detach 磁盘),观察:
ceph status的健康状态变化- 集群如何自动重平衡和恢复
- 扩容 / 缩容:
- 新增一块盘 / 新增一个节点
- 移除一块盘 / 下线一个节点
这一步能帮你真正理解:Ceph 是如何在多节点间“自动玩杂技”的。
6. 实操重点:创建存储池、RBD 和 CephFS
6.1 创建存储池(Pool)
存储池是 Ceph 中的逻辑存储单元,相当于「数据的命名空间 + 策略集合」。
常用命令示例:
|
|
64 64:PG 和 PGP 的数量(测试环境取一个较小值即可)size 3:表示 3 副本,生产环境要结合硬件规模和可靠性要求设计
6.2 创建 RBD 镜像并挂载
示例流程(以 mypool 为例):
|
|
完成后,你就可以像使用普通磁盘一样使用 /mnt/ceph-rbd 目录了。
6.3 创建并挂载 CephFS
基本步骤:
|
|
之后 /mnt/mycephfs 就是一个 POSIX 兼容的分布式文件系统。
7. 学习常用监控和管理命令
入门阶段重点熟悉几类命令:
- 集群总览
ceph status:查看整体健康状态(HEALTH_OK / WARN / ERR)ceph df:查看集群容量使用情况
- OSD 相关
ceph osd tree:查看 OSD 拓扑结构、副本分布ceph osd df:查看各 OSD 使用率ceph osd out/in、ceph osd crush reweight:控制参与数据分布
- Pool / PG 状态
ceph osd pool ls:列出所有存储池ceph pg stat:查看 PG 状态(active+clean / degraded / recovering 等)
建议你在实验环境里多做几件事:
- 故意停一台 OSD,看
ceph status如何变化 - 故意扩容 / 缩容,看数据如何重平衡
- 尝试修复一些常见的 HEALTH_WARN,体会排障过程
8. 参考资源:官方教程 + 社区 + GitHub
在实践过程中,可以多利用这些资源:
- 官方 Quick Start / Getting Started 指南
- 跟着教程完整跑一遍,比只看文档有效得多
- 社区论坛 / 邮件列表 / Slack / QQ / 微信群
- 搜索「Ceph 社区」「Ceph 用户群」等关键词
- 多看看别人踩过的坑和部署经验
- GitHub 项目
- ceph 本身的仓库:了解版本、issue、release note
- 第三方工具:备份工具、监控面板、Ceph Dashboard 等
一个实践经验:当你能看懂别人分享的 Ceph 故障分析过程时,说明你已经真正入门了。
9. 非常重要的前提:注意磁盘空间(特别是根分区)
你提到的这条提醒非常关键:
“注意:你的根分区使用率已达 94%,建议先清理磁盘空间(如删除临时文件、日志或扩容)再部署 Ceph,避免存储不足。”
在实践和生产中,磁盘空间不足尤其是根分区爆满,会直接导致 Ceph 部署失败、服务异常,甚至整个系统不可用。
9.1 为什么要特别关注根分区?
- cephadm / 容器镜像 / 日志 / 临时文件,很多都会写在根分区所在的文件系统
- 根分区 90% 以上时:
- 容器拉取镜像失败
- 日志写不进去,排障难度急剧上升
- 系统服务可能异常(包括 ssh 登录变慢甚至失败)
9.2 部署 Ceph 前的自检清单
在开始部署前,建议至少做这几件事:
- 检查磁盘使用率
|
|
- 根分区使用率尽量控制在 70% 以下
- 清理无用日志:如
/var/log下的大日志 - 清理历史包缓存:如
yum clean all/apt-get clean - 清理临时文件:
/tmp、Docker 镜像缓存等 - 条件允许的话,调整分区或扩大根分区容量
- 清理无用日志:如
9.3 生产环境的磁盘规划建议(简版)
- 根分区单独一块较小 SSD / 系统盘:只放系统和必要工具
- 数据盘单独挂载:
- 每块数据盘对应一个 OSD
- 避免将 OSD 放在根分区所在盘上
- 为日志 / WAL / DB 预留独立 SSD(条件允许时)
- 提升性能、降低抖动
10. 总结:一条可执行的 Ceph 入门路径
最后把整条路径再串一下,方便你对照执行:
- 学习基础知识
- 搞清楚 RADOS / MON / OSD / MGR / PG / CRUSH 等核心概念
- 理解 RBD / RGW / CephFS 各自适用的场景
- 结合官方文档 + 博客 / 视频形成自己的架构图
- 搭建实验环境
- 优先使用虚拟机或测试服务器,不要直接上生产
- 部署前先检查 根分区和数据盘的空间,避免 90% 以上使用率
- 尝试使用 cephadm 快速搭建一个小集群
- 实践操作
- 创建存储池、RBD 镜像、CephFS 文件系统
- 练习监控和管理命令:
ceph status、ceph osd tree、ceph df等 - 故意制造一些“小故障”,练习排障和恢复
- 持续学习与进阶
- 关注社区、阅读他人故障案例
- 逐步了解纠删码、跨机房容灾、多集群联邦等高级特性
做到以上这些,你就已经真正完成了 Ceph 的入门 + 初级实战。
等你在测试环境玩熟之后,再考虑引入到生产环境,会踏实很多。
如果你希望,我也可以在后续帮你写一篇「Ceph 生产环境部署与运维实战指南」,作为这篇入门教程的进阶篇。