基于对象存储文件系统的文件级RAID机制研究

2010-11-26 08:31熊安萍蔡毅峰
湖南师范大学自然科学学报 2010年4期
关键词:分片偏移量逻辑

熊安萍, 蔡毅峰, 蒋 溢

(重庆邮电大学大学计算机科学与技术学院, 重庆 400065)

随着计算机网络技术的高速发展,大规模分布式集群存储系统的应用越来越广泛,如超大规模的电子邮件系统、数字图书馆、大型在线电子商务系统、卫星数字处理、视频数字图像处理、高性能计算等[1].分布式集群系统将普通的商用PC机或工作站通过高速网络互联在一起组成集群,能够根据系统的需求随时增加新的硬件,提高系统的可伸缩性,可以同时利用RAID技术和基于网络的复制技术,从而能够在价格低廉的中低端平台上获得高端或者超级计算机上才能获得的高可用性、高性能[2].

基于对象存储技术是存储领域中的新兴技术.它以对象作为数据存储管理的基本单位,采用数据与元数据分离的存储体系结构,元数据服务器负责管理元数据并为存储系统提供全局命名空间,而数据存储在具有智能管理功能的基于对象存储设备上.基于对象存储体系结构的网络带宽,I/O吞吐量以及处理能力是随着存储节点的增加而同步线性增长,但是在增加存储设备的同时也增大了系统出现故障的可能性,带来了系统高可用、数据容错方面的问题[3].文件分片技术能够便于元数据管理器对数据的集中管理,减轻了元数据管理器的瓶颈,也能够保证数据的高可用,也便于元数据服务器的扩展.但是,文件分片可能出现不一致的概率会比普通的RAID更高,同时,奇偶校验的更新效率上也会比同级别的RAID低.但总体来说,文件分片技术能有效地提高系统的读写带宽.

作者在分析基于对象存储文件系统Lustre的分片技术的基础之上, 为文件数据块提供多个存储策略,运用物理地址和逻辑地址相互转换的方法,实现了一个基于分片技术的文件存储机制,实验结果表明,该分片存储机制能够提供灵活的文件存储策略,使得用户能够进行选择使用,同时保证了系统的读写性能.

1 Lustre文件级RAID

1.1 Lustre文件级RAID概述

Lustre文件系统是由Cluster File Systems, Inc(CFS)公司开发的、一个开源的基于Linux操作系统的、面向下一代存储的分布式文件系统,消除了目前很多传统文件系统中存在的性能,可靠性以及可扩展性上的问题.

Lustre文件系统主要由3部分组成:客户端(CFS, Client File System)、对象存储服务器(OST, Object Storage Target)和元数据服务器(MDS, MetaData Server).Lustre是一个高度模块化的分布式文件系统,这3个子系统可以分别运行在不同的计算机节点上,也可以运行在同一节点上[4].

在基于对象存储的Lustre文件系统中,文件是由一个或多个存储对象组成,将组成文件的所有存储对象称之为存储对象组.传统的RAID是以存储对象为粒度,与soft RAID Linux MD/RAID块设备一级实现不同,它是在文件一级实现,粒度更小,更加灵活.在Linux的MD RAID中,以软件的方法实现了多种数据分布模式,有线性模式、RAID0、RAID1、RAID5、RAID6等[5],文件级RAID的级别定义与传统的RAID类似. non-RAID是将文件数据仅存储到一个存储对象中;RAID0是将文件数据以Round-Robin算法条带化地无冗余地分布存储到N个存储对象中;RAID1是将文件数据分布到N个存储对象中,存储对象互为镜像.本文为这3种实现策略提供了统一的实现机制,并通过一个特定的接口提供给用户使用.

1.2 基于Lustre的文件级RAID机制

1.2.1 Lustre文件级RAID基本思想 Lustre是一种基于对象存储文件系统,因而在Lustre中,文件是以一个或多个存储对象组成,所有的存储对象称之为存储对象组.相对于传统的RAID, Lustre中的RAID设计以存储对象为粒度,在文件一级实现,通过对文件进行分片,以及设计相应的分片管理策略,实现Lustre中的文件级RAID技术[6].

对于Lustre文件系统,用户在使用和处理数据的过程中,对于数据的可靠性级别,是有自己不同的需求的.然而Lustre文件系统却没有给用户提供这种选择的机制,因而,可以通过提供相应的机制,让用户灵活根据使用non-RAID,RAID0和RAID1 3种数据策略来管理用户数据.本文通过为文件数据块提供多个存储策略,并且将这些策略作为一个通用的系统组件,以进行统一的管理和使用.

1.2.2 文件分片访问接口设计 Lustre的客户端,对象存储服务器都要通过统一的分片策略访问接口,调用不同的分片策略分布算法函数,实现对数据的多策略访问.设计函数strategy_accessing_request(),作为策略访问的唯一接口.同时定义以下几个数据结构,对Lustre中的文件布局进行相关的描述.

strategy_request结构:通过定义数据的起始偏移量,数据块中元素的个数,总字节数,以及描述基本元素类型的结构来描述逻辑文件的连续数据布局.

strategy_stack_req结构:通过一个指向strategy_request指针记录数据正在被处理的情况.

strategy_request_state结构:通过使用一个堆栈跟踪数据的每一级,对于每一级,则通过strategy_stack_req对数据块的处理情况进行描述.

strategy_file_request结构:描述数据片的服务器分布状况以及文件的具体分片算法结构.

函数strategy_accessing_request()处理请求和文件分布算法.通过处理偏移量和段大小的数组,并且将上面定义的4种结构进行初始化,这样就得到了所有的文件分布策略、文件分布的参数等文件分片的关键数据.客户端可以通过它调用具体的分布算法计算文件的逻辑偏移量和文件大小.对象存储服务器则可以通过该函数计算分片文件中实际的物理偏移地址,获取该分片文件的数据.

图1 接口函数调用流程图

定义分布算法接口函数strategy_distribution(),函数strategy_accessing_request()通过调用该分布函数来调用具体的文件分布算法.而具体的分布算法又统一让函数strategy_distribution()调用.图1给出了接口函数的调用流程图.

1.2.3 文件分片算法 文件分片的算法关键在于逻辑偏移量与物理偏移量之间的相互转换.对于non-RAID分片策略,则文件的物理偏移量等于逻辑偏移量,相互之间不需要转换.RAID0的分布算法则借鉴了磁盘阵列的RAID0方法实现,将一个文件的分片文件轮换放置到数据节点上.RAID1的分布算法和RAID0一样,也借鉴了磁盘阵列的RAID1方法,将数据轮换放置在一组服务器上,同时也备份到后续节点上,这样在计算偏移量之前,先要判断对应的主服务器是否存在,如果不存在,则要判断备份服务器是否存在.

对于分片算法,关键就是实现逻辑偏移量和物理偏移量之间的相互转换.此外,对于给定的逻辑偏移量,也要能够同物理文件的下一个物理偏移量相转换.首先定义以下变量:

stripe_size:文件分片的大小.

total_stripes:文件的大小.

stripe_offset:物理文件从偏移量0开始到total_stripes个完整stripe的物理位置.

remnant:逻辑偏移量减去total_stripes个stripes剩下的字节长度.

在实现逻辑偏移量转换为物理偏移量的过程中,关键是要对表示逻辑偏移量减去toal_stripes个分片剩下字节长度与服务器号之间的关系进行判断.

temnant=logic_offset-total_stripes*stripe_size*sever_count

若remnant>=server_number*stripe_size 且 remnant< (server_number+1)*stripe_size,则说明该物理偏移量在服务器server_number的total_stripe个完整分片的下一个分片上.

若remnant>=server_number*stripe_size 且 remnant>=(server_number+1)*stripe_size,则说明该物理偏移量在服务器server_number的total_stripes个完整分片的下一个分片上起始位置就是我们要找的物理偏移量, 即physical_offset = stripe_offset + stripe_size.

若remnant

逻辑偏移量转换为物理偏移量的流程如图2所示.

同理,给定物理偏移量获取逻辑文件的逻辑偏移量,给出的条件是:stripe大小,服务器号,服务器总数,逻辑文件的服务器号,关键是对当前物理偏移量所在的分片的偏移量长度进行判断,变量定义如下:

stripe_number:物理文件中完整的分片数.

stripe_off_length:当前物理偏移量所在分片的偏移量长度.

temp:临时中间变量.

具体的算法描述如下:

stripe_number = physical_offset / stripr_size

stripe_off_length = physical_offset % stripe_size

temp = (stripe_number-1) * stripe_size * server_count

if stripe_off_length>0

then temp += stripe_size * server_count

temp += stripe_size * server_number

temp += stripe_off_length

else temp += stripe_szie * (server_number+1)

logical_offset = temp

物理偏移量转换为逻辑偏移量的流程如图3所示:

图2 逻辑偏移量转换为物理偏移量流程 图3 物理偏移量转换为逻辑偏移量流程

RAID1的文件分片算法和RAID0的原理一样,也是进行逻辑偏移量和物理偏移量之间的相互转换,只不过在进行偏移量计算之前,先要判断分片对应的主服务器是否存在,如果主服务器不存在,要判断备份服务器是否存在.

2 测试及分析

测试使用的服务器配置为Intel(R) Pentium(R) Dual 1.60GHz处理器;2GB内存;Realtek Ethernet NIC 100/1000M网卡;操作系统安装的是RedHat Enterprise Linux 5,使用的Lustre文件系统是1.4.7版,并使用iozone作为带宽测试工具.

在对non-RAID,RAID0,RAID1的读写性能测试中,条带化对象存储服务器的数量为2个,条带的大小为1M.所得的读写性能如图4所示.

图4 RAID读性能

从测试结果可知,RAID1模式的读性能要好于non-RAID,但要低于理论的2倍值.而RAID1的读性能也低于RAID0的读性能.与non-RAID相比较,RAID0由于实现了带区组,数据并不是保存在一个OST,而是分成数据块保存在不同的OST,所以数据的吞吐量大大提高,从而提高了读性能.同时,RAID0也提高了数据传输速率,比如所需读取的文件分布在2个OST,这2个OST可以同时读取.那么原来读取同样文件的时间被缩短为1/2,所以RAID0的读性能是3种模式里最好的.RAID1的性能没有RAID0那样好,但其数据读取较单一OST来得快,因为数据会从2块OST中较快的一块中读出.

图5 RAID写性能

从图5的块写性能比较中,可以看出RAID0的写性能是最好的,RAID1的写性能虽然最差,但是由于读写操作是并行的,因而与non-RAID也相差不大.对于使用这种RAID1结构的设备来说,RAID1必须能够同时对2个镜像客户端进行写操作.RAID1的写入速度通常较慢,因为数据要分别写入2个客户端中并做比较.和RAID0的读性能分析类似,RAID0的写性能最好的原因也是由于文件的不同数据块能够在多个OST并行同时写入.

从以上测试结果也能看出,文中实现了灵活的机制,使得用户能够选择灵活的存储策略,从而令系统更加方便易用,同时,保证了文件系统高效的读写带宽.

3 结语

基于对象存储文件系统Lustre给出了一种文件分片机制.该机制不仅能够有效保证系统的文件读写带宽,而且还能通过多种不同存储策略的选择,适应于不同的应用.相比于传统的对象文件存储系统的文件存储机制,不仅提高了系统的性能,同时也提高了系统的灵活性.测试结果表明,所设计的分片机制能够在增强系统灵活性的同时有效地保持系统的高效读写性能.

参考文献:

[1] 何兴高,张凤荔,黄远军,等.分布式个人文件系统的设计与实现[J].电子科技大学学报,2005,34(4):521-524.

[2] 王一夫,陈松乔,范国闯.基于网格计算中的安全问题研究[J].湖南师范大学自然科学学报,2005,3,28(1):24-27.

[3] DANIEL DUFFY, NICKO ACKS, VAUGHN NOGA,etal. Beyond the storage area networking: data intensive computing in a distributed environment. The 22nd IEEE/13th NASA Goddard Conference on Mass Storage System Technologies MSST2005[C]. American: IEEE Computer Society. 2005,232-236.

[4] MESNIER M, GANGER G R, RIEDEL E. Object-based storage: pushing more functionality into storage[J]. Potentials IEEE, 2005,24(2): 31-34.

[5] MESNIER M, GANGER G R, RIEDEL E. Object-based storage[J]. Communications Magazine, IEEE, 2003,41(8): 84-90.

[6] GILBSON G A, METER R V. Network attached storage architecture[J]. Communications of the ACM,2000,43(11): 37-45.

猜你喜欢
分片偏移量逻辑
上下分片與詞的時空佈局
刑事印证证明准确达成的逻辑反思
基于格网坐标转换法的矢量数据脱密方法研究
逻辑
创新的逻辑
分片光滑边值问题的再生核方法
CDN存量MP4视频播放优化方法
基于模糊二分查找的帧分片算法设计与实现
搅拌针不同偏移量对6082-T6铝合金接头劳性能的影响
基于最小二乘平差的全极化SAR配准偏移量估计方法