发明内容
本申请的实施例旨在提供一种分布式存储系统管理装置及方法,以解决上述分布式系统中存储失效处理机制所存在的问题。
为实现上述目的,本申请的实施例提供了一种分布式存储系统管理装置,应用于包括N个存储服务器的分布式存储系统,该装置包括分组管理单元、数据写入单元及数据读取单元,其中,
所述分组管理单元用于将所述N个存储服务器中的M个存储服务器分为x个对等序列并形成y个虚拟节点组,且每个虚拟节点组中包括z个彼此属于不同对等序列的存储服务器,其余N-M个存储服务器为临时存储服务器,上述N、M、x、y为自然数常量且满足:N≥3,2≤M<N,x≥2,y≥1,x·y≥M;z为自然数变量且满足:2≤z≤x;
所述数据写入单元用于将数据写入到选择的一个虚拟节点组的每个存储服务器中,并在该虚拟节点组的部分存储服务器不可用时,将该数据写入到该虚拟节点组剩余可用的存储服务器以及所述临时存储服务器中;
所述数据读取单元用于从数据被写入的虚拟节点组中任一可用的存储服务器处读取该数据。
本申请的实施例还提供一种分布式存储系统管理方法,应用于包括N个存储服务器的分布式存储系统,并包括以下步骤:
S1.将M个存储服务器分为x个对等序列并形成y个虚拟节点组,且每个虚拟节点组中包括z个彼此属于不同对等序列的存储服务器,其余N-M个存储服务器为临时存储服务器,上述N、M、x、y为自然数常量且满足:N≥3,2≤M<N,x≥2,y≥1,x·y≥M;z为自然数变量且满足:2≤z≤x;
S21.在执行数据写入操作时将数据写入到选择的一个虚拟节点组的每个存储服务器中,并在该虚拟节点组的部分存储服务器不可用时,将该数据写入到该虚拟节点组剩余可用的存储服务器以及所述临时存储服务器中;
S22.在执行数据读取操作时从数据被写入的虚拟节点组中任一可用的存储服务器处读取该数据。
由上述技术方案可知,本申请实施例提供的分布式存储系统管理装置及方法,通过对等序列及虚拟节点组的双重功能划分对存储服务器进行管理,能够保证数据备份在虚拟节点组中分属不同对等序列的存储服务器中,从而在某个对等序列中的存储服务器失效时可以继续由该虚拟节点组中其他对等序列的存储服务器提供数据读写服务。
具体实施方式
下面将详细描述本申请的具体实施例。应当注意,这里描述的实施例只用于举例说明,并不用于限制本申请。
图1为本申请分布式存储系统管理装置实施例的结构示意图,如图所示,本实施例的分布式存储系统管理装置11,用于对包括N个存储服务器121~12N的分布式存储系统进行管理。分布式存储系统管理装置11进一步包括分组管理单元110,其用于对上述分布式存储系统中的N个存储服务器121~12N进行分组管理,具体包括:在存储服务器121~12N中,选取M个存储服务器划分为x个对等序列,每个对等序列中包含一定数量的存储服务器,在一个实施例中,每个对等序列包含的存储服务器的个数相同,当然每个对等序列中包含的服务器的个数也可以不相同;接下来,继续将上述所选取的M个存储服务器划分为y个虚拟节点组,且使得每个虚拟节点组中都包括z个彼此属于不同对等序列的存储服务器;最后,将其余N-M个存储服务器设置为临时存储服务器。上述各字母所表示的量中,N、M、x、y为自然数常量且其取值分别满足:N≥3,2≤M<N,x≥2,y≥1,x·y≥M(“·”为乘法标记);z为自然数变量且取值满足:2≤z≤x。在一个实施例中,z可以是自然数常量,也即,使得每个虚拟节点组中存储服务器的个数相同,在这种情况下,为了满足每个虚拟节点组中各个存储服务器彼此属于不同对等序列,实际上x、y、M的取值需要满足M=x·y,而此时z=x。
下面结合数组的概念可以更好地理解本实施例中分组管理单元110以对等序列和虚拟节点组来对M个存储服务器进行双重划分的过程。例如,假设数组a[x][y]如下:
结合以上数组a[x][y],可以将上述存储服务器的划分过程看作将M个存储服务器填充至数组a[x][y]中作为数组元素的过程。在M=x·y的情况下,数组中的每个元素刚好与一个存储服务器对应,而每个虚拟节点组中存储服务器的个数z即为常量且z=x;而在M<x·y的情况下,在将M个存储服务器填充至数组后,数组中还会存在一定数量的空白元素,这时每个虚拟节点组中存储服务器的个数z(对应于每一列中非空白元素的个数)就可能是不固定的,但在满足x≥2,y≥1,2≤z≤x等条件下,这一情况应是允许的。
在一个实施例中,可以使得x、y、M的取值满足M=x·y,即,使得每个对等序列(也即每个虚拟节点组)中存储服务器的个数均相等,这样能够得到更好的负载均衡效果,后续的失效恢复也更为便利。为使描述更为简便,下文中除非有特别说明,均是基于这种每个对等序列中存储服务器个数相同的情形。在这种情形下,以上文所示的数组a[x][y]为例,M个存储服务器被划分为x个对等序列,例如,第1个和第x个对等序列所包含的存储服务器对应的数组元素分别是[a11、a12、...、a1y]和[ax1、ax2、...、axy];同时,这M个存储服务器又形成y个虚拟节点组,例如,第1个和第y个虚拟节点组所包含的存储服务器对应的数组元素分别是[a11、a21、...、ax1]和[a1y、a2y、...、axy]。
进一步如图1所示,本实施例的分布式存储系统管理装置11还包括数据写入单元111及数据读取单元112。其中,数据写入单元111用于将数据写入到任意选择或按预设规则选择的一个虚拟节点组的每个存储服务器中,并在该虚拟节点组的部分存储服务器不可用时,将该数据写入到该虚拟节点组里除去不可用存储服务器之外剩余所有可用的存储服务器以及临时存储服务器中;数据读取单元112用于从数据被写入的虚拟节点组中任一可用的存储服务器处读取该数据。由上述可知,基于对等序列和虚拟节点组的数据读写操作,每个数据写入时先选择要写入的虚拟节点组,再将该数据写入所选择的虚拟节点组中的每个存储服务器,这时实际上每个对等序列中都有存储服务器被写入该同一数据,最终,如果不考虑故障状况,在每个对等序列之间所有存储服务器存储的数据应该是对等的(相同的),这也是所称“对等序列”的含义所在;而在虚拟节点组中有存储服务器出现故障等不可用的情况时,本应写入该不可用存储服务器的数据则转而写入到选择的一个临时存储服务器中(至于同时应写入虚拟节点组中剩余可用存储服务器的数据则不受影响继续正常写入),以便后续存储服务器恢复可用后进行数据的迁回。另一方面,在进行数据的读取操作时,只需从该数据被写入的虚拟节点组中任意选取一个可用存储服务器进行读取即可。在一个实施例中,为了实现负载均衡,数据写入的虚拟节点组可以是随机进行选择,后文实施例中还将介绍一种依据特定算法进行随机选择的情况。
继续如图1所示,本实施例的分布式存储系统管理装置11还包括数据迁移单元113、重试控制单元114、失效判断单元115及数据路由单元116,下文将分别予以描述。
在一个实施例中,数据迁移单元113用于在不可用的存储服务器恢复可用时,将对应的临时存储服务器中存储的数据迁回该恢复可用的存储服务器;并用于在不可用的存储服务器无法恢复可用时,将该存储服务器所在的虚拟节点组里可用的存储服务器中存储的数据迁移至选择的一个临时存储服务器,并以该临时存储服务器替换不可用的存储服务器。从此处描述可以看出,临时存储服务器的设置有两方面的功能。第一个方面,临时存储服务器用于对存储服务器不可用期间写入的数据进行临时存储,以便在存储服务器恢复可用时进行数据迁回;第二个方面,临时存储服务器还作为存储服务器的替换,用于在后者不可恢复时及时从相应虚拟节点组中其他对等序列的存储服务器迁移全部数据,进而替换不可恢复的存储服务器,这里的“替换”是指从功能(相应的数据读写)到角色(相应所属的虚拟节点组和对等序列)的彻底替换。需要说明的是,上述临时存储服务器两个方面的功能是从整体上而言,但如果从个体考虑,为了保证两个方面的功能互不干扰,同时也考虑到这两个方面功能所适用的数据存储结构有所区别,优选地,每个临时存储服务器应当被设置为始终只承担单独一个方面的功能;例如,在一个实施例中,所有临时存储服务器在初始设置时就被划分为临时服务器和备份服务器,其中临时服务器只承担上述第一个方面的功能,而备份服务器则只承担上述第二个方面的功能。
在一个实施例中,重试控制单元114用于控制数据写入单元111及数据读取单元112在执行对应的数据写入或读取操作失败时按第一预定次数重试该数据写入或读取操作。失效判断单元115用于在重试控制单元114控制的重试达到第一预定次数时判断对应的存储服务器为不可用,并将该判断结果通知数据写入单元111及数据读取单元112;以及用于在存储服务器被判断为不可用后,利用重试控制单元114按第二预定次数检测该存储服务器的状态,在检测为可用时判断该存储服务器恢复可用或者在检测为不可用并达到第二预定次数时判断该存储服务器无法恢复可用,并将该判断结果通知数据迁移单元113。由上述可以看出,本申请的分布式存储系统管理装置实施例提供了瞬时失效、临时失效和永久失效三种情况下的处理机制。这里,瞬时失效是指由于网络瞬断或其他原因导致的应用服务器(应用程序)在极短时间内不能连接存储服务器的状况;为此,本实施例通过设置重试控制单元114来控制数据写入单元111或数据读取单元112重试一定次数的读写请求后即可恢复访问,并且为了不影响应用服务器(应用程序)的性能及使用体验,这里的重试次数通常设置较小,而且每两次重试之间可以不设置时间间隔。进一步,临时失效是指由于升级或者维护等原因导致存储服务器临时不可用,但经过适当时间后,存储服务器便能恢复提供服务;而永久失效是指由于硬盘损坏等极端原因导致的数据丢失而无法恢复的状况;为此,本实施例设置了失效判断单元115的判断和通知机制。首先,在重试控制单元114控制的重试次数达到第一预定次数后,失效判断单元114便可以判定对应的存储服务器失效(不可用),并将判定结果通知数据写入单元111及数据读取单元112,此后便如前文所述,数据写入操作会在失效存储服务器所对应虚拟节点组剩余所有可用的存储服务器以及临时存储服务器中进行,数据读取则仅在失效存储服务器所对应虚拟节点组中任一可用存储服务器中进行;之后,失效判断单元114利用重试控制单元114按第二预定次数重复检测该存储服务器的状态,在检测为可用时(表明该存储服务器经过“临时失效”后恢复可用)便可以通知数据迁移单元113开始进行从临时存储服务器到恢复可用存储服务器的数据迁回操作,在失效判断单元114检测到对应存储服务器为不可用并达到第二预定次数时(表明该存储服务器为“永久失效”),便可以通知数据迁移单元113开始进行从失效存储服务器所在虚拟组中的可用存储服务器到临时存储服务器的全部数据复制操作,最终该临时存储服务器将取代永久失效的存储服务器。
需要说明的是,在一个实施例中,上述重试控制单元114按第二预定次数重复检测该存储服务器的状态时,具体仍然可以像之前瞬时失效的重试时那样,通过控制数据写入单元111或数据读取单元112不断重试数据的写入或读取操作,并以重试是否成功来判断存储服务器的状态是否恢复可用;在一个实施例中,之前瞬时失效时按第一预定次数进行读写重试的数据可以就是原本要进行读写但未读写成功的正常数据,但之后按第二预定次数进行读写重试的数据可以是预先专门设置的测试数据,这是为了避免因正常数据可能较大而影响后一重试过程的执行效率。另外,为了使“永久失效”的判定维持严格标准,与前述第一预定次数相比,这里的第二预定次数通常设置较大,而且每两次重试之间可以设置一定的时间间隔;例如,可以在一天内按数秒的间隔不断重复检测,此时最终的第二预定次数可能会达到几万甚至几十万次。另外,由上述可知,临时失效和永久失效通常伴随着一些人为可以控制(例如升级、维护)或可以检测(例如硬盘故障)的因素,因此,在一个实施例中,失效判断单元114也可以借助人为的手段来判定临时失效的恢复和永久失效,例如可以通过人工手动输入在失效判断单元114管理的存储服务器状态表中将某个存储服务器的状态修改为“临时失效”、“可用”、“永久失效”等等。
在一个实施例中,数据路由单元116用于确定数据写入单元111写入数据以及数据读取单元读取数据时所选择的虚拟节点组;在一个实施例中,为了提高路由效率,数据路由单元116可以按照前文所述数组a[x][y]的方式对存储服务器加以管理。进一步,数据路由单元116还包括路由选择子单元1161,路由选择子单元1161用于按以下过程进行虚拟节点组的选择:将上述y虚拟节点组分别赋以0、1、...、y-1的编号进行管理;将待写入的数据的哈希值对y取模,得到[0,...,y-1]范围内的一个值,选择与该值对应编号的虚拟节点组作为数据写入单元写入该数据的虚拟节点组;同理,将待读取的数据的哈希值对y取模,得到[0,...,y-1]范围内的一个值,选择与该值对应编号的虚拟节点组作为数据读取单元读取该数据的虚拟节点组。这里,基于kv存储的原理,由于哈希值的唯一性,同一条数据在进行写入时由数据路由单元116所选择的虚拟节点组,与该条数据在进行读取时由数据路由单元116所选择的虚拟节点组,会绝对保持一致,由此便能够保证被随机写入到某个虚拟节点组的数据能够被准确地在同一虚拟节点组中读取到。进一步,通过上述过程可知,每条数据会随机分配到一个虚拟节点组并被写入该虚拟节点组里属于每个对等序列的存储服务器中,由此可以看出,从虚拟节点组的划分角度,是保证了分布式存储系统的负载均衡;从对等序列的划分角度,是保证了数据在所有对等序列中的备份。另外需要说明的是,上述根据取模算法选取虚拟节点组的过程只是示例,在不考虑存储的其他特性(例如数据分类、用户分组等等)时可以使用,而一般存储实现会使用更复杂的算法,尽管如此,该细节并不影响本申请的理解和实施,此处不再加以赘述。
在一个实施例中,上述分布式存储系统管理装置11中的数据写入单元111、数据读取单元112及数据路由单元116,可以设置在应用服务器上作为存储系统的客户端使用;而分组管理单元110、数据迁移单元113、重试控制单元114及失效判断单元115则可以单独设置在一个区别于存储服务器和应用服务器的管理服务器中,作为存储服务器与应用服务器之间的仲裁中介发挥作用。可以看出,这种具体位置上的设置并不影响上述分布式存储系统管理装置11中各单元的功能划分,因此并不影响本申请的理解和实施,此处不再加以赘述,图中也未例示。
图2为本申请分布式存储系统管理方法的实施例一流程图,本实施例的分布式存储系统管理方法应用于包括N个存储服务器的分布式存储系统,如图2所示,其包括以下步骤:
S201、将M个存储服务器分为x个对等序列并形成y个虚拟节点组,且每个虚拟节点组中包括z个彼此属于不同对等序列的存储服务器,其余N-M个存储服务器为临时存储服务器;
具体而言,本步骤首先是在N个存储服务器中,选取M个存储服务器划分为x个对等序列,每个对等序列中包含一定数量的存储服务器。在一个实施例中,每个对等序列包含的存储服务器的个数相同。接下来,继续将上述所选取的M个存储服务器划分为y个虚拟节点组,且使得每个虚拟节点组中都包括z个彼此属于不同对等序列的存储服务器。最后,将其余N-M个存储服务器设置为临时存储服务器。上述各字母所表示的量中,N、M、x、y为自然数常量且其取值分别满足:N≥3,2≤M<N,x≥2,y≥1,y·x≥M(“·”为乘法标记);z为自然数变量且取值满足:2≤z≤x。在一个实施例中,z可以是自然数常量,也即,使得每个虚拟节点组中存储服务器的个数相同,在这种情况下,为了满足每个虚拟节点组中各个存储服务器彼此属于不同对等序列,实际上x、y、M的取值需要满足M=x·y,而此时z=x。
S202、在执行数据写入操作时将数据写入到选择的一个虚拟节点组的每个存储服务器中,并在该虚拟节点组的部分存储服务器不可用时,将该数据写入到该虚拟节点组剩余所有可用的存储服务器以及选择的一个临时存储服务器中;
S203、在执行数据读取操作时从数据被写入的虚拟节点组中任一可用的存储服务器处读取该数据。
从步骤S202~S203可以看出,对于在对等序列和虚拟节点组双重功能划分基础上的数据读写操作,每个数据写入时先选择要写入的虚拟节点组,再将该数据写入所选择的虚拟节点组中的每个存储服务器,这时实际上每个对等序列中都有存储服务器被写入该数据;而在虚拟节点组中有存储服务器出现故障等不可用的情况时,本应写入该不可用存储服务器的数据则转而写入到选择的一个临时存储服务器中(至于同时应写入虚拟节点组中剩余可用存储服务器的数据则不受影响继续正常写入),以便后续存储服务器恢复可用后进行数据的迁回。另一方面,在进行数据的读取操作时,只需从该数据被写入的虚拟节点组中任意选取一个可用存储服务器进行读取即可。在一个实施例中,为了实现负载均衡,数据写入的虚拟节点组可以是随机进行选择,后文实施例中还将介绍一种依据特定算法进行随机选择的情况。
图3为本申请分布式存储系统管理方法实施例二的流程图,本实施例中将描述瞬时失效的处理机制,以及临时失效和永久失效的判断机制和处理机制,如图所示,本实施例的方法包括以下步骤:
S301、在执行数据读写操作失败时重试该数据读写操作,重试成功则进行下一条数据读写操作,失败则继续步骤S302;
S302、判断步骤S301重试是否达到第一预定次数,如果是则继续步骤S303,否则转回步骤S301继续重试;
步骤S301~S302可以看作是瞬时失效的处理机制,这时通常是由于网络瞬断或其他原因导致的应用服务器(应用程序)在极短时间内不能连接存储服务器,为此,本实施例的方法通过重试一定次数的读写请求后即可恢复访问,并且为了不影响应用服务器(应用程序)的性能及使用体验,这里重试的第一预定次数通常设置较小,而且每两次重试之间通常不设置时间间隔。
S303、判断对应的存储服务器为不可用,并继续步骤S304;
在一个实施例中,本步骤的判断结果可以通知给相关的数据读写操作单元,此后便如前文所述,数据写入操作会在失效存储服务器所对应虚拟节点组剩余所有可用的存储服务器以及临时存储服务器中进行,数据读取则仅在失效存储服务器所对应虚拟节点组中任一可用的存储服务器中进行。
S304、重复检测该存储服务器的状态,检测为可用时继续步骤S305,否则转入步骤S306;
S305、将对应的临时存储服务器中存储的数据迁回该恢复可用的存储服务器;
经过步骤S304,重复检测到失效存储服务器为可用时,可以认为是表明相应存储服务器经过“临时失效”后恢复可用,此时通常是服务器的升级和维护完成等情况,接下来便可以开始进行从临时存储服务器到恢复可用存储服务器的数据迁回操作。由于临时存储服务器中仅存储失效存储服务器失效期间所写入的数据,因此上述数据迁回操作会十分简便、迅速。
S306、判断步骤S304的重复检测是否达到第二预定次数,如果是则继续步骤S307,否则回到步骤S304继续重复检测。
S307、将该存储服务器所在的虚拟节点组里可用的存储服务器中存储的数据迁移至选择的一个临时存储服务器,并以该临时存储服务器替换不可用的存储服务器;
经过步骤S304和S305,在重复检测到失效存储服务器为不可用且达到第二预定次数时,可以认为是表明该存储服务器为“永久失效”,此时通常是发生了硬盘损坏等极端情况,接下来便可以开始进行从失效存储服务器所在虚拟组中的可用存储服务器到临时存储服务器的全部数据复制操作,并且最终以该临时存储服务器取代永久失效的存储服务器。在一个实施例中,为了使“永久失效”的判定维持严格标准,与前述的第一预定次数相比,这里的第二预定次数通常设置较大,而且每两次重试之间可以设置一定的时间间隔,例如,可以在一天内按数秒的间隔不断重复检测,此时最终的第二预定次数可能会达到几万甚至几十万次。另外,在一个实施例中,也可以借助人为介入的手段分别在步骤S304、S306中实现临时失效恢复和永久失效的判定。
由上述技术方案可知,本申请实施例提供的分布式存储系统管理装置及方法,通过对等序列及虚拟节点组的双重功能划分对存储服务器进行管理,在正常情况下,数据可以写入在虚拟节点组里分属于每个对等序列的存储服务器中,而读取时只需在该虚拟节点组里任一可用的存储服务器上进行;在某个存储服务器失效期间,数据的读取仍然只需在对应虚拟节点组里任一可用的存储服务器上进行,而写入的数据会同时备份到该虚拟节点组里所有可用的存储服务器以及临时存储服务器上;当存储服务器从临时失效状态中恢复时,便可以从前述临时存储服务器上迁回失效期间所写入的数据;当存储服务器因永久失效而无法恢复时,还可以将对应虚拟节点组里任一可用的存储服务器上的全部数据复制到临时存储服务器上,再以该临时存储服务器取代失效的存储服务器。
虽然已参照几个典型实施例描述了本申请,但应当理解,所用的术语是说明和示例性、而非限制性的术语。由于本申请能够以多种形式具体实施而不脱离申请的精神或实质,所以应当理解,上述实施例不限于任何前述的细节,而应在随附权利要求所限定的精神和范围内广泛地解释,因此落入权利要求或其等效范围内的全部变化和改型都应为随附权利要求所涵盖。