本发明涉及计算机领域,尤其涉及一种多磁盘聚合式数据存储系统及其实现方法与应用方法。
背景技术:
存储系统有das(直连附加存储:directattachedstorage)、nas(网络附加存储:networkattachedstorage)和san(存储局域网络:storageareanetwork)等多种类型。为了实现大容量的存储,以及防止存储器件如磁盘或固态盘损坏而丢失数据,上述各类存储系统中普遍使用raid(冗余磁盘阵列:redundantarraysofindependentdisks)技术来组织多个磁盘。虽然raid能提高可靠性,但存在如下不足或问题:
●存储系统管理复杂。raid中所有磁盘必须具有相同容量和性能,创建以后就不能再修改,让存储系统的容量规划和扩容变得困难;
●容错级别在创建raid时设定,无法针对数据本身的特性或要求支持不同的容错级别;
●创建raid的时间高达数小时,数据重建时间更长;
●当访问数据流增加时,raid读写性能会大幅下降;在极端情形下多张磁盘组成的raid的性能甚至低于单个磁盘的性能。
dualfs【dualfs:anewjournalingfilesystemforlinux】对存储系统的结构进行了探索优化,将文件系统的元数据(metadata)保存到一个独立的磁盘设备中,将数据存储到raid中。这种方法能够有效提高元数据访问的性能,如遍历目录,但raid面临的问题在dualfs中依然存在。
技术实现要素:
鉴于目前存在的上述不足,本发明提供一种多磁盘聚合式数据存储系统及其实现方法与应用方法,不再依赖于raid,可支持存储容量扩展、数据容错,能够简化存储系统管理,提高可扩展性,并提升存储系统数据访问性能。
为达到上述目的,本发明采用如下技术方案:
一种多磁盘聚合式数据存储系统实现方法,所述多磁盘聚合式数据存储系统实现方法包括以下步骤:
以松耦合方式聚合多个存储单元形成存储系统;
选取任一存储单元存储命名空间和存储数据的元数据;
存储数据以不同的布局方式存储在其它多个存储单元中;
分别创建元数据管理模块和数据管理模块来管理元数据和存储数据;
对外提供统一命名空间模块以管理命名空间和元数据管理模块,并支持面向目录、文件或对象的数据访问。
依照本发明的一个方面,所述存储数据的元数据保存在索引节点中,索引节点内容包括该文件的数据布局方式和数据所在磁盘的标识号。
依照本发明的一个方面,以存储在元数据磁盘上的索引节点号作为文件数据在相应数据磁盘上的名。
依照本发明的一个方面,每个目录或文件可以独立选择数据布局方式,数据布局方式包括单体、镜像和条带化。
依照本发明的一个方面,所述统一命名空间模块对上层软件提供文件或对象访问接口,屏蔽存储系统的内部结构,根据文件读写请求访问相应的元数据管理模块和数据管理模块。
依照本发明的一个方面,所述元数据管理模块管理元数据,包括目录层次结构,每个目录下的文件名,以及文件的元数据。
依照本发明的一个方面,所述数据管理模块管理存储数据,每个数据管理模块是完整独立的存储单元,记录有磁盘的空间分配状态,所存储的数据,数据的磁盘块地址。
依照本发明的一个方面,在数据存储单元上,所有数据为扁平结构,在逻辑上无层次目录结构。
一种多磁盘聚合式数据存储系统,包括硬件部分和管理数据的软件;该硬件部分包括处理器、内存、用于存储数据的若干个磁盘,磁盘通过i/o总线接入到系统中;所述管理数据的软件包括统一命名空间模块、元数据管理模块和数据管理模块,其中:
统一命名空间模块管理命名空间和元数据,对上层软件提供文件 或对象访问接口,屏蔽存储系统的内部结构,根据文件读写请求访问相应的元数据管理模块和数据管理模块;
元数据管理模块管理元数据,包括目录层次结构,每个目录下的文件名,以及文件的元数据;
数据管理模块管理存储数据,每个数据管理模块是完整独立的存储单元,记录有磁盘的空间分配状态,所存储的数据,数据的磁盘块地址。
一种多磁盘聚合式数据存储系统的数据存取方法,所述数据存取方法包括:数据读取方法和数据写入方法;其中:
数据读取方法包括以下步骤:
1)上层软件模块调用统一命名空间模块的open函数,参数包括文件名和读写模式;
2)统一命名空间模块模块将请求转交个元数据管理模块模块;
3)元数据管理模块对文件名、访问权限进行检查,如失败,则返回错误;
4)元数据管理模块将文件的inode编号和内容返回给统一命名空间模块模块;
5)统一命名空间模块为该文件分配文件描述符fd,建立fd和inode的映射;
6)统一命名空间模块给上层软件模块返回文件描述符fd;
7)上层软件调用统一命名空间模块的read函数,参数包括fd,偏移量和数据大小等;
8)统一命名空间模块模块查找fd到inode的映射表,得到该文件的inode;
9)统一命名空间模块根据inode中保存的数据布局模式,以及数据所在磁盘的数据管理模块标识,以inode作为对象名,调用相应数据管理模块的读接口,来读取数据;
10)统一命名空间模块将读到的数据返回给上层软件。
数据写入方法包括以下步骤:
1)上层软件调用统一命名空间模块的open函数,参数包括文件 名、读写模式,和文件权限等;
2)统一命名空间模块调用元数据管理模块的open函数;
3)元数据管理模块对文件名、访问权限进行检查,如失败,则返回错误;
4)元数据管理模块为该文件分配inode,将inodeid和内容返回给统一命名空间模块模块;
5)统一命名空间模块根据每个数据管理模块磁盘的空闲容量大小和当前读写负载情况,选择一个空闲容量较大、负载较轻的数据管理模块;
6)统一命名空间模块在选择的数据管理模块上以inode作为对象名创建一个新的数据对象;
7)统一命名空间模块模块在inode中保存该文件的布局模式,和数据所在磁盘的数据管理模块id;
8)统一命名空间模块为该文件分配文件描述符fd,在内存中建立fd到inode的映射;
9)统一命名空间模块向应用软件返回文件描述符fd;
10)上层软件调用统一命名空间模块模块的write函数,参数包括文件描述符fd,数据缓冲区地址和数据长度等;
11)统一命名空间模块根据fd查找其对应的inode;
12)统一命名空间模块读取inode内容,得到该文件的数据布局方式和数据所在的数据管理模块id;
13)统一命名空间模块向数据管理模块中写入数据;
14)统一命名空间模块向上层软件返回写入的字节数;
15)上层软件调用统一命名空间模块的close函数关闭文件,参数包括fd;
16)统一命名空间模块根据fd查找文件对应的inode;
17)统一命名空间模块向元数据管理模块更新inode中的文件大小和修改时间;
18)统一命名空间模块关闭文件,释放文件描述符;
19)统一命名空间模块返回结果给上层软件。
本发明实施的优点:本发明所述的技术方案将命名空间/元数据、文件本身的数据分开管理,保存在不同的磁盘中;每个磁盘为独立的存储单元,具有独立的磁盘空间管理和数据管理,不同磁盘之间完全独立;存储系统可支持多个磁盘,不同磁盘的容量不要求完全相同;系统在运行过程中可在线加入新的磁盘,可以只加入一块磁盘,不要求成组加入,新添加磁盘后,无强制性数据迁移。文件的元数据保存在索引节点中;索引节点内容包括该文件的数据布局方式和数据所在磁盘的标识号;数据布局方式支持单体、镜像、条带化等多种方式;每个目录和文件的布局方式可以独立设置;以文件在元数据磁盘上的索引节点编号作为文件数据在相应数据磁盘上的名,在数据磁盘上,所有数据为扁平结构,在逻辑上无层次目录结构,支持存储容量扩展、数据容错,能够简化存储系统管理,提高可扩展性,并提升存储系统数据访问性能。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明所述的一种多磁盘聚合式数据存储系统实现方法示意图;
图2为本发明所述存储系统的硬件组成图;
图3为本发明所述软件部分的结构示意图;
图4为本发明inode字段的示意图;
图5为发明数据结构示意图;
图6为本发明读打开文件流程图;
图7为本发明读文件流程图;
图8为本发明写打开文件流程图;
图9为本发明写文件流程图;
图10为本发明关闭文件流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方 案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
如图1-5所示,一种多磁盘聚合式数据存储系统实现方法,所述多磁盘聚合式数据存储系统实现方法包括以下步骤:
步骤s1:以松耦合方式聚合多个存储单元形成存储系统;
所述步骤s1以松耦合方式聚合多个存储单元形成存储系统的具体实施方式可为:存储系统可包括多个磁盘;不同磁盘的容量不要求完全相同;每个磁盘为独立数据存储单元,具有独立的磁盘空间管理和数据管理,不同磁盘之间完全独立;系统在运行过程中可在线加入新的磁盘,可以只加入一块磁盘,不要求成组加入;新添加磁盘后,无强制性数据迁移;不同磁盘可算不同的存储单元,多个存储单元以松耦合方式协同工作。
步骤s2:选取任一存储单元存储命名空间和存储数据的元数据;
所述步骤s2选取任一存储单元存储命名空间和存储数据的元数据的具体实施方式可为:将存储数据的元数据与数据分开,并将元数据保存在索引节点中,索引节点内容包括该文件的数据布局方式和数据所在磁盘的标识号;以存储在元数据磁盘上的索引节点号作为文件数据在相应数据磁盘上的名;将元数据与命名空间存储在存储系统中选取的任一存储单元中存储,以与存储数据独立开来。
步骤s3:存储数据以不同的布局方式存储在其它多个存储单元中;
所述步骤s3存储数据以不同的布局方式存储在其它多个存储单元中的具体实施方式可为:存储数据如文件或对象以单多种布局方式写入到多个存储单元中,每个目录或文件可以独立选择数据布局方式;数据布局方式包括mono(单体)、mirror(镜像)或者stripe(条带化)等多种方式。
步骤s4:分别创建元数据管理模块和数据管理模块来管理元数据和存储数据;
所述步骤s4分别创建元数据管理模块和数据管理模块来管理元数 据和存储数据具体可包括:
创建元数据管理模块(metadatamanagementmodule)以下可简称mdm,mdm管理元数据,包括目录层次结构,每个目录下的文件名,以及文件的元数据,如大小、访问权限、时间戳等。mdm不管理文件本身的数据。系统中有1个磁盘或磁盘分区专门用于存储mdm的数据,该磁盘中也存储了其它数据磁盘的信息。
创建数据管理模块(datamanagementmodule)以下可简称dmm,dmm用于管理文件的数据。存储系统中除了安装操作系统的磁盘和存储mdm数据的磁盘外,其它所有磁盘都用于存储文件的数据,每个磁盘都唯一对应于一个dmm,不同的dmm之间完全独立。每个dmm是完整独立的存储单元,记录有磁盘的空间分配状态,所存储的数据,数据的磁盘块地址。
步骤s5:对外提供统一命名空间模块以管理命名空间和元数据管理模块,并支持面向目录、文件或对象的数据访问。
所述步骤s5具体可包括:建立统一命名空间模块(unifiednamespacemodule)以下可简称unsm,unsm模块对上层软件提供文件或对象访问接口,如应用层的posix访问接口,或操作系统层的vfs(虚拟文件系统:virtualfilesystem),屏蔽存储系统的内部结构;根据文件读写请求访问相应的mdm和dmm。
unsm管理命名空间和元数据。命名空间主要由目录组成。一个目录文件包括多个目录项,目录项的内容包括如下字段:
目录/文件名、类型、对应的inode(索引节点)编号。
类型字段表明该目录项为目录还是普通文件。
每个文件/目录在存储系统中具有唯一的数据结构inode(索引节点)存储其元数据。
inode包括的字段见图4。
mode:文件权限,分为读、写、执行,共9个比特位,对别对应于owner、group、other三种角色对该文件拥有的权限;
owners:所有者和组标识号;
timestamps:文件创建、修改、最后访问时间;
count:文件引用计数;
size:文件大小;
stripe:文件布局方式,可以为mono(单体)、mirror(镜像)、stripe(条带化);
dmmids:该文件的数据所在数据磁盘的标识号。
存储系统支持多种数据布局方式。在mono方式中,一个文件的数据只存储到一个dmm磁盘中;在mirror方式中,一个文件的数据同时保持到2个不同的dmm磁盘中,以实现容错;stripe方式中,一个文件的数据以条带化方式写入到多个不同的dmm磁盘中,其中1~2个磁盘中存储该条带化数据的冗余编码,以实现容错。
其中,在数据存储单元上,所有数据为扁平结构,在逻辑上无层次目录结构。
本发明实施例将命名空间/元数据、文件本身的数据分开管理,保存在不同的磁盘中;每个磁盘为独立的存储单元,具有独立的磁盘空间管理和数据管理,不同磁盘之间完全独立;存储系统可支持多个磁盘,不同磁盘的容量不要求完全相同;系统在运行过程中可在线加入新的磁盘,可以只加入一块磁盘,不要求成组加入,新添加磁盘后,无强制性数据迁移。文件的元数据保存在索引节点中;索引节点内容包括该文件的数据布局方式和数据所在磁盘的标识号;数据布局方式支持单体、镜像、条带化等多种方式;每个目录和文件的布局方式可以独立设置;以文件在元数据磁盘上的索引节点编号作为文件数据在相应数据磁盘上的名,在数据磁盘上,所有数据为扁平结构,在逻辑上无层次目录结构,支持存储容量扩展、数据容错,能够简化存储系统管理,提高可扩展性,并提升存储系统数据访问性能。
实施例二
如图1-5所示,一种多磁盘聚合式数据存储系统,其硬件部分如图2所示,包括处理器(cpu)、内存(dram),用于存储数据的多个磁盘或固态盘。处理器(cpu),为所述存储系统执行各种计算和处理程序;磁盘通过i/o总线,如sata接入到系统中,存储系统也可以包括1个或多个网络接口,以支持通过网络方式,如fc(光纤通道)、以太网、infiniband等来访问存储系统中的数据。
存储系统中运行有管理数据的软件,参见图3,所述管理数据的软件包括以下3个组件:
●unsm(统一命名空间模块:unifiednamespacemodule)
●mdm(元数据管理模块:metadatamanagementmodule)
●dmm(数据管理模块:datamanagementmodule)
unsm模块对上层软件提供文件或对象访问接口,如应用层的posix访问接口,或操作系统层的vfs(虚拟文件系统:virtualfilesystem),屏蔽存储系统的内部结构;根据文件读写请求访问相应的mdm和dmm。
unsm管理命名空间和元数据,参见图4和图5,命名空间主要由目录组成,一个目录文件包括多个目录项,目录项的内容包括如下字段:目录/文件名、类型、对应的inode(索引节点)编号;文件的元数据保存在索引节点中,所述索引节点包括文件的数据布局方式和数据所在磁盘的标识号。类型字段表明该目录项为目录还是普通文件,每个目录/文件名在存储系统中具有唯一的数据结构inode(索引节点)存储其元数据。
inode包括的字段见图4,其中:
mode:文件权限,分为读、写、执行,共9个比特位,分别对应于owner、group、other三种角色对该文件拥有的权限;
owners:所有者和组标识号;
timestamps:文件创建、修改、最后访问时间;
count:文件引用计数;
size:文件大小;
stripe:文件的数据布局方式;
dmmids:该文件的数据所在数据磁盘的标识号。
mdm管理元数据,包括目录层次结构,每个目录下的文件名,以及文件的元数据,如大小、访问权限、时间戳等。mdm不管理文件本身的数据。系统中有1个磁盘或磁盘分区专门用于存储mdm的数据,该磁盘中也存储了其它数据磁盘的信息。
dmm用于管理文件本身的数据,存储系统中除了安装操作系统的磁盘和存储mdm数据的磁盘外,其它所有磁盘都用于存储文件的数据,每个磁盘都唯一对应于一个dmm,不同的dmm之间完全独立。每个dmm是完整独立的存储单元,记录有磁盘的空间分配状态,所存储的数据,数据的磁盘块地址。
访问文件时首先从存储元数据管理模块的磁盘中获得该文件的数据布局方式与数据所在磁盘的的信息,然后从相应的磁盘中读取文件的数据。
存储系统支持多种数据布局方式,文件的数据布局方式为单体、镜像或者条带化,每个目录或文件可以独立选择数据布局方式。在mono方式中,一个文件的数据只存储到一个dmm磁盘中;在mirror方式中,一个文件的数据同时保持到2个不同的dmm磁盘中,以实现容错;stripe方式中,一个文件的数据以条带化方式写入到多个不同的dmm磁盘中,其中1~2个磁盘中存储该条带化数据的冗余编码,以实现容错。
实施例三
如图6-10所示,一种多磁盘聚合式数据存储系统的数据存取方法,所述数据存取方法包括:数据读取方法和数据写入方法;其中:
数据读取方法包括以下步骤:
1)上层软件模块调用统一命名空间模块的open函数,参数包括文件名和读写模式;
2)统一命名空间模块模块将请求转交个元数据管理模块模块;
3)元数据管理模块对文件名、访问权限进行检查,如失败,则返回错误;
4)元数据管理模块将文件的inode编号和内容返回给统一命名空间模块模块;
5)统一命名空间模块为该文件分配文件描述符fd,建立fd和inode的映射;
6)统一命名空间模块给上层软件模块返回文件描述符fd;
7)上层软件调用统一命名空间模块的read函数,参数包括fd,偏移量和数据大小等;
8)统一命名空间模块模块查找fd到inode的映射表,得到该文件的inode;
9)统一命名空间模块根据inode中保存的数据布局模式,以及数据所在磁盘的数据管理模块标识,以inode作为对象名,调用相应数据管理模块的读接口,来读取数据;
10)统一命名空间模块将读到的数据返回给上层软件。
数据写入方法包括以下步骤:
1)上层软件调用统一命名空间模块的open函数,参数包括文件名、读写模式,和文件权限等;
2)统一命名空间模块调用元数据管理模块的open函数;
3)元数据管理模块对文件名、访问权限进行检查,如失败,则返回错误;
4)元数据管理模块为该文件分配inode,将inodeid和内容返回给统一命名空间模块模块;
5)统一命名空间模块根据每个数据管理模块磁盘的空闲容量大小和当前读写负载情况,选择一个空闲容量较大、负载较轻的数据管理模块;
6)统一命名空间模块在选择的数据管理模块上以inode作为对象名创建一个新的数据对象;
7)统一命名空间模块模块在inode中保存该文件的布局模式,和数据所在磁盘的数据管理模块id;
8)统一命名空间模块为该文件分配文件描述符fd,在内存中建立fd到inode的映射;
9)统一命名空间模块向应用软件返回文件描述符fd;
10)上层软件调用统一命名空间模块模块的write函数,参数包括文件描述符fd,数据缓冲区地址和数据长度等;
11)统一命名空间模块根据fd查找其对应的inode;
12)统一命名空间模块读取inode内容,得到该文件的数据布局方式和数据所在的数据管理模块id;
13)统一命名空间模块向数据管理模块中写入数据;
14)统一命名空间模块向上层软件返回写入的字节数;
15)上层软件调用统一命名空间模块的close函数关闭文件,参数包括fd;
16)统一命名空间模块根据fd查找文件对应的inode;
17)统一命名空间模块向元数据管理模块更新inode中的文件大 小和修改时间;
18)统一命名空间模块关闭文件,释放文件描述符;
19)统一命名空间模块返回结果给上层软件。
本发明实施的优点:本发明所述的技术方案将命名空间/元数据、文件本身的数据分开管理,保存在不同的磁盘中;每个磁盘为独立的存储单元,具有独立的磁盘空间管理和数据管理,不同磁盘之间完全独立;存储系统可支持多个磁盘,不同磁盘的容量不要求完全相同;系统在运行过程中可在线加入新的磁盘,可以只加入一块磁盘,不要求成组加入,新添加磁盘后,无强制性数据迁移。文件的元数据保存在索引节点中;索引节点内容包括该文件的数据布局方式和数据所在磁盘的标识号;数据布局方式支持单体、镜像、条带化等多种方式;每个目录和文件的布局方式可以独立设置;以文件在元数据磁盘上的索引节点编号作为文件数据在相应数据磁盘上的名,在数据磁盘上,所有数据为扁平结构,在逻辑上无层次目录结构,支持存储容量扩展、数据容错,能够简化存储系统管理,提高可扩展性,并提升存储系统数据访问性能。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本领域技术的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。