当前位置: 首页 > 科技观察

Ceph:用于Linux的PB级分布式文件系统

时间:2023-03-13 08:08:58 科技观察

Linux继续涉足可扩展计算,尤其是可扩展存储。Linux文件系统最近增加了一个引人注目的选项——Ceph,这是一个分布式文件系统,它在保持POSIX兼容性的同时集成了复制和容错功能。探索Ceph的架构,了解它如何提供容错并简化大量数据的管理。作为存储行业的架构师,我对文件系统情有独钟。这些系统是存储系统的用户界面,虽然它们都倾向于提供相似的功能集,但它们也提供了引人注目的差异。Ceph也是如此,它提供了一些文件系统中最有趣的功能。Ceph最初是UCSantaCruz的SageWeil的博士项目。但从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生态系统的概念架构如图1所示,客户端通过元数据服务器执行元数据操作(以识别数据位置)。元数据服务器管理数据的位置和新数据的存储位置。请注意,元数据存储在存储集群中(如“元数据I/O”所示)。实际的文件I/O发生在客户端和对象存储集群之间。这样,更高级别的POSIX功能(如打开、关闭、重命名)由元数据服务器管理,而POSIX功能(如读、写)则直接由对象存储集群管理。图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空间并执行文件名到元数据的转换。元数据服务器将文件名转换为索引节点、文件大小,并拆分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:ALinuxPB级分布式文件系统