在云计算、虚拟化和大规模数据平台里,存储往往是最容易成为瓶颈的一环。单机存储容量有限、可靠性不足,传统集中式存储又常常面临成本高、扩展难、存在单点风险等问题。Ceph 正是在这样的背景下出现的一种开源分布式存储系统。
简单来说,Ceph 是一个统一的分布式存储平台。它可以同时提供对象存储、块存储和文件存储三种能力,并且基于普通服务器构建,具备高可用、高扩展、去中心化等特点。很多人第一次接触 Ceph,是因为 OpenStack、Kubernetes 或私有云平台,但它本身并不依附于这些平台,而是一个独立而完整的存储系统。
一、Ceph 到底是什么
Ceph 是一个开源的分布式存储系统,核心目标是:
- 用普通硬件构建大规模存储集群
- 消除单点故障
- 支持在线扩容
- 在统一架构下同时提供对象、块、文件三类存储服务
如果用一句更工程化的话来描述:
Ceph 是一个以对象存储为底层基础,通过分布式算法完成数据放置、复制、恢复和扩展的统一存储系统。
很多传统存储系统在设计上依赖中心化元数据或专用存储控制器,而 Ceph 更强调“去中心化”和“自治”。这使得它在大规模集群场景下非常有吸引力。
二、为什么 Ceph 重要
理解 Ceph 的价值,先要理解现代基础设施对存储的要求发生了什么变化。
过去企业购买一套存储设备,更多追求的是“稳定可用”;今天的数据平台则更关注:
- 能不能水平扩展
- 能不能按需增加容量
- 能不能容忍节点故障
- 能不能和云平台、容器平台无缝集成
- 能不能同时满足镜像、虚拟机磁盘、备份、日志、对象归档等多种需求
Ceph 之所以流行,就是因为它试图用一套系统解决这些问题。
它适合以下典型场景:
- OpenStack 后端存储
- Kubernetes 持久化存储
- 私有云 / 混合云存储底座
- 海量对象数据存储
- 备份归档平台
- 分布式文件共享平台
三、Ceph 的三个核心能力
Ceph 常被称为“统一存储”,原因在于它不是只做某一类存储,而是支持三种主要接口。
1. 对象存储
对象存储适合图片、视频、日志、备份文件、归档数据等非结构化数据场景。
在 Ceph 里,对象存储通常通过 RADOS Gateway 提供兼容 S3 或 Swift 风格的访问接口。
对象存储的特点是:
- 扩展性强
- 适合海量小文件或非结构化数据
- 天然适合云原生应用
- 通常不强调传统文件系统那种目录层级语义
2. 块存储
块存储主要用于虚拟机磁盘、数据库存储卷等场景。
在 Ceph 中,这一能力通常由 RBD(RADOS Block Device)提供。
块存储的特点是:
- 可以像本地磁盘一样挂载使用
- 适合数据库、虚拟化平台
- 支持快照、克隆等高级特性
- 与 OpenStack、KVM、容器存储生态结合紧密
3. 文件存储
文件存储适合需要 POSIX 文件语义的场景,例如共享目录、数据分析平台、某些传统业务系统。
Ceph 中这部分能力由 CephFS 提供。
文件存储的特点是:
- 面向文件和目录
- 支持标准文件系统访问方式
- 适合对共享文件系统有需求的业务
所以从架构视角看,Ceph 虽然对外可以表现成对象、块、文件三种形态,但底层基础其实是统一的。
四、Ceph 的底层核心:RADOS
要真正理解 Ceph,必须先理解一个关键词:RADOS。
RADOS 的全称是 Reliable Autonomic Distributed Object Store,也就是“可靠的、自治的分布式对象存储”。它是 Ceph 的底座。
你可以把 Ceph 理解成两层:
- 底层:RADOS,负责真正存储数据对象
- 上层:RBD、CephFS、RGW 等,对外提供不同的访问方式
无论是文件、块设备,还是对象接口,最终数据都会落到底层的 RADOS 上。
这意味着:
- Ceph 的统一性来自统一底座
- Ceph 的可靠性也来自底层对象存储机制
- 上层不同接口只是“访问视角不同”,不是三套完全独立的系统
这也是 Ceph 和很多拼装式存储系统的区别之一。
五、Ceph 的核心组件有哪些
在工程实践中,Ceph 集群通常由几个关键组件组成。
1. OSD
OSD 是 Ceph 中最重要的存储进程。
它负责:
- 存储实际数据
- 处理客户端读写请求
- 执行数据复制、恢复、回填
- 上报自身状态
通常一块磁盘对应一个 OSD 进程。
如果说 Ceph 的“血肉”在哪里,那就是 OSD。
2. MON
MON 即 Monitor,主要负责维护集群状态信息。
例如:
- 集群成员信息
- OSD 状态
- 集群拓扑信息
- 一致性视图
客户端和其他组件需要先从 MON 获取集群映射信息,然后再和 OSD 直接通信。
3. MDS
MDS 是 Metadata Server,主要服务于 CephFS。
如果你只使用对象存储或块存储,MDS 并不是必须的;但如果要使用 Ceph 文件系统,就需要 MDS 来管理文件系统元数据。
4. RGW
RGW 即 RADOS Gateway,用于提供对象存储网关能力。
它通常对外暴露 S3 或 Swift 风格接口,让应用可以像访问云对象存储那样访问 Ceph。
5. Manager
Manager 模块负责监控、统计、扩展功能和管理能力。
现代 Ceph 集群很多可视化和运维能力都依赖它。
六、Ceph 为什么能去中心化
Ceph 最经典的设计之一,就是它没有传统意义上的集中式数据定位服务。
很多存储系统在读写数据前,需要先查询一个中心化元数据服务,才能知道数据在哪台机器上。这种设计虽然直观,但元数据中心容易成为:
- 性能瓶颈
- 扩展瓶颈
- 单点故障点
Ceph 采用的是一种更“分布式原生”的思路:通过算法计算数据应该放在哪里,而不是依赖中心节点查表。
这个算法就是著名的 CRUSH。
七、CRUSH:Ceph 的灵魂算法
CRUSH 的核心思想可以概括成一句话:
通过规则和集群拓扑计算数据位置,而不是维护一张巨大的映射表。
传统系统怎么做
传统分布式存储常见方式是:
- 记录“对象 A 在节点 X”
- 记录“对象 B 在节点 Y”
- 客户端读写前先查询这张位置表
问题在于,数据量一大,这张表会变得非常庞大,而且一旦节点变更,就要频繁更新。
Ceph 怎么做
Ceph 不保存“每个对象在哪”的中心映射表,而是根据:
- 对象标识
- 副本策略
- 故障域规则
- 集群拓扑结构
通过 CRUSH 算法直接计算出对象应该落在哪些 OSD 上。
这样做有几个非常大的好处:
- 避免中心化查表瓶颈
- 扩容时更容易重新均衡
- 可以感知机架、主机、机房等故障域
- 有利于大规模集群扩展
这也是为什么很多人说:不理解 CRUSH,就不算真正理解 Ceph。
八、PG 是什么,为什么大家总在讨论它
学习 Ceph 时,另一个绕不过去的概念是 PG,也就是 Placement Group。
很多初学者会疑惑:既然对象可以直接映射到 OSD,为什么还需要 PG?
原因是如果每个对象都直接参与独立映射和管理,系统复杂度会很高。
于是 Ceph 引入了 PG 作为中间抽象层:
- 对象先映射到 PG
- PG 再映射到具体 OSD 集合
这样做的好处是:
- 降低元数据管理复杂度
- 方便故障恢复和数据迁移
- 让集群重平衡更高效
- 控制对象分布粒度
可以把 PG 理解成“对象到磁盘之间的一个分桶层”。
它不是物理实体,但对 Ceph 的性能和稳定性影响很大。
在实际运维中,PG 数量配置不合理,常常会导致:
- 数据分布不均
- 恢复速度慢
- OSD 压力失衡
- 集群告警频繁
所以 Ceph 运维里常有一句话:
PG 配得不好,集群就不会太好。
九、Ceph 的数据写入流程
理解一次写入流程,有助于看懂 Ceph 为什么能做到可靠和可扩展。
简化之后,Ceph 的写入过程大致如下:
- 客户端先获取集群映射信息。
- 客户端根据对象或块信息,通过算法计算目标 PG。
- 再由 PG 映射出目标主 OSD 和副本 OSD。
- 客户端把写请求发送给主 OSD。
- 主 OSD 协调副本写入。
- 当副本满足一致性要求后,返回写入成功。
这里有两个关键点:
- 客户端通常可以直接和 OSD 通信,不需要每次都经过中心代理。
- 数据可靠性依赖副本或纠删码策略,而不是单盘可靠。
这让 Ceph 在节点数量增加时,既能提升容量,也能提高整体吞吐能力。
十、Ceph 的高可用是怎么实现的
Ceph 的高可用,不是通过“某一台超级强的机器”实现的,而是通过分布式冗余和自动恢复机制实现的。
1. 副本机制
最常见的是多副本策略,例如 3 副本。
这意味着同一份数据会保存在多个不同节点上。
当某个节点宕机时,系统仍然可以从其他副本中读取数据。
2. 纠删码
对于海量冷数据或归档场景,副本虽然可靠,但空间开销较大。
这时可以使用纠删码,用更低的存储成本换取容错能力。
它的特点是:
- 更节省容量
- 容错能力依然较强
- 恢复和计算复杂度通常更高
3. 自动恢复与重平衡
当 OSD 故障、节点上下线或集群扩容时,Ceph 会自动进行:
- 数据恢复
- 数据回填
- 数据重平衡
这意味着管理员不需要手工指定“这块数据应该挪到哪台机器”,系统会根据规则自动完成。
十一、Ceph 的优势有哪些
Ceph 并不是唯一的分布式存储方案,但它之所以在技术圈长期保持热度,主要因为下面这些优势。
1. 统一存储
一套系统支持对象、块、文件三种能力,减少基础设施割裂。
2. 高扩展性
理论上可以通过持续增加节点来扩展容量和性能,适合从中小规模逐步演进到大规模集群。
3. 去中心化
依赖算法而非中心查表,降低单点风险,也更适合横向扩展。
4. 高可用
支持副本、纠删码、故障域隔离、自动恢复等机制。
5. 基于通用硬件
可以运行在普通 x86 服务器上,不强依赖昂贵专有设备,成本控制更灵活。
6. 云平台兼容性强
Ceph 与 OpenStack、Kubernetes、虚拟化平台的结合非常广泛,生态成熟。
十二、Ceph 的难点和挑战
不过,Ceph 并不是“银弹”。
它强大,但也复杂。
在实际生产中,Ceph 的挑战通常集中在以下几个方面。
1. 学习门槛高
Ceph 有很多概念需要理解:
- OSD
- MON
- MDS
- Pool
- PG
- CRUSH
- 副本与纠删码
- 恢复与回填
如果只是停留在“会部署”,往往很难真正驾驭线上集群。
2. 运维复杂
Ceph 集群不是装完就结束了。
真正困难的是长期运行中的容量规划、性能调优、故障排查和版本升级。
3. 对网络和硬件要求敏感
分布式存储对网络延迟、磁盘性能、CPU、内存都比较敏感。
架构设计不合理时,Ceph 不但不会快,反而可能成为性能瓶颈。
4. 故障处理需要经验
比如:
- PG 卡住
- OSD flap
- backfill/recovery 过慢
- 集群长期处于 degraded
- mon quorum 异常
这些问题都不是简单“重启一下”就能解决的。
十三、Ceph 适合什么场景
不是所有场景都适合上 Ceph。
判断是否适合,关键看业务目标。
适合的场景
- 需要海量存储扩展
- 需要高可用和容错
- 需要统一对象/块/文件能力
- 需要服务云平台或容器平台
- 有一定基础设施和运维能力
不太适合的场景
- 只有几台机器,规模很小
- 团队缺少分布式存储运维经验
- 业务追求极简架构,不愿承担系统复杂度
- 只是普通 NAS 共享,不需要复杂能力
换句话说,Ceph 更像一个“平台级存储系统”,而不是一个轻量玩具。
十四、Ceph 和传统存储的区别
下面用一张表快速对比。
| 维度 | 传统集中式存储 | Ceph |
|---|---|---|
| 架构模式 | 中心化控制较多 | 去中心化分布式 |
| 扩展方式 | 往往偏纵向扩展 | 偏横向扩展 |
| 硬件依赖 | 常依赖专有设备 | 可基于通用服务器 |
| 存储类型 | 往往单一 | 可统一支持对象、块、文件 |
| 单点风险 | 容易存在控制器风险 | 通过分布式机制降低单点 |
| 运维复杂度 | 前期较简单 | 架构和运维更复杂 |
| 成本结构 | 初始采购成本可能高 | 更适合按节点渐进扩容 |
这张表并不意味着 Ceph 一定全面优于传统存储。
真实世界里,两者更多是适用场景不同。
十五、一个通俗比喻:把 Ceph 想成“自动分仓的超级仓库系统”
如果把数据看成货物,Ceph 就像一个超大型智能仓库网络。
- OSD 是具体仓库货架
- MON 是仓库管理中枢,负责维护整体状态
- CRUSH 是智能分仓规则
- PG 是货物分组箱
- 副本/纠删码是防止货物丢失的保险机制
传统仓库可能需要先问“管理员,这个货在哪”;
Ceph 则更像“根据规则一算,就知道该去哪几个仓位找”。
这个比喻不完全严谨,但对初学者理解 Ceph 的设计思想很有帮助:
它依赖规则和分布式计算,而不是中心化人工登记。
十六、初学者应该怎么学 Ceph
如果你是第一次接触 Ceph,建议按下面的顺序学习。
第一阶段:建立全局认知
先搞懂这些概念:
- Ceph 是统一存储
- 底层是 RADOS
- 三类接口:对象、块、文件
- 核心组件:MON、OSD、MDS、RGW
- 核心机制:CRUSH、PG、副本、恢复
第二阶段:理解数据路径
重点搞懂:
- 数据如何写入
- 数据如何定位
- 为什么不需要中心查表
- 故障后怎么恢复
- 扩容后为什么能重平衡
第三阶段:动手部署实验环境
建议先从最小可运行集群开始,不要一开始就追求“生产级部署”。
先看懂:
- 节点角色
- pool 创建
- pg 状态
- osd 状态
- 数据分布
- 故障恢复过程
第四阶段:进入运维和调优
这一步才是真正拉开差距的地方,包括:
- CRUSH map 理解
- 副本和纠删码选择
- 网络规划
- 磁盘规划
- 性能瓶颈分析
- 故障排查方法
十七、结语
Ceph 本质上不是“一个能存数据的软件”这么简单。它代表的是一种现代分布式存储设计思路:以对象为基础、以算法做数据放置、以去中心化提升扩展性、以冗余机制保证可靠性。