• UID80
  • 登录2017-01-12
  • 粉丝58
  • 关注21
  • 发帖1115
  • 主页
  • 金币6302枚
社区居民
忠实会员
原创写手
潇潇宇 发布于2015-10-05 22:24
0/1306

Ceph:一个 PB 规模的 Linux 分布式文件系统

楼层直达
Linux文件系统最近新增了一个引人注目的选择 —— Ceph,一个维持 POSIX 兼容的同时还集成了复制、容错的分布式文件系统。本文探讨了 Ceph 的架构,及其成为可扩展分布式存储的诱人选择的独到之处。

Linux 持续进军可伸缩计算领域,尤其是可扩展存储领域。 Linux 文件系统最近新增了一个引人注目的选择 —— Ceph,一个维持 POSIX 兼容的同时还集成了复制、容错的分布式文件系统。探讨 Ceph 的架构,可以知道它是如何提供容错性,及如何简化大量数据的管理的。


作为存储行业的架构师,我对文件系统情有独钟。这些系统是存储系统的用户接口,尽管它们都倾向于提供相似的特性集,它们还是会提供引人注目的不同点。Ceph 也如此,它提供了一些你会在文件系统中找到的最有趣的特性。


Ceph 始于加州大学圣克鲁兹分校的 Sage Weil 的博士学位课题。但从 2010 年 3 月下旬起,你可以 Linux 主流内核中找到 Ceph (从 2.6.34 内核起)。
尽管 Ceph 可能还未对生产环境做好准备,但它依然有助于评估目的。本文探讨了 Ceph 文件系统,及其成为可扩展分布式存储的诱人选择的独到之处。

Ceph 目标

开发文件系统是一种复杂的投入,但是如果能准确的解决问题的话,则拥有着不可估量的价值。Ceph 的目标可以简单的定义为:
  • 容易扩展到 PB 量级
不同负荷下的高性能 (每秒输入输出操作数 [IPOS]、带宽)
  • 可靠性高
不幸的,这些目标彼此间矛盾(例如,可扩展性会减少或阻碍性能,或影响可靠性)。Ceph 开发了一些有趣的概念(例如动态元数据分区、数据分布、复制),本文会简单探讨。Ceph 的设计也集成了容错特性来防止单点故障,并假定,大规模(PB 级的存贮)的存储故障是一种常态,而非异常。最后,它的设计没有假定特定的工作负荷,而是包含了可变的分布式工作负荷的适应能力,从而提供最佳的性能。它以 POSIX 兼容为目标完成这些工作,允许它透明的部署于那些依赖于 POSIX 语义的现存应用(通过 Ceph 增强功能)。最后,Ceph 是开源分布式存储和 Linux 主流内核的一部分(2.6.34)。

Ceph 架构
现在,让我们先在上层探讨 Ceph 架构及其核心元素。之后深入到其它层次,来辨析 Ceph 的一些主要方面,从而进行更详细的分析。Ceph 生态系统可以大致划分为四部分(见图1):客户端(数据使用者)、元数据服务器(缓冲及同步分布的元数据)、对象存储集群(以对象方式存储数据与元数据,实现其它主要职责),及集群监控(实现监控功能)。

图 1. Ceph 生态系统的概念架构

如图一所示,客户端通过元数据服务器来执行元数据操作(以识别数据位置)。元数据服务器管理数据的位置及新数据的存储位置。注意,元数据存储在存储集群中(如 "Metadata I/O" 所示)。真正的文件 I/O 发生在客户端和对象存储集群之间。以这种方式,较高级的 POSIX 功能(如 open、close、rename)由元数据服务器管理,与此同时,POSIX 功能(如 read、write)直接由对象存储集群管理。

图2 提供了架构的另一视角图。一组服务器通过客户端接口访问 Ceph 生态系统,接口理解元数据服务器和对象级存储的关系。这种分布式存储系统可被看作为几层,包括存储设备的格式(扩展的和基于 B-树 的对象文件系统[ebofs],或者其它备选),为管理数据复制、故障检测、恢复、后续数据迁移(称之为可靠的自发分布式对象存储,RADOS)等所设计的至关重要的管理层。最后,监控用于鉴定组件故障,包括后续通知。


图2. Ceph 生态系统的简化分层视图


Ceph 组件

了解了 Ceph 的概念构图之后,你可以继续深入了解 Ceph 生态系统内实现的主要组件。Ceph 和传统文件系统一个关键的不同是,智能并非集中于文件系统本身,而是分布在生态系统各处。图 3 展示了一个简单的 Ceph 生态系统。Ceph 客户端是 Ceph 文件系统的使用者。Ceph 元数据后台服务程序提供了元数据服务,而 Ceph 对象存储后台服务程序提供了实际的存储(数据及元数据)。最后, Ceph 监控提供了集群的管理。注意可以存在多个 Ceph 客户端,多个对象存储端点,许多元数据服务器(取决于文件系统的能力),和至少一对冗余监控。这样的话,这个文件系统是怎样实现分布的呢?


图 3. 简单的 Ceph 生态系统

Ceph 客户端

因为 Linux 为文件系统提供了一个通用接口(通过虚拟文件系统交换器 [VFS]),Ceph 的用户视角是透明的。考虑到多个服务器组成存储系统的可能性(详见关于创建 Ceph 集群的 资源 一节),管理员视角当然会不同。从使用者的视角看,他们可以使用海量存储系统,并不知晓下层的元数据服务器、监控、聚合成大规模存储池的各个对象存储设备。使用者仅仅看到一个挂载点,从那里执行标准的文件 I/O 操作。Ceph 文件系统 — 或者至少是客户端接口 — 在 Linux 内核中实现。注意绝大多数文件系统,所有的控制和智能都实现在内核的文件系统源代码本身中。但对 Ceph 而言,文件系统的智能分布在各节点上,它简化了客户端接口,但也同时提供给 Ceph 应对大规模(甚至动态的)数据的能力。


并非是依赖于分配链(用来映射磁盘块到指定文件的元数据),Ceph 使用了一个有趣的选择。一个文件从 Linux 的角度看,被赋予了一个来自元数据服务器的 inode 号(INO),它是文件的唯一识别符。之后这个文件被刻进到多个对象中(基于文件大小)。使用 INO 和 对象号 (ONO),每个对象被赋予了一个对象 ID(OID)。通过使用 OID 上的一个简单哈希,每个对象被分配到 一个放置组中。这个放置组(通过 PGID 来识别)是对象的概念上的容器。最后,放置组到对象存储设备的映射是一种使用了称为可扩展哈希受控复制(CRUSH)算法的伪随机映射。以这种方式,放置组(及副本)映射到存储设备不依赖于任何元数据,而是依赖于伪随机映射函数。这种行为是理想的,因为它最小化了存储的负荷,以及简化了数据的分布和查询。最后一个分配组件是集群映射。集群映射是代表着存储集群的设备的有效表示。通过 PGID 和 集群映射,你可以定位任何对象。

Ceph 元数据服务器

元数据服务器的任务 (命令) 是管理文件系统的命名空间。尽管不管是数据还是元数据都存储在对象存储集群中,它们都被分别管理,以支持可扩展性。事实上,元数据在元数据服务器的集群间进一步的分割,这些元数据服务器能够自适应的复制和散布命名空间,从而避免热点。如图 4所示,元数据服务器管理部分命名空间,并能部分重叠(出于冗余及性能的考虑)。从元数据服务器到命名空间的映射,在 Ceph 中通过动态子树分区的方式来执行,它允许 Ceph 在保留本地性能的同时可以适应变化的工作负荷(在元数据服务器间迁移命名空间)。

图 4. Ceph 元数据服务器命名空间的分区



但因为每个元数据服务器就客户端的个数而言只简单的管理命名空间,它主要的应用程序是智能元数据缓冲(因为实际的元数据最终存储在对象存储集群中)。写入的元数据被缓冲在短期的日志中,它最终会被推送到物理存储里。这种行为允许元数据服务器可以立即对客户端提供最新的元数据服务(这在元数据操作中很常见)。日志对故障恢复也很有用:如果元数据服务器失效,它的日志能被重播,以确保元数据安全的保存到磁盘上。
元数据服务器管理 inode 空间,进行文件名到元数据的转换。元数据服务器转换文件名到 inode 节点,文件大小,以及分割 Ceph 客户端用于文件 I/O 的数据(布局)。

Ceph 监控

Ceph 包括了实现集群映射管理功能的监控,但一些容错管理的要素实现于对象存储本身。当对象存储设备失效,或者新的设备被添加,监控检测并维持一个有效的集群映射。这个功能以分布式的方式执行,在这里,更新映射会与当前的流量状况进行沟通。Ceph 使用了 Paxos,它是分布式一致性的一系列算法。

Ceph 对象存储

与传统对象存储相似,Ceph 存储节点不仅包含了存储,也包含了智能。传统的驱动器是的简单目标端,仅仅响应发起端的命令。而对象存储设备是智能设备,既可以作为目标端,也可以作为发起端,从而支持通讯以及其它对象存储设备的协同。

其它有趣的特性

似乎是文件系统的动态自适应的天性不足,Ceph 也实现了一些对使用者可见的有趣特性。例如,用户可以在 Ceph 的任何子目录下(包括其全部内容),创建快照。也可以在任何子目录级进行文件和容量记账,它可以报告存储大小和任何指定子目录的文件数(及其所有的嵌套内容)。

Ceph 现状与未来

尽管 Ceph 现在集成到 Linux 主流内核中,它被准确的描述为实验性的。这种状态的文件系统有助于评估,但还没有为生产环境做好准备。但考虑到 Ceph 被 Linux 内核所采用,以及发起人持续开发的动力,它应该在不久后就可以用于解决你的大规模存储的需要。

其它分布式文件系统

Ceph 在分布式文件系统领域并不是独一无二的,但它在管理大规模存储的生态系统的方式上是独特的。其它的分布式文件系统,如包括 Google 文件系统(GFS),通用并行文件系统(GPFS),和 Lustre,仅举几例。随着海量级别存储的独特挑战的引入,Ceph 背后的理念看起来像是为分布式文件系统提供了一种有趣的未来。

展望

Ceph 不仅仅是文件系统,更是一个带有企业级特性的对象存储的生态系统。在 资源 一节中,你会发现关于如何建立一个简单的 Ceph 集群(包括元数据服务器、对象服务器、监控)的信息。Ceph 在分布式存储方面填补了空白,看到这个开源软件在未来如何演进也将是很有趣的。

英文原文:Ceph: A Linux petabyte-scale distributed file system

0人打赏
您需要登录后才可以回帖
发表回复
极贡献
技术问答
专题荟萃
程序人生
视觉设计
Android开发
iOS开发
编程语言
前端开发
后端开发
服务器架构
软件测试
运维方案
创业路上



最热文章墙

  • 57867/339   【精品推荐】200多种Android动画效果的强悍框架,太全了,不看这个,再有动画的问题,不理你了^@^

  • 31034/139   省时省力的Android组件群来了,非常棒的原型参考

  • 30723/187   情人节福利,程序员表白的正确姿势:改几行代码就变成自己的表白了

  • 27508/217   【精品推荐】Android版产品级的音乐播放器源码,功能太强大了,最好的产品原型有木有?

  • 25767/2   超全!整理常用的iOS第三方资源

  • 24016/70   原创表白APP,以程序员的姿势备战新年后的7夕,持续完善中!

  • 22667/0   Python爬虫:常用浏览器的useragent

  • 21769/137   2016抢红包软件及源码

  • 19631/29   麻省理工的一帮疯子,真的实现了随意操控万物!(绝对黑科技)

  • 19474/25   Android工程师面试题大全

  • 18763/27   2016程序员跳槽全攻略

  • 18673/9   GitHub上排名前50的iOS项目:总有一款你用得着

  • 18228/20   码魂:程序员的牛B漫画

  • 16667/3   吐槽那些程序员的搞笑牛逼注释

  • 15804/146   Android版类似UC浏览器:非常赞,产品级的源码

  • 15477/1   iOS 动画总结

  • 14851/41   一个绚丽的loading动效分析与实现!

  • 14451/10   女程序员的梦,众网友的神回复

  • 14277/83   Android小而全的博客源码:非常适合全面掌握开发技巧

  • 14265/73   【持续更新中】Android福利贴(二):资料源码大放送

  • 14255/11   年会上现场review代码是怎么样的体验!

  • 14165/44   惊艳的App引导页:背景图片切换加各个页面动画效果

  • 13843/5   新一代Android渠道打包工具:1000个渠道包只需要5秒

  • 13734/10   2016年最全的Android面试考题+答案 精编版

  • 13707/23   个人收集的Android 各类功能源代码

  • 12942/19   珍藏多年的素材,灵感搜寻网站

  • 12839/53   基于瀑布流的美女图片浏览App,有注释的源代码

  • 12486/15   基于Android支付宝支付设计和开发方案

  • 12449/17   用JavaScript 来开发iOS和Android 原生应用:React Native开源框架中文版来啦

  • 12180/74   仿京东商城客户端Android最新版,不错的原型和学习资料

  • 12162/20   Android福利第三波【Android电子书】

  • 12094/17   什么是真正的黑客:收获12200+Stars,人气远超微软开源VS

  • 11641/18   65条最常用正则表达式,你要的都在这里了

  • 11574/94   Android带弹幕的视频播放器源码,来自大名鼎鼎的Bilibili弹幕网站

  • 11548/7   用程序员的姿势抢过年的火车票

  • 11544/70   【精品推荐】类似360安全卫士安Android源码:非常赞的产品原型

  • 11442/7   一张图搞定iOS学习路线,非常全面

  • 11327/11   有木有这样一张酷图帮你集齐所有git命令超实用

  • 11137/0   iOS中文版资源库,非常全

  • 10954/10   成为Java顶尖程序员 ,看这11本书就够了

  • 10552/18   一张图搞定Android学习路线,非常全面

  • 10517/10   微信支付终于成功了(安卓,iOS),在此分享

  • 10165/3   基于Node.js的强大爬虫,能直接发布抓取的文章哦

  • 10083/0   GitHub iOS 库和框架Top100 

  • 10078/44   在线音乐播放器完整版(商用级的源码):非常赞,可听免费高品质专辑

  • 10072/29   【持续更新中】Android福利贴(一):资料源码

  • 9715/4   46 个非常有用的 PHP 代码片段

  • 9358/3   即时通信第三方库

  • 9335/9   烧了5亿美金,这家神秘的公司即将颠覆人类未来!

  • 9198/8   流媒体视频直播方案

  • 9159/61   【技巧一】搭配Android Studio,如何实现App远程真机debug?

  • 9060/9   B站建开源工作组:APP想支持炫酷弹幕的看过来

  • 9006/2   【精品推荐】高质量PHP代码的50个实用技巧:非常值得收藏

  • 8916/9   中国黑客的隐秘江湖:攻守对立,顶尖高手月入千万美元

  • 8884/18   八个最优秀的Android Studio插件

  • 8447/6   开箱即用!Android四款系统架构工具

  • 8356/3   一张图看清Linux 内核运行原理

  • 8248/3   10款GitHub上最火爆的国产开源项目——可以媲美西半球

  • 8234/10   十大技巧快速提升Android应用开发性能

  • 7902/1   Android性能优化视频,文档以及工具

  • 返回顶部