写点什么

Ceph RBD 诞生 15 周年:开源创造的故事

作者:Yehuda Sadeh-Weinraub

  • 2025-07-09
    北京
  • 本文字数:3619 字

    阅读完需:约 12 分钟

大小:1.55M时长:09:01
Ceph RBD 诞生15周年:开源创造的故事

今年是 RADOS 块设备(RBD),Ceph块存储接口诞生后的第十五年。Ceph 是一个分布式存储系统。它由Sage Weil在加州大学圣克鲁斯分校的博士论文中启动,最初的设计只是作为一个从头开始构建的分布式文件系统。随着 Ceph 发展成为一个统一的企业级存储平台,除了文件系统接口外,Ceph 现在还支持对象和块存储。RESTful 对象存储接口(RADOS Gateway,或 RGW),旨在与 AWS S3 兼容,以及 RBD,一个块存储系统,是后来增加的,扩展了 Ceph 的能力。这个周年纪念是一个很好的回顾 RBD 如何诞生的机会。

 

我于 2008 年加入 Ceph 项目。我的第一次提交是在一月份;那年晚些时候我开始全职工作。一开始就很激动人心。Sage 和我在洛杉矶市中心一栋高层建筑的五十层共用一间办公室。每天午餐时,我们都有一个非常私人的 Ceph 会议。如今,Cephalocon,一年一度的 Ceph 会议吸引了来自世界各地的数百名参与者。那时,Ceph 刚刚从学术界毕业,在 DreamHost (Sage 多年前与人共同创立的一家公司)开始了第二阶段的孵化。全职从事 Ceph 工作的总人数就 2 个。

 

在我工作的第一天,Sage 告诉我,存储库里有一个 TODO 文件,我应该做我想做的。我把这句话的两个部分视为两个不同且独立的信息。在看了 TODO 文件后,我倾向于“我应该做我想做的”,并看到以下内容:


- ENOSPC - 完成客户端故障恢复(长时间退出后重新连接;以及慢速延迟重新连接)- 使kclient使用->sendpage?- 移除io中断?
缺陷 - 日志断言(header.wrap)在print_header()中
大项目 - ENOSPC- 可执行的配额?- mds安全执行 - 客户端,用户认证 - cas ......
复制代码


在早期,我们能做的事情堆积如山,所以我们真的尝试探索了很多方向。Sage 最近为 Ceph 添加的快照功能占用了这个 TODO 文件的很大一部分。我选择的第一个项目,ceph.conf 配置系统,它不那么引人注目,但却是必不可少的。在此之前,为了运行任何 Ceph 命令,你需要在命令行中传入所有配置。对于一个学术项目来说,这可能是可以接受的,但任何有用的应用程序都需要一个可行的配置系统。

 

一个 RESTful 对象存储系统

我们继续致力于让 Ceph 文件系统为黄金时间做好准备,在此过程中,我们还考虑了存储系统可以做的其他伟大的事情。在 2009 年初,我开始研究一个新的和令人兴奋的 RESTful 对象存储系统(最初命名为 C3,很快切换到临时名称 RADOS Gateway 或 RGW)。Ceph 已经有了一个名为RADOS的内部对象存储系统,那么为什么不直接通过 S3 API 暴露它呢?结果发现有很多原因可以解释为什么将 RADOS 直接 1:1 映射到 S3 不是一个好主意。

 

RADOS 语义与 S3 兼容系统所需的语义有很大不同。例如,RADOS 的对象大小限制相对较小,而 S3 可以支持高达 5TB 的对象。S3 将对象保存在索引桶中。然而,RADOS 将对象保存在未索引的池中,因此列出没有索引的对象是一种非常低效的操作。我们在弄清楚正确的 RGW 架构的过程中遇到了很多这样的问题。

 

我探索了一个并行的工作,我们称之为“活动对象”,这是 Ceph 对象类的前身。我们的想法是让计算更接近数据,这样我们就可以扩展存储做更多的事情。在第一次迭代中,你可以推送一个 Python 代码片段,然后在 Ceph 对象存储守护进程(OSDs)中执行。

 

关注谷歌新闻

那时,当你在谷歌上搜索 Ceph 时,大多数搜索结果要么是关于公共卫生教育委员会的,要么是关于电子艺术 Crysis 游戏系列中的 Ceph 外星物种的。我为“Ceph”关键词设置了一个谷歌新闻提醒,看看是否有人发表了关于我们项目的任何内容。在 2009 年 11 月初,我收到了一个通知,链接到一篇关于Sheepdog的文章,这是一个新的 QEMU 分布式块存储系统。这触发了谷歌新闻提醒,因为有人在评论中建议 Ceph 可能是一个更可行的解决方案。我指着 Sage 说:


我:http://www.linux-kvm.com/content/sheepdog-distributed-storage-management-qemukvm注意评论中的ceph引用 Sage:很好!是的,这让我想到,制作一个块设备驱动程序非常容易,只是覆盖对象 我:是啊..我们可能需要花点时间来做这件事,也许有一些rados内核客户端,并且在此基础上设置一个块设备Sage:这意味着清理monc,osdc接口..但无论如何这可能是件好事.........
复制代码


早期的 RBD 实现

可以理解的是,我们并没有为了实现这一点而搁置所有其他工作。我们正忙于实现 CephX,Ceph 的身份验证和授权子系统(在我们决定如何命名之前,X 是一个占位符,这是一项我们从未有时间完成的任务)。Ceph 文件系统内核模块尚未合并到 Linux 内核中,这是我们一段时间以来一直在积极努力实现的一个里程碑。为了保持 Ceph 的真正开放过程,Sage 在接下来的一周发布了一封邮件列表消息,介绍了这个想法。他建议了两个项目(Weil, Sage, Email to Ceph-devel 邮件列表。2009 年 11 月 11 日):


- 组装一个类似的qemu存储驱动程序,使用librados存储图像片段。这应该非常简单(存储驱动程序完全在用户空间实现)。我怀疑最难的部分将是决定如何命名和管理可用图像列表。
- 编写一个Linux块设备驱动程序,做同样的事情。这在功能上类似于在ceph之上创建一个回环设备,但可以避免文件系统层和与MDS的任何交互。这样做的好处是完全支持TRIM和壁垒。
复制代码


几个月后,Christian Brunner 对我们的行动呼吁做出了回应,他向我们发送了一个QEMU驱动程序的初始实现。我们能够使用他创建的基础,并开始准备将其包含到上游 QEMU 中。Ceph 文件系统模块在几周内被合并到 Linux 内核中,这对项目来说是一个巨大的成功。我还决定开发第二个内核驱动程序,这次是一个与这个 QEMU 驱动程序兼容的块设备驱动程序。

 

这两个 RBD 驱动程序是两个独立的实现;它们之间共享的代码非常少,因为其中一个是编写为在用户空间运行并与 QEMU 块接口集成,而另一个是创建为作为 Linux 内核模块运行并实现内核块驱动程序的接口。两个驱动程序都非常精简,并将 I/O 操作转换为 RADOS 对象操作。一个单一的块图像被分割成多个小尺寸的 RADOS 对象,这允许操作在多个 OSD 上并行运行,这得益于 Ceph 的横向扩展功能。

 

更多功能

我们为两个 RBD 驱动程序添加了更多功能:用于 RBD 卷的管理工具和对快照的支持。为了使快照正确工作,运行实例需要在创建时了解它们。为此,我实现了一个新的 Ceph 子系统,称为 Watch/Notify,它允许通过 RADOS 对象发送事件。RBD 实例“监视”其图像元数据对象,管理工具在创建新快照时向其发送通知。

 

我们创建的首次使用的另一个子系统是 Ceph 对象类。这种机制允许在 RADOS I/O 路径中创建专门的代码,可以被调用以对 RADOS 对象进行变异或进行复杂的读取操作。第一个对象类被实现以跟踪 RBD 快照的名称及其映射到 RADOS 快照 ID。与需要更复杂的锁或其他机制来处理竞争的动态读-修改-写周期不同,我们只会发送一个单一的 RBD 快照创建调用,它将在 OSD 上原子地完成。

 

上游验收

创建 RBD Linux 内核设备驱动程序需要清理所有 Ceph 内核代码,并将通用的 RADOS 代码移动到一个单独的内核库中。我们在创纪录的时间内将其纳入 Linux 内核。它于 2010 年 10 月在上游被合并,距离文件系统被合并后仅六个多月。

 

Christian 继续帮助 QEMU 驱动程序的开发,现在他回忆起让 QEMU 驱动程序上游的最困难的部分是:

 

“当时,为了说服 QEMU 项目相信分布式存储系统的驱动程序是必要的,我们进行了相当大的讨论。”

 

此外,在 QEMU 项目内部还有一场单独的讨论,讨论是否应该合并驱动程序,或者他们是否应该创建一个插件块存储机制,允许外部添加不同的驱动程序,而不需要它们的参与。大约在同一时间,sheepdog 项目也在审查中,并参与了同样的讨论。QEMU 项目开发人员不想处理新驱动程序不可避免会带来的问题和错误。我们和 sheepdog 开发人员都表示我们将处理我们的驱动程序出现的问题。最后,单体路径占了上风,并决定将驱动程序作为 QEMU 存储库的一部分。

 

我们经历了审查过程,并确保我们对审查人员提出的所有问题做出了回应和解决。例如,驱动程序使用的原始线程模型是错误的,需要解决。最后,在将内核 RBD 驱动程序合并到 Linux 内核几周后,我们还合并了上游的 QEMU 驱动程序。

 

从第一个想法到两个驱动程序被合并,只花了大约一年的时间。整个项目催生了多个子项目,这些项目现在已成为 Ceph 生态系统的基础。RBD 建立在 RADOS 提供的坚实基础之上,因此,它得益于所有 Ceph 项目贡献者的辛勤工作。

 

RBD 的好处

RBD 几乎一夜成名。现在,它成为了虚拟化和云系统中的关键存储基础设施。由于其无缝集成和可扩展性,它成为了 OpenStack 事实上的标准持久存储。在 Kubernetes 中,它提供了有状态容器化应用程序所需的可靠持久存储层。在传统的虚拟化和私有云环境中,它提供了一个开放的、分布式的、高可用的虚拟机存储,作为专有存储的替代品。由于许多 Ceph 项目贡献者和其他与之交叉的项目的努力,它仍在不断改进和演变。

 

展望未来

这是一个展示开源力量的合作努力。希望取代旧 TODO 文件的内容不会那么模糊,但不会更短。我们仍然有很多工作要做,还有更多我们甚至无法想象的创新领域。有时,一个想法的火花和一个有愿意的社区就是所需要的一切。

 

感谢 Christian Brunner 和 Sage Weil 提供的宝贵意见。

 

原文链接:

https://www.infoq.com/articles/ceph-rbd-open-source/

2025-07-09 17:009659

评论

发布
暂无评论

推理加速新范式:火山引擎高性能分布式 KVCache (EIC)核心技术解读

火山引擎开发者社区

火山引擎

veMLP x veRL :玩转强化学习训练

火山引擎开发者社区

开发 火山引擎

大型网站架构实战!

程序员高级码农

Java 程序员 架构师

具身智能领域,全球Top50国/华人图谱(含具身智能赛道“师徒关系图”)

机器人头条

科技 大模型 人形机器人 具身智能

K8s进阶之一文搞懂PV,PVC及SC

电子尖叫食人鱼

Kubernetes 容器

AI 调教指南!一文教会你如何在 Trae IDE 中配置自定义规则

火山引擎开发者社区

AI 火山引擎

远控安全金标准,ToDesk、向日葵、网易UU安全功能盘点,是否能攻破防线

小喵子

远程办公 远程 远程控制软件

集成指南:如何基于融云 Flutter IMKit 实现双端丝滑社交体验

融云 RongCloud

【浪潮海岳inDatax数据中台专栏】海岳inDataX“易宝特”流程自动化平台建设与实践

inBuilder低代码平台

【免费开源】积木报表MongoDB数据集使用实战

JEECG低代码

mongodb 数据可视化 报表 报表工具

【免费开源】积木报表文件数据集使用实战

JEECG低代码

数据可视化 报表 报表工具

【免费开源】积木报表ElasticSearch数据集使用实战

JEECG低代码

elasticsearch 数据可视化 报表 报表工具

「智元机器人」“稚晖君”彭志辉:机器人不玩“后空翻”,选择实用主义优先路线!

机器人头条

科技 大模型 人形机器人 具身智能

热点追踪+精准解读——火山引擎 AI 域名推荐上线!

火山引擎边缘云

域名解析 域名 域名备案 域名系统 AI Agent,

混合编程会是软件产业发展的必然选择吗?

代码制造者

混合编程

Python 3.14 新特性盘点,更新了些什么?

不在线第一只蜗牛

Python

十年一诺:一张SPN获奖证书背后的技术征途

脑极体

通信

如何在通义灵码里使用 MCP 能力?

阿里云云效

阿里云 通义灵码 MCP

微服务架构原理与开发实战!

程序员高级码农

程序员 微服务 架构师

全国首个!字节跳动发布 EthLink,填补以太网 GPU Scale-up 互联协议空白

火山引擎开发者社区

字节跳动 以太网

【有奖活动】 放“码”来战,端云一体化挑战赛

HarmonyOS SDK

harmoyos

HarmonyOS沙箱文件管理与离线包加载机制解析

记忆深处的声音

鸿蒙 开发工具 HarmonyOS HarmonyOS NEXT 实践分享

重磅预告|开源鸿蒙开发者大会2025举办在即

最新动态

React-native脚手架探索

溪抱鱼

typescript html React

区块链钱包开发全解析:从架构设计到安全生态构建

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

Java 原生异步编程与Spring 异步编程 详解

不在线第一只蜗牛

Java spring

如何在通义灵码里使用 MCP 能力?

阿里巴巴云原生

阿里云 云原生 通义灵码 MCP

高新技术加持下,低代码平台还能进化成什么样?

天津汇柏科技有限公司

低代码

2025年PM产品力领航者大会 | 上海巅峰论道

新消费日报

RocketMQ半消息对消费者不可见是如何实现的?——事务消息机制揭秘

量贩潮汐·WholesaleTide

Java RocketMQ

遭遇DDoS攻击为什么不能反击回去?

网络安全服务

CDN 服务器 DDoS 带宽 高防IP

Ceph RBD 诞生15周年:开源创造的故事_架构_InfoQ精选文章