一种基于固态硬盘的弹性高可用缓存方法与流程

文档序号:11177059阅读:528来源:国知局
一种基于固态硬盘的弹性高可用缓存方法与流程

本发明涉及一种ssd的缓存方法,尤其是涉及一种基于固态硬盘的弹性高可用缓存方法。



背景技术:

ssd(固态硬盘)是一种相对于传统磁盘来说,价格昂贵,容量小,但性能优异的存储介质。目前在企业级的存储市场上ssd被用来作为高性能存储系统的组件。但是由于其价格昂贵,存储系统中无法全部使用ssd来作为存储介质,所以目前一般使用ssd和磁盘的混合存储方式。该方式既可提高系统性能,又不至于价格过分昂贵。

混合存储方式包含多种使用机制,其中最通用的就是缓存机制,使用ssd来作为磁盘的缓存。这样既可以发挥出ssd的高性能,又能利用磁盘容量大、价格便宜的优势。

当前基于ssd的缓存主要是以一个ssd和一个磁盘绑定的方式进行使用,该种使用方式会带来以下缺点:

1.存储系统中会存在热点区域,一对一绑定很难发挥出多个ssd的总体性能。

2.每个ssd盘被限定给特定磁盘使用,无法在系统中共享所有缓存资源。

3.在系统维护阶段,很难改变缓存的容量,需要放弃原有缓存数据,重新配置缓存,运维需要大量人力物力的投入。

4.在任意一块ssd损坏的情况下,都会导致缓存数据丢失。



技术实现要素:

本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种基于固态硬盘的弹性高可用缓存方法,可以最大化的发挥系统性能、减少系统运维成本并提高存储系统可用性。

本发明的目的可以通过以下技术方案来实现:

一种基于固态硬盘的弹性高可用缓存方法,包括:

1)基于分布式哈希建立一具有dht环的缓存池,所述dht环上映射有多个ssd的存储资源;

2)将磁盘地址空间映射于所述缓存池中;

3)为每个磁盘创建一对应的逻辑设备,通过该逻辑设备实现ssd与磁盘间的数据分发。

所述步骤1)中,所述dht环通过以下方式获得:

101)为各ssd分配一唯一的标识id;

102)根据所述标识id,采用分布式哈希算法将各ssd的存储资源放置于dht环中。

所述步骤2)具体为:

201)为各磁盘分配一唯一的标识id;

202)根据所述标识id,对各磁盘的空间地址进行编码;

203)将编码后的空间地址映射到所述dht环上。

所述步骤202)中,采用的编码方式为64位地址编码,其中0-47位是磁盘内部地址偏移,48-59位是磁盘的标识iid,60-63位是保留扩展区。

所述步骤3)中,通过逻辑设备实现ssd与磁盘间的数据分发具体为:

逻辑设备截获发给对应磁盘的数据,根据该磁盘的空间地址在dht环上获得该数据对应的ssd,实现缓存。

所述根据该磁盘的空间地址在dht环上获得该数据对应的ssd具体为:

逻辑设备根据ssd中数据块的大小将截获的数据切割成若干数据块,根据各数据块地址进行一次分布式哈希计算,获得缓存池中对应的ssd,再通过第二次分布式哈希计算获得ssd内部的数据区域。

该方法在动态调整缓存池中ssd的个数时,缓存池进行数据重新映射调整,创建一新dht环,将原dht环上的数据迁移至所述新dht环上,不再对原dht环进行资源分配。

进行数据访问时,首先查询新dht环是否存在缓存,若是,则进行数据响应,若否,则对原dht环进行查询。

该方法对脏数据进行多副本配置,将磁盘的同一个编码地址映射到两个不同的ssd上,在获对应的ssd后,按顺时针方向以第一个ssd为第一副本,以第二个ssd为第二副本,以此类推,实现多副本缓存。

与现有技术相比,本发明具有以下优点:

(1)本发明根据分布式哈希(dht)算法进行数据分布,建立具有dht环的缓存池,使得缓存在使用过程中能够把热点磁盘或者热点区域的数据分散到不同的ssd上,提高了数据的并行度,从而提高了系统性能。

(2)本发明增加、减少池中ssd盘,无需停止前台数据访问,缓存自身进行数据重新映射调整,根据分布式哈希算法使得数据重新均衡分布,能够在读、写数据不间断的情况下进行缓存池的扩张和收缩。

(3)本发明为缓存池提供脏数据副本机制,既可以提高系统的可用性,又不至于浪费过多的ssd空间。

附图说明

图1为本发明的ssd缓存池示意图;

图2为本发明的分布式哈希算法原理示意图;

图3为本发明中磁盘地址编码示意图;

图4为ssd内部数据区域划分示意图;

图5为缓存数据分发示意图;

图6为数据迁移示意图。

具体实施方式

下面结合附图和具体实施例对本发明进行详细说明。本实施例以本发明技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。

本实施例提供一种基于固态硬盘的弹性高可用缓存方法,包括:1)基于分布式哈希建立一具有dht环的缓存池,所述dht环上映射有多个ssd的存储资源;2)将磁盘地址空间映射于所述缓存池中;3)为每个磁盘创建一对应的逻辑设备,通过该逻辑设备实现ssd与磁盘间的数据分发。

1、缓存池创建

为各ssd分配一唯一的标识id,根据所述标识id,采用分布式哈希算法将各ssd的存储资源放置于dht环中,创建基于分布式哈希的缓存池,其结构如图1所示,格式化ssd并加入到池中,加入原理示意图如图2所示。

ssd存储空间被划分成元数据区和数据区,如图4所示。元数据区用于存储该ssd相关信息和数据映射信息。数据区划分为同等大小的数据区域(extent),这些extent作为dht算法的基本单元,也是数据迁移的基本单元。在extent中把存储资源划分为同等大小数据块(sippet),并创建资源分配器,用缓存资源的申请和访问。该资源分配器可以为传统jhash或者b-tree算法。

2、格式化磁盘并创建与磁盘相关的逻辑设备

为各磁盘分配一唯一的标识id,根据所述标识id,对各磁盘的空间地址进行编码,将编码后的空间地址映射到所述dht环上。磁盘的逻辑设备与缓存池中的ssd相关联。

磁盘存储空间划分为元数据区和数据区。元数据区功能同ssd,数据区使用统一的线性空间访问方式。

磁盘中的数据按照图3所示,进行地址空间重新编码,其中0-47位是磁盘内部地址偏移,48-59位是磁盘id,60-63位是保留扩展区。

3、数据分发

数据首先发送到逻辑设备上,然后根据sippet的大小,数据被切割成若干对齐的数据块,再把这些数据块的地址按照如图3所示方法进行编码,用该编码通过dht算法,计算出ssd池中与其对应的ssd盘,再通过第二次dht算法在ssd内部计算出与其对应的extent。然后通过extent上的分配器查询该地址是否在缓存中,如图5所示。如果命中,则在ssd上进行数据响应;如果没命中,则需要分配器从extent中分配相应的sippet资源,然后根据写回或者写穿策略进行数据响应。

如果配置脏数据多副本机制,并且数据操作为写入操作的时候,则在第一次dht计算ssd时,计算出额外的ssd副本。读取操作,只计算第一副本进行操作。

4、数据迁移

如图6所示,在需要增加或者减少池中ssd的时候,无需停止前台数据访问,缓存自身进行数据重新映射调整,根据分布式哈希算法使得数据重新均衡分布。可以创建一个新的dht环(dht2,原dht环为dht1),数据访问的时候,需要先查询dht2,如果没有命中,还需要查询dht1,如果都没有命中,则认为缓存没有命中,如果任何一个命中,则认为命中。

在dht1中不再进行资源分配,只进行缓存查询。如果迁移过程中数据访问没有命中,则在dht2中分配缓存资源。

5、数据恢复

该方法可对脏数据进行多副本配置,将磁盘的同一个编码地址映射到两个不同的ssd上,在获对应的ssd后,按顺时针方向以第一个ssd为第一副本,以第二个ssd为第二副本,以此类推,实现多副本缓存。

在脏数据多副本的配置下,如果一个ssd丢失,对于其上存储的数据,可以把脏数据从另一个ssd盘上的数据副本上进行数据恢复,对于干净的数据,则可以直接从磁盘上进行数据恢复。根据用户需要加入新的ssd替换原有ssd,或者直接删除丢失的ssd,然后进行上述数据迁移即可恢复所有数据。

以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1