一种针对分布式存储系统下的纠删码数据写洞的解决方法与流程

文档序号:36896738发布日期:2024-02-02 21:28阅读:18来源:国知局
一种针对分布式存储系统下的纠删码数据写洞的解决方法与流程

本发明属于分布式存储,具体为一种针对分布式存储系统下的纠删码数据写洞的解决方法。


背景技术:

1、分布式存储系统下,数据存储方式一会采用多副本或纠删码(erasurecode,缩写ec)来保证数据的可靠性访问。多副本模式即,例如双副本,用户数据会保存两份并分别存放在两个不同的位置,当一份数据出现故障无法访问时,另一份数据依然可以访问,保证了用户数据的高可用。双副本存放,面临一个问题是存储空间的浪费,比如用户2t的存储空间只能用来存放1t的用户数据,磁盘利用率为50%。

2、纠删码,顾名思义是一种纠正数据丢失的校验码。其基本思想是将用户的数据分割成n块,并将n块原始的数据块通过一定的计算,得到m块校验块。对于这n+m块的数据,当其中任意的m块元素出错(包括原始数据和校验数据)时,均可以通过对应的重构算法恢复出原来的n块数据。生成校验块的过程被称为编码(encoding),恢复丢失数据块的过程被称为解码(decoding)。磁盘利用率为n/(n+m),以ec4+2为例,磁盘利用率为66%,n越大,磁盘利用率越高。相比多副本,纠删码有着更高的磁盘利用率,尤其在大规模的分布式存储系统下,可以大大降低用户的硬件成本。越来越多的企业用户,开始选择纠删码方式来存储数据。

3、但是,纠删码有一个业界难题,就是如何处理写洞问题。具体说来就是客户写入数据时,数据被划分成n个数据块,并通过纠删码编码生成m个校验块。当某些特定情况发生时,例如断电或网络故障等,可能会导致数据同时写入主数据块和校验块之前发生中断,导致数据更新的部分写入成功而部分写入失败的情况,从而导致数据不一致。


技术实现思路

1、本发明的目的在于:为了解决上述提出的问题,提供一种针对分布式存储系统下的纠删码数据写洞的解决方法。

2、本发明采用的技术方案如下:一种针对分布式存储系统下的纠删码数据写洞的解决方法,所述针对分布式存储系统下的纠删码数据写洞的解决方法包括以下步骤:

3、s1:客户端将写io请求发送给ec主节点,也就是a节点;

4、s2:a节点收到io数据后,将io拆分为两个数据段d1和d2,并计算出一个校验段p1;

5、s3:其中d1数据段属于a节点,d2数据段和p1校验段分别分发给b节点和c节点;

6、s4:b节点和c节点收到数据后,将数据保存在内存中,并返回给a节点接收成功;

7、s5:当a节点收到所有节点接收数据成功后,再通知b节点和c节点做数据提交,并本地写盘;

8、s6:所有落盘操作完成后,返回客户端io写入成功

9、s7:已建立的网络连接,如果有一端发生故障,另一端也会感知到网络连接断开。利用网络连接的这一特性,来感知对端是否发生故障

10、s8:进行故障恢复,故障恢复操作有两种:redo和undo。

11、在一优选的实施方式中,所述步骤s7中,在io过程中,假如a节点发生掉电故障。当掉电故障发生在数据分发阶段,收到数据的b,c节点会感知到和a节点的网络故障,然后b和c把自己接收到的数据d2和p1保存到临时文件中,然后在数据库中记录数据状态为未提交。

12、在一优选的实施方式中,所述步骤s7中,当掉电故障发生在数据提交阶段,收到提交请求的节点感知到和a的网络故障后,会记录数据状态已提交;没有收到提交请求的节点感知到同a的网络故障后则会将内存中的内存中的数据保存到临时文件中,并在数据库中记录数据状态为未提交。

13、在一优选的实施方式中,所述步骤s7中,数据保存的临时文件名为:.<文件id>.<数据偏移>.<数据长度>.<任务id>,临时文件内容是d2或p1真实写入的io数据。

14、在一优选的实施方式中,所述步骤s8中,文件在每个读写io操作之前,都会检查是否存在未提交的数据。如果有未提交的数据,说明之前发生过网络故障,需要进行数据恢复。

15、在一优选的实施方式中,所述步骤s8中,具体的恢复过程为,判断a,b,c三节点这个文件是否发生过数据提交,如果有节点数据状态为已提交,说明此节点做过数据提交,那么其他节点执行redo操作,将未提交的数据继续提交,也就是把故障发生时保存的临时文件内容写入到实际文件中。

16、在一优选的实施方式中,所述步骤s8中,如果所有节点数据状态全部为未提交,则执行undo操作,直接将故障发生时各个节点保存的临时文件删除。数据要么全写入,要么全丢弃,用这样的方式来保证数据的原子性和一致性。

17、综上所述,由于采用了上述技术方案,本发明的有益效果是:

18、本发明中,方案简单,清晰,易维护。写性能几乎不受影响:与原有的io路径相比,只是多了一次数据提交的网络同步,并没有多余的磁盘操作,写性能几乎不受影响。在ec故障容忍度内,本发明在兼顾写入性能和数据一致性的前提下做到了很好的权衡和妥协。



技术特征:

1.一种针对分布式存储系统下的纠删码数据写洞的解决方法,其特征在于:所述针对分布式存储系统下的纠删码数据写洞的解决方法包括以下步骤:

2.如权利要求1所述的一种针对分布式存储系统下的纠删码数据写洞的解决方法,其特征在于:所述步骤s7中,在io过程中,假如a节点发生掉电故障;当掉电故障发生在数据分发阶段,收到数据的b,c节点会感知到和a节点的网络故障,然后b和c把自己接收到的数据d2和p1保存到临时文件中,然后在数据库中记录数据状态为未提交。

3.如权利要求1所述的一种针对分布式存储系统下的纠删码数据写洞的解决方法,其特征在于:所述步骤s7中,当掉电故障发生在数据提交阶段,收到提交请求的节点感知到和a的网络故障后,会记录数据状态已提交;没有收到提交请求的节点感知到同a的网络故障后则会将内存中的内存中的数据保存到临时文件中,并在数据库中记录数据状态为未提交。

4.如权利要求1所述的一种针对分布式存储系统下的纠删码数据写洞的解决方法,其特征在于:所述步骤s7中,数据保存的临时文件名为:.<文件id>.<数据偏移>.<数据长度>.<任务id>,临时文件内容是d2或p1真实写入的io数据。

5.如权利要求1所述的一种针对分布式存储系统下的纠删码数据写洞的解决方法,其特征在于:所述步骤s8中,文件在每个读写io操作之前,都会检查是否存在未提交的数据;如果有未提交的数据,说明之前发生过网络故障,需要进行数据恢复。

6.如权利要求1所述的一种针对分布式存储系统下的纠删码数据写洞的解决方法,其特征在于:所述步骤s8中,具体的恢复过程为,判断a,b,c三节点这个文件是否发生过数据提交,如果有节点数据状态为已提交,说明此节点做过数据提交,那么其他节点执行redo操作,将未提交的数据继续提交,也就是把故障发生时保存的临时文件内容写入到实际文件中。

7.如权利要求1所述的一种针对分布式存储系统下的纠删码数据写洞的解决方法,其特征在于:所述步骤s8中,如果所有节点数据状态全部为未提交,则执行undo操作,直接将故障发生时各个节点保存的临时文件删除;数据要么全写入,要么全丢弃,用这样的方式来保证数据的原子性和一致性。


技术总结
本发明公开了一种针对分布式存储系统下的纠删码数据写洞的解决方法。本发明中,如果有节点数据状态为已提交,说明此节点做过数据提交,那么其他节点执行Redo操作,将未提交的数据继续提交,也就是把故障发生时保存的临时文件内容写入到实际文件中。如果所有节点数据状态全部为未提交,则执行Undo操作,直接将故障发生时各个节点保存的临时文件删除。本发明方案简单,清晰,易维护。写性能几乎不受影响:与原有的IO路径相比,只是多了一次数据提交的网络同步,并没有多余的磁盘操作,写性能几乎不受影响。在EC故障容忍度内,本发明在兼顾写入性能和数据一致性的前提下做到了很好的权衡和妥协。

技术研发人员:胡川川,陈旭坤,彭德跃,杨兴博
受保护的技术使用者:北京焱融科技有限公司
技术研发日:
技术公布日:2024/2/1
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1