随着高性能计算由传统的主机方式向网络化集群演变,传统的基于主机的存储架构已逐渐向网络化存储发展,计算和存储分离的趋势越来越明显。针对 SAN 和 NAS 的不足,国际上已开展针对 Linux 集群的新型文件系统――对象存储文件系统的研究,本文重点论述了存储对象文件系统的架构、技术特点,并针对 Lustre 对象存储文件系统进行了初步测试,结果表明对象存储文件系统在可扩展性、性能、易用性等方面都有显著提高,随着网络化存储技术的不断成熟,对象存储文件系统将成为重要的发展方向。
一、引言
高性能计算已由传统的主机方式逐渐向集群方式演变,如 TOP500 中,1998 年只有 2 台系统是集群方式,而到 2003 年已有 208 台为集群系统。随着高性能计算体系结构的发展变化,传统的基于主机的存储架构已成为新的瓶颈,不能满足集群系统的需求。集群的存储系统必须有效解决两个主要问题:(1)提供共享访问数据,便于集群应用程序的编写和存储的负载均衡;(2)提供高性能的存储,在 I/O 级和数据吞吐率方面能满足成百上千台规模的 Linux 集群服务器聚合访问的需求。目前,网络化存储已成为解决集群系统高性能存储的有效技术途径。
国际上主要有两类网络化存储架构,它们是通过命令集来区分的。第一类是 SAN(Storage Area Network)结构,它采用 SCSI 块 I/O 的命令集,通过在磁盘或 FC(Fiber Channel)级的数据访问提供高性能的随机 I/O 和数据吞吐率,它具有高带宽、低延迟的优势,在高性能计算中占有一席之地,如 SGI 的 CXFS 文件系统就是基于 SAN 实现高性能文件存储的,但是由于 SAN 系统的价格较高,且可扩展性较差,已不能满足成千上万个 CPU 规模的系统。第二类是 NAS(Network Attached Storage)结构,它采用 NFS 或 CIFS 命令集访问数据,以文件为传输协议,通过 TCP/IP 实现网络化存储,可扩展性好、价格便宜、用户易管理,如目前在集群计算中应用较多的 NFS 文件系统,但由于 NAS 的协议开销高、带宽低、延迟大,不利于在高性能集群中应用。
针对 Linux 集群对存储系统高性能和数据共享的需求,国外已开始研究全新的存储架构和新型文件系统,希望能有效结合 SAN 和 NAS 系统的优点,支持直接访问磁盘以提高性能,通过共享的文件和元数据以简化管理,目前对象存储文件系统已成为 Linux 集群系统高性能文件系统的研究热点,如 Cluster File Systems 公司的 Lustre、Panasas 公司的 ActiveScale 文件系统等。Lustre 文件系统采用基于对象存储技术,它来源于卡耐基梅隆大学的 Coda 项目研究工作,2003 年 12 月发布了 Lustre 1.0 版,预计在 2005 年将发布 2.0 版。Lustre 在美国能源部 (U.S.Department of Energy:DOE)、Lawrence Livermore 国家实验室,Los Alamos 国家实验室,Sandia 国家实验室,Pacific Northwest国家实验室的高性能计算系统中已得到了初步的应用,IBM正在研制的Blue Gene系统也将采用Lustre文件系统实现其高性能存储。ActiveScale 文件系统技术来源于卡耐基梅隆大学的 Dr. Garth Gibson,最早是由 DARPA 支持的 NASD(Network Attached Secure Disks)项目,目前已是业界比较有影响力的对象存储文件系统,荣获了 ComputerWorld 2004 年创新技术奖。
二、对象存储文件系统
2.1 对象存储文件系统架构
对象存储文件系统的核心是将数据通路(数据读或写)和控制通路(元数据)分离,并且基于对象存储设备(Object-based Storage Device,OSD)构建存储系统,每个对象存储设备具有一定的智能,能够自动管理其上的数据分布,对象存储文件系统通常有以下几部分组成。
1、对象
对象是系统中数据存储的基本单位,一个对象实际上就是文件的数据和一组属性的组合,这些属性可以定义基于文件的 RAID 参数、数据分布和服务质量等,而传统的存储系统中用文件或块作为基本的存储单位,在块存储系统中还需要始终追踪系统中每个块的属性,对象通过与存储系统通信维护自己的属性。在存储设备中,所有对象都有一个对象标识,通过对象标识 OSD 命令访问该对象。通常有多种类型的对象,存储设备上的根对象标识存储设备和该设备的各种属性,组对象是存储设备上共享资源管理策略的对象集合等。
2、对象存储设备
对象存储设备具有一定的智能,它有自己的 CPU、内存、网络和磁盘系统,目前国际上通常采用刀片式结构实现对象存储设备。OSD 提供三个主要功能:
(1) 数据存储。OSD 管理对象数据,并将它们放置在标准的磁盘系统上,OSD 不提供块接口访问方式,Client 请求数据时用对象 ID、偏移进行数据读写。
(2) 智能分布。OSD 用其自身的 CPU 和内存优化数据分布,并支持数据的预取。由于 OSD 可以智能地支持对象的预取,从而可以优化磁盘的性能。
(3) 每个对象元数据的管理。OSD 管理存储在其上对象的元数据,该元数据与传统的 inode 元数据相似,通常包括对象的数据块和对象的长度。而在传统的 NAS 系统中,这些元数据是由文件服务器维护的,对象存储架构将系统中主要的元数据管理工作由 OSD 来完成,降低了 Client 的开销。
3、元数据服务器(Metadata Server,MDS)
MDS 控制 Client 与 OSD 对象的交互,主要提供以下几个功能:
(1) 对象存储访问。MDS 构造、管理描述每个文件分布的视图,允许 Client 直接访问对象。MDS 为 Client 提供访问该文件所含对象的能力,OSD 在接收到每个请求时将先验证该能力,然后才可以访问。
(2) 文件和目录访问管理。MDS 在存储系统上构建一个文件结构,包括限额控制、目录和文件的创建和删除、访问控制等。
(3) Client Cache 一致性。为了提高 Client 性能,在对象存储文件系统设计时通常支持 Client 方的 Cache。由于引入 Client 方的 Cache,带来了 Cache 一致性问题,MDS 支持基于 Client 的文件 Cache,当 Cache 的文件发生改变时,将通知 Client 刷新 Cache,从而防止 Cache 不一致引发的问题。
4、对象存储文件系统的 Client
为了有效支持 Client 支持访问 OSD 上的对象,需要在计算结点实现对象存储文件系统的 Client,通常提供 POSIX 文件系统接口,允许应用程序像执行标准的文件系统操作一样。
2.2 对象存储文件系统的关键技术
1、分布元数据 传统的存储结构元数据服务器通常提供两个主要功能。(1)为计算结点提供一个存储数据的逻辑视图(Virtual File System,VFS 层),文件名列表及目录结构。(2)组织物理存储介质的数据分布(inode 层)。对象存储结构将存储数据的逻辑视图与物理视图分开,并将负载分布,避免元数据服务器引起的瓶颈(如 NAS 系统)。元数据的 VFS 部分通常是元数据服务器的 10% 的负载,剩下的 90% 工作(inode 部分)是在存储介质块的数据物理分布上完成的。在对象存储结构,inode 工作分布到每个智能化的 OSD,每个 OSD 负责管理数据分布和检索,这样 90% 的元数据管理工作分布到智能的存储设备,从而提高了系统元数据管理的性能。另外,分布的元数据管理,在增加更多的 OSD 到系统中时,可以同时增加元数据的性能和系统存储容量。
2、并发数据访问 对象存储体系结构定义了一个新的、更加智能化的磁盘接口 OSD。OSD 是与网络连接的设备,它自身包含存储介质,如磁盘或磁带,并具有足够的智能可以管理本地存储的数据。计算结点直接与 OSD 通信,访问它存储的数据,由于 OSD 具有智能,因此不需要文件服务器的介入。如果将文件系统的数据分布在多个 OSD 上,则聚合 I/O 速率和数据吞吐率将线性增长,对绝大多数 Linux 集群应用来说,持续的 I/O 聚合带宽和吞吐率对较多数目的计算结点是非常重要的。对象存储结构提供的性能是目前其它存储结构难以达到的,如 ActiveScale 对象存储文件系统的带宽可以达到 10GB/s。
2.3 Lustre 对象存储文件系统
Lustre 对象存储文件系统就是由客户端(client)、存储服务器(OST,Object Storage Target)和元数据服务器(MDS)三个主要部分组成。Lustre 的客户端运行 Lustre 文件系统,它和 OST 进行文件数据 I/O 的交互,和 MDS 进行命名空间操作的交互。为了提高 Lustre 文件系统的性能,通常 Client、OST 和 MDS 是分离,当然这些子系统也可以运行在同一个系统中。其三个主要部分如图 1 所示.
图 1) Lustre文件系统的组成
Lustre 是一个透明的全局文件系统,客户端可以透明地访问集群文件系统中的数据,而无需知道这些数据的实际存储位置。客户端通过网络读取服务器上的数据,存储服务器负责实际文件系统的读写操作以及存储设备的连接,元数据服务器负责文件系统目录结构、文件权限和文件的扩展属性以及维护整个文件系统的数据一致性和响应客户端的请求。 Lustre 把文件当作由元数据服务器定位的对象,元数据服务器指导实际的文件 I/O 请求到存储服务器,存储服务器管理在基于对象的磁盘组上的物理存储。由于采用元数据和存储数据相分离的技术,可以充分分离计算和存储资源,使得客户端计算机可以专注于用户和应用程序的请求;存储服务器和元数据服务器专注于读、传输和写数据。存储服务器端的数据备份和存储配置以及存储服务器扩充等操作不会影响到客户端,存储服务器和元数据服务器均不会成为性能瓶颈。
Lustre 的全局命名空间为文件系统的所有客户端提供了一个有效的全局唯一的目录树,并将数据条块化,再把数据分配到各个存储服务器上,提供了比传统 SAN 的 "块共享" 更为灵活的共享访问方式。全局目录树消除了在客户端的配置信息,并且在配置信息更新时仍