一种分区扩展方法、数据存储方法及装置
技术领域
本申请涉及信息技术领域,尤其涉及一种分区扩展方法、数据存储方法及装置。
背景技术
分布式存储系统中,一般使用分布式哈希表(Distributed Hash Table,DHT)来决定数据存放位置。即通过一个哈希Hash(哈希)函数计算Hash值,根据Hash值将数据映射到一个Hash空间,Hash空间是一个首尾相连的环状空间,Hash环可分成若干等份,每份称为一个分区,再将分区平均分配到各个存储节点上,同时,建立数据到分区以及分区到存储节点的映射关系并存储在DHT中。其中,数据的读写、分布式集群的扩容、故障处理等都依赖于DHT的变动。因此,DHT需要达到负载均匀、可靠性良好、节点上的数据存储方式有利于数据迁移、扩展性良好(即系统可以进行多次扩容)的目标。
现有技术中,在分布式存储系统中增设新的存储节点,即增大存储节点的数量可以实现系统的扩容。具体的扩容方法可以包括:在系统中增设新的存储节点,并移动原有存储节点上的分区至新的存储节点,从而进行分布式存储系统的扩容。其中,存储节点上的分区数量大致相同。
在实现上述系统扩容的过程中,很难保证将原有存储节点的的分区的数据准确地迁移至新的存储节点上新增的分区中。
发明内容
有鉴于此,本申请提供了一种分区扩展方法、数据存储方法及装置,可以在分布式存储系统扩容时,将原有存储节点的的分区的数据准确地迁移至新的存储节点上新增的分区中。
第一方面,本申请实施例提供了一种分区扩展方法,若该方法由包括新增分区的目标存储节点执行,该方法包括:首先目标存储节点接收控制服务器发送的第一分区视图,因为第一分区视图包括分布式存储系统中的各个存储节点标识和各个分区标识之间的第一映射关系,以及与各个新增分区标识和待迁移分区标识之间的第二映射关系,对于任意一对新增分区标识和待迁移分区标识之间的第二映射关系用于指示待迁移分区标识对应的分区中存储的数据能够迁移到新增分区标识对应的分区中,所述目标存储节点根据所述第二映射关系,可以确定所述目标存储节点上的第一新增分区对应的第一待迁移分区,接着,所述目标存储节点根据所述第一映射关系,可以确定所述第一待迁移分区所在的源存储节点,最终目标存储节点从所述源存储节点上获取所述第一待迁移分区中存储的数据,并将获取的数据写入所述目标存储节点上的第一新增分区中。
这样,通过该方法可以利用分区视图,确定出新增分区所要迁移的原有分区,继而准确地将原有分区上的数据写入到新增分区中,使得原有分区上的数据准确地迁移至新增分区中。
在一种可能的设计中,目标存储节点从所述源存储节点上获取所述第一待迁移分区中存储的数据之前,会先向所述源存储节点发送第一请求消息,因为第一请求消息用于请求获取所述第一待迁移分区中存储的数据对应的数据标识,所以源存储节点将第一待迁移分区中存储的数据对应的数据标识发送至目标存储节点,当目标存储节点接收到数据标识之后,就对比所述数据标识与所述目标存储节点上的第一新增分区已存储的数据对应的数据标识之间的差异;然后目标存储节点根据对比结果,确定出第一待迁移分区中需要迁移出的数据,所以最终目标存储节点从所述源存储节点上获取的是所述第一待迁移分区中存储的需要迁移出的数据。之所以这样做,是为了仅迁移新增分区与待迁移分区之间的差异数据,可以提高数据迁移的效率,尽可能减少迁移的工作量。
在一种可能的设计中,当目标存储节点将获取的数据全部写入所述目标存储节点上的第一新增分区中之后,目标存储节点还会向控制服务器发送第一消息,发送第一消息是为了通知控制服务器所述第一待迁移分区中的数据已迁移完成,这样目标存储节点就会接收到控制服务器推送的第二分区视图;这时第二分区视图包括分布式存储系统中的各个存储节点标识和除了所述第一待迁移分区的标识之外的各个分区标识之间的第三映射关系,以及各个新增分区标识和除了所述第一待迁移分区的标识之外的待迁移分区标识之间的第四映射关系。
第二方面,若分区扩展方法由源存储节点执行,本申请实施例提供了一种分区扩展方法,该方法包括:首先源存储节点接收目标存储节点发送的数据迁移请求,因为数据迁移请求用于请求将所述源存储节点上所述第一待迁移分区中存储的数据迁移至所述目标存储节点的第一新增分区中,并向所述目标存储节点发送所述第一待迁移分区中存储的数据,以使所述目标存储节点将接收的数据写入所述目标存储节点上的第一新增分区中。
这样,通过该方法源存储节点可以利用分区视图,确定出所要迁移的数据对应的新增分区,继而准确地将原有分区上的数据写入到新增分区中,使得原有分区上的数据准确地迁移至新增分区中。
在一种可能的设计中,,所述数据迁移请求中还携带第一分区视图,第一分区视图的内容同上,该处不再赘述,所以源存储节点将自身的分区视图更新为所述第一分区视图,然后所述源存储节点接收客户端的读写请求,因为读写请求中包括所述客户端当前存储的分区视图标识,所以源存储节点确定所述客户端存储的分区视图标识与所述第一分区视图的标识不一致时,向所述客户端发送第一消息,当客户端收到第一消息时,及时更新分区视图。
第三方面,若分区扩展方法由控制服务器执行,本申请实施例提供了一种分区扩展方法,该方法包括:首先控制服务器接收目标存储节点发送的数据同步状态报告,因为所述数据同步状态报告是在目标存储节点将所述源存储节点上所述第一待迁移分区中存储的数据迁移至所述目标存储节点的第一新增分区时生成的,且数据同步状态报告指示所述目标存储节点中的第一新增分区的状态变更为同步数据状态,所以控制服务器根据所述数据同步状态报告,更新已有分区视图,然后向客户端和分布式存储系统的各个存储节点推送更新后的第一分区视图,第一分区视图的内容同上,该处不再赘述;这样目标存储节点收到第一分区视图后开始执行数据迁移任务。
另外,控制服务器之所以会收到数据同步状态报告,是因为所述控制服务器接收目标存储节点发送的数据同步状态报告之前,所述控制服务器先接收到目标存储节点的扩容请求,然后向所述目标存储节点发送第三分区视图,因为所述第三分区视图也包括所述第一映射关系和所述第二映射关系,且所述第二映射关系中所述目标存储节点中的第一新增分区的状态为未同步数据状态,所以目标节点被触发发送数据同步状态报告。
在一种可能的设计中,当数据迁移任务执行完成时,控制服务器接收所述目标存储节点发送的第一消息,因为第一消息是通知所述控制服务器所述第一待迁移分区中的数据迁移完成,所以控制服务器更新分区视图,向所述客户端和分布式存储系统的各个存储节点推送更新后的第二分区视图,这时第二分区视图包括分布式存储系统中的各个存储节点标识和除了所述第一待迁移分区的标识之外的各个分区标识之间的第三映射关系,以及各个新增分区标识和除了所述第一待迁移分区的标识之外的待迁移分区标识之间的第四映射关系。
第四方面,本申请实施例提供了一种数据存储方法,若该方法由客户端执行,该方法包括:
客户端接收控制服务器推送的第三分区视图,因为所述第三分区视图包括分布式存储系统中的各个存储节点标识和各个分区标识之间的第一映射关系,以及与各个新增分区标识和待迁移分区标识之间的第二映射关系,对于任意一对新增分区标识和待迁移分区标识之间的第二映射关系用于指示待迁移分区标识对应的分区中存储的数据能够迁移到新增分区标识对应的分区中,所以客户端根据所述分区视图,确定与数据存储请求对应的所述分布式存储系统中的各个存储节点的第一目标分区集合,然后向所述第一目标分区集合对应的各个存储节点发送数据存储请求。
在本申请实施例中,这种数据存储方法因为综合DHT与客户端路由的优点,可以在读写数据时只进行一轮读写,提高了读写的效率。
在一种可能的设计中,若在目标存储节点执行数据迁移过程中客户端读写数据,那么所述客户端向源存储节点发送数据存储请求后,会接收到源存储节点发送的第二消息,第二消息指示所述客户端更新分区视图,然后客户端从所述控制服务器获取第一分区视图,所述第一分区视图是所述源存储节点中的第一待迁移分区中存储的数据开始迁移到目标存储节点的第一新增分区时生成的,所述第一分区视图包括所述第一映射关系和所述第二映射关系,且所述目标存储节点中的第一新增分区的状态变更为同步数据状态,所述客户端根据所述第一分区视图,确定与数据存储请求对应的所述分布式存储系统中的各个存储节点的第二目标分区集合,然后重新向所述第二目标分区集合对应的存储节点发送所述数据存储请求。
在一种可能的设计中,若在目标存储节点执行数据迁移完成时客户端读写数据,那么客户端可能会接收到所述控制服务器推送的第二分区视图,因为所述第二分区视图是所述目标存储节点将待迁移分区的数据迁移完成后生成的,所述第二分区视图包括分布式存储系统中的各个存储节点标识和除了所述第一待迁移分区的标识之外的各个分区标识之间的第三映射关系,以及各个新增分区标识和除了所述第一待迁移分区的标识之外的待迁移分区标识之间的第四映射关系,所以客户端根据所述第二分区视图,确定与数据存储请求对应的所述分布式存储系统中除了所述第一待迁移分区之外第三目标分区集合;然后向所述第三目标分区集合对应的各个存储节点发送数据存储请求。
第五方面,本申请实施例还提供了一种分区扩展装置,该装置具有实现上述第一方面、第二方面或者第三方面方法示例中业务生成的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或所述软件包括一个或多个与上述功能相对应的模块。
在一个可能的设计中,所述业务生成装置的结构中可以包括接收单元、处理单元、发送单元,这些单元可以执行上述第一方面的任意一种设计提供的方法示例中的相应功能,具体参见方法示例中的详细描述,此处不做赘述。
第六方面,本申请实施例还提供了一种数据存储装置,该装置具有实现上述第四方面方法示例中业务生成的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或所述软件包括一个或多个与上述功能相对应的模块。
在一个可能的设计中,所述业务生成装置的结构中可以包括接收单元、处理单元、发送单元,这些单元可以执行上述第一方面的任意一种设计提供的方法示例中的相应功能,具体参见方法示例中的详细描述,此处不做赘述。
第七方面,本申请实施例还提供了一种网络设备,该网络设备具有实现上述第一方面、第二方面、第三方面、或者第四方面方法示例中业务生成行为的功能。所述功能可以通过硬件实现。所述网络设备的结构包括通信接口、处理器、总线以及存储器,其中,所述处理器以及所述存储器通过所述总线连接;处理器调用存储在所述存储器中的指令执行上述方法。
第八方面,本申请实施例中还提供一种计算机存储介质,该存储介质中存储软件程序,该软件程序在被一个或多个处理器读取并执行时可实现第一方面或上述第一方面的任意一种设计提供的方法。
第九方面,本申请还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面或各种可能的实现方式所述的数据包发送方法。
本申请实施例提供的是基于DHT和客户端路由的分布式存储系统,该分布式存储系统综合了DHT与客户端路由的优点,可以在读写数据时只进行一轮读写,提高了数据读写的效率。并且在分区扩容时,控制服务器会及时向客户端和各个存储节点下发分区视图,保证在同一分区视图下进行数据读写,另外,在分区扩展过程中,目标存储节点接收控制服务器发送的第一分区视图之后,利用第一分区视图的第一映射关系和第二映射关系,目标存储节点从待迁移分区对应的源存储节点中获取数据,并写入新增分区中,使得原有分区上的数据准确地迁移至新增分区中。
附图说明
图1a为现有技术提供的一种元数据组织形式为MDS方式的存储节点网络示意图;
图1b为现有技术提供的一种MDS方式的分布式存储系统示意图;
图2a为现有技术提供的一种元数据组织形式为DHT方式的存储节点网络示意图;
图2b为本申请实施例提供的一种DHT方式的分布式存储系统示意图;
图3为现有技术提供的一种主路由方案示意图;
图4为现有技术提供的一种客户端路由方案示意图;
图5为本申请实施例提供的DHT结合客户端路由分布式存储系统示意图;
图6为本申请实施例提供的一种分区扩展方法示意图;
图7为本申请实施例提供的一种分区扩展完成更新分区视图方法过程示意图;
图8为本申请实施例提供的一种在扩容过程中数据存储方法示意图;
图9为本申请实施例提供的一种在扩容完成数据存储方法示意图;
图10为本申请实施例提供的一种分区扩展装置示意图一;
图11为本申请实施例提供的一种分区扩展装置示意图二;
图12为本申请实施例提供的一种分区扩展装置示意图三;
图13为本申请实施例提供的一种数据存储装置示意图四;
图14为本申请实施例提供的一种网络设备结构示意图。
具体实施方式
下面将结合附图对本申请作进一步地详细描述。
在分布式存储领域,经常会出现各种各样的故障,因此都要采用一定冗余策略,例如多副本、EC(Erasure Codes,纠删码)。多副本是将原始数据存储多份,故障时只要剩余超过一份数据,数据就不会丢失。EC是将原始数据切分成k个小原始数据块,然后根据这k份数据计算出m个小校验数据块,最终存储k+m个小数据块,故障时这k+m个小数据块只要剩余超过k个,就可以恢复出原始数据。无论多副本还是EC,通常以数据块(chunk/plog)为单位来存储数据,数据块的存放在存储节点中,但位置并不是固定的,随着扩容或踢盘,数据块会在存储节点之间进行数据迁移,以保证容量均衡。
在具体实现上因为数据块组织不同存在各种差异,其中元数据组织方式目前分为MDS与DHT两种,数据路由方式分为主(server)路由与客户端(client)路由两种。
如图1a所示,图1a中元数据组织形式为MDS方式,图1b示例一种分布式存储系统结构示意图,该分布式存储系统包括:由若干个存储节点110构成的存储节点网络120、控制服务器130、客户端140;所述节点网络120与控制服务器130和客户端140连接。当元数据组织方式为MDS形式,一个存储节点包含多个106个数据块,数据块与存储节点的映射关系由控制服务器管理。客户端140操作数据块前,需要先跟控制服务器130交互一次,因为客户端需要跟很多存储节点交互,映射关系内存占用很大,客户端无法缓存,所以跟控制服务器130交互容易成为瓶颈。
如图2a所示,图2a所示的元数据组织方式为DHT形式,在图2a所示分布式存储系统的每个存储节点中包括多个分区,每个分区包括多个数据块,数据块与存储节点的映射关系我们称之为分区视图,一个分区中的该分区标识与该分区包括的数据块标识之间的映射关系一般称为该分区的元数据。图2b与图1b组成结构相同,区别在于,一个存储节点包含103个分区,一个分区包含103个数据块,分区与存储节点的映射关系由控制服务器管理,控制服务器主动向客户端推送分区视图。因为分区视图相对于MDS的数据块与存储节点的映射关系占用内存较小,所以可以缓存在客户端内存中,不需要与控制服务器交互。
如图3所示,图3示例一种主路由方案,主路由需要两个轮回,客户端发送数据给分区主,假设发送的数据为4MB,分区主将数据转为6MB,其中1MB的数据保存在主存储节点的分区主,另外5MB的数据被主存储节点分发数据给5个备存储节点上的分区备,每个分区备存储1MB数据。这种路由方式存在的问题是仅能发挥6/9的存储节点入口物理带宽。
如图4所示,图4示例一种客户端路由方案(以EC为例),客户端接收控制服务器推送的分区视图,直接向各个分区发送数据,所以路由只需要一个轮回,时延缩短一倍,EC模式下能发挥一半的存储节点入口物理带宽,带宽利用率提高了50%。
基于现有技术中的上述元数据组织方式和路由方式,本申请实施例提供一种DHT和客户端路由存储相结合的分布式存储系统,该系统综合DHT与客户端路由的优点,可以在读写数据时只进行一轮读写,并且可以保证扩容时数据的一致性。具体地,本申请所提供的分区扩展方法适用于图5所示的分布式存储系统结构示意图,图5中元数据组织形式为DHT方式,该分布式存储系统包括:由若干个存储节点210构成的存储节点网络220、控制服务器230、客户端240;所述存储节点网络220与控制服务器230和客户端240连接。
其中,在每个存储节点中包括多个分区,每个分区包括多个数据块,分区标识与存储节点标识的映射关系由控制服务器230管理,称为分区视图,每个分区标识和该分区中的数据块标识,称为元数据,客户端240接收控制服务器230推送的分区视图,在读写数据时,根据获取的分区视图中的映射关系,操作相应的存储节点进行数据读写访问。
在图5中,一个存储节点管理很多个分区,客户端需要首先创建分区,只有创建后该客户端才可以读写该分区。在EC模式下,客户端写数据时直接发送给各个存储节点读写请求。收到读写请求的存储节点需要校验客户端与自身的分区视图是否一致,不一致时通知客户端及时更新分区视图。然后客户端收到通知,发现分区视图不一致,则按照最新的分区视图重新发读写请求给各个存储节点。
基于图5所示的分布式存储系统,本申请实施例提供一种分区扩展方法,该方法包括:首先目标存储节点接收控制服务器发送的第一分区视图,因为第一分区视图包括分布式存储系统中的各个存储节点标识和各个分区标识之间的第一映射关系,以及与各个新增分区标识和待迁移分区标识之间的第二映射关系,对于任意一对新增分区标识和待迁移分区标识之间的第二映射关系用于指示待迁移分区标识对应的分区中存储的数据能够迁移到新增分区标识对应的分区中,所以目标存储节点根据第二映射关系,确定所述目标存储节点上的第一新增分区对应的第一待迁移分区;然后根据第一映射关系,确定所述第一待迁移分区所在的源存储节点,继而从所述源存储节点上获取所述第一待迁移分区中存储的数据,并将获取的数据写入所述目标存储节点上的第一新增分区中。
这样,目标存储节点可以利用分区视图,确定出新增分区所要迁移的原有分区,继而准确地将原有分区上的数据写入到新增分区中,使得原有分区上的数据准确地迁移至新增分区中。
在一种可能的设计中,为了提供数据迁移的效率,目标存储节点可以向所述源存储节点发送第一请求消息,所述第一请求消息用于请求获取所述第一待迁移分区中存储的数据对应的数据标识,然后目标存储节点对比所述数据标识与所述目标存储节点上的第一新增分区已存储的数据对应的数据标识之间的差异,也就是说,目标存储节点请求获取第一待迁移分区的元数据,对比自身新增分区的元数据和目标节点上的元数据的差异,找到第一待迁移分区中需要迁移出的数据,然后再从所述源存储节点上获取所述第一待迁移分区中存储的所述需要迁移出的数据。
具体来说,结合图5所示的分布式存储系统,进一步对分区扩展方法的具体过程进行详细说明,如图6所示,包括如下步骤。
步骤301,控制服务器230接收到扩容请求,所述扩容请求用于请求控制服务器进行扩容处理。
其中,所述扩容请求可以由第三方设备发送,或者,也可以由使用控制服务器的用户通过触发控制服务器提供的扩容功能实现,或者,也可以在满足某些预设条件例如分布式存储系统中新增加的存储节点数量达到某一阈值时触发控制服务器自动扩容,这里并不做限定。
控制服务器230根据当前正在进行平衡处理的各个分区的状态更新分区视图,得到包含各个分区的最新状态的分区视图1,分区视图1亦指代上文的第三分区视图,这时分区视图中1存储有各个分区和对应的存储节点的映射关系,以及各个新增分区标识和待迁移分区标识之间的第二映射关系,且这时目标节点中新增分区尚未开始执行数据迁移任务,所以分区视图1的新增加的分区属于未同步数据状态。
控制服务器230根据各个分区的最新状态进行在线扩容处理,生成源存储节点、源存储节点上的待迁移分区以及目标存储节点、目标存储节点上的新增分区四者之间的对应关系。
步骤302,控制服务器230向存储节点网络220发送分区视图1,这时存储节点网络至少包括源存储节点和目标存储节点。
步骤303,目标存储节点收到分区视图1后,开始向控制服务器上报数据同步状态报告,所述数据同步状态报告指示所述目标存储节点中的新增分区的状态更新为开始数据同步状态;
步骤304,控制服务器收到数据同步状态报告后,更新得到分区视图2,或者说控制服务器把目标存储节点的新增分区状态改为数据同步状态,生成第一分区视图,并向目标存储节点发送分区视图2。这时所述分区视图2包括分布式存储系统中的各个存储节点和各个分区的映射关系,且分区视图2中的目标存储节点中的新增分区的状态为数据同步状态;
步骤305,目标存储节点接收所述控制服务器发送的分区视图2,然后目标存储节点根据所述第一分区视图中的第二映射关系,确定出新增分区对应的待迁移的分区,再根据第一映射关系确定待迁移的分区对应的源存储节点,然后目标存储节点向源存储节点发送获取待迁移分区的元数据。
步骤306,所述源存储节点向所述目标存储节点发送第一请求消息,所述第一请求消息用于请求获取所述第一待迁移分区中的元数据。
步骤307,所述目标存储节点对比自身新增分区的元数据和接收到元数据之间的差异,确定出差异数据;再从存储节点网络获取差异数据,并将差异数据写入所述新增加的分区中。
按照上述方法,目标存储节点可以将源存储节点的待迁移分区上的数据迁移至自身分区上,因此可以保证二者数据的一致性。
在本申请实施例中,一种情况下,当目标存储节点将待迁移分区上的数据迁移完成后,目标存储节点会先向控制服务器发送第一消息,也就是通知控制服务器数据已迁移完成,这时控制服务器需要再次执行分区视图更新流程,如图7所示,过程如下。
步骤401,目标存储节点向控制服务器发送第一消息,所述第一消息通知所述控制服务器所述第一待迁移分区中的数据迁移完成。
步骤402,控制服务器更新第一分区视图,将待迁移分区从第一分区视图中移除,生成分区视图3,分区视图3指代上文的第二分区视图,其中,分区视图3中存储有除了所述待迁移分区之外的分区和各个存储节点之间的第三映射关系,以及各个新增分区标识和除了所述第一待迁移分区的标识之外的待迁移分区标识之间的第四映射关系。
步骤403,控制服务器向客户端、目标存储节点、源存储节点和其余五个存储节点推送分区视图3。
之所以分布式存储系统进行上述更新分区视图的过程,是为了保证客户端与存储节点网络总是在同一个分区视图下进行数据访问,因此可以客户端保证读写操作各个分区,不会出现数据不一致问题。本申请实施例提供的数据存储过程,包括如下步骤:
步骤一,客户端接收控制服务器推送的分区视图1;
步骤二,所述客户端根据所述分区视图1,确定与数据存储请求对应的所述分布式存储系统中的各个存储节点的第一目标分区集合;
步骤三,所述客户端向所述第一目标分区集合对应的各个存储节点发送数据存储请求。
因为客户端向存储节点网络发送读写请求是实时进行的,所以有可能在分区扩展过程中,也就是目标存储节点迁移待迁移分区的数据时,客户端向目标存储节点和源存储节点发送读写请求。这时读写数据的过程会根据客户端当前的分区视图是否更新有所不同。
情况一
具体地,在步骤304中,除了目标存储节点接收到所述控制服务器发送的分区视图2,控制服务器还向客户端240和其它存储节点发送了分区视图2,这时若客户端未成功接收到第一分区视图,则仍然会按照之前存储的分区视图1访问存储节点网络中存储节点。结合图5所示的分布式存储系统和图8,本发明实施例提供的数据存储过程包括如下步骤。
步骤501,客户端根据自身存储的分区视图1,向与数据存储请求对应的源存储节点和其它分区备所在的五个存储节点发送读写请求,在该读写请求中会携带客户端的分区视图1的标识,例如版本号。
步骤502,源存储节点收到客户端的读写请求后,比较自身的分区视图和客户端读写请求中的分区视图1版本号是否一致。
步骤503,因为在步骤306中,所述目标存储节点向所述源存储节点发送第一请求消息时,将自身的分区视图2发送至源存储节点。所以源存储节点比较得出客户端的分区视图版本1比自身的分区视图2版本低,所以向客户端发送第一消息,第一消息用于通知客户端更新分区视图。
步骤504,客户端收到第一消息后,请求从控制服务器获取分区视图2。
步骤505,控制服务器根据请求,向客户端发送分区视图2。
因为分区视图2中包括正在扩展扩容分区主,所以客户端根据分区视图2重新向包括扩容分区主的存储节点网络中的各个存储节点发送读写请求。存储节点收到客户端重新发送的读写请求,分析自身是否已完成相应的读写操作,比如写操作,若该存储节点确定分区已写完,则不再重新写入,否则继续写入。
情况二
若客户端成功接收到第一分区视图,则会按照第一分区视图访问存储节点网络中存储节点。结合图5所示的分布式存储系统和图9,本发明实施例提供的数据存储过程包括如下步骤。
步骤601,因为目标存储节点将待迁移分区上的数据迁移完成后,目标存储节点会向控制服务器发送第一消息,所述第一消息通知所述控制服务器所述第一待迁移分区中的数据迁移完成,控制服务器会更新生成分区视图3(指代上文的第二分区视图),并向客户端和各个存储节点推送分区视图3。在这种情况下,客户端实时写数据时,假设分区主被踢盘,客户端会根据最新接收的分区视图3,客户端向除了分区主的各个分区发送读写请求,在该读写请求中会携带客户端的分区视图信息3,例如版本号。
步骤602,存储节点2至存储节点7收到客户端的读写请求后,比较自身的分区视图和分区视图3是否版本信息一致。
步骤603,若比较得出客户端的分区视图一致,则执行读写操作。
需要说明的是,上述分区扩展的过程适用于硬盘临时故障后重启,需要追赶故障期间数据块的数据,也适用于盘永久故障后触发踢盘,数据块同样需要进行数据迁移。
综上所述,本申请实施例一方面提供的分区扩容方法相较于传统的扩容方法,本申请实施例是一种DHT和客户端路由存储相结合的扩容方法,综合DHT与客户端路由的优点,可以在读写数据时只进行一轮读写,并保证扩容时数据的一致性。也就是说,目标存储节点向控制服务器发送数据同步状态报告,然后控制服务器收到数据同步状态报告后开始更新分区视图,并将更新后的分区视图发送至目标存储节点,因为第一分区视图包括分布式存储系统中的各个存储节点和各个分区的映射关系;所以目标存储节点可以根据所述第一分区视图,从所述数据迁移任务对应的源存储节点中获取元数据,并对比自身与所述元数据之间的差异,确定出差异数据;最终所述目标存储节点获取差异数据,并将差异数据写入所述新增加的分区中。另一方面,客户端基于这种DHT和客户端路由存储相结合的分布式存储系统,可以在始终同一分区视图下对分区进行读写,保证了读写数据的一致性。
针对上述分区扩展方法流程,本申请提供一种分区扩展装置,该装置的具体执行内容可参照上述方法实施,图10为本申请提供的一种分区扩展装置的结构示意图,该装置一般是分布式存储系统中的目标存储节点,所述业务生成装置包括:接收单元701、处理单元702,发送单元703。
具体来说,该装置在执行迁移任务时,首先接收单元701接收控制服务器发送的第一分区视图,因为所述第一分区视图包括分布式存储系统中的各个存储节点标识和各个分区标识之间的第一映射关系,以及与各个新增分区标识和待迁移分区标识之间的第二映射关系,对于任意一对新增分区标识和待迁移分区标识之间的第二映射关系用于指示待迁移分区标识对应的分区中存储的数据能够迁移到新增分区标识对应的分区中,所以处理单元902根据所述第二映射关系,确定所述目标存储节点上的第一新增分区对应的第一待迁移分区;并根据所述第一映射关系,确定所述第一待迁移分区所在的源存储节点,最后从所述源存储节点上获取所述第一待迁移分区中存储的数据,并将获取的数据写入所述目标存储节点上的第一新增分区中。
在一种可能的设计中,处理器702从所述源存储节点上获取所述第一待迁移分区中存储的数据之前,发送单元703还用于向所述源存储节点发送第一请求消息,因为第一请求消息用于请求获取所述第一待迁移分区中存储的数据对应的数据标识,所以接收单元901可以接收所述源存储节点发送的所述第一待迁移分区中存储的数据对应的数据标识,并对比所述数据标识与所述目标存储节点上的第一新增分区已存储的数据对应的数据标识之间的差异,根据对比结果,确定出所述第一待迁移分区中需要迁移出的数据,然后从所述源存储节点上获取所述第一待迁移分区中存储的所述需要迁移出的数据。
另一方面,在迁移任务完成之后,发送单元703向所述控制服务器发送第一消息,因为所述第一消息通知所述控制服务器所述第一待迁移分区中的数据迁移完成,所以接收单元901可以接收所述控制服务器推送的第二分区视图;其中,所述第二分区视图包括分布式存储系统中的各个存储节点标识和除了所述第一待迁移分区的标识之外的各个分区标识之间的第三映射关系,以及各个新增分区标识和除了所述第一待迁移分区的标识之外的待迁移分区标识之间的第四映射关系,当客户端和分布式存储系统的各个存储节点接收到第二分区视图后,按照第二分区视图执行数据存储动作。
图11为本申请提供的一种分区扩展装置的结构示意图,该装置一般是分布式存储系统中的源存储节点,所述业务生成装置包括:接收单元801、处理单元802,发送单元803;
具体来说,该装置在执行迁移任务时,首先接收单元801接收目标存储节点发送的数据迁移请求,因为数据迁移请求用于请求将所述源存储节点上所述第一待迁移分区中存储的数据迁移至所述目标存储节点的第一新增分区中,并且发送单元803向所述目标存储节点发送所述第一待迁移分区中存储的数据,以使所述目标存储节点将接收的数据写入所述目标存储节点上的第一新增分区中。
在一种可能的设计中,所述迁移请求还包括第一分区视图,所述第一分区视图包括分布式存储系统中的各个存储节点标识和各个分区标识之间的第一映射关系,以及与各个新增分区标识和待迁移分区标识之间的第二映射关系,对于任意一对新增分区标识和待迁移分区标识之间的第二映射关系用于指示待迁移分区标识对应的分区中存储的数据能够迁移到新增分区标识对应的分区中,所以源存储节点将自身的分区视图更新为所述第一分区视图,所述源存储节点将自身的分区视图替换为所述第一分区视图;然后接收单元801接收客户端的读写请求,因为所述读写请求中包括所述客户端当前存储的分区视图标识,所以处理单元802确定所述客户端存储的分区视图标识与自身存储的第一分区视图的标识是否一致,若不一致,则发送单元803用于向所述客户端发送第二消息,所述第二消息指示所述客户端更新分区视图,当客户端收到第一消息,及时更新分区视图。
图12为本申请提供的一种分区扩展装置的结构示意图,该装置一般是分布式存储系统中的控制服务器,所述业务生成装置包括:接收单元901、处理单元902,发送单元903;
具体来说,该装置在执行迁移任务时,首先接收单元901接收目标节点发送的数据同步状态报告,述数据同步状态报告是在目标存储节点将所述源存储节点上所述第一待迁移分区中存储的数据迁移至所述目标存储节点的第一新增分区时生成的,所述数据同步状态报告指示所述目标存储节点中的第一新增分区的状态变更为同步数据状态,所以处理单元902根据所述数据同步状态报告,更新已有分区视图,生成更新后的第一分区视图,并且发送单元903向客户端和分布式存储系统的各个物理节点推送更新后的第一分区视图,当客户端和分布式存储系统的各个物理节点接收到第一分区视图后,按照第一分区视图执行数据存储动作。
在一种可能的设计中,在接收目标节点发送的数据同步状态报告之前,接收单元901还用于接收所述目标存储节点的扩容请求,然后发送单元903根据所述扩容请求向所述目标存储节点发送第三分区视图,因为所述第三分区视图用于触发所述第一新增分区的状态变更为同步数据状态。
另一方面,在迁移任务完成之后,接收单元901接收所述目标节点发送的第一消息,第一消息通知所述控制服务器所述第一待迁移分区中的数据迁移完成,然后处理单元902还用于根据所述第一消息更新分区视图,生成第二分区视图,其中,所述第二分区视图包括分布式存储系统中的各个存储节点标识和除了所述第一待迁移分区的标识之外的各个分区标识之间的第三映射关系,以及各个新增分区标识和除了所述第一待迁移分区的标识之外的待迁移分区标识之间的第四映射关系,并且发送单元903向所述客户端和分布式存储系统的各个物理节点推送更新后的第二分区视图,当客户端和分布式存储系统的各个物理节点接收到第二分区视图后,按照第二分区视图执行数据存储动作。
针对上述数据存储方法流程,本申请提供一种数据存储装置,该装置的具体执行内容可参照上述方法实施,图13为本申请提供的一种数据存储装置的结构示意图,该装置一般是分布式存储系统中的客户端,所述业务生成装置包括:接收单元1001、处理单元1002、发送单元1003;
具体来说,接收单元1001用于接收控制服务器推送的第三分区视图,因为所述第三分区视图包括分布式存储系统中的各个存储节点标识和各个分区标识之间的第一映射关系,以及与各个新增分区标识和待迁移分区标识之间的第二映射关系,对于任意一对新增分区标识和待迁移分区标识之间的第二映射关系用于指示待迁移分区标识对应的分区中存储的数据能够迁移到新增分区标识对应的分区中;,然后处理单元1002根据接收的分区视图,确定与数据存储请求对应的所述分布式存储系统中的各个存储节点的第一目标分区集合,然后发送单元1003用于向所述第一目标分区集合对应的各个存储节点发送数据存储请求。
这样,通过客户端路由方式,客户端可以直接向各个存储节点写数据,只需要一次轮回,读写数据效率较高。
在一种可能的设计中,当客户端在分区扩展过程中读写数据时,接收单元1001会接收到所述源存储节点发送的第二消息,所述第二消息指示所述客户端更新分区视图,所以处理单元1002从所述控制服务器获取第一分区视图,根据所述第一分区视图,因为所述第一分区视图是所述源存储节点中的第一待迁移分区中存储的数据开始迁移到目标存储节点的第一新增分区时生成的,所述第一分区视图包括所述第一映射关系和所述第二映射关系,且所述目标存储节点中的第一新增分区的状态变更为同步数据状态;处理单元1002根据第一分区视图,确定与数据存储请求对应的所述分布式存储系统中的各个存储节点的第二目标分区集合,然后发送单元1003重新向所述第二目标分区集合对应的存储节点发送所述数据存储请求。
当客户端在分区扩展完成时读写数据时,接收单元1001会接收所述控制服务器推送的第二分区视图,因为所述第二分区视图包括分布式存储系统中的各个存储节点标识和除了所述第一待迁移分区的标识之外的各个分区标识之间的第三映射关系,以及各个新增分区标识和除了所述第一待迁移分区的标识之外的待迁移分区标识之间的第四映射关系,所以处理单元1002根据所述第二分区视图,确定与数据存储请求对应的所述分布式存储系统中除了所述第一待迁移分区之外第三目标分区集合;然后发送单元1003向所述第三目标分区集合对应的各个存储节点发送数据存储请求。
需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。在本申请的实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
图14为本申请提供的一种网络设备的结构示意图,该网络设备可以是分布式存储系统的客户端、存储节点,亦或是控制服务器,所述网络设备包括:通信接口1101、处理器1102、存储器1103和总线系统1104;
其中,存储器1103,用于存放程序。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。存储器1103可能为随机存取存储器(英文:random-access memory,RAM),也可能为非易失性存储器(英文:non-volatile memory,NVM),例如至少一个磁盘存储器。图中仅示出了一个存储器,当然,存储器也可以根据需要,设置为多个。存储器1103也可以是处理器1102中的存储器。
存储器1103存储了如下的元素,可执行模块或者数据结构,或者它们的子集,或者它们的扩展集:
操作指令:包括各种操作指令,用于实现各种操作。
操作系统:包括各种系统程序,用于实现各种基础业务以及处理基于硬件的任务。
处理器1102控制网络设备1100的操作,处理器1102还可以称为中央处理单元(英文:central processing unit,CPU)。具体的应用中,网路设备1100的各个组件通过总线系统1104耦合在一起,其中总线系统1104除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线系统1104。为便于表示,图14中仅是示意性画出。
上述本申请实施例揭示的方法可以应用于处理器1102中,或者由处理器1102实现。处理器1102可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器1102中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器1102可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器1103,处理器1102读取存储器1103中的信息,结合其硬件执行以上方法步骤。
在一个可选的实施方式中,假设该网络设备用于实现如图6所示的分区扩展方法,且网络设备为图5分布式存储系统中的目标存储节点,所述处理器1102通过通信接口接收控制服务器发送的第一分区视图,所述第一分区视图包括分布式存储系统中的各个存储节点标识和各个分区标识之间的第一映射关系,以及与各个新增分区标识和待迁移分区标识之间的第二映射关系,对于任意一对新增分区标识和待迁移分区标识之间的第二映射关系用于指示待迁移分区标识对应的分区中存储的数据能够迁移到新增分区标识对应的分区中,所述处理器1102根据第一分区视图,根据所述第二映射关系,确定所述目标存储节点上的第一新增分区对应的第一待迁移分区;根据所述第一映射关系,确定所述第一待迁移分区所在的源存储节点;从所述源存储节点上获取所述第一待迁移分区中存储的数据,并将获取的数据写入所述目标存储节点上的第一新增分区中。
若上述网络设备为图5分布式存储系统中的源存储节点,执行动作与上述源存储节点的执行方法过程一致,在此不再赘述。一样地,若上述网络设备为图5分布式存储系统中的控制服务器,执行动作与上述控制服务器的执行方法过程一致,在此不再赘述。
在一个可选的实施方式中,假设该网络设备用于实现如图8所示的数据存储方法,且网络设备为图5分布式存储系统中的客户端,所述处理器1102通过通信接口接收控制服务器推送的分区视图,因为所述分区视图包括分布式存储系统中的各个存储节点标识和各个分区标识之间的第一映射关系,以及与各个新增分区标识和待迁移分区标识之间的第二映射关系,对于任意一对新增分区标识和待迁移分区标识之间的第二映射关系用于指示待迁移分区标识对应的分区中存储的数据能够迁移到新增分区标识对应的分区中,所以根据所述分区视图,确定与数据存储请求对应的所述分布式存储系统中的各个存储节点的第一目标分区集合;然后通过通信接口向所述第一目标分区集合对应的各个存储节点发送数据存储请求。具体实现可以参照上述方法实施例中的具体描述,这里不再详细赘述。这样,通过客户端路由方式,客户端可以直接向各个存储节点写数据,只需要一次轮回,读写数据效率较高。
本申请实施例还提供了一种计算机可读存储介质,存储为执行上述处理器所需执行的计算机软件指令,其包含用于执行上述处理器所需执行的程序。
本申请实施例还提供了一种计算机程序产品,当所述计算机程序产品被计算机执行时,使所述计算机执如上述业务生成方法。
本申请实施例提供的是基于DHT和客户端路由的分布式存储系统,该分布式存储系统综合了DHT与客户端路由的优点,可以在读写数据时只进行一轮读写,提高了数据读写的效率。并且在分区扩容时,控制服务器会及时向客户端和各个存储节点下发分区视图,保证在同一分区视图模式下进行数据读写,另外,在分区扩展过程中,目标存储节点接收控制服务器发送的第一分区视图之后,利用第一分区视图的第一映射关系和第二映射关系,目标存储节点从待迁移分区对应的源存储节点中获取数据,并写入新增分区中,使得原有分区上的数据准确地迁移至新增分区中。
本领域内的技术人员应明白,本发明实施例可提供为方法、系统、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。