网络软RAID的分布式文件系统的设计与实现
摘 要:
随着计算机技术与网络技术的快速发展,网络分布式存储逐渐成为存储技术研究的重点。分布式文件系统作为分布式存储系统中数据的管理者,为不同节点上的用户提供了对底层存储系统的文件访问接口。本文设计与实现了基于网络软RAID的分布式文件系统,并对系统的设计思想、总体结构和技术要点进行了详细介绍。
关键词:分布式文件系统 网络软RAID 虚拟磁盘空间
1 引言
随着计算机技术的发展和计算机应用的普及,计算机的作用已不仅是进行计算的工具,其主要应用已逐渐转变为大量数据的存储与处理。存储技术在计算机科学中的地位变得越来越重要。集成电路技术发展使CPU速度有了显著的提高,而磁盘等I/O设备受机械部件速度的限制相对提高不大,这就造成单机系统的计算能力与I/O性能之间的差距越来越大,于是人们提出将I/O操作分散到不同计算机上并行处理来提高I/O性能。
随着计算机网络的发展与网络带宽的不断增长,利用网络技术来提高存储系统的容量、可靠性与可扩展性成为可能。近年来,网络分布式存储已经成为存储技术发展的新趋势。分布式存储系统可以将分散在网络中的存储资源组织起来,构成大容量的虚拟磁盘存储空间。分布式文件系统是构建大规模的分布式存储系统必不可少的组成部分。分布式文件系统作为分布式存储系统中数据的组织者与管理者,为上层的应用程序提供了对存储系统的文件访问接口。
目前,在分布式文件系统方面的研究课题很多。分布式文件系统可以概括为3种类型:一类是商业用途的分布式文件系统,例如IBM公司开发的GPFS【1】,它的最大优点是系统性能好、扩展方便,但是价格昂贵并且需要专用的存储设备支持;另一类是开放源代码的分布式文件系统,例如Clemson大学开发的PVFS【2】,它的最大优点是性能比较好、不需要专用的存储设备支持,但是系统的可靠性与可扩展性并不好;还有一类是与分布式存储相结合的分布式文件系统,例如构建在Petal存储系统上的Frangipani【3】。
我们采用的是与分布式存储系统相结合的研究路线,底层是基于网络软RAID的分布式存储系统,上层是自己开发的分布式文件系统—NVFS。分布式存储系统可以将网络中不同计算机中的存储空间统一组织与管理起来,由分布式存储系统为用户提供大容量的磁盘空间、良好的系统性能、可靠性与可扩展性。由分布式文件系统为用户提供单一的文件映像与专用的文件访问接口。
2 分布式存储系统
分布式存储系统是构建在局域网环境中的网络软RAID系统【4】。RAID技术提供了一种使用普通磁盘构建大容量、高性能与高可靠性的存储系统的方法。RAID可以将许多磁盘按照不同的数据布局(例如RAID 0、1、5、10等)组织起来,通过对分布在不同磁盘上的条纹单元的并行读写操作来实现数据访问。网络软RAID是指不依赖专门的硬件设备(例如硬件RAID卡),通过软件编程与TCP/IP协议在普通的PC机上实现RAID功能。
图1给出了分布式存储系统的总体结构。系统中的每个节点都是一台可以单独运行的计算机,这些节点在局域网环境中构成了一个计算机集群(Cluster)。在逻辑上,系统中的节点分为3种类型:访问节点、管理节点与存储节点。其中,访问节点的作用是提供对存储系统的访问接口;管理节点的作用是组织与管理构成存储系统的磁盘资源;存储节点的作用是完成对实际磁盘的读写操作。在物理上,每个节点可以担任其中一种或多种角色,既可以是访问节点也可以是存储节点。系统中可以有多个访问节点与存储节点,但是目前系统中只能有一个管理节点。
分布式存储系统的核心是网络块设备(NDD,Network Disks Driver)驱动程序。将存储节点中的磁盘通过NDD 驱动程序映射到管理节点,这时在管理节点看到的是一块对应的虚拟磁盘。管理节点通过RAID 驱动程序将多个磁盘(包括本地磁盘与虚拟磁盘)组织成不同数据布局的RAID。在访问节点中,当应用程序通过文件系统发送对文件的访问请求时,文件系统将该请求分解成对磁盘上的数据块的访问请求,然后按磁盘类型交给不同的磁盘驱动程序(例如IDE、SCSI 驱动程序)或NDD 驱动程序来处理。
3 虚拟磁盘空间
虚拟磁盘空间(Virtual Disk Space)是分布式存储系统与分布式文件系统中的重要概念。虚拟磁盘空间是指为分布在不同节点中的磁盘提供统一的虚拟地址分配机制。也就是说,应用程序看到的是一块大的、完整的、一致的虚拟磁盘空间,应用程序只需通过上层的文件系统对磁盘资源进行访问,而不需要考虑文件中的数据块实际存储在哪个磁盘中。
图2 给出了虚拟磁盘空间的概念。虚拟磁盘空间在操作系统环境中的不同层次有不同的概念。虚拟磁盘空间在设备驱动级的概念是单一磁盘映像(Single Disk Image)【5】,这是底层的分布式存储系统所要解决的问题。虚拟磁盘空间在文件系统级的概念是单一文件映像(Single File Image),这是上层的分布式文件系统所要解决的问题。目前,Linux 操作系统中的文件系统无法提供对多个节点的单一文件映像,因此我们需要开发专用的分布式文件系统。
4 分布式文件系统设计
Linux 操作系统支持的文件系统大多是内核态的,而NVFS 文件系统是在Linux 用户态实现的。在用户态实现文件系统的最大优点是实现起来相对简单。
4.1 系统结构
分布式存储系统中的所有节点运行的是 Linux操作系统。NVFS 文件系统位于管理节点与所有访问节点,这些节点都需要独立安装NVFS 文件系统。
图3 给出了NVFS 文件系统的结构。应用程序通过NVFS API 来访问NVFS 文件系统中的文件,而这些文件存储在后台的多个存储节点构成的分布式存储系统中。
NVFS 文件系统接收到NVFS API 发送的文件访问请求后,首先将文件的元数据信息交给元数据管理模块处理,每个访问节点都要与管理节点之间进行元数据文件的交换,然后将文件访问请求交给下层的RAID 驱动程序处理。管理节点中的磁盘空间映射表用来保存整个虚拟磁盘空间的数据块信息;文件信息映射表用来保存分布式文件系统的元数据文件信息。
4.2 元数据管理模块
NVFS文件系统中的文件分为3种类型:系统文件、元数据文件与数据文件。其中,系统文件用来保存文件系统的全局信息,例如加载文件系统的设备名、数据块的大小、数据块使用位图、文件系统锁等信息。元数据文件用来保存相应的数据文件的状态信息,例如数据文件名、文件访问权限、文件大小、文件创建时间、文件访问计数、数据块指针、文件锁等信息。系统文件与元数据文件位于管理节点与所有的访问节点。
数据文件用来保存文件中的具体数据信息,它被以数据块形式分散保存在所有的存储节点中,每个文件的数据块是按某种数据布局(例如RAID 5结构)散布的。每个数据文件都有自己对应的元数据文件,由元数据文件来提供该数据文件的相关状态信息。
4.3 文件访问接口
NVFS文件系统为用户提供了自定义的应用程序访问接口(API)。NVFS API为应用程序提供了对文件的操作方法,例如对文件的创建、打开、读取、写入、关闭与删除等。NVFS API与标准UNIX/POSIX的文件读/写调用类似,通过调用NVFS_Open()、NVFS_Read()、NVFS_Write()与NVFS_Close()等库函数来进行文件操作。
如果访问节点执行的操作是创建新文件,首先通过元数据管理模块与管理节点进行通信,请求管理节点创建对应的元数据文件,并由管理节点将该元数据文件发送给其它访问节点。如果访问节点执行的操作是写入数据文件,首先通过元数据管理模块与管理节点进行通信,请求管理节点为该文件分配存储空间并修改对应的元数据文件,然后将写入文件请求交给下层的驱动程序处理,并由管理节点将修改后的元数据文件发送给其它访问节点。如果访问节点执行的操作是读取数据文件,首先通过元数据管理模块读取对应的元数据文件,然后将读取文件请求交给下层的驱动程序处理。
4.4 锁管理器模块
由于多个访问节点可能同时对同一数据块发出读写请求,但是数据块在执行写请求的同时不能响应其它读写请求,这就是分布式文件系统的并发访问控制问题。另外,由于系统中的所有访问节点都有自己的Cache,因此数据块在每个访问节点的Cache中有可能保存了不同的内容,这就是由分布式结构带来的数据一致性问题。NVFS文件系统采用锁机制【6】来解决这两个问题。
锁管理器模块负责处理对数据块的锁请求。如果访问节点要对数据块进行读写操作,首先需要向锁管理器申请相应的锁,每个数据块可以对应多个读锁与一个写锁。也就是说,多个访问节点可以同时读取同一个数据块,但是对同一个数据块的写操作必须是独占的。如果访问节点申请到某个数据块的写锁,它可以读取、写入数据块并将副本保存在Cache中;如果访问节点申请到某个数据块的读锁,它可以读取数据块并将副本保存在Cache中。锁机制的关键是如何处理Cache中的副本。
当访问节点持有某个数据块的写锁时,如果其它节点要对同一数据块进行写操作,持有写锁的节点要将Cache中的副本写入磁盘,然后使本地Cache中的副本无效并释放写锁;如果其它节点要对同一数据块进行读操作,持有写锁的节点要将Cache中的副本写入磁盘,然后将自己持有的写锁降级为读锁。当访问节点持有某个数据块的读锁时,如果其它节点要对同一数据块进行写操作,持有读锁的节点要使本地Cache中的副本无效并释放读锁。
5 实验结果
实验目的是比较采用NVFS文件系统后的网络软RAID系统与原有的基于中心节点的网络软RAID系统(VNS)的文件读写性能。NVFS系统由2个访问节点与3个存储节点组成,其中一个访问节点同时担任了管理节点的工作,每个存储节点的IDE磁盘提供了5GB的磁盘分区,并将这些磁盘分区按RAID 0结构组成15GB的虚拟磁盘空间。VNS系统由1个中心节点与3个存储节点组成,具体的RAID组成结构与NVFS系统相同。另外,我们测试了本地磁盘的文件访问性能以做对比,本地磁盘是由VNS系统的中心节点提供的15GB的磁盘分区。实验中的局域网环境是100M的以太网交换机。测试工具是测试文件系统I/O性能的Bonnie软件。
图4给出了实验的Bonnie测试结果。从这三个系统的读性能来看,VNS系统的读性能比本地磁盘要稍差一点,而NVFS系统的读性能要略好于本地磁盘,这是由于NVFS系统有两个并行操作的访问节点。从这三个系统的写性能来看,本地磁盘的写性能要明显好于其它两个系统,而NVFS系统的写性能要比VNS系统好一些。由于网络的传输速度低于本地磁盘的数据读写速度,这点就限制了通过网络通信的虚拟磁盘的读写性能。如果局域网环境使用的是千兆以太网交换机,应该还可以提高网络6 总结NVFS文件系统是在网络软RAID系统基础上设计的,是在通用的硬件设备上完全基于软件实现的存储系统,它具有成本低、配置灵活、可用性好、扩展性好等优点。NVFS文件系统实现了文件级的一致性视图,网络软RAID系统实现了数据块级的一致性视图,并且为上层的应用程序提供了方便的数据访问接口。采用完全对等结构是网络分布式存储发展的必然趋势。今后,我们的发展方向是将分布式存储系统改造为对等结构的存储系统。