存储系统中数据分发方法、装置、计算节点及存储系统的制作方法

文档序号:9754721阅读:474来源:国知局
存储系统中数据分发方法、装置、计算节点及存储系统的制作方法
【技术领域】
[0001]本发明涉及计算机技术领域,特别涉及一种数据分发方法、装置、计算节点及存储系统。
【背景技术】
[0002]在分布式存储系统中,一般是把节点组成一个DHT(Distributed Hash Table,分布式哈希表)环,每一个节点负责管理环上的一段区域(partit1n),每个I/0( Input/Output,输入输出)请求存储在其哈希值所在区域对应的节点上。为了保证数据的一致性,在分布式存储系统中常用primary-secondary算法存储数据。primary-secondary算法是一种主从式算法,一般用于存储多副本数据。该算法首先由外部节点将I/O请求下发到主节点,然后由主节点将I/0请求同步到其余节点上,保证主副本之间的一致性。此外,分布式系统中每个节点都包含了控制功能和存储功能。其中,控制功能主要负责I/O请求分发、路由查询、视图管理、primary-secondary算法实现等,而存储功能主要负责K/V(Key/Value,键值)管理和数据读写等。
[0003]现有的分布式存储系统中,节点的控制功能和存储功能是合一部署的。参见图1,图1描述了Linux PB级的分布式文件系统CEPH的节点部署和1/0流程示意图。在图1中,将存储功能和控制功能合一部署在一个节点上,所有合一部署的节点构成一个DHT环。当外部节点发起I/o请求时,首先将该I/O请求下发给主节点,然后再由主节点将该I/O请求同步到其余节点上。
[0004]在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
[0005 ]由于节点的存储功能和控制功能合一,所以导致控制功能强依赖存储功能,使得软硬件之间无法做到解耦,控制性能和存储性能相互制约、相互影响,当存储功能出现故障时将严重影响到控制功能,当控制功能出现故障时同样将严重影响到存储功能,致使整个分布式系统的性能受损。

【发明内容】

[0006]为了解决现有技术的问题,本发明实施例提供了一种存储系统中数据分发方法、装置、计算节点及存储系统。所述技术方案如下:
[0007]第一方面,提供了一种存储系统中数据分发方法,所述存储系统包括多个计算节点和多个存储节点,所述方法包括:
[0008]目标计算节点接收外部节点发送的1/0请求;其中,所述目标计算节点由所述外部节点根据第一算法从所述多个计算节点中确定;
[0009]所述目标计算节点根据第二算法从所述多个存储节点中确定目标存储节点;
[0010]所述目标计算节点向所述目标存储节点发送所述1/0请求;所述目标存储节点包括主存储节点和副存储节点。
[0011]如图2所示,本发明实施例提供的存储系统中将节点的计算功能和存储功能进行了分离部署。存储系统中的全部计算节点组成了一个DHT环,在本文中将该DHT环统一称之为第一 DHT环。全部的存储节点组成了另一个DHT环,在本文中将该DHT环统一称之为第二DHT环。需要说明的是,第一算法和第二算法均归属于哈希算法,二者基于相类似的构思。
[0012]当外部节点检测到用户生成一个I/O请求后,首先通过哈希算法在第一DHT环中确定处理该I/O请求的目标计算节点。之后,外部节点将该I/O请求发送至该目标计算节点,由该目标计算节点再通过哈希算法确定存储该I/O请求的主存储节点和副存储节点,并将该I/O请求分发给主存储节点和副存储节点进行存储。这样便实现了存储和控制分离部署,并可以根据需要对计算性能和存储性能进行灵活配置。
[0013]在第一方面的第一种可能的实现方式中,所述目标控制节点向所述目标存储节点发送所述I/o请求之后,所述方法还包括:
[0014]若所述目标计算节点接收到所述主存储节点返回的第一存储成功消息,且存储所述I/O请求的副存储节点数量达到阈值,则生成所述I/O请求的操作日志,并向所述外部节点返回第二存储成功消息。
[0015]由于primary-secondary算法要求主存储节点必须返回成功存储消息,整个I/O操作才算成功。因此,主存储节点在成功存储该I/O请求后,必须向目标计算节点返回成功存储消息。而多副本要求I/O请求的副本数足够,因此本发明实施例还限定了存储I/O请求的副存储节点的数量。
[0016]结合第一方面,在第一方面的第二种可能的实现方式中,所述方法还包括:
[0017]当所述目标计算节点检测到所述存储系统中计算节点的数量因故障减少时,确定所述多个计算节点中出现故障计算节点,获取所述多个计算节点的控制分区的数量、所述目标计算节点中每一个控制分区的标识和所述故障计算节点管理的数据分区的标识;
[0018]若所述故障计算节点管理的数据分区的标识与所述控制分区的数量之间的求模结果与所述目标计算节点中一个控制分区的标识相同,则所述目标计算节点接管所述故障计算节点管理的数据分区;
[0019]其中,一个计算节点包括至少一个控制分区,一个存储节点包括至少一个数据分区,一个计算节点可对多个数据分区进行管理。
[0020]多个计算节点的控制分区的数量,即指代第一DHT环包括的控制分区的数量,以control_parti t1n_num进行表示,故障计算节点管理的数据分区的标识,以data_part it 1n_id进行表示,则对于故障计算节点管理的任一数据分区来说,若hash (data_partit1n_id) %control_partit1n_num的求模取余结果与目标计算节点中一个控制分区的标识相同,则目标计算节点接管任一数据分区。
[0021 ]对于第一 DHT环包括的控制分区来说,可以统一进行标识。比如,按照数字大小进行标识,从数字I进行开始,直至标识到100或1000等等。分为控制分区1、控制分区2……控制分区N等。
[0022]结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述方法还包括:
[0023]所述目标计算节点为管理的每一个数据分区分别分配序列号;
[0024]所述目标计算节点对目标数据分区的序列号执行加一;其中,所述目标数据分区为所述目标计算节点管理的数据分区中接收到修改类I/o请求的分区;
[0025]所述目标计算节点接管所述故障计算节点管理的数据分区,包括:
[0026]所述目标计算节点读取所述故障计算节点管理的数据分区在所述故障计算节点发生故障时的序列号。
[0027]需要说明的是,计算节点还会为每一个存储节点的数据分区分配一个序列号seqID,每一个在数据分区上的修改类I/O操作,均会触发一个seqID的递增操作,并且该seqID的数值会被存储在硬盘等存储介质中,这样即便发生断电等异常情况,每一个数据分区的seqID数值也不会丢失。也即,计算接点在接收到用户的I/O请求后,还会判断该I/O请求是否为修改类I/O请求;若该I/O请求为修改类I/O请求,则对该I/O请求所在数据分区的序列号执行加一操作,即seqID加I。
[0028]当计算节点发生故障后,根据DHT原理,它所管理的数据分区将会被迀移到其他的计算节点。对于故障计算节点的任一数据分区而言,其他的计算节点仅需读取到任一数据分区的seqID,便完成迀移服务。
[0029]结合第一方面,在第一方面的第四种可能的实现方式中,所述方法还包括:
[0030]在所述多个目标存储节点中任一存储节点发生故障且恢复后,所述目标计算节点计算故障存储节点中指定数据分区的序列号与正常存储节点中同一数据分区的当前序列号之差;其中,所述正常存储节点为在所述故障存储节点发生故障时,对所述指定数据分区进行管理的存储节点;
[0031]若所述指定数据分区的序列号与当前序列号之差不大于所述目标计算节点生成的I/o请求的操作日志数量,则所述目标计算节点执行所述正常存储节点上同一数据分区上的I/o请求,并更新所述指定数据分区的序列号;
[0032]若所述指定数据分区的序列号与当前序列号之差大于所述I/O请求的操作日志数量,则所述目标计算节点将所述正常存储节点的同一数据分区存储的I/O请求迀移至所述故障存储节点;
[0033]其中,序列号用于统计分发到数据分区的修改类I/O请求的数量,一个数据分区在接收到一个修改类I/o请求后,所述数据分区的序列号加一。
[0034]对于第一种情况,该步骤对应catchup操作。由于指定数据分区的序列号与当前序列号之差不大于生成的I/O请求的操作日志数量,则证明在副本存储节点上存储的I/O请求的操作日志量足够,则从副本存储节点上把这部分I/O请求取出在故障存储节点重新回放一次。
[0035]对于第二种情况,该步骤对应rebalance操作。由于指定数据分区的序列号与当前序列号之差大于生成的I/O请求的操作日志数量,则证明副本存储节点上存储的I/O请求的操作日志量不够,直接把副本存储节点上的所有数据同步到故障存储节点之上。
[0036]第二方面,提供了一种存储系统中数据分发装置,所述存储系统包括多个计算节点和多个存储节点,所述装置包括:
[0037 ]接收模块,用于接收外部节点发送的输入输出I / O请求,所述I / O请求由所述外部节点在根据第一算法从所述多个计算节点中确定处理所述I/O请求的目标计算节点后发送;
[0038]存储节点确定模块,用于根据第二算法从所述多个存储节点中确定目标存储节占.V,
[0039]发送模块,用于向所述目标存储节点发送所述I/O请求;所述目标存储节点包括主存储节点和副存储节点。
[0040]结合第二方面,在第二方面的第一种可能的实现方式中,所述装置还包括:
[0041]生成模块,用于当所述目标计算节点接收到所述主存储节点返回的第一存储成功消息,且存储所述I/O请求的副存储节点数量达到阈值时,生成所述I/O请求的操作日志;
[0042]所述发送模块,还用于向所述外部节点返回第二存储成功消息。
[0043]结合第二方面,在第二方面的第二种可能的实
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1