Ceph 入门实践教程:从基础架构到动手部署

在企业级存储和云原生场景中,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,最权威的资料依然是 官方文档。建议按以下顺序阅读:

  1. 概览(Overview):了解 Ceph 能力边界和典型应用场景
  2. Architecture:重点看 RADOS / MON / OSD / MGR / CRUSH
  3. Getting Started / Quick Start:跟着官方示例跑一遍
  4. 针对具体方向再深入:
    • 做云盘 / 虚拟机存储:重点看 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 单节点快速体验(理解概念为主)

单节点部署不适合生产,但非常适合验证命令、熟悉基本操作
大致步骤:

  1. 准备一台 Linux(如 CentOS / Rocky / Ubuntu)
  2. 安装 cephadm 或使用发行版自带的 Ceph 包
  3. 创建一个最小化集群(MON、MGR、OSD 都在一台机器上)

在这个阶段,建议你重点做几件事:

  • ceph status:随时查看集群整体健康
  • 查看 OSD、MON、MGR 的状态:
    • ceph osd tree
    • ceph 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 中的逻辑存储单元,相当于「数据的命名空间 + 策略集合」。

常用命令示例:

1
2
3
# 创建一个副本数为 3 的存储池
ceph osd pool create mypool 64 64
ceph osd pool set mypool size 3
  • 64 64:PG 和 PGP 的数量(测试环境取一个较小值即可)
  • size 3:表示 3 副本,生产环境要结合硬件规模和可靠性要求设计

6.2 创建 RBD 镜像并挂载

示例流程(以 mypool 为例):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 启用 RBD
ceph osd pool application enable mypool rbd

# 创建一个 10G 的 RBD 镜像
rbd create myimage --size 10240 --pool mypool

# 映射到本地块设备
rbd map myimage --pool mypool --name client.admin

# 在本地格式化并挂载
mkfs.ext4 /dev/rbd/mypool/myimage
mkdir /mnt/ceph-rbd
mount /dev/rbd/mypool/myimage /mnt/ceph-rbd

完成后,你就可以像使用普通磁盘一样使用 /mnt/ceph-rbd 目录了。

6.3 创建并挂载 CephFS

基本步骤:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 创建 CephFS 所需的元数据池和数据池
ceph osd pool create cephfs_data 64
ceph osd pool create cephfs_metadata 16

# 创建 CephFS
ceph fs new myfs cephfs_metadata cephfs_data

# 客户端挂载(内核方式示例)
mkdir /mnt/mycephfs
mount -t ceph mon1,mon2,mon3:/ /mnt/mycephfs \
  -o name=admin,secretfile=/etc/ceph/admin.secret

之后 /mnt/mycephfs 就是一个 POSIX 兼容的分布式文件系统。


7. 学习常用监控和管理命令

入门阶段重点熟悉几类命令:

  • 集群总览
    • ceph status:查看整体健康状态(HEALTH_OK / WARN / ERR)
    • ceph df:查看集群容量使用情况
  • OSD 相关
    • ceph osd tree:查看 OSD 拓扑结构、副本分布
    • ceph osd df:查看各 OSD 使用率
    • ceph osd out/inceph 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 前的自检清单

在开始部署前,建议至少做这几件事:

  • 检查磁盘使用率
1
df -h
  • 根分区使用率尽量控制在 70% 以下
    • 清理无用日志:如 /var/log 下的大日志
    • 清理历史包缓存:如 yum clean all / apt-get clean
    • 清理临时文件:/tmp、Docker 镜像缓存等
    • 条件允许的话,调整分区或扩大根分区容量

9.3 生产环境的磁盘规划建议(简版)

  • 根分区单独一块较小 SSD / 系统盘:只放系统和必要工具
  • 数据盘单独挂载
    • 每块数据盘对应一个 OSD
    • 避免将 OSD 放在根分区所在盘上
  • 为日志 / WAL / DB 预留独立 SSD(条件允许时)
    • 提升性能、降低抖动

10. 总结:一条可执行的 Ceph 入门路径

最后把整条路径再串一下,方便你对照执行:

  1. 学习基础知识
    • 搞清楚 RADOS / MON / OSD / MGR / PG / CRUSH 等核心概念
    • 理解 RBD / RGW / CephFS 各自适用的场景
    • 结合官方文档 + 博客 / 视频形成自己的架构图
  2. 搭建实验环境
    • 优先使用虚拟机或测试服务器,不要直接上生产
    • 部署前先检查 根分区和数据盘的空间,避免 90% 以上使用率
    • 尝试使用 cephadm 快速搭建一个小集群
  3. 实践操作
    • 创建存储池、RBD 镜像、CephFS 文件系统
    • 练习监控和管理命令:ceph statusceph osd treeceph df
    • 故意制造一些“小故障”,练习排障和恢复
  4. 持续学习与进阶
    • 关注社区、阅读他人故障案例
    • 逐步了解纠删码、跨机房容灾、多集群联邦等高级特性

做到以上这些,你就已经真正完成了 Ceph 的入门 + 初级实战
等你在测试环境玩熟之后,再考虑引入到生产环境,会踏实很多。
如果你希望,我也可以在后续帮你写一篇「Ceph 生产环境部署与运维实战指南」,作为这篇入门教程的进阶篇。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计