Ceph存储原理解析
要理解 Ceph 的存储原理,我们可以用一个 “分布式仓库” 的比喻来拆解 —— 把 Ceph 想象成一个由多个 “仓库管理员”(硬件节点)共同打理的大型仓库,能高效存储、管理海量货物(数据),还能保证货物不丢、不坏、随时能取。
一、先明确 Ceph 的核心目标:解决 “海量数据怎么存” 的痛点
传统存储(比如单台服务器的硬盘)有三个致命问题:
- 1.容量有限:硬盘满了就没法存;
- 2.不安全:硬盘坏了数据就丢了;
- 3.速度慢:大量数据同时读取时卡顿。.
Ceph 的核心思路就是 “把多台服务器的硬盘拼起来,用一套规则统一管理”,既解决容量问题,又通过 “多份备份” 保证安全,还能 “并行读写” 提升速度。
二、Ceph 的核心组件:3 个 “关键角色”
就像仓库需要 “管理员”“货架”“搬运工”,Ceph 也有三个核心组件,各司其职:
组件角色 | 比喻(仓库场景) | 实际作用 |
---|---|---|
MON(监控节点) | 仓库总控室 | 监控整个集群状态(比如 “哪个货架坏了”“还有多少空位”),给其他组件发指令,保证集群不乱。 |
OSD(存储节点) | 货架 + 管理员 | 实际存数据的 “硬盘载体”(每台服务器的硬盘对应一个 OSD),同时负责数据的备份、修复。 |
PG(Placement Group) | 货物分类标签 | 把数据 “打包分组”,避免数据混乱(比如 “所有家电放一组,所有零食放一组”),方便管理和查找。 |
三、Ceph 存储数据的 “3 步魔法”
从 “数据” 到 “安全存在硬盘里”,我们以存一张照片(比如 vacation.jpg)为例,看 Ceph 是怎么把它存到集群里的:
第 1 步:给数据 “贴标签”—— 计算 PG
注:Ceph 不会直接把照片丢给某个硬盘,而是先给数据 “分类”:
- 1.给照片算一个唯一的 “身份证号”(用哈希算法对文件名 / 路径计算,得到一个数字);
- 2.根据这个 “身份证号”,分配一个 PG 分组(比如分到 “PG-10” 这个组)。
👉 作用:比如一个集群有 1000 个硬盘(OSD),如果直接给每个数据分配硬盘,管理成本极高;但先分 100 个 PG,每个 PG 对应 10 个硬盘,就简单多了。
第 2 步:给 PG “找货架”——CRUSH 算法分配 OSD
Ceph 有个 “智能分配规则” 叫 CRUSH 算法,它根据两个关键信息给 PG 找 “存放的货架(OSD)”:
- 1.集群状态:比如 “哪个 OSD 有空位”“哪个 OSD 没坏”;
- 2.存储策略:比如 “这组数据要存 3 份备份”“不能把备份存在同一台服务器上(避免服务器断电全丢)”。
比如 CRUSH 会把 “PG-10” 分配给 3 个不同服务器的 OSD(比如 OSD-1、OSD-5、OSD-9),保证数据有 3 份备份,且不会因为一台服务器坏了就丢数据。
第 3 步:数据 “写入 + 备份”——OSD 之间同步
- 1.数据先传到第一个 OSD(比如 OSD-1),OSD-1 把数据存到自己的硬盘里;
- 2.OSD-1 再把数据同步给另外两个 OSD(OSD-5、OSD-9),确保 3 份数据完全一致;
- 3.只有当 3 个 OSD 都回复 “存好了”,Ceph 才会告诉用户 “数据存成功了”。
👉 安全保障:哪怕 OSD-1 坏了,OSD-5 和 OSD-9 里还有备份,Ceph 会自动再找一个新的 OSD 补全 3 份,数据永远不会丢。
四、Ceph 怎么 “读数据”?—— 快速找到并返回
当你要读这张照片时,Ceph 只需要 3 步:
- 1.用同样的哈希算法,根据文件名算出 “身份证号”,找到对应的 PG(还是 PG-10);
- 2.通过 CRUSH 算法,知道 PG-10 存在 OSD-1、OSD-5、OSD-9 上;
- 3.从 “最近 / 没坏” 的 OSD 里读数据(比如 OSD-1 离得最近,就从它那读),返回给用户。
👉 速度保障:不用遍历所有硬盘,直接定位到目标 OSD,还能选最近的,读取速度快。
五、Ceph 怎么 “修坏的货架”?—— 自动修复,不用人工
如果某个 OSD 坏了(比如硬盘故障):
- 1.MON 监控到 “OSD-1 离线了”,立刻告诉整个集群;
- 2.CRUSH 算法发现 “PG-10 只剩 2 份备份了”,就找一个新的空闲 OSD(比如 OSD-12);
- 3.让 OSD-5(或 OSD-9)把数据复制到 OSD-12,补全 3 份备份;
- 4.修复完成后,集群又回到 “3 份备份” 的安全状态,全程不用人工干预。
六、Ceph 能存 “不同类型的货物”——3 种存储模式
Ceph 不止能存文件(比如照片、文档),还能存 “块设备”(比如给虚拟机当硬盘)、“对象”(比如云存储里的图片),本质是在上面的核心原理基础上,加了不同的 “接口”:
- 对象存储(RGW):给云服务用(比如存手机上传的照片),按 “对象”(数据 + 元信息)存储;
- 块存储(RBD):给虚拟机 / 物理机当硬盘用(比如给服务器加一块 “虚拟硬盘”);
- 文件存储(CephFS):像本地文件夹一样用(比如服务器挂载一个 “共享文件夹”,多台机器能同时读写)。
总结
Ceph 的核心逻辑Ceph 本质是 “用 CRUSH 算法把数据分组(PG),分配到多个 OSD 上存多份备份,再用 MON 监控集群状态,自动修复故障”。它解决了传统存储 “容量小、不安全、速度慢” 的问题,所以能支撑海量数据场景(比如云服务、大数据存储)。