数据存储方法和设备与流程

文档序号:14950346发布日期:2018-07-17 22:24阅读:220来源:国知局

本申请涉及计算机领域,尤其涉及一种数据存储方法和设备。



背景技术:

随着大数据时代的到来,传统的集中式数据存储系统已经无法满足大规模数据存储的需求。为了满足大规模数据存储的需求,确保数据存储的可靠性和安全性,出现了分布式数据存储系统。ceph是一种开源的分布式数据存储系统,能够将数据分散存储在通过多个存储节点,即,多台存储服务器上,实现数据的分布式存储,提高数据存储系统的可靠性、可用性和存取效率。

在实际应用中,ceph分布式数据存储系统通过三级映射,实现数据的分布式存储。首先,将需要存储的文件数据(file)划分为若干个数据大小一致的对象数据(object),实现file到object的映射;然后,通过哈希算法将任一个object分配到一个归置组(placementgroup,pg)中,实现object到pg的映射;最后,通过伪随机数据分布算法(controlledreplicationunderscalablehashing,crush)将任一个pg中包含的object存储到对象存储集群中不同的对象存储设备(objectstoragedevice,osd)中,实现pg到osd的映射。

但是,由于ceph分布式数据存储系统需要在数据存储过程中进行哈希运算、实现数据的映射存储,因此数据的存储效率较低,无法满足高速读写的需求。



技术实现要素:

鉴于此,本申请实施例提供一种数据存储方法和设备,以提高ceph分布式数据存储系统的数据存储效率。

根据本申请实施例的一种数据存储方法,应用于ceph分布式数据存储系统,并且包括:将待存储数据划分到n个对象中,其中,n为正整数;将n个对象分配到m个归置组中,其中,m为小于n的正整数;对于m个归置组中的任意一个归置组,基于存储映射表确定与该归置组对应的至少三个对象存储设备,其中,存储映射表中包含归置组与对象存储设备之间的映射关系,并且基于伪随机数据分布算法,将该归置组中包含的各个对象存储到与该归置组对应的相应对象存储设备中。

根据本申请实施例的一种数据存储设备,应用于ceph分布式数据存储系统,并且包括:划分单元,被配置用于将待存储数据划分到n个对象中,其中,n为正整数;分配单元,被配置用于将n个对象分配到m个归置组中,其中,m为小于n的正整数;存储单元,被配置用于对于m个归置组中的任意一个归置组,基于存储映射表确定与该归置组对应的至少三个对象存储设备,其中,存储映射表中包含归置组与对象存储设备之间的映射关系,并且基于伪随机数据分布算法,将该归置组中包含的各个对象存储到与该归置组对应的相应对象存储设备中。

根据本申请实施例的数据存储方法和系统,在将待存储数据划分为n个对象并将n个对象分配到m个归置组中之后,通过预先确定的存储映射表直接查找到与任意一个归置组对应的至少三个对象存储设备,进而通过伪随机数据分布算法将任意一个归置组中包含的对象存储到与该归置组对应的相应对象存储设备中,可以提高ceph分布式数据存储系统中的数据存储效率,有效实现数据在ceph分布式数据存储系统中的高速读写。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为根据本申请实施例的一种数据存储方法的流程示意图;

图2为根据本申请实施例的ceph分布式数据存储系统的系统启动的过程示意图;

图3为根据本申请实施例的ceph分布式数据存储系统的设定存储节点的过程示意图;

图4为根据本申请实施例的ceph分布式数据存储系统的数据存储的过程示意图;

图5为根据本申请实施例的ceph分布式数据存储系统的对象存储设备的故障修复的过程示意图;

图6为根据本申请实施例的ceph分布式数据存储系统的存储节点的故障修复的过程示意图;

图7为根据本申请实施例的数据存储设备的结构示意图。

具体实施方式

在实际应用中,ceph分布式数据存储系统主要包括客户端、元数据服务器、对象存储集群、以及监视器(monitor,以下简称cephmon)四部分,其中:客户端表示当前数据用户所在的存储节点;元数据服务器用来缓存和同步描述数据属性的信息(例如,数据的存储位置、历史数据、记录文件等);对象存储集群包含多个用于数据存储的存储节点,监视器用来对整个ceph分布式数据存储系统执行监控功能。

在ceph分布式数据存储系统存储数据的过程中,为待存储文件(file)分配一个索引节点号(inodenumber,ino),该ino是该file的唯一标识符;当待存储file的数据量较大时,需要将该file划分到统一大小的一系列object中进行存储。这里,最后一个object的大小可以不同于前面的object。

在ceph大规模存储集群中,object的数目较多,每个object包含的数据量较小,如果通过遍历寻址的读写方式对object进行存储,会严重影响数据存储速率。同时,如果将object通过某种固定映射的哈希算法映射到osd上存储,当这个osd损坏时object无法自动迁移至其他空闲osd上,从而造成数据丢失。因此,通常将数据量较大的object分配到若干个pg中。

通过ino与对象号(objectnumber,ono)能够确定任意一个object的对象标识码(objectindentification,oid)。对于任意一个object,使用静态哈希hash函数对oid做hash确定该object的哈希值,用该哈希值与pg的数目进行取模运算确定该object对应的pg的pg标识码(pgid),进而实现该object到pg的映射。

pg是一个object的概念容器,也是一个逻辑概念,在ceph分布式数据存储系统中是虚拟存在,用于对object的存储进行组织和位置映射。一个pg负责组织若干个object,但是一个object只能被映射到一个pg中,即pg与object之间是“一对多”映射。合理设置pg的数量能够确保数据分布的均匀性。

ceph分布式数据存储系统通过伪随机数据分布算法(crush)确定任意一个pg对应的osd,进而将该pg中的object存储到该pg中的相应osd中,实现pg到osd的映射。一个osd上会承载大量的pg,即pg与osd之间是“多对多”映射。通过crush算法,既能避免存储节点单点故障时的数据丢失,又能避免依赖元数据进行存储,有效提高了数据存储效率。

但是,由于ceph分布式数据存储系统需要在数据存储过程中进行哈希运算以及哈希值与pg数目之间的取模运算,导致数据存储效率较低,无法满足高速读写的需求。

为了实现本申请的目的,本申请实施例提供一种数据存储方法和设备,在将待存储数据划分为n个object并将n个object分配到m个pg中之后,通过预先确定的存储映射表直接查找与任意一个pg对应的至少三个osd,进而通过crush算法将任意一个pg中包含的各个object存储到与该pg对应的相应osd中,从而可以提高ceph分布式数据存储系统中的数据存储效率,有效实现数据在ceph分布式数据存储系统中的高速读写。

下面结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

以下结合附图,详细说明本申请各实施例提供的技术方案。

实施例1

图1为本申请实施例提供的一种数据存储方法的流程示意图。该数据存储方法可以应用于ceph分布式数据存储系统中,并且可以包括如下步骤。

步骤11:将待存储数据划分到n个对象object中,其中,n为正整数。

在步骤11中,为了实现对象存储,将待存储数据划分到n个object中。这里,每个object都具有不同于其他object的对象标识码。n个object的数据量可以相同,也可以不相同,这里不做具体限定。

步骤12:将n个object按照对象大小分配到m个归置组pg中,其中,m为小于n的正整数。

在步骤12中,将步骤11中划分得到的n个object按照对象大小分配到m个pg中,实现对object的分组存储。需要说明的是,任意一个pg具有不同于其他pg的归置组标识码。为了实现数据的均匀分布,n个object按照对象大小均匀分配到m个pg中。例如,当500个object被分配到100个pg中时,每个pg中包含5个object。

步骤13:通过存储映射表确定与任意一个pg对应的至少三个对象存储设备osd,其中,存储映射表中包含pg与osd之间的映射关系。

在步骤13中,根据ceph分布式数据存储系统中预先存储的存储映射表,cephmon确定与任意一个pg对应的至少三个osd。在ceph分布式数据存储系统中,一个object要保存至少三个副本,即一个object要存储到至少三个osd中。由于一个object只映射到一个pg中,因此任意一个pg需要与至少三个osd之间建立映射关系,才能确保一个object能够存储到至少三个osd中。

步骤14:对于任意一个pg,通过crush算法将该pg中包含的各个object存储到与该pg对应的相应osd中。

在步骤14中,对于任意一个pg,由于在步骤13中已经确定了与该pg对应的至少三个osd,因此通过crush算法能够将该pg中包含的各个object存储到与该pg对应的相应osd中,实现待存储数据的分布式存储。

在本申请的可选实施例中,可以通过以下方式创建存储映射表。具体地,创建存储映射表的处理包括:

首先,从内存中读取各个osd的哈希值。具体地,cephmon读取内存中存储的各个osd的哈希值。

其次,建立任意一个pg与至少三个osd之间的映射关系。具体地,cephmon建立任意一个pg与至少三个osd之间的映射关系。需要说明的是,与pg建立映射关系的osd是空闲osd,即能够实现数据存储功能的osd。

最后,将pg与osd之间的映射关系存储在存储映射表中。

通过读取内存中存储的各个osd的哈希值,建立每个pg与至少三个osd之间的映射关系,避免了计算哈希值造成的存储效率较低的问题。

在本申请的可选实施例中,可以通过以下方式确定各个osd的哈希值。具体地,确定各个osd的哈希值的处理包括:

首先,从系统文件夹中调用预设数目的存储节点的设备信息,其中,任意一个存储节点中包含至少三个osd。需要说明的是,存储节点的设备信息包括但不限于与存储节点对应的ip地址、机器名称等设备信息。

其次,根据任意一个存储节点的设备信息,计算该存储节点中的各个osd的哈希值。

最后,将预设数目的存储节点中的各个osd的哈希值存储在内存中。

图2为根据本申请实施例的ceph分布式数据存储系统的系统启动的过程示意图。如图2所示,在ceph分布式数据存储系统启动时,cephmon调用系统文件夹中存储的3个存储节点的设备信息,根据任意一个存储节点的设备信息计算该存储节点中的各个osd的哈希值,并将这些osd的哈希值存储在内存中。

在本申请的可选实施例中,可以通过以下方式确定存储节点的设备信息:

首先,在节点扫描脚本中设定预设数目的存储节点的设备信息;

然后,通过解析节点扫描脚本,将预设数目的存储节点的设备信息存储在系统文件夹中。

图3为根据本申请实施例的ceph分布式数据存储系统的设定存储节点的过程示意图。如图3所示,cephmon在ceph分布式数据存储系统的节点扫描脚本中设定3个存储节点的设备信息,进而通过解析节点扫描脚本将该3个存储节点的设备信息存储在系统文件夹中。

图4为根据本申请实施例的ceph分布式数据存储系统的数据存储的过程示意图。如图4所示,cephmon在确定了与某一个pg对应的三个osd(osd1、osd2和osd3)之后,通过crush算法将该pg中包含的各个object存储到与该pg对应的相应osd中。

在本申请的可选实施例中,根据本申请实施例的数据存储方法还包括:当存储有object的osd发生故障时,计算该osd所在的存储节点中的各个osd的更新哈希值;根据该存储节点中的各个osd的更新哈希值,确定该存储节点中的空闲osd;将发生故障的osd中存储的object存储到空闲osd中。

图5为根据本申请实施例的ceph分布式数据存储系统的osd故障修复的过程示意图。如图5所示,当ceph分布式数据存储系统的对象存储集群中存储有object的osd2发生故障时,osd2所在的存储节点启动故障修复,重新计算该存储节点中的各个osd的哈希值(即,计算这些osd的更新哈希值),并且根据该存储节点中的各个osd的更新哈希值,确定该存储节点中的空闲osdx,进而将发生故障的osd2中存储的object存储到空闲osdx中。

在本申请的可选实施例中,根据本申请实施例的数据存储方法还包括:当存储有归置组的存储节点发生故障时,在节点扫描脚本中增加空闲存储节点;通过crush算法将发生故障的存储节点中存储的归置组存储到空闲存储节点中。

图6为根据本申请实施例的ceph分布式数据存储系统的存储节点故障修复的过程示意图。如图6所示,当ceph分布式数据存储系统的对象存储集群中的任意一个存储节点node3发生故障时,cephmon更新节点扫描脚本,在节点扫描脚本中增加空闲存储节点node4的设备信息,进而通过crush算法将故障存储节点node3中存储的pg存储到空闲存储节点node4中。

在ceph分布式数据存储系统中,在将待存储数据划分为n个object并将n个object按照对象大小分配到m个pg中之后,通过预先确定的存储映射表能够直接查找到与任意一个pg对应的至少三个osd,进而能够通过crush算法将任意一个pg存储到与该pg对应的各个osd中,从而提高ceph分布式数据存储系统中的数据存储效率,有效实现数据在ceph分布式数据存储系统中的高速读写。

实施例2

图7为根据本申请实施例的一种数据存储设备的结构示意图。如图7所示,根据本申请实施例的数据存储设备70包括划分单元701、分配单元702、和存储单元703,其中:划分单元701被配置用于将待存储数据划分到n个对象object中,其中,n为正整数;分配单元702被配置用于将n个object按照对象大小分配到m个归置组pg中,其中,m为小于n的正整数;存储单元703被配置用于对于m个归置组中的任意一个归置组,基于存储映射表确定与该归置组pg对应的至少三个对象存储设备osd,其中,存储映射表中包含pg与osd之间的映射关系,并且基于伪随机数据分布crush算法将该pg中包含的各个对象存储到与该pg对应的相应osd中。

在本申请的可选实施例中,数据存储设备70还包括:读取单元704和映射单元705,其中:读取单元705被配置用于从内存中读取各个osd的哈希值;映射单元706被配置用于对于m个归置组中的任意一个归置组,建立该pg与至少三个osd之间的映射关系,并将所建立的映射关系存储在存储映射表中。

在本申请的可选实施例中,数据存储设备70还包括调用单元706和计算单元707,其中:调用单元706被配置用于从系统文件夹中调用预设数目的存储节点的设备信息,其中,任意一个存储节点中包含至少三个osd;计算单元707被配置用于对于预设数目的存储节点中的任意一个存储节点,根据该存储节点的设备信息计算该存储节点中的各个osd的哈希值,并将各个osd的哈希值存储在内存中。

在本申请的可选实施例中,数据存储设备70还包括设定单元708,其中:设定单元709被配置用于在节点扫描脚本中设定预设数目的存储节点的设备信息,并通过解析节点扫描脚本将预设数目的存储节点的设备信息存储在系统文件夹中。

在本申请的可选实施例中,计算单元707还被配置用于当存储有对象的osd发生故障时,计算该osd所在的存储节点中的各个osd的更新哈希值;存储单元703还被配置用于根据该存储节点中的各个osd的更新哈希值,确定该存储节点中的空闲osd,并将发生故障的osd中存储的对象存储到空闲osd中。

在本申请的可选实施例中,设定单元709还被配置用于当存储有归置组的任意一个存储节点发生故障时,在节点扫描脚本中增加空闲存储节点;存储单元703还被配置用于通过crush算法将发生故障的存储节点中存储的pg存储到空闲存储节点中。

根据本申请实施例的数据存储设备在将待存储数据划分为n个object并将n个object按照对象大小分配到m个pg中之后,通过预先确定的存储映射表能够直接查找到与任意一个pg对应的至少三个osd,进而能够通过crush算法将任意一个pg存储到与该pg对应的各个osd中,从而提高ceph分布式数据存储系统中的数据存储效率,有效实现数据在ceph分布式数据存储系统中的高速读写。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

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