Ceph开发每周谈 Vol 17 — ARM Status | RBD 一致性组合 | 内核模块 转至元数据结尾

2016年04月 · 麦子迈

这是Ceph开发每周谈的第十七篇文章,记录从16年3月29号到16年4月3号的社区开发情况。笔者从前年开始做Ceph的技术模块分析到今年中告一段落,想必有挺多人期待下一篇Ceph技术分析。考虑到Ceph的发展已经从前年的一穷二白到现在的如火如荼,但对于社区的方向和实况仍有所脱节,笔者考虑开始Ceph开发每周谈这个系列。每篇文章都会综述上周技术更新,围绕几个热点进行深度解析,如果正好有产业届新闻的话就进行解读,最后有读者反馈问题的话并且值得一聊的话,就附上答疑部分。

  • 上周综述

上周成功发布第一个 RC release 以后,社区正在准备 RC2 的 release,预计在 RC2 以后会结束对于特性的冻结。

  • ARM Status

在上周 Loic 完成了初步的 ARM 架构进入 QA Lab 的工作,目前并没有使用实际的一体机,而是在 CloudLab(http://cloudlab.us/index.php) 和 ARMCloud(https://www.runabove.com/armcloud.xml) 的虚拟机场景开始,ARM 架构的 Ceph 相关的主要软件包都没有问题,主要卡在 Ceph 所需的一些 ARM 依赖包并没有被很好的维护,或者没有足够的版本支撑。但是这些包在 ARM 架构下都会被替换掉。

接下来的主要工作是为所有 Ceph 测试组件增加 ARM64 架构的代码,用以支持指定架构进行测试运行,如 https://github.com/ceph/teuthology/pull/835/files

  • RBD 一致性组

我们知道传统存储通过支持一致性组来完成对于应用层卷远程复制的支持,因为像 Oracle 这种应用通常单一卷快照是无法接近应用快照,一个应用跟多个卷相关。OpenStack Cinder 也实现了对一致性组的 API 支持。

一致性组将成为一个新的 RBD 对象,类似于 RBD Image,Snapshot。它的实现跟目前 RBD 的一些复杂状态机特性是接近的,都是采用 Notify/Watch 机制实现。通过客户端发起对于多个卷的快照,经过所有卷客户端同意并快照后,保存这几个快照的 snapid。如果中间有卷无法成功,则简单删除快照即可。

  • Ceph 内核模块

在上周 Jewel release 以后,Ceph 内核模块又遭受一轮问题,主要在于 Jewel 大量的 LibRBD 特性无法被 Kernel Client 支持。同时,在公共库如 auth,features 上都遭受不兼容问题。在这个问题上,社区实际上暴露了在内核模块测试不充分的问题,目前 Jewel 内核客户端相比于用户态代码几乎可以认为太大进展,尤其是 kernel rbd。因此,使用 kernel rbd 的用户需要充分警惕未来的升级可能造成的不兼容。