数据处理方法及装置与流程

文档序号:15384451发布日期:2018-09-08 00:24阅读:221来源:国知局

本申请涉及通信技术领域,尤其涉及数据处理方法及装置。



背景技术:

分布式存储系统,是将数据分散存储在多个服务器上。以图1所示的分布式存储系统的结构示意图为例,该分布式存储系统包括服务器1-3,每个服务器均包括三个存储盘(例如存储盘0、存储盘1以及存储盘2)。分布式存储系统在进行数据存储之前,需要进行分区,例如服务器1中的存储盘0、服务器2中的存储盘1和服务器3中的存储盘2组成分区1,服务器1中的存储盘1、服务器2中的存储盘0和服务器3中的存储盘0组成分区2。当分布式存储系统接收到数据存储请求时,可以选择分区,并将数据存储到选择的分区所包含的各个存储盘中。

当分布式存储系统的存储容量不足时,需要进行扩容。在扩容过程中,因为数据要在各服务器均匀分布实现负载均衡,所以需要后台进行数据迁移。以图1为例,如果扩容的是服务器4,经过负载均衡计算,分区1中服务器3的存储盘2将被服务器4中的存储盘1替代,即将服务器3的存储盘2中存储的数据迁移到服务器4的存储盘1中。在数据迁移的过程中,客户端(client)有数据需要写入服务器4中的存储盘1中,若客户端请求存储的数据和数据迁移过程中所迁移的数据针对的是同一个对象,则如何避免迁移过程中写入的数据被正在迁移的数据覆盖是目前亟需解决的技术问题。



技术实现要素:

本申请实施例所要解决的技术问题在于,提供数据处理方法及装置,可避免迁移过程中写入的数据被正在迁移的数据覆盖,提升数据的可靠性。

第一方面,本申请实施例提供了一种数据处理方法,扩容服务器可以获取存储在第一存储单元的第一数据,并将第一数据存储到第二存储单元中。在第一数据成功存储到第二存储单元后,扩容服务器获取第二存储单元的当前数据量,以及第一存储单元的当前数据量。扩容服务器确认第二存储单元的当前数据量小于第一存储单元的当前数据量,然后扩容服务器获取存储在第一存储单元的第二数据,并将第二数据存储到第二存储单元中。

其中,扩容服务器可以包括至少一个存储盘,各个存储盘可以包括至少一个存储单元。第一存储单元为目标服务器的第一存储盘中的存储单元。第二存储单元为扩容服务器的第二存储盘中的存储单元。目标服务器需要迁移数据至扩容服务器。

其中,第二数据为扩容服务器在存储第一数据的过程中客户端请求存储至第二存储单元中的数据。

在该技术方案中,在数据迁移过程中接收到客户端发送的数据存储请求时,扩容服务器可以记录需要从第一存储单元迁移至第二存储单元的第一数据和客户端请求存储的第二数据的数据量总和,在数据迁移完成后,扩容服务器可以在第一存储单元中获取客户端请求存储的第二数据,并将第二数据存储到第二存储单元中,可避免迁移过程中写入的数据被正在迁移的数据覆盖,提升数据的可靠性。

可选的,扩容服务器获取存储在第一存储单元的第一数据之前,可以向主服务器发送单元标识获取请求,并从主服务器接收单元标识集合。进一步的,扩容服务器获取存储在第一存储单元的第一数据,并将第一数据存储到第二存储单元中,具体可以为:扩容服务器获取存储在第一单元标识所对应第一存储单元的第一数据,并将第一数据存储到第一单元标识所对应第二存储单元中。

其中,单元标识获取请求携带第二存储盘所属分区的分区标识。主服务器包括第一存储盘所属分区中的主存储盘。单元标识集合包括分区标识所对应分区中主存储盘所包含的各个存储单元的单元标识。其中,第一存储盘所包含的各个存储单元的单元标识分别与主存储盘所包含的各个存储单元的单元标识相同,且第二存储盘所包含的各个存储单元的单元标识分别与主存储盘所包含的各个存储单元的单元标识相同。例如,主存储盘包括十个存储单元,存储单元的单元标识分别为plog1-plog10,则第一存储盘也包括十个存储单元,第一存储盘所包含的存储单元的单元标识分别为plog1-plog10,第二存储盘也包括十个存储单元,第二存储盘所包含的存储单元的单元标识分别为plog1-plog10,扩容服务器可以获取存储在第一存储盘的plog1中的第一数据,并将该第一数据存储到第二存储盘的plog1中。

可选的,扩容服务器获取存储在第一单元标识所对应第一存储单元的第一数据,并将第一数据存储到第一单元标识所对应第二存储单元中之后,还可以将第一单元标识从单元标识集合中删除。

可选的,扩容服务器获取第二存储单元的当前数据量,以及第一存储单元的当前数据量之前,还可以接收来自客户端的第一数据存储请求,第一数据存储请求携带第一单元标识,确定单元标识集合中存在第一单元标识,获取第一存储单元在数据迁移前的数据量,将第一存储单元在数据迁移前的数据量与第二数据的数据量相加,得到第一存储单元的当前数据量。

其中,第一数据存储请求用于指示客户端请求将第二数据存储至第一单元标识所对应第二存储单元中。

可选的,当第二数据未成功存储到第二存储盘所属分区所包含的任一存储盘中时,扩容服务器可以向服务层发送存储失败消息,扩容服务器通过持久层接收第二数据存储请求,第二数据存储请求携带目标分区标识和第二单元标识,并将所述第二数据存储到所述第二单元标识所对应第三存储单元中。

其中,目标分区标识对应分区与第二存储盘所属的分区不相同,且目标分区标识对应分区所包含的各个存储盘能够存储数据。第三存储单元为扩容服务器的第三存储盘中的存储单元,第三存储盘所属分区的分区标识为目标分区标识。

第二方面,本申请实施例提供一种数据处理方法,扩容服务器可以获取存储在第一存储单元的第一数据,并将第一数据存储到第二存储单元中。在存储第一数据的过程中,扩容服务器接收来自客户端的第一数据存储请求,第一数据存储请求携带第二存储单元的第一单元标识。扩容服务器向服务层发送错误消息。扩容服务器对服务层响应错误消息创建的第四存储单元分配第二存储盘的存储盘空间。扩容服务器通过持久层接收第三数据存储请求,第三数据存储请求携带第四存储单元的第三单元标识。扩容服务器将第二数据存储到第三单元标识所对应的第四存储单元中。

其中,扩容服务器可以包括至少一个存储盘,各个存储盘可以包括至少一个存储单元。第一存储单元为目标服务器的第一存储盘中的存储单元。第二存储单元为扩容服务器的第二存储盘中的存储单元。目标服务器需要迁移数据至扩容服务器。

在该技术方案中,在数据迁移过程中接收到客户端发送的数据存储请求时,扩容服务器可以将数据存储请求所请求存储的第二数据存储到新建的第四存储单元中,可避免迁移过程中写入的数据被正在迁移的数据覆盖,实现写入的数据与正在迁移的数据的互斥,提升数据的可靠性。

可选的,扩容服务器获取存储在第一存储单元的第一数据之前,可以向主服务器发送单元标识获取请求,从主服务器接收单元标识集合。进一步的,扩容服务器获取存储在第一存储单元的第一数据,并将第一数据存储到第二存储单元中,具体可以为:获取存储在第一单元标识所对应第一存储单元的第一数据,并将第一数据存储到第一单元标识所对应第二存储单元中。

其中,单元标识获取请求携带第二存储盘所属分区的分区标识,主服务器包括第一存储盘所属分区中的主存储盘。单元标识集合包括分区标识所对应分区中主存储盘所包含的各个存储单元的单元标识,第一存储盘所包含的各个存储单元的单元标识分别与主存储盘所包含的各个存储单元的单元标识相同,且第二存储盘所包含的各个存储单元的单元标识分别与主存储盘所包含的各个存储单元的单元标识相同。

可选的,扩容服务器获取存储在第一单元标识所对应第一存储单元的第一数据,并将第一数据存储到第一单元标识所对应第二存储单元中之后,还可以将第一单元标识从单元标识集合中删除。

可选的,当第二数据未成功存储到第二存储盘所属分区所包含的任一存储盘中时,扩容服务器可以向服务层发送存储失败消息,通过持久层接收第二数据存储请求,并将第二数据存储到第二单元标识所对应第三存储单元中。

其中,第二数据存储请求携带目标分区标识和第二单元标识,目标分区标识所对应分区与第二存储盘所属的分区不相同,且目标分区标识所对应分区所包含的各个存储盘能够存储数据。第三存储单元为扩容服务器的第三存储盘中的存储单元,第三存储盘所属分区的分区标识为目标分区标识。

第三方面,本申请实施例提供一种非易失性的计算机存储介质,所述计算机存储介质存储有程序,所述程序被服务器执行时,服务器执行第一方面中任一所述的方法。

第四方面,本申请实施例提供一种非易失性的计算机存储介质,所述计算机存储介质存储有程序,所述程序被服务器执行时,服务器执行第二方面中任一所述的方法。

第五方面,本申请实施例提供一种装置,该装置具有实现第一方面所述的方法示例中扩容服务器行为的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的单元或模块。

在一个设计方案中,装置的结构中可包括接收模块和处理模块,所述处理模块被配置为支持扩容服务器执行第一方面任一所述方法中相应的功能。所述接收模块用于支持扩容服务器与其他服务器之间的通信。

第六方面,本申请实施例提供一种装置,该装置具有实现第二方面所述的方法示例中扩容服务器行为的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的单元或模块。

在一个设计方案中,装置的结构中可包括接收模块,处理模块和发送模块,所述处理模块被配置为支持扩容服务器执行第二方面任一所述方法中相应的功能。所述接收模块和所述发送模块用于支持扩容服务器与其他服务器之间的通信。

第七方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在服务器上运行时,使得服务器执行第一方面任一所述的方法。

第八方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在服务器上运行时,使得服务器执行第二方面任一所述的方法。

第九方面,本申请实施例提供了一种服务器,该服务器包括接收器、处理器、内存设备和至少一个存储盘,每个存储盘包括至少一个存储单元,用于实现上述第一方面中所涉及的功能,例如,生成或处理上述方法中所涉及的数据和/或信息。

第十方面,本申请实施例提供了一种服务器,该服务器包括接收器、发送器、处理器、内存设备和至少一个存储盘,各个所述存储盘包括至少一个存储单元,用于实现上述第二方面中所涉及的功能,例如,生成或处理上述方法中所涉及的数据和/或信息。

附图说明

为了更清楚地说明本申请实施例或背景技术中的技术方案,下面将对本申请实施例或背景技术中所需要使用的附图进行说明。

图1是本申请实施例公开的一种分布式存储系统的结构示意图;

图2是本申请实施例公开的一种服务器的结构示意图;

图3是本申请另一实施例公开的一种分布式存储系统的架构示意图;

图4是本申请实施例公开的一种数据处理方法的流程示意图;

图5是本申请实施例公开的一种数据迁移的示意图;

图6是本申请另一实施例公开的一种数据处理方法的流程示意图;

图7是本申请实施例公开的一种数据处理装置的结构示意图;

图8是本申请实施例公开的一种服务器的结构示意图;

图9是本申请另一实施例公开的一种数据处理装置的结构示意图;

图10是本申请另一实施例公开的一种服务器的结构示意图。

具体实施方式

下面结合本申请实施例中的附图对本申请实施例进行描述。

为了更好的理解本申请实施例公开的一种数据处理方法及装置,下面首先对本申请实施的服务器进行描述。请参见图2,图2是本申请实施例公开的一种服务器的结构示意图,服务器可以包括服务层(servicelayer)和持久层(persistencelayer)。

其中,服务层,用于与客户端进行交互,即对外提供前台业务,前台业务可以为客户端请求读数据或者写数据的业务,例如s3get/put业务等,s3是亚马逊(amazon)的对象存储服务的简称,基于amazon的对象存储创建出来的对象,称为s3对象。

持久层,用于为服务层提供持久化数据服务,例如存储s3对象等。服务层和持久层之间的接口基于plog(即存储单元)进行通信,即持久层从服务层获取到数据之后,是基于plog为粒度进行存储的,具体为:将数据存储至某个plog中。plog是基于只能附加(appendonly)的大粒度的存储单元,只可以创建写,追加写以及删除,无法进行数据修改,例如plog当前的数据量为10m,当请求存储至该plog的数据量为1m时,可以在plog中已存储的数据的尾部写入请求存储的数据。

示例性的,plog的数据容量为1g,服务层可以把多个前台业务对象,例如多个s3对象存储在持久层的一个plog中,这里只是举例,可以不局限s3对象,一个plog可以存储多个任意对象存储系统中创建出来的对象。当多个对象写入一个plog,为了找到具体某个对象,需要在对象元数据(例如redolog)中记录对象id、对象在plog中的偏移量和长度,根据对象id、对象在plog中的偏移量和长度就能准确的找到需要查找的对象。

对于前台业务的写操作,服务层可以使用持久层提供的appendplog接口,把数据写入某个plog。如果没有可用的plog,服务层可以调用持久层的接口函数创建plog。服务层可以选择一个分区,为创建的plog分配存储盘空间。以图1为例,服务层可以创建15个plog,将plog1-5分配至服务器1的存储盘0,plog6-10分配至服务器2的存储盘1,plog11-15分配至服务器4的存储盘1。

当持久层在分区内有存储盘故障时,可以确定appendplog操作在故障盘上写失败,持久层可以对服务层的appendplog写操作返回存储失败消息,服务层会选择新的分区所包含的各个存储盘的plog进行重新写入。服务层调用持久层的createplog接口,持久层在所包含存储盘均正常的分区上创建plog,确保数据成功存储至分区所包含的所有存储盘中,提高数据的可靠性。当分区中某一存储盘故障,或者分区中某一存储盘所属服务器故障,均可以确定appendplog操作在故障盘上写失败。

基于图2所示的服务器的结构示意图,请参见图3,图3是本申请实施例公开的一种分布式存储系统的架构示意图。如图3所示,该分布式存储系统可以至少包括扩容服务器301、主服务器302以及目标服务器303。其中,扩容服务器301、主服务器302和目标服务器303中每两个服务器可以建立数据通信,以实现分布式存储。

扩容服务器301可以对应图1中的服务器4,主服务器302可以对应图1中的服务器1,目标服务器可以对应图1中的服务器3。主服务器302中的存储盘0和目标服务器303中的存储盘2组成一个分区,其中该分区中的主存储盘为主服务器302中的存储盘0。主服务器302可以在主服务器302的存储盘0中创建多个存储单元。目标服务器303可以在目标服务器303的存储盘2中创建多个存储单元。其中,主服务器302的存储盘0中各个存储单元的单元标识和目标服务器303的存储盘2中各个存储单元的单元标识相同。若扩容的是扩容服务器301,且经过负载均衡计算,需要将目标服务器303中的存储盘2存储的数据迁移到扩容服务器301的存储盘1中,扩容服务器301可以在扩容服务器301的存储盘1中创建多个存储单元,扩容服务器301的存储盘1中各个存储单元的单元标识和主服务器302的存储盘0中各个存储单元的单元标识相同,目标服务器303的存储盘2中各个存储单元的单元标识也和主服务器302的存储盘0中各个存储单元的单元标识相同。

在数据迁移过程中,扩容服务器301可以从目标服务器303的存储盘2的第一存储单元中获取第一数据,并将第一数据存储到扩容服务器301的存储盘1的第二存储单元中。当第一数据成功存储到第二存储单元时,扩容服务器301可以获取第二存储单元的当前数据量,以及第一存储单元的当前数据量。扩容服务器301确认第二存储单元的当前数据量小于第一存储单元的当前数据量,然后,扩容服务器301可以从第一存储单元中获取第二数据,并将第二数据存储到第二存储单元中。本申请实施例在数据迁移过程中接收到客户端发送的数据存储请求时,可以记录第一存储单元在数据迁移前的数据量和客户端请求存储的第二数据的数据量总和,在数据迁移完成后,从第一存储单元中获取客户端请求存储的第二数据,并将该第二数据存储到第二存储单元中,可避免迁移过程中写入的数据被正在迁移的数据覆盖,提升数据的可靠性。

需要说明的是,本申请实施例中的分布式存储系统包含但不限定于三个服务器,各个服务器包含但不限定于三个存储盘,具体不受本申请实施例的限定。本申请实施例中的存储盘可以是固态硬盘(solidstatedrive),还可以是硬盘(harddiskdrive)或者其他类型的存储盘。

需要说明的是,每个分区包含一个主存储盘,主存储盘可以基于某种机制选取得到,也可以是随机确定得到的。包含主存储盘的服务器可以为主服务器,主服务器可以存储主存储盘所属分区的单元标识集合,单元标识集合可以包括主存储盘中各个存储单元的单元标识,同一分区中各个存储盘的存储单元的单元标识相同,例如,主服务器202的存储盘0包括3个存储单元,上述3个存储单元的单元标识分别为存储单元1、存储单元2以及存储单元3;目标服务器203的存储盘2也包括3个存储单元,上述3个存储单元的单元标识分别为存储单元1、存储单元2以及存储单元3;扩容服务器201的存储盘1也包括3个存储单元,上述3个存储单元的单元标识分别为存储单元1、存储单元2以及存储单元3。

请参见图4,图4是本申请实施例提供的一种数据处理方法,该方法包括但不限于如下步骤:

步骤s401:扩容服务器获取存储在第一存储单元的第一数据,并将第一数据存储到第二存储单元中。

举例来说,主服务器中的主存储盘和目标服务器中的第一存储盘组成一个分区,该分区中的主存储盘为主服务器中的主存储盘。当分布式存储系统的存储容量不足时,可以增加扩容服务器实现扩容。其中,扩容服务器可以包括至少一个存储盘,每个存储盘可以包括至少一个存储单元。若当前需要将目标服务器的第一存储盘中的数据迁移到扩容服务器的第二存储盘中,则扩容服务器可以获取存储在目标服务器的第一存储盘的第一存储单元的第一数据,并将第一数据存储到扩容服务器的第二存储盘的第二存储单元中,以实现数据迁移。在数据迁移完成后,该分区所包含的存储盘可以为主服务器中的主存储盘和扩容服务器中的第二存储盘。存储单元可以等同于上述实施例中的plog。

在一个可行的实施例中,扩容服务器获取存储在第一存储单元的第一数据之前,可以向主服务器发送单元标识获取请求,单元标识获取请求携带第二存储盘所属分区的分区标识。扩容服务器从主服务器接收单元标识集合,单元标识集合包括分区标识所对应分区中主存储盘所包含的各个存储单元的单元标识。然后,扩容服务器可以获取存储在第一单元标识所对应第一存储单元中的第一数据,并将第一数据存储到第一单元标识所对应第二存储单元中。

在一个可行的实施例中,扩容服务器从第一单元标识所对应第一存储单元中获取第一数据,并将第一数据存储到第一单元标识所对应第二存储单元中之后,可以将第一单元标识从单元标识集合中删除。

具体的,若当前需要将目标服务器的第一存储盘中的数据迁移到扩容服务器的第二存储盘中,则扩容服务器可以基于分区进行数据迁移。以图1为例,服务器1的存储盘0、服务器2的存储盘1和服务器3的存储盘2组成分区1,分区1中的主存储盘为服务器1的存储盘0。若当前需要将服务器3的存储盘2的数据迁移到服务器4的存储盘1中,则服务器4可以确定服务器3的存储盘2属于分区1,分区1中的主存储盘为服务器1的存储盘0,进而服务器4可以向服务器1发送单元标识获取请求,单元标识获取请求携带分区1的分组标识.服务器1可以将分区1的plog列表发送给服务器4,该plog列表可以包括分区1所包含的主存储盘中各个plog的单元标识,也就是说,在数据迁移之前,plog列表包括服务器1的存储盘0中所有plog的单元标识。在数据迁移过程中,服务器4可以将服务器1发送的plog列表作为待恢复plog列表(即单元标识集合)。服务器4可以从服务器1的存储盘0的plog1中获取数据,并将该数据存储到服务器4的存储盘1中的plog1中,然后服务器4可以从待恢复plog列表中删除服务器1的存储盘0中的plog1的plog标识,也就是说,在数据迁移之后,plog列表包括服务器1的存储盘0中除plog1以外的其他plog的单元标识。需要说明的是,主服务器中存储的plog列表保持不变,而在迁移一个plog的数据之后,扩容服务器会删除扩容服务器中存储的待恢复plog列表中该plog的单元标识。

步骤s402:在第一数据成功存储到第二存储单元后,扩容服务器获取第二存储单元的当前数据量,以及第一存储单元的当前数据量。

具体的,扩容服务器在进行数据迁移过程中,接收到来自客户端的写请求时,扩容服务器可以统计第一存储单元的当前数据量。当扩容服务器检测到第一数据成功存储到第二存储单元时,扩容服务器可以获取上述统计的第一存储单元的当前数据量。

在一个可行的实施例中,扩容服务器获取第一存储单元的当前数据量之前,可以通过服务层接收第一数据存储请求,第一数据存储请求携带第一单元标识,第一数据存储请求用于指示客户端请求将第二数据存储至第一单元标识所对应第二存储单元中,确定单元标识集合中存在第一单元标识,获取第一存储单元在数据迁移前的数据量与第二数据的数据量相加,得到第一存储单元的当前数据量。

举例来说,持久层通过appendplog接口接收到来自服务层的写请求时,扩容服务器可以判断待恢复plog列表中是否包含写请求携带的plog标识,当待恢复plog列表中包含写请求携带的plog标识时,扩容服务器可以确定当前在进行数据迁移,则扩容服务器可以在redolog中记录plog标识所对应plog的参考数据量(即第一存储单元的当前数据量),该参考数据量是通过将写请求请求存储的数据的数据量与第一存储单元在数据迁移前的数据量进行相加得到的,以便扩容服务器在完成数据迁移之后,写入写请求请求存储的数据。其中,redolog位于扩容服务器的内存中,如果不存在该plog对应的redolog,扩容服务器可以新增一条redolog进行plog的参考数据量的记录;如果存在该plog对应的redolog,扩容服务器接收到写请求之后,可以对redolog记录的plog的参考数据量进行更新。

以图5所示的数据迁移的示意图为例,服务器3的存储盘2的plog1中的数据的数据量为10mb,服务器4需要将服务器3的存储盘2的plog1中的数据迁移到服务器4的存储盘1的plog1中,则服务器3的存储盘2的plog1在数据迁移前的数据量为10mb。在服务器4将服务器3的存储盘2的plog1中的8mb数据存储至服务器4的存储盘1的plog1中时,确定存在4mb的数据请求存储至服务器4的存储盘1的plog1中,服务器4可以将10mb与4mb相加,得到服务器3的存储盘2的plog1的当前数据量为14mb,即记录服务器4的存储盘1的plog1的参考数据量为14mb。

步骤s403:扩容服务器确认第二存储单元的当前数据量小于第一存储单元的当前数据量。

扩容服务器获取第一存储单元的当前数据量以及第二存储单元的当前数据量之后,可以判断第一存储单元的当前数据量是否大于第二存储单元的当前数据量,当第一存储单元的当前数据量大于第二存储单元的当前数据量时,扩容服务器可以获取存储在第一存储单元的第二数据;当第一存储单元的当前数据量等于第二存储单元的当前数据量时,扩容服务器可以结束本次流程。

举例来说,持久层通过appendplog接口从服务层接收到写请求时,可以将写请求请求存储的数据存储到分区所包含的各个存储盘的指定plog中,例如分区所包含的存储盘为主服务器的主存储盘,目标服务器的第一存储盘,以及扩容服务器中的第二存储盘,则主服务器可以将写请求请求存储的数据存储到主存储盘的目标存储单元中,其中目标存储单元为写请求携带的plog标识所对应的plog。目标服务器可以将写请求请求存储的数据存储到第一存储盘的第一存储单元中,其中第一存储单元为写请求携带的plog标识所对应的plog。扩容服务器中的持久层从服务层接收到写请求时,扩容服务器正在进行数据迁移,则扩容服务器可以记录第二存储盘中写请求携带的plog标识所对应的plog的参考数据量,在完成数据迁移之后,从第一存储单元中获取写请求请求存储的数据。

步骤s404:扩容服务器获取存储在第一存储单元的第二数据,并将第二数据存储到第二存储单元中。

扩容服务器获取存储在第一存储单元中的第二数据之后,可以将第二数据存储到第二存储单元中。

在一个可行的实施例中,当第二数据未成功存储到第二存储盘所属分区所包含的任一存储盘中时,扩容服务器可以向服务层发送存储失败消息,通过持久层接收第二数据存储请求,第二数据存储请求携带目标分区标识和第二单元标识,目标分区标识所对应分区与第一存储盘所属的分区不相同,且目标分区标识所对应分区所包含的各个存储盘能够存储数据,并将第二数据存储到第二单元标识所对应第三存储单元中,第三存储单元为扩容服务器的第三存储盘中的存储单元,第三存储盘所属分区的分区标识为目标分区标识。

以图1为例,服务器1的存储盘0、服务器2的存储盘1和服务器4的存储盘1组成分区1,服务器1的存储盘1、服务器2的存储盘0和服务器4的存储盘2组成分区2。若服务器2的存储盘1故障,导致第二数据未成功存储到分区1所包含的所有存储盘中,则扩容服务器可以向服务层发送存储失败消息。服务层可以确定将第二数据存储至分区2所包含的各个存储盘中,则服务层可以向持久层发送第二数据存储请求,第二数据存储请求携带分区2的分区标识和第二单元标识,扩容服务器接收到第二数据存储请求之后,可以将第二数据存储到存储盘2的第二单元标识所对应第三存储单元中。

以图5所示的数据迁移的示意图为例,当服务器3的存储盘2的plog1中的所有数据成功存储至服务器4的存储盘1的plog1中时,服务器4的存储盘1的plog1的当前数据量为10mb,服务器4可以确定服务器3的存储盘2的plog1的当前数据量大于服务器4的存储盘1的plog1的当前数据量,进而从服务器3的存储盘2的plog1中获取最新写入的4mb数据,进而服务器4将4mb数据追加写至服务器4的存储盘1的plog1的尾部。

在图4所描述的方法中,获取存储在第一存储单元的第一数据,并将第一数据存储到第二存储单元中,当第一数据成功存储到第二存储单元时,获取第一存储单元的当前数据量以及第二存储单元的当前数据量,当第一存储单元的当前数据量大于第二存储单元的当前数据量时,从第一存储单元中获取第二数据,并将第二数据存储到第二存储单元中,可避免迁移过程中写入的数据被正在迁移的数据覆盖,提升数据的可靠性,提升数据的可靠性。

请参见图6,图6是本申请另一实施例提供的一种数据处理方法,该方法包括但不限于如下步骤:

步骤s601:扩容服务器获取存储在第一存储单元中的第一数据,并将第一数据存储到第二存储单元中。第一存储单元为目标服务器的第一存储盘中的存储单元,第二存储单元为扩容服务器的第一存储盘中的存储单元,目标服务器需要迁移数据至扩容服务器。

需要说明的是,本申请实施例中的步骤s501具体可参见图3中步骤s301的描述,本申请实施例不再赘述。

步骤s602:扩容服务器在存储第一数据的过程中,从服务层接收第一数据存储请求,第一数据存储请求携带第二存储单元的第一单元标识。

举例来说,扩容服务器中的接收层通过appendplog接口接收到来自服务层的写请求时,可以判断待恢复plog列表中是否包含写请求携带的plog标识,当待恢复plog列表中包含写请求携带的plog标识时,扩容服务器可以确定当前在进行数据迁移,即扩容服务器可以确定是在存储第一数据的过程中,从服务层接收到第一数据存储请求。

步骤s603:扩容服务器向服务层发送错误消息。

扩容服务器在存储第一数据的过程中,从服务层接收到第一数据存储请求,则扩容服务器可以拒绝响应该第一数据存储请求,进而向服务层发送错误消息。

步骤s604:扩容服务器对服务层响应错误消息创建的第四存储单元分配第二存储盘的存储盘空间,第四存储单元为第二存储盘中的存储单元。

服务层接收到错误消息之后,可以确定扩容服务器拒绝将第一数据存储请求所请求存储的数据存储至第二存储单元,则服务层可以创建第四存储单元,对第四存储单元分配的存储盘空间可以为第二存储盘所属的分区包含的各个存储盘。

步骤s605:扩容服务器通过持久层接收第三数据存储请求,第三数据存储请求携带第四存储单元的第三单元标识。

步骤s606:扩容服务器将第二数据存储到第三单元标识所对应的第四存储单元中。

扩容服务器接收到第二数据存储请求之后,可以将第二数据存储到第三单元标识所对应的第四存储单元中。也就是说,在接收到来自客户端的数据存储请求时,对未完成数据迁移的plog不进行追加写,而是新建plog进行客户端请求存储的数据的存储,可实现写入的数据与正在迁移的数据的互斥,提升数据的可靠性。

在图6所描述的方法中,获取存储在第一存储单元的第一数据,并将第一数据存储到第二存储单元中,在存储第一数据的过程中,从服务层接收第一数据存储请求,第一数据存储请求携带第二存储单元的第一单元标识,向服务层发送错误消息,对服务层响应错误消息创建的第四存储单元分配第二存储盘的存储盘空间,从持久层接收第三数据存储请求,第三数据存储请求携带第四存储单元的第三单元标识,并将第二数据存储到第三单元标识所对应的第四存储单元中,可实现写入的数据与正在迁移的数据的互斥,提升数据的可靠性。

上述详细阐述了本申请实施例的方法,下面提供了本申请实施例的装置。

请参见图7,图7是本申请实施例提供的一种数据处理装置的结构示意图,用于实现图4、6实施例中扩容服务器的功能,数据处理装置的功能块可由硬件、软件或硬件与软件的组合来实施本申请方案。所属领域的技术人员应理解,图7中所描述的功能块可经组合或分离为若干子块以实施本申请方案。因此,本申请中上面描述的内容可支持对下述功能模块的任何可能的组合或分离或进一步定义。

如图7所示,数据处理装置应用于扩容服务器,所述扩容服务器包括至少一个存储盘,各个所述存储盘包括至少一个存储单元,数据处理装置可包括:接收模块701和处理模块702,其中,各个模块的详细描述如下。

接收模块701,用于获取存储在第一存储单元的第一数据,所述第一存储单元为目标服务器的第一存储盘中的存储单元,所述目标服务器需要迁移数据至所述扩容服务器;

处理模块702,用于将所述第一数据存储到第二存储单元中,所述第二存储单元为所述扩容服务器的第二存储盘中的存储单元;

所述处理模块702,还用于当所述第一数据成功存储到所述第二存储单元时,获取所述第二存储单元的当前数据量以及第一存储单元的当前数据量;

所述处理模块702,还用于确认所述第二存储单元的当前数据量小于所述第一存储单元的当前数据量;

所述接收模块701,还用于获取存储在所述第一存储单元的第二数据;

所述处理模块702,还用于将所述第二数据存储到所述第二存储单元中。

可选的,本申请实施例中的数据处理装置还可以包括发送模块703,其中发送模块703,用于在所述接收模块701获取存储在所述第一存储单元的第一数据之前,向主服务器发送单元标识获取请求,所述单元标识获取请求携带所述第二存储盘所属分区的分区标识,所述主服务器包括所述第一存储盘所属分区中的主存储盘;

所述接收模块701,还用于从所述主服务器接收单元标识集合,所述单元标识集合包括所述分区标识所对应分区中主存储盘所包含的各个存储单元的单元标识,所述第一存储盘所包含的各个存储单元的单元标识分别与所述主存储盘所包含的各个存储单元的单元标识相同,且所述第二存储盘所包含的各个存储单元的单元标识分别与所述主存储盘所包含的各个存储单元的单元标识相同;

所述接收模块701获取存储在所述第一存储单元的第一数据,包括:

获取存储在第一单元标识所对应第一存储单元的第一数据;

所述处理模块702将所述第一数据存储到所述第二存储单元中,包括:

将所述第一数据存储到第一单元标识所对应第二存储单元中。

可选的,所述处理模块702,还用于将所述第一数据存储到第一单元标识所对应第二存储单元中之后,将所述第一单元标识从所述单元标识集合中删除。

可选的,所述接收模块701,还用于所述处理模块702获取所述第二存储单元的当前数据量以及第一存储单元的当前数据量之前,接收来自所述客户端的第一数据存储请求,所述第一数据存储请求携带所述第一单元标识,所述第一数据存储请求用于指示所述客户端请求将所述第二数据存储至所述第一单元标识所对应第二存储单元中;

所述处理模块702,还用于确定所述单元标识集合中存在所述第一单元标识;

所述处理模块702,还用于获取所述第一存储单元在数据迁移前的数据量;

所述处理模块702,还用于将所述第一存储单元在数据迁移前的数据量与所述第二数据的数据量相加,得到所述第一存储单元的当前数据量。

可选的,本申请实施例中的数据处理装置还可以包括:

发送模块703,用于当所述第二数据未成功存储到所述第二存储盘所属分区所包含的任一存储盘中时,向所述服务层发送存储失败消息;

所述接收模块701,还用于通过持久层接收第二数据存储请求,所述第二数据存储请求携带目标分区标识和第二单元标识,所述目标分区标识所对应分区与所述第二存储盘所属的分区不相同,且所述目标分区标识所对应分区所包含的各个存储盘能够存储数据;

所述处理模块702,还用于将所述第二数据存储到所述第二单元标识所对应第三存储单元中,所述第三存储单元为所述扩容服务器的第三存储盘中的存储单元,所述第三存储盘所属分区的分区标识为所述目标分区标识。

需要说明的是,各个模块的实现还可以对应参照图4、6所示的实施例的相应描述。

需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。本申请实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

请参见图8,图8是本申请实施例公开的一种服务器的结构示意图,该服务器可以包括。如图8所示,该服务器可以包括:至少一个处理器801、总线802、接收器803、内存设备804以及至少一个存储盘805,各个存储盘包括至少一个plog。其中,接收器803、内存设备804、存储盘805以及处理器801通过总线802相互连接;总线802可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。其中,处理器801可以是中央处理器(centralprocessingunit,cpu),网络处理器(networkprocessor,np),通用处理器,数字信号处理器(digitalsignalprocessor,dsp),专用集成电路(application-specificintegratedcircuit,asic),现场可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。在处理器801是一个cpu的情况下,该cpu可以是单核cpu,也可以是多核cpu。内存设备804可以存储程序代码、redolog以及待恢复plog列表。该服务器还可以包括发射器806,其中:

接收器803获取存储在第一存储单元的第一数据,所述第一存储单元为目标服务器的第一存储盘中的存储单元,所述目标服务器需要迁移数据至所述扩容服务器;

处理器801将所述第一数据存储到第二存储单元中,所述第二存储单元为所述扩容服务器的第二存储盘中的存储单元;

当所述第一数据成功存储到所述第二存储单元时,处理器801获取所述第二存储单元的当前数据量以及第一存储单元的当前数据量;

处理器801确认所述第二存储单元的当前数据量小于所述第一存储单元的当前数据量;

接收器803获取存储在所述第一存储单元的第二数据;

处理器801将所述第二数据存储到所述第二存储单元中。

可选的,发射器806可以在所述接收器803获取存储在所述第一存储单元的第一数据之前,向主服务器发送单元标识获取请求,所述单元标识获取请求携带所述第二存储盘所属分区的分区标识,所述主服务器包括所述第一存储盘所属分区中的主存储盘;

接收器803从所述主服务器接收单元标识集合,所述单元标识集合包括所述分区标识所对应分区中主存储盘所包含的各个存储单元的单元标识,所述第一存储盘所包含的各个存储单元的单元标识分别与所述主存储盘所包含的各个存储单元的单元标识相同,且所述第二存储盘所包含的各个存储单元的单元标识分别与所述主存储盘所包含的各个存储单元的单元标识相同;

所述接收器803获取存储在所述第一存储单元的第一数据,包括:

获取存储在第一单元标识所对应第一存储单元的第一数据;

所述处理器801将所述第一数据存储到所述第二存储单元中,包括:

将所述第一数据存储到第一单元标识所对应第二存储单元中。

可选的,处理器801将所述第一数据存储到第一单元标识所对应第二存储单元中之后,还可以将所述第一单元标识从所述单元标识集合中删除。

可选的,接收器803在处理器801获取所述第二存储单元的当前数据量以及第一存储单元的当前数据量之前,可以接收来自所述客户端的第一数据存储请求,所述第一数据存储请求携带所述第一单元标识,所述第一数据存储请求用于指示所述客户端请求将所述第二数据存储至所述第一单元标识所对应第二存储单元中;

处理器801确定所述单元标识集合中存在所述第一单元标识;

处理器801获取所述第一存储单元在数据迁移前的数据量;

处理器801将所述第一存储单元在数据迁移前的数据量与所述第二数据的数据量相加,得到所述第一存储单元的当前数据量。

可选的,发射器806可以在所述第二数据未成功存储到所述第二存储盘所属分区所包含的任一存储盘中时,向所述服务层发送存储失败消息;

接收器803通过持久层接收第二数据存储请求,所述第二数据存储请求携带目标分区标识和第二单元标识,所述目标分区标识所对应分区与所述第二存储盘所属的分区不相同,且所述目标分区标识所对应分区所包含的各个存储盘能够存储数据;

处理器801将所述第二数据存储到所述第二单元标识所对应第三存储单元中,所述第三存储单元为所述扩容服务器的第三存储盘中的存储单元,所述第三存储盘所属分区的分区标识为所述目标分区标识。

应当理解,服务器仅为本申请实施例提供的一个例子,并且,服务器可具有比示出的部件更多或更少的部件,可以组合两个或更多个部件,或者可具有部件的不同配置实现。

具体的,本申请实施例中介绍的服务器可以用以实施本申请结合图4、6介绍的方法实施例中的部分或全部流程。

请参见图9,图9是本申请另一实施例提供的一种数据处理装置的结构示意图,数据处理装置应用于扩容服务器,所述扩容服务器包括至少一个存储盘,各个所述存储盘包括至少一个存储单元,用于实现图4、6实施例中扩容服务器的功能,数据处理装置的功能块可由硬件、软件或硬件与软件的组合来实施本申请方案。所属领域的技术人员应理解,图9中所描述的功能块可经组合或分离为若干子块以实施本申请方案。因此,本申请中上面描述的内容可支持对下述功能模块的任何可能的组合或分离或进一步定义。

如图9所示,数据处理装置可包括:接收模块901、处理模块902和发送模块903,其中,各个模块的详细描述如下。

接收模块901,用于获取存储在第一存储单元的第一数据;

处理模块902,用于将所述第一数据存储到第二存储单元中,所述第一存储单元为目标服务器的第一存储盘中的存储单元,所述第二存储单元为所述扩容服务器的第二存储盘中的存储单元,所述目标服务器需要迁移数据至所述扩容服务器;

所述接收模块901,还用于在存储所述第一数据的过程中,接收来自客户端的第一数据存储请求,所述第一数据存储请求携带所述第二存储单元的第一单元标识;

发送模块903,用于向所述服务层发送错误消息;

所述处理模块902,还用于对所述服务层响应所述错误消息创建的第四存储单元分配所述第二存储盘的存储盘空间;

所述接收模块901,还用于通过持久层接收第二数据存储请求,所述第二数据存储请求携带所述第四存储单元的第三单元标识;

所述处理模块902,还用于将所述第二数据存储到所述第三单元标识所对应的第四存储单元中。

可选的,发送模块903在接收模块901获取存储在第一存储单元的第一数据之前,可以向主服务器发送单元标识获取请求,所述单元标识获取请求携带所述第二存储盘所属分区的分区标识,所述主服务器包括所述第一存储盘所属分区中的主存储盘;

接收模块901从所述主服务器接收单元标识集合,所述单元标识集合包括所述分区标识所对应分区中主存储盘所包含的各个存储单元的单元标识,所述第一存储盘所包含的各个存储单元的单元标识分别与所述主存储盘所包含的各个存储单元的单元标识相同,且所述第二存储盘所包含的各个存储单元的单元标识分别与所述主存储盘所包含的各个存储单元的单元标识相同;

所述接收模块901获取存储在第一存储单元的第一数据,包括:

获取存储在第一单元标识所对应第一存储单元的第一数据;

处理模块902将所述第一数据存储到第二存储单元中,包括:

将所述第一数据存储到所述第一单元标识所对应第二存储单元中。

可选的,处理模块902将所述第一数据存储到所述第一单元标识所对应第二存储单元中之后,将所述第一单元标识从所述单元标识集合中删除。

可选的,当所述第二数据未成功存储到所述第二存储盘所属分区所包含的任一存储盘中时,发送模块903还可以向服务层发送存储失败消息;

接收模块901通过持久层接收第二数据存储请求,所述第二数据存储请求携带目标分区标识和第二单元标识,所述目标分区标识所对应分区与所述第二存储盘所属的分区不相同,且所述目标分区标识所对应分区所包含的各个存储盘能够存储数据;

处理模块902将所述第二数据存储到所述第二单元标识所对应第三存储单元中,所述第三存储单元为所述扩容服务器的第三存储盘中的存储单元,所述第三存储盘所属分区的分区标识为所述目标分区标识。

需要说明的是,各个模块的实现还可以对应参照图4、6所示的实施例的相应描述。

需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。本申请实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

请参见图10,图10是本申请另一实施例公开的一种服务器的结构示意图。如图10所示,该服务器可以包括:至少一个处理器1001、总线1002、接收器1003、发射器1004、内存设备1005以及至少一个存储盘1006,各个存储盘包括至少一个plog。其中,接收器1003、发射器1004、内存设备1005、存储盘1006以及处理器1001通过总线1002相互连接;总线1002可以是pci总线或eisa总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图10中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。其中,处理器1001可以是cpu,np,通用处理器,dsp,asic,fpga或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。内存设备804可以存储程序代码以及待恢复plog列表。在处理器1001是一个cpu的情况下,该cpu可以是单核cpu,也可以是多核cpu,其中:

接收器1003获取存储在第一存储单元的第一数据;

处理器1001将所述第一数据存储到第二存储单元中,所述第一存储单元为目标服务器的第一存储盘中的存储单元,所述第二存储单元为所述扩容服务器的第二存储盘中的存储单元,所述目标服务器需要迁移数据至所述扩容服务器;

接收器1003在存储所述第一数据的过程中,接收来自客户端的第一数据存储请求,所述第一数据存储请求携带所述第二存储单元的第一单元标识;

发射器1004向所述服务层发送错误消息;

处理器1001对所述服务层响应所述错误消息创建的第四存储单元分配所述第二存储盘的存储盘空间;

接收器1003通过持久层接收第二数据存储请求,所述第二数据存储请求携带所述第四存储单元的第三单元标识;

处理器1001将所述第二数据存储到所述第三单元标识所对应的第四存储单元中。

可选的,发射器1004在接收器1003获取存储在第一存储单元的第一数据之前,可以向主服务器发送单元标识获取请求,所述单元标识获取请求携带所述第二存储盘所属分区的分区标识,所述主服务器包括所述第一存储盘所属分区中的主存储盘;

接收器1003从所述主服务器接收单元标识集合,所述单元标识集合包括所述分区标识所对应分区中主存储盘所包含的各个存储单元的单元标识,所述第一存储盘所包含的各个存储单元的单元标识分别与所述主存储盘所包含的各个存储单元的单元标识相同,且所述第二存储盘所包含的各个存储单元的单元标识分别与所述主存储盘所包含的各个存储单元的单元标识相同;

所述接收器1003获取存储在第一存储单元的第一数据,包括:

获取存储在第一单元标识所对应第一存储单元的第一数据;

处理器1001将所述第一数据存储到第二存储单元中,包括:

将所述第一数据存储到所述第一单元标识所对应第二存储单元中。

可选的,处理器1001将所述第一数据存储到所述第一单元标识所对应第二存储单元中之后,将所述第一单元标识从所述单元标识集合中删除。

可选的,当所述第二数据未成功存储到所述第二存储盘所属分区所包含的任一存储盘中时,发射器1004还可以向服务层发送存储失败消息;

接收器1003通过持久层接收第二数据存储请求,所述第二数据存储请求携带目标分区标识和第二单元标识,所述目标分区标识所对应分区与所述第二存储盘所属的分区不相同,且所述目标分区标识所对应分区所包含的各个存储盘能够存储数据;

处理器1001将所述第二数据存储到所述第二单元标识所对应第三存储单元中,所述第三存储单元为所述扩容服务器的第三存储盘中的存储单元,所述第三存储盘所属分区的分区标识为所述目标分区标识。

应当理解,服务器仅为本申请实施例提供的一个例子,并且,服务器可具有比示出的部件更多或更少的部件,可以组合两个或更多个部件,或者可具有部件的不同配置实现。

具体的,本申请实施例中介绍的服务器可以用以实施本申请结合图4、6介绍的方法实施例中的部分或全部流程。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、存储盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态存储盘solidstatedisk(ssd))等。

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