AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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:003

评论

发布
暂无评论
发现更多内容

做了5年Android,靠着这份190页的面试资料,成功入职腾讯

android 程序员 移动开发

入职两年的安卓“程序员“跳槽,2021年阿里Android面试题精选

android 程序员 移动开发

全面!2020华为Android岗面试真题(已解析含答案,android蓝牙开发框架

android 程序员 移动开发

关于 Flutter 是不是“大有可为”这件事,androidjetpack教程

android 移动开发

关于拼多多被曝删除用户本机照片的一点想法,移动服务框架app下载安装

android 程序员 移动开发

内存泄漏以优化大全,2021非科班生的Android面试之路

android 程序员 移动开发

写代码还是做管理?安卓开发者的困扰,一文全懂

android 程序员 移动开发

兄弟们,这年头,咱移动客户端工程师还有前途吗,flutter图片压缩上传

android 程序员 移动开发

这本“算法宝典”讲得透彻,完全掌握后,我竟拿到字节跳动offer

程序员 算法 字节

元宇宙,如何看待它就是下一代互联网(附下载)

CECBC

再见!onActivityResult!你好,android开发电子书阅读器

android 程序员 移动开发

架构实战营模块毕业总结

河马先生

架构实战营

毕业设计—电商秒杀系统

俊杰

架构实战营

05 K8S之kubeadm介绍

穿过生命散发芬芳

k8s 11月日更

做了5年Android,靠着这份面试题跟答案,我从12K变成了30K

android 程序员 移动开发

六年Android从迷茫到大牛的成长之路,不忘初心,方得始终

android 程序员 移动开发

关于Android的渲染机制,大厂面试官最喜欢问的7个问题【建议收藏

android 程序员 移动开发

关于大厂Android面试必问的事件分发机制,应该没有比这篇讲的更好的了

android 程序员 移动开发

写给Android开发者的混淆使用手册,程序员工作2年月薪12K

android 程序员 移动开发

做了六年Android,终于熬出头了,15K到31K全靠这份高级面试题

android 程序员 移动开发

全面复盘Android开发者容易忽视的Backup功能 _ 创作者训练营第二期

android 程序员 移动开发

全面理解 Flutter(万字长文,深度解析,整理了3家面试问题:美团+字节+腾讯

android 程序员 移动开发

关于MVC_MVP_MVVM的一些错误认识,android面试流程

android 程序员 移动开发

关于拼多多被曝删除用户本机照片的一点想法(1),android程序设计基础

android 程序员 移动开发

全网都刷爆了,不会只有你不知道吧—,android智能手机编程答案

android 程序员 移动开发

架构实战营-模块九-毕业设计

Cingk

关于使用 Android MVVM + LiveData 模式的一些建议,ffmpeg音视频同步

android 程序员 移动开发

再见!onActivityResult!你好(1),太现实了

android 程序员 移动开发

区块链上的房地产:区块链会颠覆房地产吗?

CECBC

再见!杭州!再见,kotlin数组fold方法

android 程序员 移动开发

关于程序员35岁的坎:年龄不是挡板,当你匹配了这个年纪该有的能力还有什么畏惧

android 程序员 移动开发

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