Ceph开发每周谈 Vol 35 | Ceph Developer Month

2016年08月 · 麦子迈

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

  • 上周综述

上周主要召开了 Ceph Developer Month,上个月的 CDM 取消了,所以这次的内容会比较多,Sage 由于休假也没有参加。

  • Introduce Mantle, a programmable metadata load balancer

CephFS 的重要特性就是支持多个 Active MDS 之间的数据目录动态负载迁移,使得能够让每个 MDS 类似于自适应的负载均衡,最终能调整 MDS 的负载。但是这个策略目前的实现都是应编码,不能根据业务需要配置。因此 UC Santa Cruz 的 Michael Sevilla 实现了一个可编程的元数据负载均衡命名为 Mantle。这个项目主要为了解决负载的迁移,复制和碎片化。

目前是使用 LUA 实现了写平衡策略,然后存储在 MDSMap 里来提示使用哪个 Balance(系统自带的 Balance)。同时将不同的 Balance 作为一个 Rados Object 存起来,把 MDS 的 cpu 负载也能作为一个指标利用起来。

这个项目的论文也发布了:

Supercomputing ’15 Paper: http://sc15.supercomputing.org/schedule/event_detail-evid=pap168.html

  • 去重: CAS 客户端原型

去重在之前的 CDM 就讨论过,这次主要讨论了去重的客户端的实现原型。在 Ceph 实现去重的核心思想是内容寻址 Ceph 对象,一般情况下,Ceph 目前对象是通过对象名来定位,而内容寻址存储的核心是对象名被内容的指纹决定。因此,如果对同样的数据写两次,只会在一个对象中存储。在 Ceph 中 CAS Pool 用来去重数据,每个 CAS 对象都有一个引用计数,没有被用到的对象会被标记删除。

同时多个对象可以给打包成一个文件,使用带版本的方式来指向 CAS 对象。

目前 CAS 客户端实现在 veintidos(https://github.com/irq0/veintidos),目前也只是用 Python 实现。