一种多活RAID读写系统的制作方法

文档序号:13685640阅读:355来源:国知局
一种多活RAID读写系统的制作方法

本发明涉及计算机存储技术领域,特别是涉及一种多活raid读写系统。



背景技术:

随着计算机技术的发展,raid(redundantarrayofindependentdisks,冗余磁盘阵列)在社会生产生活中的应用越来越广泛。raid的多控存储系统中存在多个控制器,当其中有控制器发生故障时,正常控制器可以快速接管故障控制器的业务,从而保证了业务的连续性。多活模式是多控存储系统中常用的工作模式。

目前基于多活模式的多控存储系统中,通常采用在各个控制器节点之间以条带为单位加分布式锁的方式来避免多个控制器同时对同一个条带进行读写的情况发生,从而保证数据的一致性。然而,加互斥锁会使系统的io性能降低。

因此,如何提供一种在保障raid数据一致性的前提下,io性能较高的多活raid读写系统是本领域技术人员目前需要解决的问题。



技术实现要素:

本发明的目的是提供一种多活raid读写系统,能够在保障raid数据一致性的前提下得到较高的io性能。

为解决上述技术问题,本发明提供了一种多活raid读写系统,包括多个控制器、raid与处理装置;所述raid分为若干存储区域;

所述处理装置用于为每个所述控制器分配一个一一对应的所述存储区域;其中,所述控制器处理分配给自身的存储区域的读写;在有所述控制器发生故障时,依据预设规则选取正常控制器处理故障控制器对应的存储区域的读写。

优选的,每个所述存储区域包括若干存储单元,所述存储单元的大小为raid条带深度的整数倍。

优选的,进一步包括,将所述存储单元的id、所述存储单元对应的存储空间的地址区间、所述存储单元被指定给的所述控制器的id这三者的对应关系保存到所述存储单元所在的所述raid上的区域管理数据存储区中。

优选的,所述地址区间包括所述存储单元的偏移量和所述存储单元的大小。

优选的,所述地址区间包括所述存储单元的起止地址。

优选的,相邻两个所述存储单元分配给不同的所述控制器。

优选的,每个所述控制器对应的所述存储区域的大小相同。

本发明提供了一种多活raid读写系统,将raid划分为多个存储区域并将各个存储区域分配给不同的控制器,各个控制器分别处理各自对应的存储区域的读写,此时,raid中的每个存储区域上的读写由同一个控制器控制,也就不会出现多个控制器同时读写一块区域的情况,故可以不加用于协调各个控制器对同一块区域读写的分布式锁,进而在保障raid数据一致性的基础上提高了读写的效率。并且,当某一个控制器故障时,读写业务被正常控制器接管,不会长时间中断,从而保证了业务的连续性,保障了系统的可靠性。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对现有技术和实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的多活raid读写系统的一种具体实施方式的结构示意图;

图2为本发明提供的一种优选实施方式的结构示意图。

具体实施方式

本发明的核心是提供提供一种在保障数据一致性的前提下io性能较高的多活raid读写系统。

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明提供了一种多活raid读写系统,包括多个控制器、raid、处理装置;

处理装置用于为每个控制器分配一个一一对应的存储区域;其中,控制器处理分配给自身的存储区域的读写;在有控制器发生故障时,依据预设规则选取正常控制器处理故障控制器对应的存储区域的读写。

上述预设规则可以为优先选择负载最小的控制器,也可以将控制器编号,并按编号顺序由小到大或由大到小顺序选择控制器,具体的规则设定并不影响本发明的实现。

在本发明提供的一种具体实施方式中,每个存储区域包括若干存储单元,存储单元的大小为raid条带深度的整数倍。

下面以两个控制器的情况为例进行说明,请结合图1,图1所示为本发明提供的多活raid读写系统的一种具体实施方式的结构示意图。在图1中,第一存储区域包括第一存储单元lun0和第二存储单元lun1,第二存储区域包括第三存储单元lun2和第四存储单元lun3,且存储单元lun0~lun3的大小均为raid条带深度的整数倍。

在上述实施方式的一种具体实现中,处理装置进行raid分配的具体实施过程可以为:

在第一控制器node0与第二控制器node1中分别创建raid的对象,并指定raid条带的深度为128kb;

将raid加入存储池,并将其格式化为若干存储区间extent,该extent的大小为上述条带深度的整数倍;

以存储区间extent为单位划分出若干个存储单元,同时为每个存储单元指定一个控制器。

需要注意这里的条带深度也可以为256kb或1024kb等,具体可以根据实际应用中raid上需要存储的文件大小设定,并不仅限于上述值。

请结合图1,图1中的extent0至extent7即为本例中划分出的8个存储区间。本例中仅以8个extent为例进行说明,实际应用中可以根据raid的容量具体设置extent的数目,并不仅限于本例中的值。

图1中将第一存储区间extent0与第二存储区间extent1划分为第一存储单元lun0,将第三存储区间extent2与第四存储区间extent3划分为第二存储单元lun1,并将第一存储单元lun0与第二存储单元lun1分配给第一控制器node0处理;将第五存储区间extent4与第六存储区间extent5划分为第三存储单元lun2,将第七存储区间extent6与第八存储区间extent7划分为第四存储单元lun3,并将第三存储单元lun2与第四存储单元lun3分配给第二控制器node1处理。

需要注意,上述实施例仅用于给出一种划分存储区域的例子,也可采用其他方式进行raid存储区域的划分,存储区域的具体划分方式并不影响本发明的实现。

在上述实施方式的一种优选实现方式中,处理装置完成进行raid分配的上述步骤后,还可以继续进行如下步骤:

将存储单元的id、存储单元对应的存储空间的地址区间、存储单元被指定给的控制器的id这三者的对应关系保存到存储单元所在的raid上的区域管理数据存储区rd_zone_manager中。

需要注意的是,若出现一个存储单元对应的存储区域分布在两个raid上,需要在两个raid上的区域管理数据存储区中分别保存该存储单元的对应关系。

可以理解的是,在raid上保存位于该raid上的存储单元的对应关系,使得各个控制器可以不通过处理装置,直接在raid上获取存储单元的地址区间等相关信息,方便了控制器对其控制的存储区域的读写,从而提高了读写效率。

更具体地,上述地址空间包括存储单元的偏移量和存储区域的大小。其中,偏移量表示存储单元的首地址相对于raid首地址的偏移量。请结合图1,在raid上存在包含存储单元的id、owner、偏移量offset、长度size四项内容的数据结构,其中,lunid即表示存储单元的id,owner用于记录存储单元所对应的控制器id,偏移量offset和存储区域长度size用来共同表示存储区间在其所在raid上的存储空间的位置。此外,上述地址区间也可以包括存储单元起止地址。具体的地址区间表示方式不影响本发明的实现。

当然,上述对应关系也可以用其他类型的数据结构来表示,具体的表示方式并不影响本发明的实现。

在本发明提供的一种优选实施方式中,相邻两个存储单元分配给不同的控制器。

比如,以图2为例,图2所示为本发明提供的一种优选实施方式的结构示意图。将第一存储单元lun0、第三存储单元lun2分配给第一存储区域,由第一存储区域对应的第一控制器node0处理该存储区域的读写;将第二存储单元lun1、第四存储单元lun3分配给第二存储区域,由第二存储区域对应的第二控制器node1处理该存储区域的读写。

可以理解的是,由于数据存储的空间局部性原理,将相邻两个存储单元指定给不同的控制器处理,使得用户通过控制器读取某一个存储单元的内容时,可以同时通过另一个控制器读取相邻存储单元中的内容,可以进一步提高io的并行度,从而提高io效率。

在另一种优选实施方式中,每个控制器对应的存储区域的大小相同。

需要注意,这里提到的的相同并不用来表示严格意义上的相同,只要每个控制器对应的存储区域大小相差不超过一个存储单元的存储空间大小即可。当然,上述范围可以根据具体应用中raid的容量设置,并不仅限于本实施例中的范围。

每个控制器对应的存储区域的大小相同,使得raid的不同存储区域在不同控制器上的均衡分配,即对相应区域的读写也在两个控制器上的均衡分布,进而保证了io的负载均衡,避免出现各个控制器中,对应的存储区域大的控制器上负载过重,而对应存储区域小控制器闲置的情况,从而提高了设备的利用率,进而提高io效率。

由于raid本身也在对进行自身的初始化、检查等过程,在这些过程中产生的对raid的读写被称为后台io,在上述所有实施方式的中,每个控制器中用户发起的io之间、用户发起的io与raid后台io之间、后台io之间在读写同一个条带时都是互斥的,以能够避免两个io进程同时读写同一个条带时可能造成的数据不一致的问题。

利用本发明提供的系统,raid中的每个存储区域上的读写由与其一一对应的特定控制器控制,也就不会出现多个控制器同时读写一块区域的情况,故可以不加用于协调各个控制器对同一块区域读写的分布式锁,进而在保障raid数据一致性的基础上提高了读写的效率。当某一个控制器故障时,读写业务被正常控制器接管,不会长时间中断,从而保证了业务的连续性,保障了系统的可靠性。

以上的几种具体实施方式仅是本发明的优选实施方式,以上几种具体实施例可以任意组合,组合后得到的实施例也在本发明的保护范围之内。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进,这些改进也应视为本发明的保护范围。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其他实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1