一种分布式对象存储***的资源管理方法
技术领域
本发明涉及云计算计算机数据分布式对象存储的领域,尤其涉及一种云计算环境下分布式对象存储***的资源管理方法。
背景技术
在云计算环境下,数据的存储是一个极其重要的问题。传统网络存储主要分为三种:直接附加存储(Direct Attached Storage,DAS)、存储区域网(Storage Area Network,SAN)和网络附加存储(Network Attached Storage,NAS)。但是,DAS不适合大规模数据存储;而对于SAN和NAS,随着数据规模的增大,元数据服务器很容易成为整个***的瓶颈。
相对于传统存储***,新型的分布式对象存储***(Object-Based Storage,OBS)能够很好地解决上述问题。OBS提供了一个带有NAS***的传统的文件共享和管理特征的单***映象(single-system-image)文件***,并改进了SAN的资源整合和可扩展的性能。与传统面向块的逻辑单元不同,对象存储不提供对不相关的数据块的访问,它允许通过存储对象来访问相关的数据块。存储对象是一个虚拟实体,它是一个客户认为相关的一组数据,类似于平面文件***中的大小不限的比特流文件,但对象又不同于文件,它只是有属性的比特序列。尽管对象既不同与数据块,也不同于文件,但可通过对象语义的定义来实现文件或数据块的输入/输出,因此,通过对象实现了文件输入/输出和数据块输入/输出的统一。
对象存储的管理分两部分:服务器和对象存储目标端(Object-based Storage Target,OST)。服务器将所有存储目标端的存储空间虚拟为统一的存储空间,同时负责用户的命名空间的管理,在认证用户请求后,分配给其唯一的对象ID,并按一定的算法实现用户命名空间到存储空间的映射。OST负责与其相连的存储设备的管理,它没有对象命名空间,只有平面对象ID空间,OST根据对象ID在存储设备中分配存储空间或访问存储对象。
对象存储通过信用保证所有操作的安全,信用包括允许客户的操作集和完整性编码。对每个操作简单提供信用,即使信用不加密,也能提供保护(由于完整性编码),因为不可能偶然为一个操作提供一个可靠信用。为了提供安全,对信用的某些形式的加密保护是必要的。对象存储提供安全和保护是在对象级而不是整个卷级,因此允许不可信的客户位于存储网络中,并允许共享访问存储数据而不需访问整个卷的数据。由于客户不能直接访问定位元数据,可提供额外的保护,因为不可能有错误配置和蠕虫主机破坏定位元数据。
此外,对象存储体系结构在每一个级别上都提供了安全性:存储***对存储设备的认证;存储***对计算节点的认证;存储***对计算节点命令的认证;所有命令都经CRC(Cyclic Redundancy Check,循环冗余校验码)的完整性检查;数据和命令经由IP的私有性。这样的安全水平能给用户以信心,让他们可以更经济高效地管理并轻松地访问网络。因此,分布式对象存储是一种高性能的、安全的大规模数据存储技术。
对象存储***在大规模数据存储、性能、数据共享和可扩展性方面已经取得了很大的成就,并得到了业界的广泛认可。如Panasas公司是全球第一家OSD(Object-basedStorage Device,对象存储设备)产品的提供商,同时提供面向对象的存储和并行文件***。HP已经和开放源代码厂家Lustre文件***合作,使用OSD作为HP StorageWork可扩展文件***的重要部分。
在分布式对象存储***中,数据对象的所有操作都需要访问元数据,在一些极端情况下,***对元数据的访问次数占据了大部分的数据访问时间,从而可能成为制约***性能的瓶颈。所以,高效的元数据管理方法对整个存储***提供高性能和高可伸缩性至关重要。同时,大规模分布式存储***的存储容量往往是动态变化的,需要不断增加新的存储节点,淘汰旧的存储节点,高可伸缩性、高可管理性要求数据对象能够实现自适应的、均衡的分配,以保证数据对象在整个存储***的分布总是负载均衡的。
发明内容
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种分布式对象存储***的资源管理方法,以分别实现高效的元数据组织、定位和访问控制,以及数据对象分配的动态负载均衡。
为了解决上述技术问题,本发明公开了一种分布式对象存储***的资源管理方法,所述分布式对象存储***将文件的存储路径属性与文件的元数据分离,存储路径属性包括文件所在的存储路径名称及相应的路径访问控制属性,文件的元数据包括文件名、创建时间、修改时间以及文件长度在内的访问属性;
所述分布式对象存储***包括存储路径索引服务器、元数据服务器和对象存储设备,其中,存储路径索引服务器为***中所有存储路径建立索引项,每个索引项包括SPID和存储路径属性,其中,SPID是存储路径索引服务器为存储路径分配的一个全局唯一的存储路径ID;元数据服务器定位存储路径ID为SPID的存储路径对象所对应的对象存储设备;
所述分布式对象存储***在存储路径索引服务器上建立SPID与元数据服务器的映射表,并将元数据服务器映射表分为主元数据服务器映射表和从元数据服务器映射表,其中主元数据服务器映射表是将SPID的散列值与元数据服务器映射,从映射表则是直接将SPID值与元数据服务器映射;
所述分布式对象存储***将SPID做为存储路径索引服务器中索引项的主关键字,根据SPID与元数据服务器的映射表定位文件元数据对应的不同的元数据服务器;元数据服务器根据文件名的散列值和存储路径对象的元数据信息计算文件元数据对应的桶对象,并在对象存储设备中确定该桶对象。
本发明中,新建文件元数据包括以下步骤:
步骤1:存储路径索引服务器获取文件的存储路径及相应的访问控制属性,并记录在索引项;
步骤1a、存储路径索引服务器获取文件的存储路径及相应的路径访问控制属性;
步骤1b、存储路径索引服务器检查存储路径访问控制属性,确认用户是否有新建文件元数据的权限;
步骤1c、如果用户有新建文件元数据权限,则存储路径索引服务器将存储路径及相应的访问控制属性记录在索引项,否则结束;
步骤2:存储路径索引服务器为存储路径分配SPID,并记录在索引项;
步骤3:定位文件元数据对应的元数据服务器,将文件元数据存储到对应的对象存储设备上;
步骤3a、在存储路径索引服务器上建立SPID与元数据服务器的映射表,其中主映射表是将SPID的散列值与元数据服务器映射,从映射表则是直接将SPID值与元数据服务器映射;
步骤3b、根据SPID和元数据服务器映射表定位主元数据服务器和从元数据服务器;
步骤3c、元数据服务器定位存储路径ID为SPID的存储路径对象所在的对象存储设备;
步骤3d、将文件名转换成整数,根据它的散列值以及存储路径对象的元数据信息计算文件元数据对应的桶对象ID,根据桶对象ID在对象存储设备中确定该桶对象;
步骤3e、将文件元数据存储到所述桶对象中。
本发明中,访问文件元数据包括如下步骤:
步骤4:将文件分解为存储路径和文件名两部分;
步骤5:存储路径索引服务器获取存储路径的访问控制属性及其SPID
步骤5a、客户端在本地缓存中查找是否有缓存项;
步骤5b、如果没有,则客户端访问存储路径索引服务器,如果有,则客户端根据缓存项确定存储元数据的桶对象,直接访问元数据;
步骤5c、存储路径索引服务器根据存储路径的散列值检索是否存在索引项,如果存在,则检查用户是否有访问权限,如果不存在,则结束;如果有权限,则返回索引项中的访问控制属性和SPID,否则结束;
步骤5d、客户端获得返回的索引项,将它保存在本地的缓存中;
步骤6:客户端获取文件的元数据;
步骤6a、客户端在本地缓存中查找是否有缓存项;
步骤6b、如果没有,则根据SPID的散列值确定主元数据服务器,访问主元数据服务器,如果有,则客户端根据缓存项确定存储元数据的桶对象,直接访问元数据;
步骤6c、主元数据服务器查找缓存中是否有存储路径ID为SPID的存储路径对象,如果没有,根据SPID从对象存储设备中读取该存储路径对象,否则,主元数据服务器直接确定存储元数据的桶对象;
步骤6d、将文件名转换成整数,根据它的散列值以及存储路径对象的元数据信息计算文件元数据所在的桶对象ID,如果该桶对象不在本地缓存中,根据桶对象ID从对象存储设备中读取该桶对象;
步骤6e、客户端从桶对象中获得文件的元数据;
步骤6f、如果主元数据服务器过载,从存储路径索引服务器获得负载较轻的从元数据服务器,查询从元数据服务器获得所需要的文件元数据;
步骤6g、客户端将获得的元数据项保存在本地的缓存中。
本发明中,在当前存储路径新建目录时,构建新存储路径的访问控制属性包括以下步骤:
步骤7、用户查询当前存储路径的访问控制属性,确认用户是否有新建目录的权限,如果有权限,则执行步骤2,否则结束;
步骤8、用户设定新建目录的访问权限属性;
步骤9、根据当前存储路径的访问控制属性以及新建目录的访问权限属性,构造新存储路径的访问控制属性。
本发明实现了分布式对象存储***的资源管理方法,具有以下优点:
1、实现了高效的元数据组织、定位和访问控制;
2、实现了对***中对象等数据资源的高效管理。
3、解决了大规模数据存储***资源管理不易等问题,保证了云存储环境下数据的安全。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1为存储路径对象内部结构。
图2a和图2b分别为MDS主、从映射表。
图3为创建新文件元数据的流程图。
图4为访问文件元数据的流程图。
图5为对象资源管理工作内容。
具体实施方式
本发明针对云计算环境下分布式对象存储的特点,提出了一种分布式对象存储的资源管理方法。
(1)元数据管理
对象存储***将文件和数据分开管理,文件***的元数据信息与实际数据读写分离,减轻了***的元数据工作负载,提高了***的整体性能。本发明将存储路径属性与文件的元数据进一步分离,存储路径属性包括文件所在的存储路径名称及相应的路径访问控制属性,文件的元数据包括文件名、创建时间、修改时间、文件长度等访问属性。目录属性由存储路径索引服务器(Storage Path Index Server,SPIS)专门管理,为***中的所有存储路径分配一个全局唯一的存储路径ID。存储路径索引服务器中的目录属性包括:
●SPID:表示全局唯一的存储路径ID;
●ACp:表示该存储路径的访问控制属性;
●StoragePath:表示该存储路径名字。
每次创建目录时,SPIS将获得的路径访问控制属性记录在当前索引项中,在该目录下创建新的目录时,不再需要遍历前面目录,只需递归使用当前的路径访问控制属性与新建目录文件的访问控制属性即可构建新的存储路径访问控制属性。SPID为存储路径索引服务器中索引的主关键字,存储路径下的文件元数据通过SPID的散列值分布到不同的元数据服务器(Metadata Server,MDS)。这种方法可以在SPID不改变的条件下任意修改文件路径中目录名和访问权限,避免了由于目录名和访问权限的修改导致该存储路径下文件的元数据更新,从而也避免了大量的元数据迁移。
元数据服务器主要负责存储和管理数据文件的元数据,这些元数据都包含在一种称为存储路径对象(Storage Path Object,SPO)的逻辑结构中。SPO包含一个或多个固定大小的桶(Bucket)对象,每一个Bucket对象包含固定数量的文件或目录文件元数据的登记项入口(Entry),每一个Entry则包含着某一文件的全部元数据。在存储路径对象的起始位置包含描述该存储路径对象属性的元数据,存储路径对象的内部结构如图1所示。
通常采用静态散列法根据文件的标志值散列到不同的MDS中。本发明结合字典与散列法,在SPIS上建立SPID与MDS的映射表,并将MDS映射表分为主MDS映射表和从MDS映射表,其中主映射表是将SPID的散列值与MDS映射,从映射表则是直接将SPID值与MDS映射。从映射表的目的是为了防止过载访问的极端情况。主、从映射表如图2a和图2b所示。
新建文件元数据的流程如下,其流程图如图3所示:
步骤一:SPIS获取文件的存储路径及相应的访问控制属性,并记录在索引项;
ⅰ、SPIS获取文件的存储路径相应的访问控制属性;
ⅱ、SIPS查询存储路径访问控制属性,确认用户是否有新建文件的权限;
ⅲ、如果用户有新建文件权限,则SPIS将存储路径及相应的访问控制属性记录在索引项,否则结束。
步骤二:SPIS为存储路径分配SPID,并记录在索引项;
步骤三:定位文件元数据对应的MDS,将文件元数据存储到对应的OSD上;
ⅰ、在SPIS上建立SPID与MDS的映射表,其中主映射表是将SPID的散列值与MDS映射,从映射表则是直接将SPID值与MDS映射;
ⅱ、根据SPID和MDS映射表确定主MDS和从MDS;
ⅲ、MDS定位存储路径ID为SPID的存储路径对象所在的OSD;
ⅳ、将文件名转换成整数,根据它的散列值以及存储路径对象的元数据信息计算文件元数据对应的桶对象ID,根据桶对象ID在OSD中确定该桶对象;
ⅴ、将文件的元数据存储到桶对象中。
访问文件元数据的流程如下,其流程图如图4所示:
步骤一:将文件分解为存储路径和文件名两部分;
步骤二:SPIS获取存储路径的访问控制属性及其SPID:
ⅰ、客户端在本地Cache中查找是否有缓存项;
ⅱ、如果没有,则客户端访问SPIS,如果有,则客户端根据缓存项确定存储元数据的桶对象,直接访问元数据;
ⅲ、SPIS根据存储路径的散列值快速检索是否存在索引项,如果存在,则检查用户是否有访问权限,如果不存在,则结束;如果有,则返回索引项中的访问控制属性和SPID,否则结束;
ⅳ、如果客户端获得返回的索引项,将它保存在本地的Cache中;
步骤三:客户端获取文件的元数据;
ⅰ、客户端在本地Cache中查找是否有缓存项;
ⅱ、如果没有,则根据SPID的散列值确定主MDS,访问主MDS,如果有,则客户端根据缓存项确定存储元数据的桶对象,直接访问元数据;
ⅲ、主MDS查找Cache中是否有存储路径ID为SPID的存储路径对象,如果没有,根据SPID从OSD中读取该存储路径对象,否则,主元数据服务器直接确定存储元数据的桶对象;
ⅳ、将文件名转换成整数,根据它的散列值以及存储路径对象的元数据信息计算文件元数据所在的桶对象ID,如果该桶对象不在Cache中,根据桶对象ID从OSD中读取该桶对象;
ⅴ、客户端从桶对象中获得文件的元数据;
ⅵ、如果主MDS过载,从SPIS获得负载较轻的从MDS,查询从MDS获得所需要的文件元数据;
ⅶ、客户端将获得的元数据项保存在本地的缓存Cache中。
(2)对象资源管理
在对象存储***中,对象数据作为一种资源,需要进行合理的管理和操作,从而提高对象存储***性能和资源利用率。
对象的管理主要包括对象资源管理,对象基本操作管理,对象性能管理等,各项具体工作内容如图5所示。在对象资源管理中,对象存储***根据***中存储节点的规模和权值将单位区间分割成长度不同的区间,并在这些区间与存储节点之间建立映射关系。通过将数据对象映射到均匀分布在单位区间[0,1)中的随机数集合中,根据映射确定数据对象的存储位置,从而实现对象数据在***中的均衡存储。
实施例
(1)元数据管理
元数据管理主要涉及元数据定位和文件访问控制属性管理两方面。
元数据定位操作的基本步骤是当客户端需要访问数据文件时,首先需要访问SPIS,查询所要访问文件的存储路径的访问控制属性以及SPID。如果有访问权限,则需要根据SPID进行散列计算,确定存储文件元数据的主MDS。在正常访问情况下,通过查询主MDS即可获得所需要的文件元数据,如果主MDS过载,则从SPIS获得负载较轻的从MDS,查询从MDS获得所需要的文件元数据。以访问文件/home/src/test/HelloWorld.Java的元数据为例,说明具体的访问过程。
步骤一:将以下文件/home/src/test/HelloWorld.java分解为存储路径/home/src/test/和文件名HelloWorld.java两部分;
步骤二:获取存储路径/home/src/test/的访问控制属性及其SPID;
ⅰ、在本地Cache中查找是否有缓存项;
ⅱ、如果没有,则访问SPIS;
ⅲ、SPIS根据/home/src/test/的散列值快速检索是否存在索引项,如果存在,则检查用户是否有访问权限;如果有,则返回索引项中的访问控制属性和SPID;
ⅳ、如果获得返回的索引项,将它保存在本地的Cache中;
步骤三:获取文件HelloWorld.java的元数据;
ⅰ、在本地Cache中查找是否有缓存项;
ⅱ、如果没有,则根据SPID的散列值确定主MDS,访问主MDS;
ⅲ、主MDS查找Cache中是否有存储路径ID为SPID的存储路径对象,如果没有,根据SPID从OSD中读取该存储路径对象;
ⅳ、将HelloWorld.java转换成整数,根据它的散列值以及存储路径对象的元数据信息计算HelloWorld.java所在的Bucket对象ID,如果该Bucket对象不在Caehe中,从OSD中读取该Bucket对象;
ⅴ、从Bucket对象中获得HelloWorld.java的元数据;
ⅵ、如果主MDS过载,从SPIS获得负载较轻的从MDS,查询从MDS获得所需要的文件元数据;
ⅶ、将获得的元数据项保存在本地的Cache中。
文件访问控制属性管理的基本操作过程是将文件本身的访问控制属性与所在的存储路径访问控制属性分开管理。构造存储路径的访问控制属性时,每次创建新的目录都需要将获得的路径访问控制属性记录在当前索引项中。在该目录下创建新的子目录时,只需要结合当前的路径访问控制属性与新建目录的访问控制属性即可构建新的存储路径访问控制属性,而无需遍历前面的各层目录。这种方法的好处是,只需要通过SPIS即可查询文件的存储路径访问控制属性,无需遍历文件所在路径的所有目录,大大提高了元数据访问效率。以下是在目录/home/src下新建目录test时,构造存储路径/home/src/test的访问控制属性过程如下:
步骤一:用户查询存储路径/home/src的访问控制属性,获得/home/src的访问控制属性为:rwxr-xr-x,即用户有新建目录的权限;
步骤二:用户设定新建目录test的访问权限属性为:rwxr-r-;
步骤三:根据存储路径/home/src的访问控制属性以及新建目录test的访问权限属性,构造存储路径/home/src/test的访问控制属性为:rwxr-r-。
(2)对象资源管理
对象资源管理主要涉及到数据对象的资源分配、数据对象操作、***性能监控、资源回收等内容,其具体步骤如下:
步骤一:对象存储***接收来自用户的对象资源申请,申请信息包括所需资源大小。对象存储***将资源申请中的所需资源大小与自身存储能力进行对比,如果存储资源充足,则为申请分配对象资源,否则产生资源不足告警。
步骤二:对象存储分配对象资源时,通过线性散列函数H(x)为数据对象x产生全局唯一的ID,并映射到随机产生的均匀分布在单位区间[0,1)上的随机数集合上。
步骤三:对象存储***将单位区间[0,l)分割成如果干个不交叉的独立区间。通过比较存储***中所有存储节点的权重,在区间与存储节点之间建立映射关系,映射到同一个存储节点的区间构成了一个区间域,区间域中的区间按照区间的左边界递增的顺序进行排列,每个区间域中所有区间长度之和代表存储节点的权重。
步骤四:对象存储***查找数据对象x所对应的随机数所属的映射区间和区间域,由区间域唯一确定对应的存储节点,并将数据对象x存储到对应的存储节点。
步骤六:在对象存储***运行过程中,***对自身存储性能进行监控,并生成性能记录数据。如果***性能低于预定门限,则对象存储***发出告警。
步骤五:如果用户提交操作对象资源的请求,对象存储***根据用户请求对对象资源进行相关操作。例如,如果用户提交对数据对象x的删除操作,则对象存储根据对象x所在区间域确定存储节点,从该存储节点中删除数据对象x,并释放相应的存储资源。
本发明提供了一种分布式对象存储***的资源管理方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出如果干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。