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 监控集群状态,自动修复故障”。它解决了传统存储 “容量小、不安全、速度慢” 的问题,所以能支撑海量数据场景(比如云服务、大数据存储)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95175.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95175.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/95175.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试小结(1)

一、什么是测试?1.1 生活中常见的测试例如去商场买衣服:①、选择一件符合审美的衣服 -> 外观测试;②、穿上身上试试是否合身 -> 试穿测试;③、 看看衣服的材料是否纯棉 -> 材料测试;④、 询问衣服的价格 ->…

Python未来3-5年技术发展趋势分析:从AI到Web的全方位演进

Python作为全球最流行的编程语言之一,在开发者社区中占据核心地位。其简洁语法、丰富库生态和跨领域适用性,使其在AI、Web开发、数据科学等领域持续领先。本文基于当前技术演进趋势(如2023-2024年的开源项目、社区讨论和行业报告)…

【ComfyUI】SDXL Turbo一步完成高速高效的图像生成

今天演示的案例是一个基于 ComfyUI 与 Stable Diffusion XL Turbo 的图生图工作流。整体流程通过加载轻量化的 Turbo 版本模型,在文本编码与调度器的配合下,以极快的推理速度完成从提示词到高质量图像的生成。 配合演示图可以直观感受到,简洁…

基于 GPT-OSS 的在线编程课 AI 助教追问式对话 API 开发全记录

本文记录了如何在 3 天内使用 GPT-OSS 开源权重搭建一个 在线编程课 AI 助教追问式对话 API&#xff0c;从需求分析、数据准备到微调与部署全流程实战。 1️⃣ 需求与指标 回答准确率 ≥ 95%响应延迟 < 1 秒支持多学生并发提问 2️⃣ 数据准备 收集课程问答对清理无效数据…

YOLO v11 目标检测+关键点检测 实战记录

流水账记录一下yolo目标检测 1.搭建pytorch 不做解释 看以往博客或网上搜都行 2.下载yolo源码 &#xff1a; https://github.com/ultralytics/ultralytics 3.样本标注工具&#xff1a;labelme 自己下载 4.准备数据集 4.1 新建一个放置数据集的路径4.2 构建训练集和测试集 运行以…

uniApp 混合开发全指南:原生与跨端的协同方案

uniApp 作为跨端框架&#xff0c;虽能覆盖多数场景&#xff0c;但在需要调用原生能力&#xff08;如蓝牙、传感器&#xff09;、集成第三方原生 SDK&#xff08;如支付、地图&#xff09; 或在现有原生 App 中嵌入 uniApp 页面时&#xff0c;需采用「混合开发」模式。本文将系统…

【大模型】使用MLC-LLM转换和部署Qwen2.5 0.5B模型

目录 ■准备工作 下载模型 安装依赖 安装基础依赖 安装mlc-llm ■权重转换 ■生成配置文件 ■模型编译 GPU版本编译 CPU版本编译 ■启动服务 启动GPU服务 启动CPU服务 ■服务测试 ■扩展 优化量化版本(可选,节省内存) INT4量化版本 调整窗口大小以节省内存…

云计算学习100天-第43天-cobbler

目录 Cobbler 基本概念 命令 搭建cobbler 网络架构 Cobbler 基本概念 Cobbler是一款快速的网络系统部署工具&#xff0c;比PXE配置简单 集中管理所需服务&#xff08;DHCP、DNS、TFTP、WEB&#xff09; 内部集成了一个镜像版本仓库 内部集成了一个ks应答文件仓库 提供…

接口测试:如何定位BUG的产生原因

1小时postman接口测试从入门到精通教程我们从在日常功能测试过程中对UI的每一次操作说白了就是对一个或者多个接口的一次调用&#xff0c;接口的返回的内容(移动端一般为json)经过前端代码的处理最终展示在页面上。http接口是离我们最近的一层接口&#xff0c;web端和移动端所展…

GPIO的8种工作方式

GPIO的8种工作方式&#xff1a;一、4 种输入模式1.1 Floating Input 浮空输入1.2 Pull-up Input 上拉输入1.3 Pull-down Input 下拉输入1.4 Analog Input 模拟输入二、4种输出模式2.1 General Push-Pull Output 推挽输出2.2 General Open-Drain Output 开漏输出2.3…

LeetCode算法日记 - Day 29: 重排链表、合并 K 个升序链表

目录 1. 重排链表 1.1 题目解析 1.2 解法 1.3 代码实现 2. 合并 K 个升序链表 2.1 题目解析 2.2 解法 2.3 代码实现 1. 重排链表 143. 重排链表 - 力扣&#xff08;LeetCode&#xff09; 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L…

算法模板(Java版)_前缀和与差分

ZZHow(ZZHow1024) &#x1f4a1; 差分是前缀和的逆运算。 前缀和 &#x1f4a1; 前缀和作用&#xff1a;快速求出 [l, r] 区间的和。 一维前缀和 例题&#xff1a;AcWing 795. 前缀和 import java.util.Scanner;public class Main {public static void main(String[] args)…

openssl使用SM2进行数据加密和数据解密

一、准备工作 1. 安装依赖 sudo apt-get update sudo apt-get install libssl-dev2. 确认 OpenSSL 版本 openssl version如果是 1.1.1 或 3.0&#xff0c;就支持 SM2/SM3/SM4。二、C 语言示例代码 这个程序会&#xff1a; 生成 SM2 密钥对使用公钥加密一段明文使用私钥解密恢复…

用滑动窗口与线性回归将音频信号转换为“Token”序列:一种简单的音频特征编码方法

在深度学习和语音处理领域&#xff0c;如何将原始音频信号有效地表示为离散的“Token”序列&#xff0c;是语音识别、音频生成等任务中的关键问题。常见的方法如Mel频谱图向量量化&#xff08;VQ&#xff09;、wav2vec等已经非常成熟&#xff0c;但这些模型通常依赖复杂的神经网…

Vue开发准备

vs code VSCode的下载地址https://code.visualstudio.com/Download Node.js node.js的下载地址 https://nodejs.org/zh-cn/download 注意&#xff1a;nodejs安装路径不要和vscode安装到同一个文件夹&#xff0c;两个应用分别装到两个不同的文件夹 npm config set cache &q…

QT6(QFileSystemModel和QTreeView)

QT6QFileSystemModel和QTreeView QFileSystemModel为本机的文件系统提供一个模型&#xff0c;QFileSystemModelt和QTreeView结合使用&#xff0c;可以用目录树的形式显示本机的文件系统&#xff0c;如同Windows的资源管理器一样使用QFileSystemModel提供的接口函数&#xff0c;…

【开题答辩全过程】以 基于Spring Boot的房屋租赁系统的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

构建下一代智能金融基础设施

1. 行业背景&#xff1a;从数字支付到可编程金融的范式跃迁全球数字支付市场正以万亿美元的规模持续扩张&#xff0c;但其底层系统仍受限于传统金融的清算、结算延迟和高昂的中间成本。尽管互联网技术提升了支付的便捷性&#xff0c;但其核心仍是中心化账户体系的延伸。Web3 技…

【C++】深入解析C++嵌套依赖类型与typename关键字

什么是嵌套依赖类型&#xff1f;嵌套依赖类型&#xff08;Nested Dependent Type&#xff09;是指在一个模板中&#xff0c;一个类型名称依赖于模板参数&#xff0c;并且是该模板参数内部的嵌套类型。具体来说&#xff0c;当一个类型满足以下两个条件时&#xff0c;它就是嵌套依…

管网信息化监测主要的内容

管网信息化监测是指通过现代信息技术手段对管网系统进行实时监控和数据采集的管理方式。其背景源于城市化进程加快以及基础设施建设规模不断扩大&#xff0c;传统的管网管理模式已无法满足现代化需求。管网信息化监测主要内容包括以下几个方面&#xff1a;█管网运行状态监测&a…