怎样理解ceph?
Ceph 是一个开源的、高度可扩展的 分布式存储系统,设计用于提供高性能、高可靠性的对象存储(Object)、块存储(Block)和文件存储(File)服务。它的核心思想是通过去中心化的架构和智能的数据分布策略(CRUSH 算法)实现横向扩展,避免单点故障。
1. Ceph 的核心概念
(1) 存储类型
Ceph 支持三种存储接口:
-
对象存储(RADOSGW):兼容 S3/Swift API,适用于图片、视频等非结构化数据。
-
块存储(RBD):提供虚拟磁盘(如 Kubernetes PV),适用于数据库、虚拟机等低延迟场景。
-
文件存储(CephFS):提供共享文件系统,支持多节点读写(如 AI 训练共享数据集)。
(2) 核心组件
组件 | 作用 |
---|---|
OSD | 实际存储数据的守护进程(每个 OSD 对应一块磁盘)。 |
MON | 集群状态管理器,维护全局视图(如 OSD 映射、PG 状态)。 |
MDS | 仅用于 CephFS,管理文件元数据(如目录结构)。 |
RADOS | 底层分布式对象存储系统,所有数据最终以对象形式存储。 |
CRUSH | 数据分布算法,决定数据在 OSD 上的存放位置(无需中心化元数据服务器)。 |
(3) 数据分布逻辑
-
PG(Placement Group):数据分片单位,一个 PG 包含多个对象。
-
Pool:逻辑存储池(如
rbd
、cephfs_data
),每个 Pool 包含多个 PG。 -
CRUSH Map:定义数据分布规则(如故障域:主机/机架/数据中心)。
2. Ceph 的特点
(1) 优势
-
去中心化:无单点故障,MON 和 OSD 均可横向扩展。
-
强一致性:所有写入操作需被多数 OSD 确认后才返回成功。
-
自动修复:数据损坏或节点故障时,自动触发恢复(通过副本或纠删码)。
-
灵活扩展:添加新节点后,数据会自动重新平衡。
(2) 挑战
-
复杂度高:部署和调优需要理解 RADOS、CRUSH、PG 等概念。
-
资源消耗:MON 和 OSD 对 CPU/内存有一定要求(尤其是纠删码计算)。
-
运维成本:需监控 PG 状态、OSD 负载等指标。
3. Ceph 的适用场景
场景 | 推荐存储类型 | 案例 |
---|---|---|
Kubernetes 持久化存储 | RBD(块存储) | 数据库 PVC(如 MySQL) |
共享文件系统 | CephFS | 多 Pod 共享训练数据 |
云原生对象存储 | RADOSGW(S3 兼容) | 替代 AWS S3 存储用户上传文件 |
备份归档 | 纠删码池 | 低成本存储冷数据 |
4. 对比其他存储系统
特性 | Ceph | 传统 SAN/NAS | 云厂商存储(如 AWS EBS) |
---|---|---|---|
架构 | 去中心化,无单点故障 | 中心化(依赖存储控制器) | 中心化(托管服务) |
扩展性 | 线性扩展,支持上千节点 | 有限扩展 | 按需扩展,但有上限 |
成本 | 开源,硬件成本低 | 专有硬件成本高 | 按量付费,长期成本高 |
性能 | 依赖网络和配置调优 | 低延迟(光纤通道) | 稳定但受限于云网络 |
管理复杂度 | 高(需运维集群) | 中等 | 低(全托管) |
5. 如何快速理解 Ceph 的工作原理?
类比:图书馆系统
-
OSD = 书架:实际存放书籍(数据)。
-
MON = 图书管理员:记录哪些书在哪个书架(集群状态)。
-
CRUSH = 图书分类法:决定某本书应放在哪个区域(如“科技类-3号书架”)。
-
PG = 书箱:一组书(对象)的集合,方便批量管理。
-
Pool = 图书馆分区(如“儿童区”“成人区”)。
当有人借书(读取数据)时:
-
询问管理员(MON)书的位置。
-
根据分类法(CRUSH)找到对应书架(OSD)。
-
从书箱(PG)中取出书(对象)。
6. 学习建议
-
动手实验:
-
使用
cephadm
或rook
快速部署测试集群。 -
尝试创建 RBD 块设备、挂载 CephFS。
-
-
关键命令:
ceph -s # 检查集群状态 ceph osd tree # 查看 OSD 分布 ceph df # 查看存储池用量
-
调优方向:
-
调整 PG 数量(
ceph osd pool set <pool> pg_num 128
)。 -
配置故障域(如机架级容灾)。
-
总结
Ceph 是一个功能强大但复杂的“存储瑞士军刀”,适合需要 自建云存储 或 大规模分布式存储 的场景。对于 Kubernetes 用户,通常通过 Rook 或直接集成 RBD/CephFS 来使用。理解其核心组件(OSD/MON/CRUSH)和数据流动逻辑是运维的关键。