介绍一种基于Linux的数据实时存储系统及方法与流程

将乐信息网 http://www.jianglexinxi.cn 2020-10-19 04:13 出处:网络
如下介绍的介绍一种基于Linux的数据实时存储系统及方法与流程,现在小编要给大家推荐如下的内容:

如下介绍的介绍一种基于Linux的数据实时存储系统及方法与流程,现在小编要给大家推荐如下的内容:


本发明属于计算机领域,特别涉及一种基于linux的数据实时存储系统及方法。



背景技术:

互联网急速发展的当下,数据是重中之重,实际过程中人为不当的操作、硬件故障、恶意的攻击等等原因都会造成数据的丢失或损坏,尤其是重要的数据,将会造成灾难性的损失,数据的备份变的极为重要。

传统的备份多种多样,目前写时备份的技术存在的缺陷很明显。生产系统的在线备份无法实时操作影响业务使用、备份文件占用额外的物理盘空间、数据拷贝的方式原本一次的i/o写磁盘操作需要三次才能实现备份、传统备份时需要设备卷只读无法写入数据、增量备份过程较慢、增量备份失败后需要全量备份等问题。



技术实现要素:

发明目的:本发明针对现有技术存在的问题,提出了一种能够有效提高数据备份效率的基于linux的数据实时存储系统。

技术方案:为实现上述目的,本发明提供了一种基于linux的数据实时存储系统,包括主机以及设置在主机中的处理模块、内存和至少一个存储设备;内存用于存储即将写入存储设备的数据、索引表一和索引表二;存储设备中设有用于保存实时数据的实际卷和备份文件;索引表一和索引表二均为key映射value的结构,其中,索引表一中key1为实际卷中数据块的块号,value1用于记录数据块是否被修改的修改状态值;索引表二中key2为根据存储的数据内容hash计算出的值,value2中记录每个数据内容引用的数据块的块号、引用次数和引用次数超过引用阈值的数据内容;所述处理模块根据内存中写入或读取的数据结合索引表一和索引表二选择数据写入和读取的位置,并更新索引表一和索引表二。

其中,所述存储设备有两个,一个用于保存实际卷;另一个用于保存备份文件。这样存储系统在快照模式下,可以减少同设备的i/o操作;从而提高数据存储的速度。

为了存储系统能够在修改其中存储数据的同时,又能够保证用户正常的数据读取和拷贝,存储系统在所述处理模块中创建一个dev设备节点,所述dev设备节点用于执行读操作。

本发明还提供了一种基于上述linux的数据实时存储系统的存储方法,具体包括:在初始状态下,根据实际卷中的原始数据在内存中创建索引表一和索引表二;系统在快照状态和增量状态交替进行工作;其中,在快照状态下,处理模块对写入内存的数据进行处理并在索引表一和索引表二中的查询,判断内存中的数据需要存储的位置,将需要修改的实际卷中对应的数据块中的数据写到备份文件中,并更新索引表一和索引表二;然后对备份文件中的数据和实际卷中的数据通过pagerank算法进行增量合成;在增量状态下,处理模块截断备份文件中备份的数据并对写入内存的数据进行处理且在索引表一和索引表二中的查询,根据结果更新索引表一和索引表二。

其中,在所述处理模块中创建一个dev设备节点,处理模块先判断接受到的操作指令是读操作还是写操作,如果是读操作,则将读操作发送到dev设备节点,通过dev设备节点读取所需数据。这样可以实现读操作和写操作并行进行。

进一步,所述处理模块对写入内存的数据进行处理的方法为:对写入内存的数据按照内存页大小进行拆分,通过多线程并行的方式,分别用hash算法对写入数据进行计算,生成索引表二中每个数据唯一的key2值。这样能够有效的提高数据的存储和读取速度。

工作原理:本发明主要在内存中创建了索引表一和索引表二,根据写入和读取的数据内容,不断的更新索引表一和表二的关系,依据这两个表设置了两种工作状态,快照状态下,存储设备上的备份文件都维护存储设备上的块缓存数据,该缓存初始化缺省占原始卷总大小的10%,用于在备份过程中实现写时复制。当转为增量模式,删除备份文件,这样可以释放空间供文件系统的其余部分使用;处理模块只需要内存中跟踪写入,并根据需要定期将其同步到索引表中,大大提升性能。在此模式下,处理模块只是跟踪磁盘修改的块号,记录到索引表中。对于增量备份合成,通过辅助开发的并行合成工具更加快速合成,恢复数据状态。本发明中还可以采用两个存储设备来分别存储实际卷和备份文件,这样将i/o写转移到另一个存储设备上,减轻一次同一存储设备i/o写入负载,能够使整个存储系统的性能得到大幅提升。

有益效果:与现有技术相比,本发明具有以下显而易见的优势:本发明能够在后期数据进行备份或拷贝的是过程中不影响系统正常运作、不限制备份文件挂载点、能大大降低i/o操作提高性能、同时加速增量合成的实现方法,在备份容灾系统等领域,具有广发的应用前景。

附图说明

图1为本发明提供的存储系统在快照状态下进行写操作的工作流程图;

图2为本发明提供的存储系统在增量状态下进行写操作的工作流程图;

图3为本发明提供的存储系统在快照状态下同时进行写操作和读操作的工作流程图;

图4为本发明提供的存储系统在增量状态下同时进行写操作和读操作的工作流程图。

具体实施方式

下面将结合本发明实例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本实施例公开的一种基于linux系统的实时数据存储方法,该方法应用于存储系统中,该存储系统包括主机以及设置在主机中的处理模块、内存和至少一个存储设备;该方法主要在主机上执行;本实施例中的主机上安装的linux系统及其他上层应用程序,处理模块根据写入和需要读取的具体数据选择数据写入和读取的位置。内存用于存储即将写入存储设备的数据、索引表一和索引表二;存储设备中设有保存实时数据的实际卷和备份文件。主机主要是服务器、笔记本、台式计算机等终端设备;存储设备可以是硬盘、磁盘等硬件存储设备。

其中,索引表一是key映射value的结构,索引表一中key1为实际卷中数据块的块号,value1用于记录数据块是否被修改的修改状态值。在初始状态下,每个数据块对应的修改状态值记为0,当数据块被修改后,其修改状态值记为1。索引表二也是key映射value的结构。索引表二中key2为根据存储的数据内容hash计算出的值,value2中记录每个数据内容引用的数据块的块号、引用次数和引用次数超过引用阈值的数据内容。本实施例中引用阈值设为10。

本实施例中公开的基于linux系统的实时数据存储方法主要包括两种状态下的数据存储,一种是快照状态,另一种是增量状态;这两种状态交替进行。在初始状态下,根据实际卷中的原始数据在内存中创建索引表一和索引表二。处理模块定期将内存中的索引表一和索引表二发送到备份文件中。

其中,如图1所示,快照状态进行写操作包括以下步骤:

步骤11:对写入内存的数据按照内存页大小进行拆分,通过多线程并行的方式,分别用hash算法对写入数据进行计算,生成索引表二中每个数据唯一的key2值;根据写入的数据即将要写入的数据块的块号,在索引表一中找到对应数据块的修改状态值,如果此时对应数据块的修改状态值为0;则执行步骤12;否则执行步骤13;

步骤12:对应数据块的修改状态值为0,则克隆此时实际卷中对应数据块中的数据内容,写入备份文件中,并修改索引表一中对应数据块的修改状态值;执行步骤13;

步骤13:根据步骤11中获得写入数据的key2值查询索引表二,如果写入数据已经在索引表二中记载,则判断该写入数据即将需要写入的数据块是否已经有这个数据,如果有,则更新引用次数,如果没有这个数据,则将即将写入数据块的块号写入索引表二中并更新引用次数;如果写入数据没有在索引表二中记载,则在表二中创建新的索引关系;

步骤14:判断写入数据的引用次数,如果写入数据对应的引用次数超过引用阈值,则将该数据保存在内存中;如果写入数据对应的引用次数不超过引用阈值,则将该数据写入存储设备的实际卷中;

步骤15:对备份文件中的数据和实际卷中的数据通过pagerank算法进行增量合成。

如图2所示,当在增量状态下进行写操作主要包括以下步骤:

步骤21:处理模块截断备份文件中备份的数据,保留索引表一和索引表二;

步骤22:对写入内存的数据按照内存页大小进行拆分,通过多线程并行的方式,分别用hash算法对写入数据进行计算,生成索引表二中每个数据唯一的key2值;

步骤23:在索引表一中根据数据所要写入的数据块的块号查找数据块的修改状态值并修改;

步骤24:根据步骤22中获得写入数据的元数据查询索引表二,如果写入数据已经在索引表二中记载,则判断该写入数据即将需要写入的数据块是否已经有这个数据,如果有,则更新引用次数,如果没有这个数据,则将即将写入数据块的块号写入索引表二中并更新引用次数;如果写入数据没有在索引表二中记载,则在表二中创建新的索引关系;

处理模块还创建了一个dev设备节点,供用户进行读操作,这样在用户进行数据备份的同时,也可以对存储系统中的数据进行修改。当读操作和写操作同时进行时,如图3所示,主机处于快照状态下时,用户备份数据主要包括以下步骤:

步骤31:处理模块判断接受到的指令是读操作还是写操作,如果是读操作则执行步骤32~33,如果是写操作则执行步骤34~38;

步骤32:对需要读取的数据按照内存页大小进行拆分,通过多线程并行的方式,分别用hash算法对写入数据进行计算,生成索引表二中每个数据唯一的key2值;

步骤33:将读操作发送到dev设备节点;判断需要读取的数据对应的数据块在索引表一中对应的修改状态值;如果对应的修改状态值为0,则直接从存储从实际卷中对应的数据块号中读取数据;如果对应的修改状态值为1,则根据读取数据的key2值查询索引表二,如果需要读取的数据的索引次数大于阈值,则直接从内存中将数据读出,如果需要读取的数据的索引次数不大于阈值,则在索引表二中找到对应的数据块号,从实际卷中对应的数据块号中将数据读出;

步骤34:对写入内存的数据按照内存页大小进行拆分,通过多线程并行的方式,分别用hash算法对写入数据进行计算,生成索引表二中每个数据唯一的key2值;根据写入的数据即将要写入的数据块的块号,在索引表一中找到对应数据块的修改状态值,如果此时对应数据块的修改状态值为0;则执行步骤35;否则执行步骤36;

步骤35:对应数据块的修改状态值为0,则克隆此时实际卷中对应数据块中的数据内容,写入备份文件中,并修改索引表一中对应数据块的修改状态值;执行步骤36;

步骤36:根据步骤34中获得写入数据的key2值查询索引表二,如果写入数据已经在索引表二中记载,则判断该写入数据即将需要写入的数据块是否已经有这个数据,如果有,则更新引用次数,如果没有这个数据,则将即将写入数据块的块号写入索引表二中并更新引用次数;如果写入数据没有在索引表二中记载,则在表二中创建新的索引关系;

步骤37:判断写入数据的引用次数,如果写入数据对应的引用次数超过引用阈值,则将该数据保存在内存中;如果写入数据对应的引用次数不超过引用阈值,则将该数据写入存储设备的实际卷中;

步骤38:对备份文件中的数据和实际卷中的数据进行增量合成。

当读操作和写操作同时进行时,如图4所示,主机处于增量状态下时,用户备份数据主要包括以下步骤:

步骤41:处理模块判断接受到的指令是读操作还是写操作,如果是读操作则执行步骤42~43,如果是写操作则执行步骤44~47;

步骤42:对需要读取的数据按照内存页大小进行拆分,通过多线程并行的方式,分别用hash算法对写入数据进行计算,生成索引表二中每个数据唯一的key2值;

步骤43:将读操作发送到dev设备节点;判断需要读取的数据对应的数据块在索引表一中对应的修改状态值;如果对应的修改状态值为0,则直接从存储从实际卷中对应的数据块号中读取数据;如果对应的修改状态值为1,则根据读取数据的元数据查询索引表二,如果需要读取的数据的索引次数大于阈值,则直接从内存中将数据读出,如果需要读取的数据的索引次数不大于阈值,则在索引表二中找到对应的数据块号,从实际卷中对应的数据块号中将数据读出;

步骤44:处理模块截断备份文件中的备份的数据,保留索引表一和索引表二;

步骤45:对写入内存的数据按照内存页大小进行拆分,通过多线程并行的方式,分别用hash算法对写入数据进行计算,生成索引表二中每个数据唯一的key2值;

步骤46:在索引表一中根据数据所要写入的数据块的块号查找数据块的修改状态值并修改;

步骤47:根据步骤45中获得写入数据的key2值查询索引表二,如果写入数据已经在索引表二中记载,则判断该写入数据即将需要写入的数据块是否已经有这个数据,如果有,则更新引用次数,如果没有这个数据,则将即将写入数据块的块号写入索引表二中并更新引用次数;如果写入数据没有在索引表二中记载,则在表二中创建新的索引关系;

在本实施例中还可以采用两个存储设备分别用来存储实际卷和备份文件,在快照状态下,如果系统内部需要写入数据的时候,需要先将实际卷中的数据读出来,并写到备份文件中,再将新的数据写入实际卷中。这样写入实际卷数据i/o和写入另一个存储设备上的备份卷的数据数据i/o操作可以同时进行,减轻一次实际卷i/o写入负载,性能得到大幅提升。

快照模式下复制文件内容,增量模式不需要复制操作,减少i/o操作。通过这种方式,即使原始卷发生写操作,处理器也可以维护文件系统的一致性并且是完整的快照。快照数据由处理模块使用索引表进行管理和访问。通过这种实现方式使我们的写时复制系统能够在块级别可靠地维护原始卷的完整时间点数据状态,同时不影响原始卷的正常使用。

处理模块还可以在跟踪的存储设备的不同状态之间动态转换,得益于挂载操作的监控。正常使用过程中存储设备将大部分时间处于“活动”状态。此状态下,存储设备已完全初始化,并且所有内存中数据结构均处于活动状态。正确安装了存储设备驱动,存储设备将开始保持活动状态,当系统触发卸载卷等行为的时候,才触发活跃状态进入休眠状态。

同时通过卸载块驱动程序后,无论用户主动的操作还是在计算机正常关闭的卸载,存储设备也都将转换为“休眠”状态。简而言之,“休眠”状态是可以通过操作系统安全地卸载存储设备的状态。捕捉到处理器正在跟踪的存储设备的触发卸载系统调用时,处理器首先将该存储设备的所有内存数据结构写入备份卷,以供后续使用,然后关闭当备份卷的文件描述符,并关闭该存储设备的所有工作的处理线程。当存储系统中采用一个存储设备工作时,如果原始卷被操作系统卸载,存储系统将保持休眠模式,直到再次重新安装存储设备为止,此时存储系统将过渡到活动状态。当存储系统中采用两个存储设备在工作时,性能将得到更大提升,不过处理逻辑更为复杂,这里需要监控两个存储设备的状态,两者任意的卸载都无法正常工作,系统必须处于休眠状态,这里需要通过原子引用计数的方式,并且卸载如果失败需要原位复原,只有两个存储设备都正常才能转为“活跃”状态。初始化原子计数为0,当校验跟踪的两个存储设备均正常,且文件结构指向的存储设备和监控的保持一致,分别进行两次原子操作,原子值转为2,在这个模式下的任何校验都将需要该原子值为2。同时卸载过程需要进行二次卸载逻辑的修复判断,不可以重复关闭存储设备的处理线程,这样会引发异常。恢复存储设备过程中,只有全部恢复,才可以过渡块设备到活动状态,恢复处理线程。

基于设备可以多次同时打开,dev设备节点读操作无竞争关系,不影响数据一致性,同一块的写无冲突,任务之间的操作没有顺序性的情况,所以本发明提供的存储系统在进行数据备份和拷贝的时候不影响其正常运作。


技术特征:

1.一种基于linux的数据实时存储系统,其特征在于:包括主机以及设置在主机中的处理模块、内存和至少一个存储设备;内存用于存储即将写入存储设备的数据、索引表一和索引表二;存储设备中保存有实际卷和备份文件,其中实际卷用于存储实时数据;索引表一和索引表二均为key映射value的结构,其中,索引表一中key1为实际卷中数据块的块号,value1用于记录数据块是否被修改的修改状态值;索引表二中key2为根据存储的数据内容hash计算出的值,value2中记录每个数据内容引用的数据块的块号、引用次数和引用次数超过引用阈值的数据内容;所述处理模块根据内存中写入或读取的数据结合索引表一和索引表二选择数据写入和读取的位置,并更新索引表一和索引表二。

2.根据权利要求1所述的基于linux的数据实时存储系统,其特征在于:所述存储设备有两个,一个用于保存实际卷;另一个用于保存备份文件。

3.根据权利要求1所述的基于linux的数据实时存储系统,其特征在于:在所述处理模块中创建一个dev设备节点,所述dev设备节点用于执行读操作。

4.一种基于权利要求1所述的linux的数据实时存储系统的存储方法,其特征在于:在初始状态下,根据实际卷中的原始数据在内存中创建索引表一和索引表二;系统在快照状态和增量状态交替进行工作;其中,在快照状态下,处理模块对写入内存的数据进行处理并在索引表一和索引表二中的查询,判断内存中的数据需要存储的位置,将需要修改的实际卷中对应的数据块中的数据写到备份文件中,并更新索引表一和索引表二;然后对备份文件中的数据和实际卷中的数据通过pagerank算法进行增量合成;在增量状态下,处理模块截断备份文件中备份的数据并对写入内存的数据进行处理且在索引表一和索引表二中的查询,根据结果更新索引表一和索引表二。

5.根据权利要求4所述的linux的数据实时存储方法,其特征在于:在所述处理模块中创建一个dev设备节点,处理模块先判断接受到的操作指令是读操作还是写操作,如果是读操作,则将读操作发送到dev设备节点,通过dev设备节点读取所需数据。

6.根据权利要求4所述的linux的数据实时存储方法,其特征在于:所述存储设备有两个,一个用于保存实际卷;另一个用于保存备份文件。

7.根据权利要求4所述的linux的数据实时存储方法,其特征在于:所述处理模块对写入内存的数据进行处理的方法为:对写入内存的数据按照内存页大小进行拆分,通过多线程并行的方式,分别用hash算法对写入数据进行计算,生成索引表二中每个数据唯一的key2值。

技术总结
本发明公开了一种基于Linux的数据实时存储系统,包括主机以及设置在主机中的处理模块、内存和至少一个存储设备;内存用于存储即将写入存储设备的数据、索引表一和索引表二;存储设备中设有保存实时数据的实际卷和备份文件;所述处理模块根据内存中写入或读取的数据结合索引表一和索引表二选择数据写入和读取的位置,并更新索引表一和索引表二。本发明公开一种基于上述基于Linux的数据实时存储系统的存储方法,存储系统中快照状态和增量状态交替工作。本发明大大降低了I/O操作,提高了系统性能;同时在用户拷贝数据的过程中不影响系统正常运作、不限制备份文件挂载点。

技术研发人员:赵熙
受保护的技术使用者:南京云信达科技有限公司
技术研发日:2020.03.16
技术公布日:2020.06.26

介绍一种基于Linux的数据实时存储系统及方法与流程的相关内容如下:

本文标题:介绍一种基于Linux的数据实时存储系统及方法与流程
http://www.jianglexinxi.cn/yanergaozhi/523474.html

0

精彩评论

暂无评论...
验证码 换一张
取 消