一种集群下基于数据缓存的纠删码归档方法转让专利

申请号 : CN201510979326.8

文献号 : CN105610921B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄建忠曹强谢长生蔡颖代尔卫夏杰

申请人 : 华中科技大学

摘要 :

本发明公开了一种集群下基于数据缓存的纠删码归档方法,包括以下步骤:(1)根据用户访问请求,将所需数据分块从其所在生产节点读取到节点缓冲区,并将数据分块发送给访问节点,同时根据归档数据状态表将其转发给归档节点;(2)归档节点根据接收到的数据分块,更新每个数据节点的数据分块个数;判断归档节点是否接收到当前条带的全部数据分块,若是,则将当前条带进行归档;若否,则从生产集群读取冷数据块,将条带凑齐之后进行归档;本发明提供的这种纠删码归档方法,由于采用了用户访问缓存的数据分块,相比于普通纠删码归档方法,可大幅度减少归档节点从生产集群中读取数据分块的次数,可以在不影响用户访问的情况下进行纠删码归档操作,提高归档效率。

权利要求 :

1.一种集群下基于数据缓存的纠删码归档方法,其特征在于,所述纠删码归档方法具体包括以下步骤:(1)根据用户访问请求,将所需数据分块从生产节点读取到节点缓冲区,并将数据分块发送给访问节点,同时根据归档数据状态表将所述数据分块转发给归档节点;

所述根据归档数据状态表将数据分块转发给归档节点的方法为:判断所述数据分块是否已被转发到归档节点,若是,则将该数据分块转发到访问节点;

若否,则将该数据分块同时转发到访问节点和归档节点;

(2)归档节点根据接收到的数据分块,更新每个数据节点的数据分块个数;并判断归档节点是否接收到当前条带的全部数据分块,若是,则将当前条带进行归档;若否,则从生产集群读取冷数据块,将条带凑齐之后进行归档。

2.如权利要求1所述的纠删码归档方法,其特征在于,所述步骤(1)中根据用户访问请求将所需数据分块从生产节点读取到节点缓冲区的方法,包括如下子步骤:(1.1)访问节点从管理服务器获得所需的数据分块在生产集群中的地址;

(1.2)对所述数据分块在生成集群中的地址对应节点发出读请求;

(1.3)将数据分块从其所在生成集群中的生产节点读取到节点缓冲区。

3.如权利要求1或2所述的纠删码归档方法,其特征在于,所述步骤(2)具体包括如下子步骤:(2.1)归档节点接收数据分块,更新归档节点中包含的每个数据节点的数据分块个数;

(2.2)归档节点初始化当前条带,分析条带的节点组成,判断接收的数据块属于哪个数据节点,并初始化存储变量;所述条带的节点组成包括数据节点和校验节点;

(2.3)由归档节点判断是否接收到当前条带的全部数据分块,若是,进入步骤(2.7);若否,则进入步骤(2.4);

(2.4)在时长为T的时间间隔内,归档节点从用户缓存接收数据分块;

(2.5)判断当前条带的k个数据分块是否集齐,若是,进入步骤(2.7);若否,则进入步骤(2.6);其中,k值等于数据节点的个数;

(2.6)归档节点从生产集群中直接读取冷数据,以凑齐μ个条带,然后进入步骤(2.3);

其中,μ为归档节点在时间间隔T内所能归档的最大条带数;

(2.7)归档当前条带,并将条带号i的值加1,并更新归档数据状态表;

(2.8)根据归档数据状态表判断是否完成全部条带的归档,若否,则进入步骤(2.3);若是,则结束归档。

说明书 :

一种集群下基于数据缓存的纠删码归档方法

技术领域

[0001] 本发明属于计算机存储技术领域,更具体地,涉及一种集群下基于数据缓存的纠删码归档方法。

背景技术

[0002] 在如今的信息时代数据量急速增长,大规模存储集群得到了越来越广泛的应用。根据数据访问频度的高低,可以依次将存储集群中的数据分为热数据(Hot Data)、温数据(Warm Data)和冷数据(Cold Data)。随着系统运行时间的推移,热数据的访问频度会下降,变成温数据,最后成为冷数据,热数据通常按三副本或多副本方式存放在生产集群(Production Cluster)。一种提高生产集群系统利用率的方法是将访问频度低的副本数据迁移到纠删码归档集群(Archival Cluster),该归档集群采用RS码来组织存放其中的数据;纠删码归档(Erasure-coded Archival)是指将数据从副本存储迁移到纠删码存储的操作。
[0003] 现有纠删码归档和用户访问副本集群是两个相互独立的过程;现有纠删码归档包括(1)获取需要归档数据在生产集群中的数据位图;(2)从生产集群中读取副本数据;(3)将读取副本数据进行纠删码编码,生成校验分块;(4)将一份副本数据和相应校验分块写入纠删码归档集群;(5)对生产集群上剩余冷数据进行回收,删除生产集群中所有参与纠删码归档的数据副本。用户访问副本集群包括(1)获取所需数据分块在生产集群中的元数据信息;(2)对数据分块所在节点发出读请求;(3)该节点读取相应数据分块到节点缓冲区;(4)数据节点发送数据分块,并将数据分块转发到客户端。
[0004] 对于该纠删码归档,若数据归档的请求过量,则采用离线归档,数据访问与归档二者独立;但在当前大数据时代,几乎不存在专门的归档时间,需采用在线归档;对于在线归档,生产集群中的节点上始终保持有热数据和冷数据,采用上述纠删码归档方法存在如下问题:
[0005] (1)归档请求直接下发给生产集群,此时生产集群也在为用户提供访问服务;归档请求带来额外的外存访问、内存缓存的占用、网络资源的占用,导致用户请求的响应时间大大增加;
[0006] (2)对于归档任务,由于生产集群中的节点需要同时处理用户访问请求与数据归档请求,两者之间存在资源竞争;某个存储集群节点用户访问请求频度高的情况下,该节点的归档请求将迟迟得不到响应,造成归档节点无法及时得到数据分块,进而影响整个归档效率。

发明内容

[0007] 针对现有技术的以上缺陷或改进需求,本发明提供了一种集群下基于数据缓存的纠删码归档方法,其目的在于提高纠删码归档效率。
[0008] 为实现上述目的,按照本发明的一个方面,提供了一种集群下基于数据缓存的纠删码归档方法,具体包括以下步骤:
[0009] (1)根据用户访问请求,将所需数据分块从其所在生产节点读取到节点缓冲区,并将数据分块发送给访问节点,同时根据归档数据状态表将其转发给归档节点;
[0010] (2)归档节点根据接收到的数据分块,更新每个数据节点的数据分块个数;并判断归档节点是否接收到当前条带的全部数据分块,若是,则将当前条带进行归档;若否,则从生产集群读取冷数据块,将条带凑齐之后进行归档。
[0011] 上述纠删码归档方法,由于采用了用户访问缓存的数据分块,相比于普通纠删码归档,可大幅度减少归档节点从生产集群中读取数据分块的次数,从而可以在基本不影响用户访问的情况下进行归档操作,提高归档效 率;
[0012] 另一方面,将用户访问缓存的数据分块转发到归档节点,避免了用户访问和普通纠删码归档对生产节点中相同数据分块的重复读取请求,可有效地减少生产集群中网络传输的数据量,减轻整个网络的负载。
[0013] 优选地,上述步骤(1),具体包括如下子步骤:
[0014] (1.1)访问节点从管理服务器获得所需的数据分块在生产集群中的地址;
[0015] (1.2)对上述数据分块在生成集群中的地址对应节点发出读请求;
[0016] (1.3)将数据分块从其所在生成集群中的生产节点读取到节点缓冲区;
[0017] (1.4)根据归档数据状态表,判断该数据分块是否已被转发到归档节点,若是,则将该数据分块转发到访问节点;若否,则将该数据分块同时转发到访问节点和归档节点;该步骤直接利用集群中的交换机将用户访问的数据转发给归档节点。
[0018] 优选地,上述步骤(2),具体包括如下子步骤:
[0019] (2.1)归档节点接收数据分块(热数据),更新归档节点中包含的每个数据节点的数据分块个数;
[0020] (2.2)归档节点初始化当前条带,分析条带的节点组成,判断接收的数据块属于哪个数据节点,并初始化存储变量;本步骤中,节点包括数据节点和校验节点;
[0021] (2.3)由归档节点判断是否接收到当前条带的全部数据分块,若是,进入步骤(2.7);若否,则进入步骤(2.4);
[0022] (2.4)在时长为T的时间间隔内,归档节点从用户缓存接收数据分块;
[0023] (2.5)判断当前条带的k个数据分块是否集齐,若是,进入步骤(2.7);若否,则进入步骤(2.6);其中,k值等于数据节点的个数;
[0024] (2.6)归档节点从生产集群中直接读取冷数据,以凑齐μ个条带,然后进入步骤(2.3);
[0025] 其中,从数据节点j读取的数据分块数为Numj,Numj=max{(μ-aj-λ(j)),0},μ为归档节点在时间T内所能归档的最大条带数,aj为归档节点中包含数据节点j的数据分块个数,λ(j)表示在下一个时间间隔T内归档节点将要从数据节点j接收到的数据分块个数;
[0026] (2.7)归档当前条带,并将条带号i的值加1,并更新归档数据状态表;
[0027] (2.8)根据归档数据状态表判断是否完成全部条带的归档,若否,则进入步骤(2.3);若是,则结束归档;
[0028] 上述过程,归档节点在不影响用户访问的同时,利用缓存数据接收用户分块,可起到提高归档效率的作用。
[0029] 总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
[0030] (1)本发明提供的这种集群下基于数据缓存的纠删码归档方法,在不影响用户访问的情况下,利用用户访问的缓存数据来提高归档效率:通过将用户访问的缓存数据分块直接发送给归档节点,相比于普通纠删码归档方法,本发明提供的方法能减少磁盘读取的次数,从而加速生产节点外存数据分块读取、生产节点内存空间占用、以及生产节点网卡发送归档数据分块这三个环节,提高归档效率;只有在一个条带未全部接收到的情况下,才会直接读取生产集群数据分块,而读取数据分块的次数和块数相比于用户访问的数据量和频度低很多,基本不影响用户访问;
[0031] (2)本发明提供的这种集群下基于数据缓存的纠删码归档方法,降低了生产集群中网络传输的数据量;在现有的普通纠删码归档中,需要将数据分块从节点缓冲区发送给集群中的交换机,再转发给归档节点;而在本发明的提供的纠删码归档方法中,可以直接利用集群中的交换机将用户访问的数据转发给归档节点,避免了普通纠删码归档方法中将数据从节点缓冲区发送到集群网络中的交换机,从而可以有效地减少生产集群中网络传 输的数据量,减轻整个网络的负载。

附图说明

[0032] 图1是本发明集群下基于数据缓存的纠删码归档方法的流程图;
[0033] 图2是实施例提供的集群下基于数据缓存的纠删码归档方法的示意图;
[0034] 图3是用户访问和普通纠删码归档的示意图;
[0035] 图4是基于数据缓存的用户访问和数据归档的示意图。

具体实施方式

[0036] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0037] 为便于理解,将在本发明中涉及的术语解释说明如下:
[0038] 生产集群:指在归档过程中提供归档数据的同时,仍然需要给上层应用提供数据访问服务的节点总称。
[0039] 纠删码归档集群:归档完成后存储完整数据条带的集群,可以由生产集群本身的空闲空间替代。
[0040] 管理服务器:管理整体集群的元数据信息,包括集群中数据分块及其副本的节点位置信息。
[0041] 编码节点:一个条带的数据归档过程中,实施编码计算操作的节点。
[0042] 节点数据分块以及条带:在归档的编码过程中,读取数据的单元就是数据分块。在存储集群中,一个条带就是由在不同节点上相同偏移地址的数据分块单元组成,可以独立地恢复出失效数据的信息集合。
[0043] 数据位图:保存在存储集群的管理服务器中,表示数据分块和数据节点之间的对应关系。
[0044] NUMj:归档过程中,当前归档条带所需的数据分块没有集齐时,归档 节点直接向生产集群中数据节点j读取NUMj=max{(μ-aj-λ(j)),0}个数据分块,μ为归档节点在时间T内所能归档的条带数,aj为归档节点中包含数据节点j的数据分块个数,λ(j)表示在下一段时间T内归档节点从节点j接收到的数据分块个数。
[0045] 归档数据状态表:管理服务器所维护的一个全局表格,记录生产集群中数据分块是否已被归档,在实施例中,用‘0’和‘1’分别表示该数据分块‘未被归档’和‘已被归档’。
[0046] 本发明提供了一种集群下基于数据缓存的纠删码归档方法,主要利用用户访问的缓存数据来加速纠删码归档过程,其具体流程如图1所示,包括如下步骤:
[0047] (1)根据用户访问请求,将所需数据分块从其所在生产节点读取到节点缓冲区,再将数据分块发送给访问节点,同时根据归档数据状态表将其转发给归档节点;本步骤具体包括以下子步骤:
[0048] (1.1)访问节点根据用户请求,查询管理服务器,得到用户请求的数据分块在生产集群中的节点位置;
[0049] (1.2)根据步骤(1.1)得到的生产集群节点位置,生产集群的节点读取数据分块到节点缓冲区;
[0050] (1.3)生产节点查询管理服务器,得到归档数据状态表;根据归档数据状态表,判断用户请求数据分块的归档状态;
[0051] (1.4)生产节点发送缓冲区中数据分块;
[0052] (1.5)交换机将数据分块发送给访问节点,以相应用户请求,同时,将未被归档的数据分块转发到归档节点,以相应归档请求;
[0053] (1.6)判断用户请求是否全部处理完成,若为是,则用户访问结束;若为否,则转到步骤(1.1),继续执行下一个用户请求;
[0054] (2)归档节点根据接收到的用户访问数据,更新每个数据节点的数据 分块个数,归档节点若接收到当前条带的全部数据分块,则直接进行归档;若通过用户访问数据无法接收到当前条带全部数据分块,则从生产集群读取冷数据,然后进行归档;本步骤具体包括以下子步骤:
[0055] (2.1)归档节点初始化归档条带,当前归档条带编号为i,i=0;初始化归档节点中包含数据节点j的数据分块个数aj的集合a为[0,0,0,0];
[0056] (2.2)归档节点接收用户访问数据(热数据),并跟新集合a;
[0057] (2.3)归档节点判断是否接收到归档条带i的全部数据分块,若是,进入步骤(2.7);若否,则进入步骤(2.4);
[0058] (2.4)归档节点等待时间间隔T;在时长T的时间间隔内,归档节点不断从用户缓存接收数据分块;本实施例中,T为1秒;
[0059] (2.5)归档节点跟新集合a,再次判断是否接收到归档条带i的全部数据分块,若是,进入步骤(2.7);若否,则进入步骤(2.6);
[0060] (2.6)归档节点从生产集群中直接读取冷数据,从数据节点j读取的数据分块数为Numj,Numj=max{(μ-aj-λ(j)),0},以凑齐μ个条带,然后进入步骤(2.3);
[0061] (2.7)归档当前条带,并将条带号i值加1;
[0062] (2.8)更新管理服务器中的归档数据状态表;
[0063] (2.9)判断是否完成生产集群中全部条带的归档,若否,则进入步骤(2.3);若是,则结束归档。
[0064] 以下结合具体实施例阐述本发明提供的基于数据缓存的纠删码归档方法;实例中采用的是(k+r,k)RS编码方式;其中,k指原始数据分块的个数,r表示编码生成的校验分块个数,k个数据分块和r个校验分块中任意k个均可以解码出k个原始数据分块。
[0065] 如图2所示,是实施例中采用RS(6,4)编码集群下基于数据缓存的纠删码归档方法的示例图;其中,纠删码归档集群中总共有六个节点,其中 四个是数据节点,两个是检验节点,采用(6,4)RS的编码方式来实现并保障数据完整性,节点编号为{1,2,3,4,5,6};
[0066] 其中,来自于生产集群中的任一数据分块的逻辑地址均对应于纠删码集群中四个数据节点中的其中一个,归档节点在时间T内归档条带数μ=3。
[0067] 本实施例提供的集群下基于数据缓存的纠删码归档方法,具体如下:
[0068] (1)实施例中,第一次用户访问的数据分块个数集合是[2,4,5,3],即,从数据节点1、数据节点2、数据节点3和数据节点4分别获得2个、4个、5个和3个数据分块;
[0069] 访问节点首先查询管理服务器,获得该数据分块集合的全部地址信息;同时,归档节点初始化条带i,;此时,归档节点中各数据节点的数据分块个数为[0,0,0,0];其中,i的初始值为0;
[0070] (2)生产集群读取数据分块集合到缓冲区;第一次访问时,交换机将数据分块集合同时转发到访问节点和归档节点;
[0071] (3)访问节点获得数据分块集合,响应用户请求;同时,归档节点获得数据分块集合,更新各数据节点的数据分块个数为[2,4,5,3];
[0072] 上述步骤(1)(2)(3)对应图2中①所指示的流程;
[0073] (4)归档节点进行条带i编码计算,将4个数据分块和2个校验分块发送到纠删码归档集群,i增加1,此时i为1;归档节点清除已归档条带0的数据分块;
[0074] (5)若归档节点收到条带i的所有数据分块,则进行归档;并将4个数据分块和2个校验分块发送到纠删码归档集群,i增加1,此时i为2;
[0075] 删除归档节点中已经归档的条带1的数据分块;归档节点中各节点数据分块个数为[0,2,3,1];
[0076] 上述步骤(4)(5)对应图2中②所指示的流程;
[0077] (6)若归档节点中未收到条带i的全部数据分块,则进入等待状态;同时,用户进行第二次访问,数据分块集合为[0,3,3,4],假定数据分块集 合中没有与第一次访问重复的数据分块,则交换机将数据分块集合同时转发到访问节点和归档节点;
[0078] (7)访问节点相应用户第二次访问;同时,归档节点接收数据分块集合[0,3,3,4],更新节点数据分块个数为[0,5,6,5];
[0079] 上述步骤(6)(7)对应图2中③所指示的流程;
[0080] (8)归档节点等待时间段T后,若仍未接收到条带i的全部数据分块,则直接从生产集群中读取数据分块;
[0081] 在下一个时间段T内,用户访问的数据分块λ为[1,1,1,1],根据NUMj=max{(μ-aj-λ(j)),0},获得从四个数据节点读取的数据分块个数为[2,0,0,0];需要从数据节点1读取两个对应的数据分块;其中,归档节点在时间T内所能归档的条带数μ=3;归档节点中包含数据节点j的数据分块个数aj的集合a为[0,5,6,5];
[0082] (9)第三次用户访问数据分块集合为[1,1,2,1],交换机将数据分块集合同时转发到访问节点和归档节点;同时,归档节点按数据分块集合[2,0,0,0]直接从生产集群中读取数据分块;
[0083] (10)归档节点接收来自用户缓存的数据分块集合[1,1,2,1]和直接读取的数据分块集合[2,0,0,0],更新节点数据分块个数为[3,6,8,6];
[0084] 上述步骤(8)(9)(10)对应图2中④所指示的流程;
[0085] (11)归档节点完成3个条带的归档计算,并将每个条带的数据分块和校验分块发送到纠删码归档集群,删除归档节点中已经归档的数据分块;此时i为5,归档节点中各节点数据分块的个数为[0,3,5,3];
[0086] 上述步骤(11)对应图2中⑤所指示的流程;
[0087] (12)重复步骤(1)~(11),直到生产集群中全部条带的归档完成。
[0088] 现有技术中,普通纠删码归档的过程如图3所示,具体为:归档节点直接从生产集群中读取条带所需的k个数据分块,然后获取该条带的r个校 验分块,最后将k个数据分块和r个校验分块发送到纠删码归档集群保存;每次归档都是从生产集群中读取数据分块再计算出校验分块,然后将数据分块和校验分块发送到纠删码归档集群,直到归档全部完成;
[0089] 而本发发明提供的基于数据缓存的纠删码归档方法,具体如下:
[0090] (1)归档节点初始化条带,接收用户访问缓存的数据分块;
[0091] (2)如果当前归档条带的k个数据分块全部接收到,就进入步骤(4);否则等待下一个时间段T内从用户访问的数据缓存中发送的数据;
[0092] (3)判断是否接收到当前条带的全部数据分块,若是,则进入步骤(4);若为否,则从生产集群中读取相应的数据分块以凑齐μ个条带;
[0093] (4)归档节点对当前条带进行编码计算,将k个数据分块和r和校验分块发送到纠删码归档集群中保存;
[0094] (5)重复步骤(2)到(4),直到生产集群中全部条带的归档完成。
[0095] 实施例中,采用步骤(1)中的接收用户访问缓存的数据分块,相比于普通纠删码归档,大幅度减少了归档节点从生产集群中读取数据分块的次数,从而可以在基本不影响用户访问的情况下进行归档操作,提高归档效率;另一方面,通过交换机将用户访问缓存的数据分块转发到归档节点,避免了用户访问和普通纠删码归档对生产节点中相同数据分块的重复读取请求,可有效地减少生产集群中网络传输的数据量,减轻整个网络的负载。
[0096] 本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。