当前位置: 首页 > 专利查询>南京大学专利>正文

一种分布式存储CEPH的纠删码覆盖写方法技术

技术编号:13675496 阅读:81 留言:0更新日期:2016-09-08 01:15
本发明专利技术公开一种分布式存储CEPH的纠删码覆盖写方法,首先客户端节点发送写请求到Ceph的存储节点中的主OSD,主OSD自动选择最优编码方案后计算需要读取的数据块,并根据客户端id和对象id,从缓存中读取数据块返回主OSD;接着主OSD在接收完所有需要的读数据块后,更新数据块和校验块,发送到需要更新的对应OSD;然后数据块节点和校验块节点接收写请求,分配原始数据块附近的新存储位置存储新更新,并记录本次写请求元数据到日志PGLOG,数据和日志落盘后发送ACK给主OSD;最后主OSD接收所有更新节点的ACK后,记录本次更新元数据到内存,并回复ACK给客户端完成写请求。本发明专利技术解决了分布式存储系统CEPH不支持纠删码覆盖写的问题。

【技术实现步骤摘要】

本专利技术涉及分布式存储领域,特别涉及一种分布式存储CEPH的纠删码覆盖写方法
技术介绍
传统分布式存储采用多副本的存储技术,通过一份数据保存多份来提供高可靠性。多副本带来高可靠性的同时,存储代价也是多倍的。纠删码作为以更小的存储代价获得相同可靠性的方法,已经得到越来越多的应用。目前纠删码的主要应用领域是冷数据存储,读写模式多为一次写多次读,文件只支持在末尾添加数据的追加模式。追加写的修改模式和写全新文件类似,而纠删码的覆盖写,涉及到数据块的更新和校验块的更新,数据块的更新替换对应偏移数据即可,校验块的更新有两种方式:1)重构写:读取更新数据对应编码条带中不涉及更新的数据,合并新数据后重新编码,得到新的校验块,需要读一次数据块,写一次数据块和一次校验块;2)增量写:利用纠删码的线性性,读取更新数据范围的原始数据,计算原始数据块和更新数据差值并乘以编码系数得到ΔP,再读取校验块P,计算他们的和得到新校验块数据P’,即P’=P+ΔP,需要读取一次数据块和校验块,写一次数据块和一次校验块。两种更新方式中,都需要先读取部分数据,才能重新计算新的校验块。在分布式系统中,通常采用RS(k,m)的纠删码,即原始数据切片k块,编码出m块校验块,分别存储到k+m个节点中。纠删码覆盖写,需要至少m+1个节点的参与,包括1个数据节点,m个校验块节点。当覆盖数据范围变大时,需要的节点数也会更多。RS(k,m)的纠删码至多容忍m个节点丢失,需要k个节点才能解码原始数据,所以覆盖写更新需要保持至少k个节点数据版本一致,才能保证更新不会造成数据丢失。纠删码的复杂更新方式使其很少在实际分布式系统中,但随着纠删码越来越多的应用于多读多写的场景,将传统的将覆盖写转化成追加或者全读全覆盖的方式,耗费大量磁盘开销和网络开销。
技术实现思路
专利技术目的:针对现有技术中存在的问题,本专利技术提供一种基于分布式存储CEPH的纠删码覆盖写方法,解决了分布式存储系统CEPH不支持纠删码覆盖写的问题。技术方案:为实现上述目的,本专利技术提出一种分布式存储CEPH的纠删码覆盖写方法,包括以下步骤:步骤1:客户端节点发送写请求到Ceph的存储节点中的主OSD,主OSD自动选择最优编码方案(重构写或者增量写)后,计算需要读取的数据块,并根据客户端id和对象id,从缓存中读取数据块返回主OSD;该方法确定最优编码方案的具体步骤为:1)计算写请求涉及的编码条带范围:首先对齐写请求偏移到所在编码条带的首位置;然后根据写请求长度计算写范围的末尾偏移,并对齐到所在条带的末位置;最后根据对齐后的首偏移和尾偏移,得到覆盖写请求的条带覆盖范围偏移和长度;2)根据写请求的偏移和长度结合条带覆盖范围,计算不同编码方案需要预先读取的数据量:重构写需要读取数据量=对齐后计算得到的范围减去实际更新数据量;增量写需要读取数据量=实际更新数据量;3)根据需要读取的数据量动态选择编码方案:若对齐后计算得到的范围超过2个编码条带且至少有1个条带已经全覆盖,或者重构读取数据量小于增量写读取数据量,则采用重构写;否则,采用增量写。该方法主OSD从缓存中读取数据块的具体方法为:1)根据请求客户端cid检索缓存组,如果存在,则直接提取,如果没有则分配新的缓存组,如果空间足够,则直接分配,如果已分配数超过预定客户端缓存数时,从LRU链表中删除末尾客户端id,新建当前客户端cid的缓存组索引,并加入LRU结构;2)从缓存组中,根据对象oid和读取范围对应的数据块序号num检索Hashmap的索引结构,如果存在对应数据块,则直接返回;如果不存在,则发起读请求,在读数据返回后将数据块加入缓存组,在缓存满时,根据LRU算法删除最近最久未使用的数据块。步骤2:主OSD在接收完所有需要的读数据块后,将数据块存入缓存结构,并根据对应编码方法计算校验块更新所需的数据,然后更新数据块和校验块,发送到需要更新的对应OSD;该方法选择不同的编码方案时,更新校验块所需的数据量和方法不同,具体为:采用重构写时,读取覆盖写范围以外的条带数据,在读取对应数据后,和覆盖数据合并成新的完整块,编码出新的校验块;采用增量写时,读取覆盖写范围以内的条带数据,直
接读取新数据并返回,在读取对应数据后,计算覆盖数据D’和原始数据D的有限域差值ΔD,然后计算ΔD乘以对应编码系数的有限域乘后发送到对应的校验块存储节点。步骤3:数据块节点和校验块节点接收写请求,分配原始数据块附近的新存储位置存储新更新,并记录本次写请求元数据到日志PGLOG,数据和日志落盘后发送ACK给主OSD。步骤4:主OSD接收所有更新节点的ACK后,记录本次更新元数据到内存,并回复ACK给客户端,完成写请求。当主OSD接收所有更新节点的ACK回复超,即更新失败时,该方法还包括恢复数据的步骤,采用基于PGLOG日志的回滚机制恢复数据,具体为:1)PG层周期性进行Peering操作,拉取同组各OSD的PGLOG版本,对比各OSD的版本是否和权威版本一致,若一致,则不做处理,若不一致,则发送PGLOG权威版本到不一致节点;2)不一致节点收到Peering后的权威PGLOG,进行本地的PGLOG对比合并,发现本地版本超前后,遍历超前的PGLOG,将其加入to_rollback列表;3)处理完PGLOG版本后,PGLogEntryHandler遍历to_rollback列表,读取每一条pglog的回滚信息,并调用对应的回滚函数,读取pglog中记录的对象id,版本v,根据id和v索引更新时新分配的存储块,然后删除存储块;4)所有超前pglog回滚完成后,删除这部分pglog,更新本地pglog为权威版本。该方法不同编码方案对应的更新后校验块读取过程不同,具体为:1)根据对象id查找主节点的元数据信息对应的更新记录,遍历更新记录,检查是否和读请求偏移和长度有重叠,如果没有重叠,则按原始方法直接构造读请求发送对应节点;如果有重叠,则跳转步骤2;2)计算读请求和各重叠部分相关的偏移和长度,将这些构造为读请求的额外读中,根据数据块大小将读请求和额外读划分到各个分片的读请求中,并发送对应各节点;校验块节点根据读请求和额外读请求,读取对应对象数据,并将额外读请求数据按版本从小到大顺序合并入原始数据,合并过程中,检查额外读数据元数据信息中的更新方法,如果是重构写,则直接合并,如果是增量写,则计算对应位置原始数据和额外读数据的和,再合并,然后返回主节点。有益效果:本专利技术结合了CEPH系统的纠删码框架和恢复框架,以日志形式存储覆
盖数据,利用日志回滚机制解决更新失败时数据一致性问题;结合动态选择编码方案,自适应大块写和小块写的复杂场景;利用主节点的缓存机制,减少频繁局部写时的预读请求,以及通过隔离不同客户端的缓存,防止大块写影响小块写的命中率。这些机制的配合从整体上可以减少纠删码覆盖写的磁盘开销和网络开销。附图说明图1是CEPH中纠删码条带存储示意图;图2是CEPH中纠删码覆盖写请求时序图;图3是CEPH中纠删码覆盖写的重构更新方式示意图;图4是CEPH中纠删码覆盖写的增量更新方式示意图。具体实施方式下面结合实施例对本专利技术做更进一步的说明。分布式存储CEPH的纠删码覆盖写方法,具体包本文档来自技高网
...

【技术保护点】
一种分布式存储CEPH的纠删码覆盖写方法,其特征在于,包括以下步骤:1)客户端节点发送写请求到Ceph的存储节点中的主OSD,主OSD自动选择最优编码方案后,计算需要读取的数据块,并根据客户端id和对象id,从缓存中读取数据块返回主OSD;2)主OSD在接收完所有需要的读数据块后,将数据块存入缓存结构,并根据对应编码方法计算校验块更新所需的数据,然后更新数据块和校验块,发送到需要更新的对应OSD;3)数据块节点和校验块节点接收写请求,分配原始数据块附近的新存储位置存储新更新,并记录本次写请求元数据到日志PGLOG,数据和日志落盘后发送ACK给主OSD;4)主OSD接收所有更新节点的ACK后,记录本次更新元数据到内存,并回复ACK给客户端,完成写请求。

【技术特征摘要】
1.一种分布式存储CEPH的纠删码覆盖写方法,其特征在于,包括以下步骤:1)客户端节点发送写请求到Ceph的存储节点中的主OSD,主OSD自动选择最优编码方案后,计算需要读取的数据块,并根据客户端id和对象id,从缓存中读取数据块返回主OSD;2)主OSD在接收完所有需要的读数据块后,将数据块存入缓存结构,并根据对应编码方法计算校验块更新所需的数据,然后更新数据块和校验块,发送到需要更新的对应OSD;3)数据块节点和校验块节点接收写请求,分配原始数据块附近的新存储位置存储新更新,并记录本次写请求元数据到日志PGLOG,数据和日志落盘后发送ACK给主OSD;4)主OSD接收所有更新节点的ACK后,记录本次更新元数据到内存,并回复ACK给客户端,完成写请求。2.根据权利要求1所述的分布式存储CEPH的纠删码覆盖写方法,其特征在于,步骤1确定最优编码方案的具体步骤为:1)计算写请求涉及的编码条带范围:首先对齐写请求偏移到所在编码条带的首位置;然后根据写请求长度计算写范围的末尾偏移,并对齐到所在条带的末位置;最后根据对齐后的首偏移和尾偏移,得到覆盖写请求的条带覆盖范围偏移和长度;2)根据写请求的偏移和长度结合条带覆盖范围,计算不同编码方案需要预先读取的数据量:重构写需要读取数据量=对齐后计算得到的范围减去实际更新数据量;增量写需要读取数据量=实际更新数据量;3)根据需要读取的数据量动态选择编码方案:若对齐后计算得到的范围超过2个编码条带且至少有1个条带已经全覆盖,或者重构读取数据量小于增量写读取数据量,则采用重构写;否则,采用增量写。3.根据权利要求1所述的分布式存储CEPH的纠删码覆盖写方法,其特征在于,步骤1主OSD从缓存中读取数据块的具体方法为:1)根据请求客户端cid检索缓存组,如果存在,则直接提取,如果没有则分配新的缓存组,如果空间足够,则直接分配,如果已分配数超过预定客户端缓存数时,从LRU链表中删除末尾客户端id,新建当前客户端cid的缓存组索引,并加入LRU结构;2)从缓存组中,根据对象oid和读取范围对应的数据块序号num检索Hashmap的
\t索引结构,如果存在对应数据块,则直接返回;如果不存在,则发起读请求,在读数据返回后将数据块加入缓存组,在缓存满时,根据LRU算法删除最近最久未使用的数据块。4.根据权利要求1所述的分布式存储CEPH的纠删码覆盖写方法,其特征在于,步骤2选择不...

【专利技术属性】
技术研发人员:瞿天善叶保留陆桑璐
申请(专利权)人:南京大学
类型:发明
国别省市:江苏;32

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

1