CN114415976B - 一种分布式数据存储***与方法 - Google Patents

一种分布式数据存储***与方法 Download PDF

Info

Publication number
CN114415976B
CN114415976B CN202210313064.1A CN202210313064A CN114415976B CN 114415976 B CN114415976 B CN 114415976B CN 202210313064 A CN202210313064 A CN 202210313064A CN 114415976 B CN114415976 B CN 114415976B
Authority
CN
China
Prior art keywords
data
write
cache
fragments
storage node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202210313064.1A
Other languages
English (en)
Other versions
CN114415976A (zh
Inventor
徐言林
文刘飞
陈坚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Sandstone Data Technology Co ltd
Original Assignee
Shenzhen Sandstone Data Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shenzhen Sandstone Data Technology Co ltd filed Critical Shenzhen Sandstone Data Technology Co ltd
Priority to CN202210313064.1A priority Critical patent/CN114415976B/zh
Publication of CN114415976A publication Critical patent/CN114415976A/zh
Application granted granted Critical
Publication of CN114415976B publication Critical patent/CN114415976B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

一种分布式数据存储***,包括:网络、至少3个存储节点;业务层读写单元接收到写入数据请求,业务层读写模块根据写入数据请求所关联的文件名称信息读取本地元数据信息,为每个写请求分配一个新的版本号,判读本次写入是否为覆盖写;业务层读写单元将所述数据分片与元数据信息分别发送给K+M个存储节点,元数据信息中包括文件名称信息、数据分片编号、版本号;存储节点接收到元数据信息与数据分片,存储节点将数据分片写入SSD缓存盘,形成临时缓存数据;业务层读写单元收到K+M个数据分片成功写入缓存成功消息后,业务层读写单元返回成功写入数据的响应;存储节点接收写入成功的消息后,将所述临时缓存数据转成正常缓存数据。

Description

一种分布式数据存储***与方法
技术领域
本申请属软件技术领域,尤其涉及一种分布式数据存储***与方法。
背景技术
名词解释:Ceph:是加州大学Santa Cruz分校的Sage Weil专为博士论文设计的自由软件分布式文件***。
EC:Erasure Code,即纠删码,是一种前向错误纠正技术(Forward ErrorCorrection,FEC),主要应用在网络传输中避免包的丢失, 存储***利用它来提高存储可靠性。相比多副本复制而言, 纠删码能够以更小的数据冗余度获得更高数据可靠性, 但编码方式较复杂,需要大量计算 。纠删码只能容忍数据丢失,无法容忍数据篡改。目前,纠删码技术在分布式存储 ***中的应用主要有三类,阵列纠删码(Array Code: RAID5、RAID6等)、RS(Reed-Solomon)里德-所罗门类纠删码和LDPC(Density Parity Check Code)低密度奇偶校验纠删码。
RAID:Redundant Arrays of Independent Disks,磁盘阵列,有“独立磁盘构成的具有冗余能力的阵列”之意。是EC的特殊情况。在传统的RAID中,仅支持有限的磁盘失效,RAID5只支持一个盘失效,RAID6支持两个盘失效,而EC支持多个盘失效。EC主要运用于存储和数字编码领域。例如磁盘阵列存储(RAID 5、RAID 6),云存储(RS)等。
SSD:Solid State Disk或Solid State Drive,固态硬盘,又称固态驱动器,是用固态电子存储芯片阵列制成的硬盘。
HDD:Hard Disk Drive的缩写,最基本的电脑存储器。
OSD:全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。
EC是k个数据块+m个校验块的结构,其中k和m值可以按照一定的规则设定,可以用公式:n=K+M来表示。变量k代表原始数据或符号的值。变量m代表故障后添加的提供保护的额外或冗余符号的值。变量n代表纠删码过程后创建的符号的总值。当小于m个存储块(数据块或校验块)损坏的情况下,整体数据块可以通过计算剩余存储块上的数据得到,整体数据不会丢失。
LBA,全称为Logical Block Address,是PC数据存储装置上用来表示数据所在位置的通用机制,我们最常见到使用它的装置就是硬盘。
如图1,Ceph,采用纠删码的原理如图1所示,设定以k=2,m=1,将一个名称为cat.jpg的对象存放在Ceph中,假定该对象的内容为ABCDEFGH。客户端在将cat.jpg上传到Ceph以后,会在主OSD中调用相应的纠删码算法对数据进行编码计算:将原来的ABCDEFGH拆分成两个分片,对应图1中的条带分片1,内容为ABCD;和条带分片2,内容为EFGH,计算出另外一个校验条带分片3,内容为WXYZ。按照分布式文件***节点计算与寻址规则,将这3个分片随机分布在3个不同的OSD节点上面,完成对这个对象的存储操作。Ceph中,任意一个节点损坏,可以根据另外两个节点进行恢复。
在大规模分布式文件***中,一个较大的文件,比如一部高清电影,分解成多个数据分片,经过纠删码计算后,文件会变得更大,分布到多台存储节点上,如果在存储过程中,其中一个或多个节点损坏,本次写数据失败,有的节点上可能已经写了数据,有的还没有写成功数据,这种情况下,需要删除已经写入节点的数据,恢复本次写之前的状态,特别是在覆盖写的情况下,不但要清除本次写入的部分数据,还需要恢复写之前的数据。
覆盖写,特别是设计到多个节点的覆盖写,在纠删码情况下,需要确保多个节点同时写成功,如果有节点写失败的情况下,需要回到上一个版本,要恢复覆盖写之前的状况,这涉及到各个节点的协同,与恢复上一个版本的效率问题,目前采用先读出之前老版本数据,将新数据写入到覆盖写的磁盘位置,如果写失败,将老版本数据重新写入,这至少包括老版本读出,新版本写入,老版本再次写入3个步骤,操作繁复,状态信息交互复杂等问题,同时效率低下。
发明内容
为了保证分布式存储***写事物在覆盖写情况下,确保写失败的情况,特别是覆盖写节点失败情况下,数据能正常回归到失败之前的版本,提升数据的一致性性能,本发明提出了一种分布式数据存储***与方法,在存储节点设置SSD缓存盘,先在SSD缓存盘中写入临时缓存数据,在没有收到所有分片写入成功之前,临时缓存数据不写入HDD,在覆盖写情况下,如果有节点写入过程失败,数据不用写入HDD破坏原有数据版本,直接删除SSD缓存盘中的数据,提升的分布式存储***写入速度和失败情况下的数据一致性。
一种分布式数据存储***,包括:网络、至少3个存储节点;存储节点中包括业务层读写单元、重定向缓存单元、存储单元、节点读写控制单元;存储节点通过网络信号连接;重定向缓存单元包括SSD缓存盘、缓存管理模块;存储单元包括HDD存储磁盘、HDD存储管理模块;业务层读写单元包括业务层读写模块、元数据数据库;数据分片模块、纠删码计算模块;业务层读写单元接收到写入数据请求,业务层读写模块根据写入数据请求所关联的文件名称信息读取本地元数据信息,为每个写请求分配一个新的版本号,判读本次写入是否为覆盖写;数据分片模块对写入数据进行数据分片,获得K个原数据分片,纠删码计算模块对数据分片进行纠删码计算获得M个纠删码分片;业务层读写单元将所述数据分片与元数据信息分别发送给K+M个存储节点,元数据信息中包括文件名称信息、数据分片编号、版本号;存储节点接收到元数据信息与数据分片,如果是覆盖写,存储节点将数据分片写入SSD缓存盘,形成临时缓存数据;存储节点生成临时控制文件,存储节点返回写入缓存成功消息;业务层读写单元收到K+M个数据分片成功写入缓存成功消息后,业务层读写单元返回成功写入数据的响应;业务层读写单元发送写入成功的消息给K+M个存储节点;存储节点接收写入成功的消息后,将所述临时缓存数据转成正常缓存数据,删除临时控制文件,存储节点返回成功响应。
上述数据存储***中,本地元数据信息保存在元数据数据库中;业务层读写单元为K+M个存储节点之中的任意一节点;或所述业务层读写单元为K+M个存储节点之中的第一节点;元数据信息中包括数据的名称信息、数据分片编号、版本号;版本号是一个顺序递增的唯一数值;临时控制文件的名称包括文件名称信息与版本号信息,临时控制文件包括本次写请求在本存储节点所对应的LBA磁盘偏移,数据长度,版本号信息;在存储节点上临时控制文件操作与元数据数据库操作为关联性操作,同时成功或同时失败;根据读取本地元数据信息结果判断本次写入是否为覆盖写,如果查询到本地元数据信息,本次写请求所对应区域已有数据,本次写入是覆盖写;如果是覆盖写,如果覆盖写的数据长度没有达到K个分片长度的整数倍,需要重新读取部分数据分片,凑齐数据长度为K个分片的整数倍,重新计算纠删码分片;数据分片模块对写入数据进行数据分片,获得K个原数据分片,纠删码计算模块对数据分片进行纠删码计算获得M个纠删码分片;存储节点基于缓存淘汰策略将正常缓存数据写入HDD磁盘。
存储节点接收到元数据信息与数据分片,先基于写请求的文件名和写偏移,通过查询元数据,获取本次写入的对应磁盘LBA地址和偏移;如果是覆盖写,基于LBA地址,携带版本号信息,把数据通过重定向缓存写入SSD缓存盘;把LBA地址、数据长度和版本号信息记录到对应的临时控制文件中。
业务层读写单元接收到写入数据请求,如果查询不到元数据信息,本次写入为初次写;存储节点接收到元数据信息与数据分片,如果写入数据请求是初次写,通过元数据获取该文件对应的磁盘偏移,然后结合写入请求的偏移和长度,计算出本次写入对应LBA磁盘地址,重定向缓存单元将数据分片写入SSD缓存盘,形成正常缓存数据,存储节点将元数据信息记录到元数据数据库;存储节点返回写入缓存成功消息;业务层读写单元收到K+M个数据分片成功写入缓存成功消息后,业务层读写单元返回成功写入数据的响应。
业务层读写单元收到数据分片写入SSD缓存盘失败消息,或者收到成功写入SSD缓存盘的消息小于K个,业务层读写单元返回写入数据失败的响应;
业务层读写单元发送数据回滚消息给K+M个存储节点;数据回滚消息包括文件名称信息、分片编号、版本号;存储节点接收数据回滚消息后,通过文件名和版本号信息获取对应的临时文件以及临时文件中保存的临时缓存数据信息,删除SSD缓存盘上的临时数据分片,存储节点删除临时控制文件。
***重启后,存储节点读取元数据信息,根据K+M个存储节点中元数据信息中的记录的写操作日志,确认重启前写请求是否成功;如果写请求成功,数据不做回滚,将临时缓存数据改为正常缓存数据,修改元数据,删除临时控制文件;如果写请求不成功,***做数据回滚,存储节点删除SSD缓存盘上的临时数据分片,存储节点删除临时控制文件。
一种分布式数据存储方法,包括:步骤10:选定存储节点接收到写入数据请求,选定存储节点根据写入数据请求所关联的文件名称信息读取本地元数据信息,为每个写请求分配一个新的版本号,判读本次写入是否为覆盖写;步骤20:选定存储节点对写入数据进行数据分片,获得K个原数据分片,选定存储节点对数据分片进行纠删码计算获得M个纠删码分片;步骤30:选定存储节点将所述K+M数据分片与元数据信息分别发送给其他存储节点,元数据信息中包括文件名称信息、数据分片编号、版本号;步骤40:所述存储节点接收到元数据信息与数据分片,如果是覆盖写,存储节点将数据分片写入SSD缓存盘,形成临时缓存数据;存储节点生成临时控制文件,存储节点返回写入缓存成功消息;步骤50:选定存储节点得到K+M个数据分片成功写入缓存成功消息后,选定存储节点返回成功写入数据的响应;步骤60:选定存储节点发送写入成功的消息给其他存储节点;步骤70:存储节点接收写入成功的消息后,将所述临时缓存数据转成正常缓存数据,删除临时控制文件,存储节点返回成功响应。
上述分布式数据存储方法,所述本地元数据信息保存在元数据数据库中;所述选定存储节点为K+M个存储节点之中的任意一节点;或所述选定存储节点为K+M个存储节点之中的第一节点;所述元数据信息中包括数据的名称信息、数据分片编号、版本号;所述版本号是一个顺序递增的唯一数值;所述临时控制文件的名称包括文件名称信息与版本号信息,所述临时控制文件包括本存储节点所对应的LBA磁盘偏移,数据长度,版本号信息;所述在存储节点上临时控制文件操作与元数据数据库操作为关联性操作,同时成功或同时失败;根据读取本地元数据信息结果判断本次写入是否为覆盖写,如果查询到本地元数据信息,本次写入是覆盖写;如果是覆盖写,如果不是全覆盖,需要重新读取已经写入的数据分片,用覆盖写入数据覆盖所述数据分片,重新计算纠删码分片。
上述分布式数据存储方法,步骤10后还包括,步骤11:如果本次写入是初次写,存储节点通过元数据获取该文件对应的磁盘偏移,然后结合写入请求的偏移和长度,计算出本次写入对应LBA磁盘地址,存储节点将数据分片写入SSD缓存盘,形成正常缓存数据,存储节点将元数据信息记录到元数据数据库;存储节点返回写入缓存成功消息;业务层读写单元收到K个数据分片成功写入缓存成功消息后,业务层读写单元返回成功写入数据的响应;步骤70后还包括,步骤80:存储节点基于缓存淘汰策略将正常缓存数据写入HDD磁盘。
上述分布式数据存储方法,如果***重启恢复,包括,步骤90:***重启后,存储节点读取本地临时控制文件,根据K+M个存储节点中的日志对比,确认本次写请求是否成功,如果写请求成功,数据不做回滚,如果写请求不成功,***做数据回滚;不做数据回滚临时缓存数据改为正常缓存数据,修改元数据,删除临时控制文件;如果需要回滚,存储节点删除SSD缓存盘上的临时数据分片,存储节点删除临时控制文件。
本申请中技术方案的有益效果至少有:如果写失败,直接删除临时数据,能够快速进行版本回归,大幅度减少操作步骤,提升***效率;采用临时控制文件来控制存储节点的写入,不用将旧版本数据读出到临时控制文件,成功写完后,临时缓存数据转换成正常缓存数据,大幅度降低了写操作的复杂性;临时控制文件的名称包括文件名称信息与版本号信息,保证了临时控制文件的唯一性,可以多线程多进度地写入不同的版本;临时控制文件操作与元数据数据库操作为关联性操作,不会出现数据不一致的情况;通过日志做数据恢复,不会出现***重启动后,数据不一致的情况。
附图说明
图1是Ceph采用纠删码的原理示意图;
图2是采用纠删码实现分布式存储***的数据处理原理示意图;
图3是覆盖写模式下纠删码重新计算的原理示意图;
图4是一种分布式数据存储***实施例的***框图示意图;
图5是一种业务层读写单元内部功能模块示意图;
图6是一种业务层读写单元内部功能模块示意图;
图7是一种覆盖写模式写入数据过程示意图;
图8是覆盖写状况下读取存储节点数据重新计算纠删码示意图;
图9一种写失败清除临时缓存的示意图;
图10一种读取各个节点数据的示意图。
具体实施方式
以下结合各附图对本申请内容做进一步详述。需要说明的是,以下是本发明较佳实施例的说明,并不对本发明构成任何限制。本发明较佳实施例的说明只是作为本发明一般原理的说明。
如图2,采用纠删码实现分布式存储***的数据处理原理图,读写访问节点的写入数据,在业务层读写单元首先被分成K个数据分片,数据分片可以是预先设定的定长块,定长块大小为128k、256k、512k或1M,定长块一般是SSD缓存盘或者HDD存储磁盘每次操作的物理磁道或擦除的数据块大小的整数倍,在业务层读写单元数据分片经过纠删码计算得到K+M个纠删码分片,根据不同的纠删码算法,支持一个或多个纠删码分片丢失后,不影响数据的恢复读取,将K+M个纠删码分片存储到K+M个分布式存储节点上,一个或多个存储节点发生死机或磁道损坏等状况,别的存储节点能够恢复出损坏的数据。K+M个纠删码分片分布到K+M个分布式存储节点,一般采用hash算法进行计算与寻址,根据hash算法分配后,每个分布式存储节点上存储的纠删码分片数量几乎相同。
采用纠删码实现分布式存储***,在部分覆盖写模式,需要读出需要覆盖写的分片,重新计算纠删码,如图3,数据分片2与数据分片3的内容有覆盖写,需要将K个数据分片都读回,重新计算M个纠删码分片,然后回写到分布式存储节点上,数据分片1没有修改,如果采用特定的纠删码算法,纠删码分片1等于数据分片1,因此数据分片1不用重新写,只需要重新写修改的数据分片与M个纠删码分片。
如图4,一种分布式数据存储***,包括:网络、至少3个存储节点;存储节点中包括业务层读写单元、重定向缓存单元、存储单元、节点读写控制单元;存储节点通过网络信号连接;重定向缓存单元包括SSD缓存盘、缓存管理模块;存储单元包括HDD存储磁盘、HDD存储管理模块;业务层读写单元包括业务层读写模块、元数据数据库;数据分片模块、纠删码计算模块;业务层读写单元接收到写入数据请求,业务层读写模块根据写入数据请求所关联的文件名称信息读取本地元数据信息,为每个写请求分配一个新的版本号,判读本次写入是否为覆盖写;数据分片模块对写入数据进行数据分片,获得K个原数据分片,纠删码计算模块对数据分片进行纠删码计算获得M个纠删码分片;业务层读写单元将所述数据分片与元数据信息分别发送给K+M个存储节点,元数据信息中包括文件名称信息、数据分片编号、版本号;存储节点接收到元数据信息与数据分片,如果是覆盖写,存储节点将数据分片写入SSD缓存盘,形成临时缓存数据;存储节点生成临时控制文件,存储节点返回写入缓存成功消息;业务层读写单元收到K+M个数据分片成功写入缓存成功消息后,业务层读写单元返回成功写入数据的响应;业务层读写单元发送写入成功的消息给K+M个存储节点;存储节点接收写入成功的消息后,将所述临时缓存数据转成正常缓存数据,删除临时控制文件,存储节点返回成功响应。
如图4,节点读写控制单元内部还可以分为业务层读写模块与元数据数据库,元数据数据库可以是各种形式的数据库,也可以是分布式数据库,如果采用只保留与这个节点相关的元数据,可以不用分布式数据库,根据分布式算法,找寻一个数据的元数据,只要找到这个节点就好,可以提供数据处理的并发性。
如图4,业务层读写单元包括业务层读写模块、元数据数据库;数据分片模块、纠删码计算模块;各个模块可以是独立的软件或软件模块。
通过给每个写入设置版本号,每次写入的数据都有版本编号,覆盖写的状态下,数据以临时版本的形式写入SSD缓存盘,临时数据不会写入到HDD硬盘,如果写失败,直接删除临时数据,能够快速进行版本回归,大幅度减少操作步骤,提升***效率。采用临时控制文件来控制存储节点的写入,不用将旧版本数据读出到临时控制文件,成功写完后,临时缓存数据转换成正常缓存数据,大幅度降低了写操作的复杂性。
如图4,上述数据存储***中,本地元数据信息保存在元数据数据库中;业务层读写单元为K+M个存储节点之中的任意一节点;或所述业务层读写单元为K+M个存储节点之中的第一节点;元数据信息中包括数据的名称信息、数据分片编号、版本号;本地元数据信息可以用各种方式做本地保存,用过数据库管理,能够提高管理效率;在写入操作中,可以用任意一个节点作为写入操作的接入节点,但是每个文件的元数据是根据分布式算法存储在一个对应的节点上,可以用这个节点的业务层读写单元作为操作节点,K+M个存储节点也是根据算法来选定,也可以是第一个节点的后续节点,用节点的IP地址hash计算,可以得到一个查找表,用写入文件名称hash计算,再查找查找表能够得到第一个节点的IP地址。
版本号是一个顺序递增的唯一数值;临时控制文件的名称包括文件名称信息与版本号信息,临时控制文件包括本次写请求在本存储节点所对应的LBA磁盘偏移,数据长度,版本号信息;通过顺序递增的唯一数值,能够保证写入版本编码的唯一性,每次写入都有一个版本号,回滚,也回滚到临近的版本号。临时控制文件的名称包括文件名称信息与版本号信息,保证了临时控制文件的唯一性,每个临时控制文件中包括了LBA磁盘偏移,数据长度,版本号信息,也就是在HDD磁盘对应相同位置,但是缓存在SSD缓存盘中,可以是多个版本,如果将临时缓存数据修改为正常缓存数据,一个相同文件名的文件,都会写入到相同的SSD缓存盘位置。
在存储节点上临时控制文件操作与元数据数据库操作为关联性操作,同时成功或同时失败;根据读取本地元数据信息结果判断本次写入是否为覆盖写,如果查询到本地元数据信息,本次写请求所对应区域已有数据,本次写入是覆盖写;如果是覆盖写,如果覆盖写的数据长度没有达到K个分片长度的整数倍,需要重新读取部分数据分片,凑齐数据长度为K个分片的整数倍,重新计算纠删码分片;数据分片模块对写入数据进行数据分片,获得K个原数据分片,纠删码计算模块对数据分片进行纠删码计算获得M个纠删码分片;存储节点基于缓存淘汰策略将正常缓存数据写入HDD磁盘。
临时控制文件操作与元数据数据库操作为关联性操作,确保了数据的一致性,通过写一个原子操作的日志文件来记录临时控制文件操作与元数据数据库操作,在日志文件中,记录两个操作,只有两个操作都成功,才记录操作成功,保证了临时控制文件操作与元数据数据库操作为关联性操作。
覆盖写的情况,如果是整体覆盖,不需要恢复数据,如果是部分覆盖,需要重新读出数据,用覆盖写的数据覆盖原有数据,重新计算纠删码分片。
存储节点接收到元数据信息与数据分片,先基于写请求的文件名和写偏移,通过查询元数据,获取本次写入的对应磁盘LBA地址和偏移;如果是覆盖写,基于LBA地址,携带版本号信息,把数据通过重定向缓存写入SSD缓存盘;把LBA地址、数据长度和版本号信息记录到对应的临时控制文件中。
为每个覆盖写请求创建临时控制文件,可以支持多个版本的覆盖同时分线程写入到SSD缓存盘,在分布式存储***中,这种情况发生的概率很大,通过给各个版本建立创建临时控制文件,可以在SSD缓存盘缓存一个文件的多个版本数据,写入成功后,按照顺序将临时缓存修改为正式缓存。
业务层读写单元接收到写入数据请求,如果查询不到元数据信息,本次写入为初次写;存储节点接收到元数据信息与数据分片,如果写入数据请求是初次写,通过元数据获取该文件对应的磁盘偏移,然后结合写入请求的偏移和长度,计算出本次写入对应LBA磁盘地址,重定向缓存单元将数据分片写入SSD缓存盘,形成正常缓存数据,存储节点将元数据信息记录到元数据数据库;存储节点返回写入缓存成功消息;业务层读写单元收到K+M个数据分片成功写入缓存成功消息后,业务层读写单元返回成功写入数据的响应。
初次写入的时候,HDD盘上没有数据,不存在版本回滚,恢复历史数据的问题,可以直接作为正常缓存数据写入到SSD缓存盘,当然也可以采用与覆盖写相同的处理步骤,如果写失败了,删除SSD缓存盘里面的临时缓存数据。
业务层读写单元收到数据分片写入SSD缓存盘失败消息,或者收到成功写入SSD缓存盘的消息小于K个,业务层读写单元返回写入数据失败的响应;
业务层读写单元发送数据回滚消息给K+M个存储节点;数据回滚消息包括文件名称信息、分片编号、版本号;存储节点接收数据回滚消息后,通过文件名和版本号信息获取对应的临时文件以及临时文件中保存的临时缓存数据信息,删除SSD缓存盘上的临时数据分片,存储节点删除临时控制文件。
在成功写入K个分片的时候,理论上写入节点还保留M个纠删码分片,这个时候***发生一个节点失效,还是能够恢复出数据,因此返回写入成功,能够及时响应。响应后,还需要继续完成M个节点的写入。
***重启后,存储节点读取元数据信息,根据K+M个存储节点中元数据信息中的记录的写操作日志,确认重启前写请求是否成功;如果写请求成功,数据不做回滚,将临时缓存数据改为正常缓存数据,修改元数据,删除临时控制文件;如果写请求不成功,***做数据回滚,存储节点删除SSD缓存盘上的临时数据分片,存储节点删除临时控制文件。
分布式文件***,在任何一个步骤,都有可能发生***崩溃,有节点失效,***重新上电恢复后,***需要恢复数据,确保数据与掉电崩溃等情况之前的状态,因为确保临时控制文件操作与元数据数据库操作为关联性操作,根据日志文件分析,如果掉电前,已经有K节点写入成功了,就不应该做数据回滚,删除各个节点的临时控制文件,将临时缓存数据修改为正常缓存数据。如果没有K节点成功,就需要删除各个节点的临时控制文件同时删除临时缓存数据。
如图7,一种分布式数据存储方法,包括:步骤10:选定存储节点,也就是图中的存储节点1,接收到写入数据请求,选定存储节点根据写入数据请求所关联的文件名称信息读取本地元数据信息,为每个写请求分配一个新的版本号,判读本次写入是否为覆盖写;步骤20:选定存储节点对写入数据进行数据分片,获得K个原数据分片,选定存储节点对数据分片进行纠删码计算获得M个纠删码分片;步骤30:选定存储节点将所述K+M数据分片与元数据信息分别发送给其他存储节点,元数据信息中包括文件名称信息、数据分片编号、版本号;步骤40:所述存储节点接收到元数据信息与数据分片,存储节点将数据分片写入SSD缓存盘,形成临时缓存数据;存储节点生成临时控制文件,存储节点返回写入缓存成功消息;步骤50:选定存储节点得到K+M个数据分片成功写入缓存成功消息后,选定存储节点返回成功写入数据的响应;步骤60:选定存储节点发送写入成功的消息给其他存储节点;步骤70:存储节点接收写入成功的消息后,将所述临时缓存数据转成正常缓存数据,删除临时控制文件,存储节点返回成功响应。
业务层读写单元可以是任意一个节点,也可以是K+M中任意一个节点,图7中,业务层读写单元位于存储节点1中,也就是存储节点1为选定节点,读写访问节点与存储***连接后,首先要根据写入数据的文件名称或其他编码方式,找到选定节点,如果直接找到存储节点1,可以减少一定的网络传输。
上述分布式数据存储方法,所述本地元数据信息保存在元数据数据库中;所述选定存储节点为K+M个存储节点之中的任意一节点;或所述选定存储节点为K+M个存储节点之中的第一节点;所述元数据信息中包括数据的名称信息、数据分片编号、版本号;所述版本号是一个顺序递增的唯一数值;所述临时控制文件的名称包括文件名称信息与版本号信息,所述临时控制文件包括本存储节点所对应的LBA磁盘偏移,数据长度,版本号信息;所述在存储节点上临时控制文件操作与元数据数据库操作为关联性操作,同时成功或同时失败;根据读取本地元数据信息结果判断本次写入是否为覆盖写,如果查询到本地元数据信息,本次写入是覆盖写;如果是覆盖写,如果不是全覆盖,需要重新读取已经写入的数据分片,用覆盖写入数据覆盖所述数据分片,重新计算纠删码分片。
如图8,通过元数据读取,确定是覆盖写,如果是部分覆盖,需要计算分片位置,重新读取K个节点的数据,几种各个数据分片,用覆盖写入的数据覆盖数据分片,做纠删码计算。
上述分布式数据存储方法,步骤10后还包括,步骤11:如果本次写入是初次写,存储节点通过元数据获取该文件对应的磁盘偏移,然后结合写入请求的偏移和长度,计算出本次写入对应LBA磁盘地址,存储节点将数据分片写入SSD缓存盘,形成正常缓存数据,存储节点将元数据信息记录到元数据数据库;存储节点返回写入缓存成功消息;业务层读写单元收到K个数据分片成功写入缓存成功消息后,业务层读写单元返回成功写入数据的响应;步骤70后还包括,步骤80:存储节点基于缓存淘汰策略将正常缓存数据写入HDD磁盘。
如图9,经过数据版本读取、数据分片、纠删码计算后,分发数据的过程中,发生了失败,在返回写入数据失败后,向各个节点发送清除临时缓存的消息,各个存储节点清除临时版本数据,删除临时控制文件,不需要对HDD盘进行操作,就可以恢复数据,不会出现数据不一致的情况,操作便捷快速。
如图10,正常读取数据的时候,先定位到选定节点,读取元数据,分片位置计算,从定位到的存储节点读取数据分片,如果读取过程中,发现分片丢失,需要纠删分片读取,利用纠删计算数据恢复,重新进行数据分布,返回数据。
日常***维护过程中,发现部分节点失效,驻守程序需要读取数据分片,恢复出失效节点的数据,进行数据的重新分布。
上述分布式数据存储方法,如果***重启恢复,包括,步骤90:***重启后,存储节点读取本地临时控制文件,根据K+M个存储节点中的日志对比,确认本次写请求是否成功,如果写请求成功,数据不做回滚,如果写请求不成功,***做数据回滚;不做数据回滚临时缓存数据改为正常缓存数据,修改元数据,删除临时控制文件;如果需要回滚,存储节点删除SSD缓存盘上的临时数据分片,存储节点删除临时控制文件。
本发明虽然根据优选实施例和若干备选方案进行说明和描述,但发明不会被在本说明书中的特定描述所限制。其他另外的替代或等同组件也可以用于实践本发明。

Claims (10)

1.一种分布式数据存储***,其特征在于,包括:网络、至少3个存储节点;
存储节点中包括业务层读写单元、重定向缓存单元、存储单元、节点读写控制单元;存储节点通过网络信号连接;重定向缓存单元包括SSD缓存盘、缓存管理模块;存储单元包括HDD存储磁盘、HDD存储管理模块;
业务层读写单元包括业务层读写模块、元数据数据库、 数据分片模块、纠删码计算模块;
业务层读写单元接收到写入数据请求,业务层读写模块根据写入数据请求所关联的文件名称信息读取本地元数据信息,为每个写请求分配一个新的版本号,判读本次写入是否为覆盖写;
数据分片模块对写入数据进行数据分片,获得K个原数据分片,纠删码计算模块对数据分片进行纠删码计算获得M个纠删码分片;
业务层读写单元将所述数据分片与元数据信息分别发送给K+M个存储节点,元数据信息中包括文件名称信息、数据分片编号、版本号;
存储节点接收到元数据信息与数据分片,如果是覆盖写,存储节点将数据分片写入SSD缓存盘,形成临时缓存数据;存储节点生成临时控制文件,存储节点返回写入缓存成功消息;
所述临时控制文件的名称包括文件名称信息与版本号信息,所述临时控制文件包括本次写请求在本存储节点所对应的LBA磁盘偏移,数据长度,版本号信息;
业务层读写单元收到K+M个数据分片成功写入缓存成功消息后,业务层读写单元返回成功写入数据的响应;
业务层读写单元发送写入成功的消息给K+M个存储节点;
存储节点接收写入成功的消息后,将所述临时缓存数据转成正常缓存数据,删除临时控制文件,存储节点返回成功响应。
2.根据权利要求1所述的分布式数据存储***,其特征在于:
所述本地元数据信息保存在元数据数据库中;
所述业务层读写单元为K+M个存储节点之中的任意一节点;或所述业务层读写单元为K+M个存储节点之中的第一节点;
所述元数据信息中包括数据的名称信息、数据分片编号、版本号;
所述版本号是一个顺序递增的唯一数值;
在存储节点上临时控制文件操作与元数据数据库操作为关联性操作,同时成功或同时失败;
根据读取本地元数据信息结果判断本次写入是否为覆盖写,如果查询到本地元数据信息,本次写请求所对应区域已有数据,本次写入是覆盖写;如果是覆盖写,如果覆盖写的数据长度没有达到K个分片长度的整数倍,需要重新读取部分数据分片,凑齐数据长度为K个分片的整数倍,重新计算纠删码分片;
数据分片模块对写入数据进行数据分片,获得K个原数据分片,纠删码计算模块对数据分片进行纠删码计算获得M个纠删码分片;
存储节点基于缓存淘汰策略将正常缓存数据写入HDD磁盘。
3.根据权利要求2所述的分布式数据存储***,其特征在于:存储节点接收到元数据信息与数据分片,先基于写请求的文件名和写偏移,通过查询元数据,获取本次写入的对应磁盘LBA地址和偏移;如果是覆盖写,基于LBA地址,携带版本号信息,把数据通过重定向缓存写入SSD缓存盘;把LBA地址、数据长度和版本号信息记录到对应的临时控制文件中。
4.根据权利要求2所述的分布式数据存储***,其特征在于,业务层读写单元接收到写入数据请求,如果查询不到元数据信息,本次写入为初次写;
存储节点接收到元数据信息与数据分片,如果写入数据请求是初次写,通过元数据获取该文件对应的磁盘偏移,然后结合写入请求的偏移和长度,计算出本次写入对应LBA磁盘地址,重定向缓存单元将数据分片写入SSD缓存盘,形成正常缓存数据,存储节点将元数据信息记录到元数据数据库;存储节点返回写入缓存成功消息;
业务层读写单元收到K+M个数据分片成功写入缓存成功消息后,业务层读写单元返回成功写入数据的响应。
5.根据权利要求1或权利要求2所述的分布式数据存储***,其特征在于,业务层读写单元收到数据分片写入SSD缓存盘失败消息,或者收到成功写入SSD缓存盘的消息小于K个,业务层读写单元返回写入数据失败的响应;
业务层读写单元发送数据回滚消息给K+M个存储节点;数据回滚消息包括文件名称信息、分片编号、版本号;
存储节点接收数据回滚消息后,通过文件名和版本号信息获取对应的临时控制 文件以及临时文件中保存的临时缓存数据信息,删除SSD缓存盘上的临时数据分片,存储节点删除临时控制文件。
6.根据权利要求5所述的分布式数据存储***,其特征在于,***重启后,存储节点读取元数据信息,根据K+M个存储节点中元数据信息中的记录的写操作日志,确认重启前写请求是否成功;如果写请求成功,数据不做回滚,将临时缓存数据改为正常缓存数据,修改元数据,删除临时控制文件;
如果写请求不成功,***做数据回滚,存储节点删除SSD缓存盘上的临时数据分片,存储节点删除临时控制文件。
7.一种分布式数据存储方法,其特征在于,包括:
步骤10:选定存储节点接收到写入数据请求,选定存储节点根据写入数据请求所关联的文件名称信息读取本地元数据信息,为每个写请求分配一个新的版本号,判读本次写入是否为覆盖写;
步骤20:选定存储节点对写入数据进行数据分片,获得K个原数据分片,选定存储节点对数据分片进行纠删码计算获得M个纠删码分片;
步骤30:选定存储节点将K+M数据分片与元数据信息分别发送给其他存储节点,元数据信息中包括文件名称信息、数据分片编号、版本号;
步骤40:所述存储节点接收到元数据信息与数据分片,如果是覆盖写,存储节点将数据分片写入SSD缓存盘,形成临时缓存数据;存储节点生成临时控制文件,存储节点返回写入缓存成功消息;所述临时控制文件的名称包括文件名称信息与版本号信息,所述临时控制文件包括本存储节点所对应的LBA磁盘偏移,数据长度,版本号信息;
步骤50:选定存储节点得到K+M个数据分片成功写入缓存成功消息后,选定存储节点返回成功写入数据的响应;
步骤60:选定存储节点发送写入成功的消息给其他存储节点;
步骤70:存储节点接收写入成功的消息后,将所述临时缓存数据转成正常缓存数据,删除临时控制文件,存储节点返回成功响应。
8.根据权利要求7所述分布式数据存储方法,其特征在于,
所述本地元数据信息保存在元数据数据库中;
所述选定存储节点为K+M个存储节点之中的任意一节点;或所述选定存储节点为K+M个存储节点之中的第一节点;
所述元数据信息中包括数据的名称信息、数据分片编号、版本号;
所述版本号是一个顺序递增的唯一数值;
在存储节点上临时控制文件操作与元数据数据库操作为关联性操作,同时成功或同时失败;
根据读取本地元数据信息结果判断本次写入是否为覆盖写,如果查询到本地元数据信息,发现对应写入位置存在数据,本次写入是覆盖写;如果是覆盖写,如果不是全覆盖,需要重新读取已经写入的数据分片,用覆盖写入数据覆盖所述数据分片,重新计算纠删码分片。
9.根据权利要求8所述分布式数据存储方法,其特征在于,步骤10后还包括
步骤11:如果本次写入是初次写,存储节点通过元数据获取该文件对应的磁盘偏移,然后结合写入请求的偏移和长度,计算出本次写入对应LBA磁盘地址,存储节点将数据分片写入SSD缓存盘,形成正常缓存数据,存储节点将元数据信息记录到元数据数据库;存储节点返回写入缓存成功消息;业务层读写单元收到K个数据分片成功写入缓存成功消息后,业务层读写单元返回成功写入数据的响应;
步骤70后还包括,步骤80:存储节点基于缓存淘汰策略将正常缓存数据写入HDD磁盘。
10.根据权利要求9所述分布式数据存储方法,其特征在于,如果***重启恢复,包括
步骤90:***重启后,存储节点读取本地临时控制文件,根据K+M个存储节点中的日志对比,确认本次写请求是否成功,如果写请求成功,数据不做回滚,如果写请求不成功,***做数据回滚;不做数据回滚临时缓存数据改为正常缓存数据,修改元数据,删除临时控制文件;如果需要回滚,存储节点删除SSD缓存盘上的临时数据分片,存储节点删除临时控制文件。
CN202210313064.1A 2022-03-28 2022-03-28 一种分布式数据存储***与方法 Active CN114415976B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210313064.1A CN114415976B (zh) 2022-03-28 2022-03-28 一种分布式数据存储***与方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210313064.1A CN114415976B (zh) 2022-03-28 2022-03-28 一种分布式数据存储***与方法

Publications (2)

Publication Number Publication Date
CN114415976A CN114415976A (zh) 2022-04-29
CN114415976B true CN114415976B (zh) 2022-07-01

Family

ID=81263936

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210313064.1A Active CN114415976B (zh) 2022-03-28 2022-03-28 一种分布式数据存储***与方法

Country Status (1)

Country Link
CN (1) CN114415976B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114968668A (zh) * 2022-06-17 2022-08-30 重庆紫光华山智安科技有限公司 数据处理方法、装置、数据接入端及存储介质
CN115391093B (zh) * 2022-08-18 2024-01-02 江苏安超云软件有限公司 一种数据处理方法及***
CN115357199B (zh) * 2022-10-19 2023-02-10 安超云软件有限公司 分布式存储***中的数据同步方法、***及存储介质
CN115981570B (zh) * 2023-01-10 2023-12-29 创云融达信息技术(天津)股份有限公司 一种基于kv数据库的分布式对象存储方法和***
CN115827789B (zh) * 2023-02-21 2023-06-09 苏州浪潮智能科技有限公司 文件型数据库升级优化的方法、***、设备和存储介质
CN116644086B (zh) * 2023-05-24 2024-02-20 上海沄熹科技有限公司 一种基于SST的Insert SQL语句实现方法
CN117240873B (zh) * 2023-11-08 2024-03-29 阿里云计算有限公司 云存储***、数据读写方法、设备及存储介质
CN117950597B (zh) * 2024-03-22 2024-06-18 浙江大华技术股份有限公司 数据修改写方法、数据修改写装置以及计算机存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105930103A (zh) * 2016-05-10 2016-09-07 南京大学 一种分布式存储ceph的纠删码覆盖写方法
CN113868192A (zh) * 2021-12-03 2021-12-31 深圳市杉岩数据技术有限公司 一种数据存储设备、方法与分布式数据存储***

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3500972B2 (ja) * 1998-07-24 2004-02-23 日本電気株式会社 ディスク共有型クラスタシステムにおける論理ファイル管理システム
US9335939B2 (en) * 2011-07-12 2016-05-10 Violin Memory Inc. RAIDed memory system
CN105095013B (zh) * 2015-06-04 2017-11-21 华为技术有限公司 数据存储方法、恢复方法、相关装置以及***
CN106406760B (zh) * 2016-09-14 2019-05-28 郑州云海信息技术有限公司 基于云储存的直接纠删码优化方法及***
CN110865903B (zh) * 2019-11-06 2020-10-23 重庆紫光华山智安科技有限公司 基于纠删码分布式存储的节点异常重连复用方法及***
CN112000627B (zh) * 2020-08-14 2022-08-05 苏州浪潮智能科技有限公司 一种数据存储方法、***、电子设备及存储介质

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105930103A (zh) * 2016-05-10 2016-09-07 南京大学 一种分布式存储ceph的纠删码覆盖写方法
CN113868192A (zh) * 2021-12-03 2021-12-31 深圳市杉岩数据技术有限公司 一种数据存储设备、方法与分布式数据存储***

Also Published As

Publication number Publication date
CN114415976A (zh) 2022-04-29

Similar Documents

Publication Publication Date Title
CN114415976B (zh) 一种分布式数据存储***与方法
US10437672B2 (en) Erasure coding and replication in storage clusters
US10430279B1 (en) Dynamic raid expansion
US6766491B2 (en) Parity mirroring between controllers in an active-active controller pair
US8286029B2 (en) Systems and methods for managing unavailable storage devices
JP6144819B2 (ja) 不揮発性メモリシステムにおける同期ミラーリング
US6513093B1 (en) High reliability, high performance disk array storage system
US11698728B2 (en) Data updating technology
US7234024B1 (en) Application-assisted recovery from data corruption in parity RAID storage using successive re-reads
CN110442535B (zh) 提高分布式固态盘键值缓存***可靠性的方法及***
US7882420B2 (en) Method and system for data replication
CN109445681B (zh) 数据的存储方法、装置和存储***
US11429498B2 (en) System and methods of efficiently resyncing failed components without bitmap in an erasure-coded distributed object with log-structured disk layout
US7689877B2 (en) Method and system using checksums to repair data
US7716519B2 (en) Method and system for repairing partially damaged blocks
US20040128582A1 (en) Method and apparatus for dynamic bad disk sector recovery
CN114676000A (zh) 数据处理方法及其装置、存储介质、计算机程序产品
WO2023125507A1 (zh) 生成块组的方法、装置和设备
US11494090B2 (en) Systems and methods of maintaining fault tolerance for new writes in degraded erasure coded distributed storage
CN117370067A (zh) 一种大规模对象存储***的数据布局和编码方法
CN116414294A (zh) 生成块组的方法、装置和设备
CN118210659A (zh) 灾备存储***的管理方法、设备、***、产品及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant