具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明第一实施例提供的一种在RAID中创建文件的方法的流程图,本实施例在RAID中创建文件的方法的执行主体可以为元数据服务器,参见图1,方法包括:
步骤11、接收来自客户端的创建文件的请求信息。
步骤12、根据该请求信息确定对应的至少一个虚拟RAID组,虚拟RAID组中包括至少一个存储节点。
在本实施例中,虚拟RAID组对应于逻辑上划分的一组存储节点,与现有的磁盘阵列不同,虚拟RAID组是在逻辑上将一组存储节点划分为磁盘阵列以便于存储数据,如将存储节点0和存储节点1划分为一组,对应于虚拟RAID组1,将存储节点1和存储节点2划分为一组,对应于虚拟RAID组2。每个虚拟RAID组的成员可以交叉,由此使得数据存储方式更加灵活。在选择了虚拟RAID组1创建文件对象时,则会将文件数据存储在存储节点0和存储节点1上;在选择了虚拟RAID组2创建文件对象时,则会将文件数据存储在存储节点1和存储节点2上。
步骤13、从该至少一个虚拟RAID组中,确定优先级最高的第一虚拟RAID组。
其中,该虚拟RAID组的优先级至少由该虚拟RAID组中的存储节点的负载大小所确定。
步骤12在确定了对应的虚拟RAID组后,就可以进一步从这些虚拟RAID组中,确定优先级最高的第一虚拟RAID组的优先级。在本实施中,需预先设置虚拟RAID组的优先级。可选的,可以根据虚拟RAID组中的存储节点的负载大小设置虚拟RAID组的优先级,存储节点的负载大小体现为CPU占用率和网络占用率等参考信息,存储节点的负载大小可以采用加权计算的方法得到,可以综合考虑存储节点的CPU占用率和网络占用率等参考信息,为每个参考信息分配一个权值,进行加权计算得到存储节点的负载大小。如可以为CPU占用率分配权值为2,为网络占用率分配权值为3,则当某一个存储节点的CPU占用率为40%,网络占用率为50%时,通过加权计算得到其负载为2*40%+3*50%=2.3,当另一存储节点的CPU占用率为50%,网络占用率为70%时,通过加权计算得到其负载为2*50%+3*70%=3.1,则可以看出其负载大于前者。
在设置虚拟RAID组的优先级时,可以采用以下两种方式:
方式一:考虑到虚拟RAID组在进行数据存储时,每个节点上都需要存储数据,因此,可以根据虚拟RAID组中的负载最大的存储节点确定该虚拟RAID组的优先级,即某个RAID组中如果包含负载最大的存储节点,则其设置的优先级最低,若某个虚拟RAID组中的负载最大的存储节点的负载,小于其他虚拟RAID组中的负载最大的存储节点的负载,则其设置的优先级最高。
方式二:根据虚拟RAID组中的所有存储节点的负载大小确定该虚拟RAID组的优先级,即所有存储节点的负载之和最大的虚拟RAID组,其设置的优先级最低;所有存储节点的负载之和最小的虚拟RAID组,其设置的优先级最高。
另外,设置虚拟RAID组的优先级时,用户可以采用自定义的方式,例如:用户希望将数据集中放在某个虚拟RAID组时,倾向于将这个虚拟RAID组的优先级设为最高,这样能够灵活选用优先级较高的虚拟RAID组中的存储节点来存储数据。
上述两种设置优先级的方式都能实现数据存储的负载均衡,但各有侧重点,方式一对每个存储节点的负载都进行了考虑,优先选择所有存储节点负载都较低的虚拟RAID组。方式二考虑虚拟RAID组的整体性能,优先选择所有存储节点负载之和最小的虚拟RAID组。在实际应用中,可以根据具体的需求选择优先级设置的方式。
此外,也可以结合虚拟RAID组的存储节点的负载大小以及存储空间的大小,设置虚拟RAID组的优先级。如某一虚拟RAID组对应的存储节点的负载较小,存储空间较大,则可以设置该虚拟RAID组的优先级较高。
在获取了该虚拟RAID组的优先级后,就可以根据优先级从该虚拟RAID组中,选取优先级最高的第一虚拟RAID组。
步骤14、获取该第一虚拟RAID组中的存储节点的标识,并创建文件分布信息发送给客户端,以供该客户端在该第一虚拟RAID组中的存储节点上创建文件。
其中,该创建文件分布信息用于标识该第一虚拟RAID组中包括的存储节点,例如:第一虚拟RAID组中包括存储节点0、存储节点1和存储节点2,创建文件分布信息用于标识这些节点。
本实施例中,在RAID中创建文件时,通过为每个虚拟RAID组分配优先级,使得在创建文件时,能够灵活选用优先级较高的虚拟RAID组对应的存储节点,使得各存储节点的负载和数据存储得到均衡,提高了存储性能。
图2为本发明第二实施例提供的一种在RAID中创建文件的方法的流程图,本实施例在RAID中创建文件的方法的执行主体可以为元数据服务器,参见图2,在RAID中创建文件的方法包括:
步骤21、接收来自客户端的创建文件的请求信息。
客户端发送的创建文件的请求信息中包括创建文件的基本信息,如文件的大小和类型等信息,此外,创建文件的请求信息中还可以包括RAID级别信息,使得元数据服务器可以根据RAID级别信息选择相应级别的虚拟RAID组创建文件对象。
其中,RAID级别的定义如下:
1.RAID0级,无冗余无校验的磁盘阵列。数据同时分布在各个磁盘驱动器上。
2.RAID1级,镜像磁盘阵列。每一个磁盘驱动器都有一个镜像磁盘驱动器,镜像磁盘驱动器随时保持与原磁盘驱动器的内容一致。
3.RAID2级,纠错海明码磁盘阵列。
4.RAID3和RAID4,奇校验或偶校验的磁盘阵列。不论有多少数据盘,均使用一个校验盘,采用奇偶校验的方法检查错误。
5.RAID5级,无独立校验盘的奇偶校验磁盘阵列。同样采用奇偶校验来检查错误,但没有独立的校验盘,校验信息分布在各个磁盘驱动器上。
6.RAID10级,RAID10也被称为镜象阵列条带,是一个Raid 0与Raid1的组合体,利用奇偶校验实现条带集镜像,继承了Raid0的快速和Raid1的安全。RAID10以RAID 0为执行阵列,以RAID 1为数据保护阵列,每个磁盘都有一个镜象磁盘,具有与RAID 1一样的容错能力。
元数据服务器根据客户端发送的创建文件的请求信息中的RAID级别信息,采用相应的方式创建文件对象,例如,请求信息中的RAID级别信息为1,则元数据服务器采用镜像的方式创建文件对象,即在选择的虚拟RAID组对应的每个存储节点上创建一致的文件对象,客户端在创建文件时,在该虚拟RAID组对应的每个存储节点创建镜像文件。若请求信息中的RAID级别信息为2,则元数据服务器以纠错码的方式创建文件对象,客户端在创建文件时,以纠错码的方式在该虚拟RAID组对应的每个存储节点上存储文件数据。
步骤22、根据该请求信息中的RAID级别信息确定对应的至少一个虚拟RAID组,并从该至少一个虚拟RAID组中,确定优先级最高的第一虚拟RAID组。
元数据服务器根据客户端发送的请求信息,确定对应的虚拟RAID组,为客户端创建文件做准备。在请求信息中包括RAID级别信息时,元数据服务器根据RAID级别信息,确定RAID级别与请求信息中的RAID级别信息相匹配的虚拟RAID组。由上述方法可知,本实施例根据RAID级别信息确定对应的虚拟RAID组,能够使得数据存储的方式更加灵活,满足用户多样化的需求。
在确定了对应的虚拟RAID组后,就可以进一步获取每个虚拟RAID组的优先级,并从中选取优先级最高的第一虚拟RAID组。其中,虚拟RAID组的优先级需要进行预先设置,设置的方法可以与第一实施例中的方法相同,不再赘述。为便于表示虚拟RAID组的优先级,在本实施例中,0表示优先级最高。
在实际应用中,元数据服务器可以存储一份动态RAID分配路由表(Dynamic RAID Route Table,以下简称DDRT)表,以用于根据用户的请求信息查询确定对应的虚拟RAID组,并确定最高优先级的虚拟RAID组。DDRT表中包括但不限于以下信息:虚拟RAID组号,虚拟RAID组的级别、虚拟RAID组对应的存储节点。虚拟RAID组的优先级。参见表1为元数据服务器中的DDRT表的内容。
RAID ID |
级别 |
存储节点 |
优先级 |
0 |
0 |
0、1 |
0 |
1 |
1 |
1、3 |
1 |
2 |
2 |
0、1、2、3 |
2 |
3 |
1 |
2、3 |
3 |
4 |
3 |
0、1 |
2 |
5 |
1 |
1、2、3 |
0 |
表1
根据上述DDRT表,元数据服务器根据用户发送的请求信息,就能查询确定对应的虚拟RAID组,如客户端发送的请求信息中RAID级别信息为1,则元数据服务器可查询到RAID级别信息为1的虚拟RAID组的组号为1、3和5,并可进一步选择优先级最高的组号为5的虚拟RAID组。
需要说明的是,当在虚拟RAID组中加入了新的存储节点时,则需要更新DDRT表项,并可以将该虚拟RAID组的优先级设置为0,以便于对其优先使用。当虚拟RAID组中删除了存储节点时,则也需要更新该DDRT表项,更新该虚拟RAID组内的存储节点成员。
步骤23、获取该第一虚拟RAID组对应的存储节点的标识,并创建文件分布信息发送给客户端,以供该客户端在该第一虚拟RAID组中的存储节点上创建文件。
元数据服务器选择了第一虚拟RAID组后,向对应的存储节点发送创建文件对象的信息,在对应的存储节点上创建相应的文件对象,以使得客户端能够在该对应的存储节点上创建文件。元数据服务器创建了文件对象后,向客户端发送文件分布信息,客户端根据文件分布信息在对应的存储节点上创建文件。
如在上述步骤中,客户端发送了RAID级别信息为1的请求信息。元数据服务器查询到匹配的虚拟RAID组的组号为3和5,从中选出优先级最高的组号为5的虚拟RAID组,在对应的存储节点1、2和3上以镜像的方式创建文件对象,并向客户端发送文件分布信息,以使得客户端在存储节点1、2和3上以镜像的方式创建文件。
通过上述方法就实现了客户端在RAID中创建文件,在实际应用中,存储节点是的状态是会发生变化的。考虑到存储节点状态对RAID的存储性能的影响,本实施例中,还可以进一步根据存储节点的状态,对各虚拟RAID组的优先级进行动态的更新,以实现各存储节点的负载均衡。
在更新各虚拟RAID组的优先级时,可以根据虚拟RAID组中的存储节点的负载大小,更新其优先级,如某一时刻,组号为1的虚拟RAID组中的存储节点的负载减小了,则相应提高其优先级,以优先在该虚拟RAID组中的存储节点上存储数据。此外,也可以结合虚拟RAID组的存储节点的负载大小以及存储空间的大小,更新虚拟RAID组的优先级。如某一时刻,组号为2的虚拟RAID组对应的存储节点的负载减小了,存储空间增加,则相应提高其优先级。
从上述方法可以看出。通过为每个虚拟RAID组分配优先级,并定期更新,可以有效均衡各存储节点的负载和数据存储,提高存储性能。
当客户端读取数据时,向元数据服务器发送读取文件的请求信息,元数据服务器根据客户端需要读取的文件对象,查询获取相应的虚拟RAID组,并向客户端返回文件分布信息,客户端根据文件分布信息在对应的存储节点上读取文件。从RAID中读取文件的方法与现有技术类似,不再赘述。
本实施例在RAID中创建文件时,通过为每个虚拟RAID组分配优先级,使得在创建文件时,能够灵活使用优先级较高的虚拟RAID组的存储节点,同时根据各存储节点的状态,动态调整各虚拟RAID组的优先级,实现了各存储节点的负载和数据存储的均衡,提高了数据存储性能。
图3为本发明第三实施例提供的一种在RAID中创建文件的方法的流程图,本实施例中的方法的执行主体可以为元数据服务器,参见图3,在RAID中创建文件的方法包括:
步骤31、接收来自客户端的创建文件的请求信息。
客户端发送的创建文件的请求信息中包括创建文件的基本信息,如文件的大小和类型等信息,此外,客户端还可以根据创建的文件的具体应用,在该请求信息中添加创建文件的等级信息,以使得元数据服务器可以根据文件的等级信息查询并获取相应配置的虚拟RAID组创建文件对象。如文件等级1所表示的常用文件,可以存储在配置较高的存储节点上,文件等级2所表示不常用文件,可以存储在配置一般的存储节点上。
步骤32、根据该请求信息中的文件的等级信息确定对应的至少一个虚拟RAID组,并从该至少一个虚拟RAID组中,确定优先级最高的第一虚拟RAID组。
在本实施例中,可以预先设定不同等级的文件存储在不同配置的存储节点上,如重要且可能会经常访问的文件,可以存储在配置较好的存储节点上;不太重要且不会常访问的文件可以存储在配置一般的存储节点上。因此,可以预先设定文件的等级与存储节点配置的匹配条件,例如,文件等级为1表示常用文件,文件等级为2表示不常用文件。相应的,存储节点的配置信息为1,表示其为配置较高的存储节点,能快速的读写数据;存储节点的的配置信息为2,表示其对应的存储节点为配置一般的存储节点。则在元数据服务器中,可以设置文件等级1与存储节点的配置信息1相匹配,文件等级2与存储节点的配置信息2相匹配。
由上述方法可知,本实施例根据文件的等级信息确定对应的虚拟RAID组,能够使得重要且可能会经常访问的文件,存放在配置较好的存储节点上,使得配置较好的存储节点能够得到更充分的利用,提高了系统的存储性能。
根据客户端发送的请求信息,元数据服务器确定对应的虚拟RAID组,为客户端创建文件做准备。在请求信息中包括文件的等级信息时,元数据服务器根据请求信息中的文件的等级信息,确定配置信息与请求信息中的文件的等级信息相匹配的虚拟RAID组。
在确定了对应的虚拟RAID组后,就可以进一步获取每个虚拟RAID组的优先级,并从中获取优先级最高的第一虚拟RAID组。其中,虚拟RAID组的优先级需要进行预先设置,设置的方法可以与第一实施例中的方法相同,不再赘述。
在实际应用中,元数据服务器可以存储一份DDRT表,以用于根据用户的请求信息查询确定对应的虚拟RAID组,并确定最高优先级的虚拟RAID组。DDRT表中包括但不限于以下信息:虚拟RAID组号,虚拟RAID组对应的存储节点的配置信息、虚拟RAID组对应的存储节点。虚拟RAID组的优先级。参见表2为元数据服务器中的DDRT表的内容。
RAID ID |
配置 |
存储节点 |
优先级 |
0 |
1 |
0、1 |
0 |
1 |
2 |
1、3 |
1 |
2 |
3 |
0、1、2、3 |
2 |
3 |
1 |
2、3 |
3 |
4 |
1 |
0、1 |
2 |
5 |
1 |
1、2、3 |
2 |
表2
根据上述DDRT表,元数据服务器根据用户发送的请求信息,就能查询确定对应的虚拟RAID,如客户端的请求信息中包括文件的等级为1,则元数据服务器查询到配置为1的虚拟RAID组的组号为0、3、4和5,并可进一步选择优先级最高的组号为0的虚拟RAID组。
步骤33、获取该第一虚拟RAID组对应的存储节点的标识,并创建文件分布信息发送给客户端,以供该客户端在该第一虚拟RAID组中的存储节点上创建文件。
元数据服务器选择了虚拟RAID组后,向对应的存储节点发送创建文件对象的信息,在对应的存储节点上创建相应的文件对象,以使得客户端能够在该对应的存储节点上创建文件。元数据服务器创建了文件对象后,向客户端发送文件分布信息,客户端根据文件分布信息在对应的存储节点上存储文件。
如在上述步骤中,客户端发送的请求信息中文件等级信息为1,元数据服务器查询到匹配的虚拟RAID组的组号为0、3、4和5,从中选出优先级最高的组号为0的虚拟RAID组,在对应的存储节点0和1上创建文件对象,并向客户端发送文件分布信息,以使得客户端在存储节点0和1上创建文件。
通过上述方法就实现了客户端在RAID中创建文件,在实际应用中,存储节点是的状态是会发生变化的。考虑到存储节点状态对RAID的存储性能的影响,本实施例中,还可以进一步根据存储节点的状态,对各虚拟RAID组的优先级进行更新,以实现各存储节点动态的负载均衡,方法与第二实施例中的方法相同,不再赘述。
本实施例在RAID中创建文件时,通过为每个虚拟RAID组分配优先级,使得在创建文件时,能够灵活使用优先级较高的虚拟RAID组的存储节点,同时根据各存储节点的状态,动态调整各虚拟RAID组的优先级,实现各存储节点的负载均衡,提高了数据存储性能。
以上分别介绍了在RAID中根据RAID级别信息,和根据文件等级信息为客户端创建文件的方法。在本发明实施例中,还可以将两者进行结合,即客户端发送的创建文件的请求信息中即包括RAID等级信息,也包括文件等级信息,此时,需要同时根据RAID等级信息和文件等级信息,确定对应的虚拟RAID组,且该对应的虚拟RAID组的RAID级别与请求信息中的RAID级别信息相匹配,该对应的虚拟RAID组对应的存储节点的配置信息与请求信息中的文件的等级信息相匹配。然后从该对应的虚拟RAID组中确定优先最高的第一虚拟RAID组,并进行创建文件的相关处理,方法与上述方法类似,此处不再赘述。
图4为本发明第四实施例提供的在虚拟RAID组中创建文件的服务端的结构示意图,该服务端可以为元数据服务器,如图4所示,该服务端可包括:接收模块41、第一确定模块42、第二确定模块43和发送模块44。
接收模块41,用于接收来自客户端的创建文件的请求信息。
第一确定模块42,用于根据该接收模块41接收的该请求信息确定对应的至少一个虚拟RAID组,该虚拟RAID组包括至少一个存储节点。
第二确定模块43,用于从该第一确定模块确定的该至少一个虚拟RAID组中,确定优先级最高的第一虚拟RAID组。
发送模块44,用于获取该第二确定模块43确定的该第一虚拟RAID组中的存储节点的标识,并将携带该第一虚拟RAID组中的存储节点的标识的创建文件分布信息发送给该客户端,以供该客户端在该第一虚拟RAID组中的存储节点上创建文件。
在实际应用中,存储节点是的状态是会发生变化的。考虑到存储节点状态对存储性能的影响,本实施例中,还可以进一步根据存储节点的状态,对各虚拟RAID组的优先级进行调整,以实现各存储节点的负载均衡,该服务端还包括:
状态获取模块45,用于获取至少一个虚拟RAID组中的存储节点的状态信息。
更新模块46,用于根据该状态获取模块获取的该存储节点的状态信息,更新该至少一个虚拟RAID组中各虚拟RAID组的优先级。
其中,第一确定模块42,用于当该请求信息中包括RAID级别信息时,根据该请求信息中的RAID级别信息,确定与该请求信息中的RAID级别信息相匹配的至少一个虚拟RAID组;或者,当该请求信息中包括文件的等级信息时,根据该请求信息中的文件的等级信息,确定与该请求信息中的文件的等级信息相匹配的至少一个虚拟RAID组。
另外,当该客户端发送的请求信息中同时包括RAID级别信息和文件等级信息时,则第一确定模块42还用于根据该请求信息中的RAID级别信息和文件的类型信息,确定对应的虚拟RAID组,且该对应的虚拟RAID组的RAID级别与该请求信息中的RAID级别信息相匹配,该对应的虚拟RAID组中的存储节点的配置信息与该请求信息中的文件的等级信息相匹配。
在本实施例中,服务端可以存储一份DDRT表,以用于根据用户的请求信息查询确定对应的虚拟RAID组,并确定最高优先级的第一虚拟RAID组。此时,第二确定模块43,包括:
优先级获取单元431,用于从预先设置的动态RAID分配路由表中,获取对应的至少一个虚拟RAID组的优先级,该动态RAID分配路由表中包括虚拟RAID组的优先级信息;
确定单元432,用于根据优先级获取单元431获取的该优先级,确定该至少一个虚拟RAID组中优先级最高的第一虚拟RAID组。
本实施例中服务端的功能及结构可参见图1至图3对应实施例的记载,在此不再赘述。
本实施例在RAID中创建文件时,通过为每个虚拟RAID组分配优先级,使得在RAID中创建文件时,能够灵活使用优先级较高的虚拟RAID组的存储节点,同时根据各存储节点的状态,动态调整各虚拟RAID组的优先级,实现各存储节点的负载均衡,使得系统的存储性能得到提高。
图5为本发明第五实施例提供的在虚拟RAID组中创建文件的系统的结构示意图,如5所示,本实施例的系统可包括:客户端51和服务端52。
服务端52,用于接收来自客户端51的创建文件的请求信息;根据该请求信息确定对应的至少一个虚拟RAID组,该虚拟RAID组包括至少一个存储节点;从该至少一个虚拟RAID组中,确定优先级最高的第一虚拟RAID组;获取该第一虚拟RAID组中的存储节点的标识,创建文件分布信息并发送给客户端51,以供该客户端51在该第一虚拟RAID组中的存储节点上创建文件。
本实施例中,服务端52的功能及结构可参见图4对应实施例的记载,客户端51与服务端52之间的交互机理和效果可参见图1~图3对应实施例的记载,在此不再赘述。
本实施例在RAID中创建文件时,通过为每个虚拟RAID组分配优先级,使得在创建文件时,能够灵活使用优先级较高的虚拟RAID组的存储节点,同时根据各存储节点的状态,动态调整各虚拟RAID组的优先级,实现各存储节点的负载均衡,使得系统的存储性能得到提高。
本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域普通技术人员可以理解:实施例中的装置中的模块可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令对应的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。