一种基于重定向和日志混合的本地存储方法及系统技术方案

技术编号:33700786 阅读:15 留言:0更新日期:2022-06-06 08:09
本发明专利技术提出一种基于重定向和日志混合的本地存储方法及系统,该方法包括三个场景:1)初次写或数据块单元对齐覆盖写场景,数据异步写存储设备数据盘,写完返回后将元数据封装成本地日志的一个条目,然后分片异步写本地日志,日志落盘成功后同步到KV数据库的内存缓存,然后将写操作的响应返回给上层;2)非数据块单元对齐覆盖写场景,先将数据和元数据封装成本地日志的一个条目,然后分片写本地日志,写完本地日志后再写内存缓存,然后写操作即可返回;3)混合场景,先写数据块单元对齐部分的数据,然后写元数据和非数据块单元对齐部分的数据到本地日志,然后返回写操作的响应,再将非数据块单元对齐覆盖写部分的数据写入存储设备数据盘。设备数据盘。设备数据盘。

【技术实现步骤摘要】
一种基于重定向和日志混合的本地存储方法及系统


[0001]本专利技术涉及分布式存储领域,特别是一种基于重定向和日志混合的本地存储方法及系统。

技术介绍

[0002]分布式存储写本地事务的时候,需要保证本地事务的原子性,本地事务的原子性表示一个事务要么完整执行,要么不执行,这意味着,事务的各项任务都必须正确执行,如果有一任务执行失败,则整个事务会被终止,且此前对事务所做的修改不生效,如果事务所有的修改都被执行成功,则整个事务完成,且该事务对数据所做的修改是永久性的,覆盖写一般通过重定向写或写前日志的方式来保证,目前主流做法主要有两种:(1)Ceph(一种分布式存储架构)中FileStore(一种本地存储引擎)的做法,所有本地事务都先写本地日志,写完本地日志后即可给上层返回本地事务完成,然后再把数据写到数据盘上,当掉电后,FileStore会从本地日志中读取数据进行回放操作,从而还原掉电前的状态,如图1所示,主要包括以下步骤:1)FileStore引入本地日志,所有写事务在写本地数据盘之前,先写本地日志,且所有写事务在写完本地日志后都会返回;2)FileStore写本地事务完成后,该事务会被塞到FileStore的操作队列,然后多线程从该队列中取操作并写入数据盘;3)FileStore将写事务写到数据盘后,对应的本地日志可以删除这部分数据;4)当FileStore发生异常崩溃时,通过回放本地日志,可以恢复到崩溃前的状态,该方案将所有写事务都需要先写本地日志,会带来一倍的写放大,虽然保证了原子性,但在性能上会有负面影响。<br/>[0003](2)Ceph中BlueStore(一种本地存储引擎)的做法:采用直接管理裸盘,并使用重定向写的方式来解决写事务的原子性问题,写入的数据如果与最小分配单元大小对齐,则使用ROW(redirect on write,写时重定向)的方式,将数据写到新的地址空间,然后更改元数据索引,并回收原先占用的空间,元数据更新的原子性由KV数据库(一种数据库)的事务特性进行保障,对于非最小分配单元对齐的区域,则使用RMW(read modify write,读改写)的方式进行原地覆盖写,先读取非块大小对齐区域所在块,然后利用KV数据库来实现日志功能,将覆盖写的数据记到KV数据库中,完成以后再将数据覆盖写入到实际的数据区域,落盘成功以后再删除日志中的记录,如图2所示,具体包括以下步骤:1)BlueStore对于写事务如果是新写或最小分配单元对齐的覆盖写,则先新分配空间写本地事务数据,写完数据后再提交元数据kv(即键值)到KV数据库;2)BlueStore对于写事务如果是非最小分配单元对齐的覆盖写,则先将覆盖写的数据和元数据kv提交到KV数据库,然后io(即写操作)返回给上层,并将这部分覆盖写的事务放到defer队列(即小块写队列);3)Deferred_finisher线程(即小块写处理线程)从defer队列中取出覆盖写的事务,写到数据盘上,然后再去删除KV数据库中记录的覆盖写事务的数据;4)当BlueStore发生异常崩溃时,对于新写或最小分配单元对齐的覆盖写的数据,依赖于元数据kv写KV数据库是否成功来保证原子性,如果元数据kv写成功则通过元数据kv能索引到重定向写的数据,如果元数据kv写失败则通过之前的
元数据kv能索引到之前这块数据所在的区域;5)当BlueStore发生异常崩溃时,对于非最小分配单元对齐的覆盖写的数据,依赖于这部分数据写KV数据库是否成功来保证原子性,如果这部分覆盖写的数据写KV数据库成功,则通过defer事务回放来恢复掉电前的状态;如果这部分数据写KV数据库失败,则通过之前的元数据kv能索引到之前这块数据所在的区域。该方案采用重定向和写KV数据库结合来保证原子性,但写KV数据库的过程中,KV数据库的Wal(Write Ahead Log,写前日志)只支持单线程追加写,对于有大量非最小分配单元对齐的覆盖写的场景,会在写Wal上存在明显的性能瓶颈。另外,该部分覆盖写的数据写到KV数据库,再将该部分数据写到数据盘上后,还要从KV数据库中去删除该数据,既增加了写DB的io次数,同时这样也给KV数据库后期压缩也带来了更大的压力。
[0004]现有技术中,专利文献(CN111966295A)公开了一种基于ceph的多journal(即日志)记录方法,其中预先为每个shard队列建立对应的journal队列和journal文件,每个journal文件有其对应的文件标识,当目标shard(即分片)队列中生成新的journal数据时,将journal数据插入到目标journal队列,根据目标journal队列所对应的文件标识确定出相对应的目标journal文件,将journal数据存储至目标journal文件中,通过对每个shard队列建立对应的journal队列和journal文件,无需额外调用写线程,减少了IO栈中的线程切换带来的性能损耗,同时实现了OSD(即分布式存储设备)中shard队列的joural数据的并行处理。该方案为每个shard队列建立对应的journal队列和journal文件,主要存在的缺点有:(1)该方案把journal的数据放到journal队列后,需要线程从journal队列中取出来写journal文件,这里在性能上会有一次入队出队的开销,还有线程切换的开销;(2)该方案依赖于journal文件,这就会依赖于不同的文件系统和文件格式;(3)该方案和ceph filestore一样将所有的写io都先写journal,会造成一倍的写放大。

技术实现思路

[0005]为了解决现有技术中为了保证本地事务的原子性,会对存储系统的性能造成很大影响的技术问题,本专利技术提出一种基于重定向和日志混合的本地存储方法及系统。
[0006]为此,本专利技术提出的基于重定向和日志混合的本地存储方法具体包括如下步骤:S1、当收到一个数据写入请求后,通过元数据信息查找请求数据在存储设备数据盘对应的位置信息;S2、根据位置信息判断是否为初次写或是数据块单元对齐的覆盖写,如果判断结果为是,进入步骤S3,否则进入步骤S4;S3、数据部分采用重定向写:首先在存储设备数据盘上重新分配一块物理空间,然后把数据写入该物理空间,进入步骤S6;S4、根据位置信息判断是否为非数据块单元对齐的覆盖写,如果判断结果为是,进入步骤S5,否则进入步骤S6;S5、将覆盖写数据和元数据一起打包写入本地日志,进入步骤S7;S6、把元数据打包写本地日志,进入步骤S7;S7、写完本地日志后写KV数据库的内存缓存,然后将写操作的响应返回给上层,如果存在非数据块单元对齐的覆盖写,则提交这部分覆盖写数据到存储设备数据盘;S8、当KV数据库的内存缓存持久化时,将元数据写到本地日志里面的条目进行删
除标记。
[0007]进一步地,所述基于重定向和日志混合的本地存储方法除包括初次写或数据块单元对齐覆盖写场景和非数据块单元对齐覆盖写场景外,还包括混合场景。
[0008]进一步地,在所述初次写或数据块单元对齐覆盖写场景下,S3具本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于重定向和日志混合的本地存储方法,其特征在于, 具体包括如下步骤:S1、当收到一个数据写入请求后,通过元数据信息查找请求数据在存储设备数据盘对应的位置信息;S2、根据位置信息判断是否为初次写或是数据块单元对齐的覆盖写,如果判断结果为是,进入步骤S3,否则进入步骤S4;S3、数据部分采用重定向写:首先在存储设备数据盘上重新分配一块物理空间,然后把数据写入该物理空间,进入步骤S6;S4、根据位置信息判断是否为非数据块单元对齐的覆盖写,如果判断结果为是,进入步骤S5,否则进入步骤S6;S5、将覆盖写数据和元数据一起打包写入本地日志,进入步骤S7;S6、把元数据打包写本地日志,进入步骤S7;S7、写完本地日志后写KV数据库的内存缓存,然后将写操作的响应返回给上层,如果存在非数据块单元对齐的覆盖写,则提交这部分覆盖写数据到存储设备数据盘;S8、当KV数据库的内存缓存持久化时,将元数据写到本地日志里面的条目进行删除标记。2.根据权利要求1所述的基于重定向和日志混合的本地存储方法,其特征在于,所述基于重定向和日志混合的本地存储方法除包括初次写或数据块单元对齐覆盖写场景和非数据块单元对齐覆盖写场景外,还包括混合场景。3.根据权利要求2所述的基于重定向和日志混合的本地存储方法,其特征在于,在所述初次写或数据块单元对齐覆盖写场景下,S3具体包括如下步骤:S11、申请一个新的定长块空间,将数据通过重定向写操作落盘,如果是数据块单元对齐覆盖写,则在KV数据库中记录待回收的空间,用于后续将这部分空间进行回收;S12、将元数据打包成本地日志的一个条目,异步提交本地日志;S13、将元数据写内存缓存,然后将回调放入队列让写操作返回;S14、当KV数据库的内存缓存持久化时,将元数据写到本地日志里面的条目进行删除标记。4.根据权利要求2所述的基于重定向和日志混合的本地存储方法,其特征在...

【专利技术属性】
技术研发人员:文刘飞陈建立陈坚
申请(专利权)人:深圳市杉岩数据技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1