Hhaile 2014-05-07
Linux 持续进军可伸缩计算领域,尤其是可扩展存储领域。 Linux 文件系统最近新增了一个引人注目的选择 —— Ceph,一个维持 POSIX 兼容的同时还集成了复制、容错的分布式文件系统。探讨 Ceph 的架构,可以知道它是如何提供容错性,及如何简化大量数据的管理的。
作为存储行业的架构师,我对文件系统情有独钟。这些系统是存储系统的用户接口,尽管它们都倾向于提供相似的特性集,它们还是会提供引人注目的不同点。Ceph 也如此,它提供了一些你会在文件系统中找到的最有趣的特性。
Ceph 始于加州大学圣克鲁兹分校的 Sage Weil 的博士学位课题。但从 2010 年 3 月下旬起,你可以 Linux 主流内核中找到 Ceph (从 2.6.34 内核起)。
尽管 Ceph 可能还未对生产环境做好准备,但它依然有助于评估目的。本文探讨了 Ceph 文件系统,及其成为可扩展分布式存储的诱人选择的独到之处。
--------------------------------------分割线 --------------------------------------
相关阅读:
--------------------------------------分割线 --------------------------------------
开发文件系统是一种复杂的投入,但是如果能准确的解决问题的话,则拥有着不可估量的价值。Ceph 的目标可以简单的定义为:
容易扩展到 PB 量级
不同负荷下的高性能 (每秒输入输出操作数 [IPOS]、带宽)
可靠性高
不幸的,这些目标彼此间矛盾(例如,可扩展性会减少或阻碍性能,或影响可靠性)。Ceph 开发了一些有趣的概念(例如动态元数据分区、数据分布、复制),本文会简单探讨。Ceph 的设计也集成了容错特性来防止单点故障,并假定,大规模(PB 级的存贮)的存储故障是一种常态,而非异常。最后,它的设计没有假定特定的工作负荷,而是包含了可变的分布式工作负荷的适应能力,从而提供最佳的性能。它以 POSIX 兼容为目标完成这些工作,允许它透明的部署于那些依赖于 POSIX 语义的现存应用(通过 Ceph 增强功能)。最后,Ceph 是开源分布式存储和 Linux 主流内核的一部分(2.6.34)。
现在,让我们先在上层探讨 Ceph 架构及其核心元素。之后深入到其它层次,来辨析 Ceph 的一些主要方面,从而进行更详细的分析。
Ceph 生态系统可以大致划分为四部分(见图1):客户端(数据使用者)、元数据服务器(缓冲及同步分布的元数据)、对象存储集群(以对象方式存储数据与元数据,实现其它主要职责),及集群监控(实现监控功能)。
如图一所示,客户端通过元数据服务器来执行元数据操作(以识别数据位置)。元数据服务器管理数据的位置及新数据的存储位置。注意,元数据存储在存储集群中(如 "Metadata I/O" 所示)。真正的文件 I/O 发生在客户端和对象存储集群之间。以这种方式,较高级的 POSIX 功能(如 open、close、rename)由元数据服务器管理,与此同时,POSIX 功能(如 read、write)直接由对象存储集群管理。
图2 提供了架构的另一视角图。一组服务器通过客户端接口访问 Ceph 生态系统,接口理解元数据服务器和对象级存储的关系。这种分布式存储系统可被看作为几层,包括存储设备的格式(扩展的和基于 B-树 的对象文件系统[ebofs],或者其它备选),为管理数据复制、故障检测、恢复、后续数据迁移(称之为可靠的自发分布式对象存储,RADOS)等所设计的至关重要的管理层。最后,监控用于鉴定组件故障,包括后续通知。
Ceph 组件
了解了 Ceph 的概念构图之后,你可以继续深入了解 Ceph 生态系统内实现的主要组件。Ceph 和传统文件系统一个关键的不同是,智能并非集中于文件系统本身,而是分布在生态系统各处。
图 3 展示了一个简单的 Ceph 生态系统。Ceph 客户端是 Ceph 文件系统的使用者。Ceph 元数据后台服务程序提供了元数据服务,而 Ceph 对象存储后台服务程序提供了实际的存储(数据及元数据)。最后, Ceph 监控提供了集群的管理。注意可以存在多个 Ceph 客户端,多个对象存储端点,许多元数据服务器(取决于文件系统的能力),和至少一对冗余监控。这样的话,这个文件系统是怎样实现分布的呢?