CN111522883B - 对象数据的备份方法、装置、设备及存储介质 - Google Patents
对象数据的备份方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111522883B CN111522883B CN202010349216.4A CN202010349216A CN111522883B CN 111522883 B CN111522883 B CN 111522883B CN 202010349216 A CN202010349216 A CN 202010349216A CN 111522883 B CN111522883 B CN 111522883B
- Authority
- CN
- China
- Prior art keywords
- storage node
- hash
- object data
- storage
- information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/275—Synchronous replication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/273—Asynchronous replication or reconciliation
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种对象数据的备份方法、装置、设备及存储介质,属于数据存储技术领域。所述方法包括:读取异步备份任务表中的异步备份任务,该异步备份任务中包括第一哈希参数和第一哈希环信息,该异步备份任务是指对该第一存储节点中的第一对象数据进行备份的任务,该第一哈希环信息指示的第一哈希环包括该云存储***中的多个存储节点。根据该第一哈希参数和该第一哈希环信息,确定第二存储节点,该第二存储节点是指用于对该第一对象数据进行备份的存储节点,将该第一对象数据备份至该第二存储节点中。在本申请中,可以动态确定用于备份的第二存储节点,可以避免某对象数据只能存储一份的情况,从而保证了存储的稳定性。
Description
技术领域
本申请涉及数据存储技术领域,特别涉及一种对象数据的备份方法、装置、设备及存储介质。
背景技术
在云存储***中,为了提升存储的可靠性,对象数据在写入时,一般会在不同的存储节点中进行备份,如此,当云存储***中的一个或多个存储节点发生故障时,不影响对象数据的读写业务。
在相关技术中,一般采取的备份方式是按照固定方式对云存储***中的存储节点进行分组,在组内进行多副本存储。譬如,若云存储***中包括存储节点A、存储节点B、存储节点C和存储节点D,在分组时可以将存储节点A和存储节点B分为一组,存储节点C和存储节点D分为一组。
然而,在上述方式中,由于采用固定方式进行分组备份,但若云存储***中的存储节点的数量为奇数个,将导致一些对象数据只能存储一份,从而使得存储的稳定性较差。
发明内容
本申请提供了一种对象数据的备份方法、装置、设备及存储介质,可以解决相关技术的一些对象数据只能存储一份,使得存储的稳定性较差的问题。所述技术方案如下:
一方面,提供了一种对象数据的备份方法,应用于第一存储节点,所述第一存储节点为云存储***中的任一存储节点,所述方法包括:
读取异步备份任务表中的异步备份任务,所述异步备份任务中包括第一哈希参数和第一哈希环信息,所述异步备份任务是指对所述第一存储节点中的第一对象数据进行备份的任务,所述第一哈希环信息指示的第一哈希环包括所述云存储***中的多个存储节点;
根据所述第一哈希参数和所述第一哈希环信息,确定第二存储节点,所述第二存储节点是指用于对所述第一对象数据进行备份的存储节点;
将所述第一对象数据备份至所述第二存储节点中。
在本申请一种可能的实现方式中,所述根据所述第一哈希参数和所述第一哈希环信息,确定第二存储节点,包括:
基于所述第一哈希环信息,确定所述第一哈希环中是否存在其他存储节点在线,所述其他存储节点是指除所述第一存储节点之外的存储节点;
若所述第一哈希环中存在其他存储节点在线,根据所述第一哈希环信息,确定所述第一哈希环中的存储节点数量;
根据所述第一哈希参数和所述存储节点数量进行哈希运算,得到哈希值;
从所述第一哈希环中确定所述哈希值对应的存储节点;
若所述哈希值对应的存储节点是所述第一存储节点,且在所述第一哈希环中所述第一存储节点的下一个存储节点在线,则将所述第一存储节点的下一个存储节点确定为所述第二存储节点。
在本申请一种可能的实现方式中,所述从所述第一哈希环中确定所述哈希值对应的存储节点之后,还包括:
若所述哈希值对应的存储节点是所述第一存储节点的上一个存储节点,且所述第一存储节点的上一个存储节点在线,将所述第一存储节点的上一个存储节点确定为所述第二存储节点;或者,
若所述哈希值对应的存储节点是所述第一存储节点的上一个存储节点,且所述第一存储节点的上一个存储节点不在线,如果所述第一存储节点的下一个存储节点在线,将所述第一存储节点的下一个存储节点确定为所述第二存储节点。
在本申请一种可能的实现方式中,所述从所述第一哈希环中确定所述哈希值对应的存储节点之后,还包括:
若所述哈希值对应的存储节点不是所述第一存储节点,且不是所述第一存储节点的上一个存储节点,则如果所述哈希值对应的存储节点在线,将所述哈希值对应的存储节点确定为所述第二存储节点。
在本申请一种可能的实现方式中,所述基于所述第一哈希环信息,确定所述第一哈希环中是否存在其他存储节点在线之后,还包括:
若所述第一哈希环中不存在其他存储节点在线,则获取最新的哈希环信息;
基于所述最新的哈希环信息和所述第一哈希参数,从所述最新的哈希环信息对应的哈希环中,确定所述第二存储节点。
在本申请一种可能的实现方式中,所述方法还包括:
接收所述第一对象数据的写入请求,所述写入请求携带所述第一哈希参数和所述第一哈希环信息;
基于所述第一哈希参数和所述第一哈希环信息,确定主存储节点;
将所述第一对象数据存储至所述主存储节点;
在将所述第一对象数据成功存储至所述主存储节点的情况下,从所述第一哈希环中确定所述主存储节点的下一个存储节点;
如果所述主存储节点的下一个存储节点不在线,在所述异步备份任务表中记录所述异步备份任务。
在本申请一种可能的实现方式中,所述从所述第一哈希环中确定所述主存储节点的下一个存储节点之后,还包括:
如果所述主存储节点的下一个存储节点在线,向所述主存储节点的下一个存储节点写入所述第一对象数据;
在向所述主存储节点的下一个存储节点写入所述第一对象数据失败的情况下,在所述异步备份任务表中记录所述异步备份任务。
在本申请一种可能的实现方式中,所述方法还包括:
读取副本补充任务,所述副本补充任务是在确定存在存储节点离线事件的情况下生成的,所述副本补充任务包括离线存储节点的节点信息和离线时间点;
巡检本地的对象索引信息表中的索引信息;
若根据所述节点信息、所述离线时间点和所述对象索引信息表中的索引信息,确定所述离线存储节点为用于存储目标索引信息对应的第二对象数据的存储节点,则基于所述目标索引信息,在所述异步备份任务表中记录所述异步备份任务,所述目标索引信息为所述对象索引信息表中的索引信息。
在本申请一种可能的实现方式中,所述索引信息包括对应的对象数据的存储时间点、以及对应的哈希环信息,所述方法还包括:
若所述对象索引信息表中存在对应的存储时间点位于所述离线时间点之前的索引信息,则将对应的存储时间点位于所述离线时间点之前的索引信息确定为所述目标索引信息;
如果根据所述节点信息、以及所述目标索引信息对应的哈希环信息,确定在所述目标索引信息对应的第二哈希环中,所述离线存储节点为所述第一存储节点的上一个存储节点,或者,所述离线存储节点为所述第一存储节点的下一个存储节点,则确定所述离线存储节点为用于存储所述目标索引信息对应的第二对象数据的存储节点。
在本申请一种可能的实现方式中,所述方法还包括:
接收读取请求,所述读取请求携带索引信息和所述第一哈希环信息;
若本地存在所述索引信息对应的第一对象数据,返回所述第一对象数据;
若本地不存在所述索引信息对应的第一对象数据,根据所述第一哈希环信息,读取所述第一对象数据。
在本申请一种可能的实现方式中,所述读取请求中携带第一哈希参数,所述第一哈希环信息还包括所述第一哈希环的版本信息,所述根据所述第一哈希环信息,读取所述第一对象数据,包括:
根据所述第一哈希环信息,确定所述第一哈希环中所述第一存储节点的下一个存储节点;
若从第一存储节点的下一个存储节点中未读取到所述第一对象数据,则根据所述第一哈希环的版本信息,确定版本低于所述第一哈希环的版本的所有哈希环;
按照版本从高到低的顺序,从所述所有哈希环中多次选择哈希环;
每选择一个哈希环,根据当前所选择的哈希环和所述第一哈希参数,从当前所选择的哈希环中确定存储节点,并从所确定的存储节点中读取所述第一对象数据;直到读取到所述第一对象数据为止。
另一方面,提供了一种对象数据的备份装置,配置于第一存储节点,所述第一存储节点为云存储***中的任一存储节点,所述装置包括:
读取模块,用于读取异步备份任务表中的异步备份任务,所述异步备份任务中包括第一哈希参数和第一哈希环信息,所述异步备份任务是指对所述第一存储节点中的第一对象数据进行备份的任务,所述第一哈希环信息指示的第一哈希环包括所述云存储***中的多个存储节点;
确定模块,用于根据所述第一哈希参数和所述第一哈希环信息,确定第二存储节点,所述第二存储节点是指用于对所述第一对象数据进行备份的存储节点;
备份模块,用于将所述第一对象数据备份至所述第二存储节点中。
在本申请一种可能的实现方式中,所述确定模块用于:
基于所述第一哈希环信息,确定所述第一哈希环中是否存在其他存储节点在线,所述其他存储节点是指除所述第一存储节点之外的存储节点;
若所述第一哈希环中存在其他存储节点在线,根据所述第一哈希环信息,确定所述第一哈希环中的存储节点数量;
根据所述第一哈希参数和所述存储节点数量进行哈希运算,得到哈希值;
从所述第一哈希环中确定所述哈希值对应的存储节点;
若所述哈希值对应的存储节点是所述第一存储节点,且在所述第一哈希环中所述第一存储节点的下一个存储节点在线,则将所述第一存储节点的下一个存储节点确定为所述第二存储节点。
在本申请一种可能的实现方式中,所述确定模块用于:
若所述哈希值对应的存储节点是所述第一存储节点的上一个存储节点,且所述第一存储节点的上一个存储节点在线,将所述第一存储节点的上一个存储节点确定为所述第二存储节点;或者,
若所述哈希值对应的存储节点是所述第一存储节点的上一个存储节点,且所述第一存储节点的上一个存储节点不在线,如果所述第一存储节点的下一个存储节点在线,将所述第一存储节点的下一个存储节点确定为所述第二存储节点。
在本申请一种可能的实现方式中,所述确定模块用于:
若所述哈希值对应的存储节点不是所述第一存储节点,且不是所述第一存储节点的上一个存储节点,则如果所述哈希值对应的存储节点在线,将所述哈希值对应的存储节点确定为所述第二存储节点。
在本申请一种可能的实现方式中,所述确定模块用于:
若所述第一哈希环中不存在其他存储节点在线,则获取最新的哈希环信息;
基于所述最新的哈希环信息和所述第一哈希参数,从所述最新的哈希环信息对应的哈希环中,确定所述第二存储节点。
在本申请一种可能的实现方式中,所述确定模块用于:
接收所述第一对象数据的写入请求,所述写入请求携带所述第一哈希参数和所述第一哈希环信息;
基于所述第一哈希参数和所述第一哈希环信息,确定主存储节点;
将所述第一对象数据存储至所述主存储节点;
在将所述第一对象数据成功存储至所述主存储节点的情况下,从所述第一哈希环中确定所述主存储节点的下一个存储节点;
如果所述主存储节点的下一个存储节点不在线,在所述异步备份任务表中记录所述异步备份任务。
在本申请一种可能的实现方式中,所述确定模块用于:
如果所述主存储节点的下一个存储节点在线,向所述主存储节点的下一个存储节点写入所述第一对象数据;
在向所述主存储节点的下一个存储节点写入所述第一对象数据失败的情况下,在所述异步备份任务表中记录所述异步备份任务。
在本申请一种可能的实现方式中,所述确定模块用于:
读取副本补充任务,所述副本补充任务是在确定存在存储节点离线事件的情况下生成的,所述副本补充任务包括离线存储节点的节点信息和离线时间点;
巡检本地的对象索引信息表中的索引信息;
若根据所述节点信息、所述离线时间点和所述对象索引信息表中的索引信息,确定所述离线存储节点为用于存储目标索引信息对应的第二对象数据的存储节点,则基于所述目标索引信息,在所述异步备份任务表中记录所述异步备份任务,所述目标索引信息为所述对象索引信息表中的索引信息。
在本申请一种可能的实现方式中,所述确定模块用于:
若所述对象索引信息表中存在对应的存储时间点位于所述离线时间点之前的索引信息,则将对应的存储时间点位于所述离线时间点之前的索引信息确定为所述目标索引信息;
如果根据所述节点信息、以及所述目标索引信息对应的哈希环信息,确定在所述目标索引信息对应的第二哈希环中,所述离线存储节点为所述第一存储节点的上一个存储节点,或者,所述离线存储节点为所述第一存储节点的下一个存储节点,则确定所述离线存储节点为用于存储所述目标索引信息对应的第二对象数据的存储节点。
在本申请一种可能的实现方式中,所述读取模块用于:
接收读取请求,所述读取请求携带索引信息和所述第一哈希环信息;
若本地存在所述索引信息对应的第一对象数据,返回所述第一对象数据;
若本地不存在所述索引信息对应的第一对象数据,根据所述第一哈希环信息,读取所述第一对象数据。
在本申请一种可能的实现方式中,所述读取请求中携带第一哈希参数,所述第一哈希环信息还包括所述第一哈希环的版本信息,所述读取模块用于:
根据所述第一哈希环信息,确定所述第一哈希环中所述第一存储节点的下一个存储节点;
若从第一存储节点的下一个存储节点中未读取到所述第一对象数据,则根据所述第一哈希环的版本信息,确定版本低于所述第一哈希环的版本的所有哈希环;
按照版本从高到低的顺序,从所述所有哈希环中多次选择哈希环;
每选择一个哈希环,根据当前所选择的哈希环和所述第一哈希参数,从当前所选择的哈希环中确定存储节点,并从所确定的存储节点中读取所述第一对象数据;直到读取到所述第一对象数据为止。
另一方面,提供了一种计算机设备,所述计算机设备包括处理器、通信接口、存储器和通信总线,所述处理器、所述通信接口和所述存储器通过所述通信总线完成相互间的通信,所述存储器用于存放计算机程序,所述处理器用于执行所述存储器上所存放的程序,以实现上述所述对象数据的备份方法的步骤。
另一方面,提供了一种计算机可读存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述所述对象数据的备份方法的步骤。
另一方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述所述的对象数据的备份方法的步骤。
本申请提供的技术方案至少可以带来以下有益效果:
第一存储节点读取异步备份任务表中的异步备份任务,该异步备份任务中包括第一哈希参数和第一哈希环信息,该异步备份任务是指对该第一存储节点中的第一对象数据进行备份的任务,该第一哈希环信息指示的第一哈希环包括该云存储***中的多个存储节点。根据该第一哈希参数和该第一哈希环信息,确定第二存储节点,该第二存储节点是指用于对该第一对象数据进行备份的存储节点,将该第一对象数据备份至该第二存储节点中。在本申请中,可以动态确定用于备份的第二存储节点,可以避免某对象数据只能存储一份的情况,从而保证了存储的稳定性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种哈希环的示意图;
图2是本申请实施例提供的一种云存储***的架构示意图;
图3是本申请实施例提供的一种对象数据的备份方法的流程图;
图4是本申请实施例提供的另一种哈希环的示意图;
图5是本申请实施例提供的另一种对象数据的备份方法的流程图;
图6是本申请实施例提供的一种对象数据的备份装置的结构示意图;
图7是本申请实施例提供的一种存储节点的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在对本申请实施例提供的对象数据的备份方法进行详细的解释说明之前,先对本申请实施例提供的相关术语和实施环境进行介绍。
首先,对本申请实施例涉及的相关术语进行简单介绍。
对象文件:是云存储***中的基本存储单元,每个对象文件对应一个唯一的键值(object-key),通过该键值可以访问对应的对象数据。
副本补充:云存储***中,每个对象数据在不同的存储节点中存在一个或者多个副本,若某个存储节点发生异常,可以将该存储节点上的对象数据复制到其他正常的存储节点上,从而保证对象数据始终都存在备份。
哈希环(HASH环):是指云存储***中所有在线的存储节点按规则排列组成的环。在进行对象数据的读写时,客户端可以根据该对象数据对应的哈希参数、以及哈希环中的存储节点数量计算得到一个哈希值,根据该哈希值即可定位到用于存储该对象数据的存储节点,然后直连该存储节点进行对象数据的读、写操作,哈希环中的存储节点存在一定的顺序,基于该顺序可以确定副本互备关系。譬如如图1所示,存储节点A、B、C、D、E组成一个哈希环,此时,副本互备关系为AB、BC、CD、DE、EA,即A中的对象数据可以备份至B中,依次类推,E中的对象数据可以备份至A中。
接下来,对本申请实施例涉及的实施环境进行简单介绍。
本申请实施例提供的对象数据的备份方法应用于云存储***中,该云存储***可以为云存储高性能接入集群,又可以简称为HAS集群,该云存储***为无中心、分布式的存储架构。请参考图2,图2是根据一示例性实施例示出的一种云存储***的架构示意图。该云存储***中包括多个存储节点210、客户端220和EC(Erasure Code,纠删码)存储设备230。其中,该客户端220可以分别与各个存储节点210建立有通信连接,该各个存储节点210与EC存储设备230建立有通信连接。
在无中心的云存储***中,各个存储节点210存储各自的对象数据的索引信息。其中,云存储***中的部分存储节点210配有管理模块和存储模块,该管理模块可以负责维护所有存储节点的状态信息、生成哈希环及更新哈希环版本,并为客户端提供哈希环信息的查询等功能。该存储模块可以为客户端提供对象数据的读、写、删除、查询等业务,负责对象数据读、写磁盘的操作,以及记录对象数据的索引信息,另外,还可以进行副本复制、副本补充等业务,示例性的,该存储模块中可以配有SSD(Solid State Disk,固态硬盘)之类的存储介质。
另外,该云存储***中的部分存储节点210也可以没有管理模块,对于该类没有配置管理模块的存储节点,可以连接至配有管理模块的存储节点中,比如,可以连接至该管理模块上,以便于从管理模块中同步各个存储节点的状态信息、哈希环信息等数据。
其中,该客户端220可以配有SDK(Software DevelopmentKit,软件开发工具包),以通过SDK与存储节点210进行读、写、查询之类的交互。客户端220还可以通过SDK从存储节点的管理模块中同步哈希环信息、以及存储节点的存储节点信息和状态信息等,其中,该存储节点信息可以包括但不限于存储节点地址、监听端口。作为一种示例,各个存储节点中的管理模块均可以将自身的地址映射为指定虚拟地址,如此,客户端可以从该指定虚拟地址中同步哈希环信息、、以及存储节点的存储节点信息和状态信息之类的数据。其中,该指定虚拟地址可以根据实际需求进行设置。
在一些实施例中,该客户端220可以为独立的设备,或者,也可以配置于终端中。作为一种示例,终端可以是任何一种可与用户通过键盘、触摸板、触摸屏、遥控器、语音交互或手写设备等一种或多种方式进行人机交互的电子产品,例如PC(Personal Computer,个人计算机)、手机、智能手机、PDA(Personal Digital Assistant,个人数字助手)、可穿戴设备、掌上电脑PPC(Pocket PC)、平板电脑、智能车机、智能电视、智能音箱等。
其中,该EC存储设备是指可以对丢失的数据通过纠删码进行恢复的设备。在云存储***中,为了提升用户写入对象数据的性能,对象数据首先缓存在SSD中,在满足一定条件的情况下,再异步转存至EC存储设备中。
在本申请实施例中,为了保证缓存在SSD中的对象数据的安全性以及对象数据提取的性能,对象数据可以采用双副本的方式存储至不同的存储节点的SSD中。其具体实现可以参见如下实施例。
在介绍完本申请实施例涉及的相关术语和实施环境后,接下来将结合附图对本申请实施例提供的对象数据的备份方法进行详细的解释说明。
请参考图3,图3是本申请实施例提供的一种对象数据的备份方法的流程图,该方法应用于图2所示的实施环境中,由第一存储节点来执行,该第一存储节点为该云存储***中的任一存储节点,该方法可以包括如下几个实现步骤。
步骤301:读取异步备份任务表中的异步备份任务,该异步备份任务中包括第一哈希参数和第一哈希环信息,该异步备份任务是指对该第一存储节点中的第一对象数据进行备份的任务,该第一哈希环信息指示的第一哈希环包括该云存储***中的多个存储节点。
其中,该第一哈希参数可以包括资源池标识和第一对象数据的键值,该资源池标识可以是由***预分配的,该第一对象数据的键值可以是由用户自定义设置的。譬如,该第一哈希参数可以包括bucket和objectkey,其中,bucket为资源池标识,objectkey为第一对象数据的键值,在本申请实施例中,第一哈希参数与第一对象数据唯一对应。
作为一种示例,异步备份任务中除了包括第一哈希参数和第一哈希环信息之外,还可以包括待备份的第一对象数据的索引信息。
该异步备份任务表中可能包括一个或者多个异步备份任务,第一存储节点从该异步备份任务表中读取异步备份任务,并按照本实施例提供的方式实现该异步备份任务。待本次的异步备份任务完成后,第一存储节点可以删除本次完成的异步复制任务,继续从该异步备份任务表中读取下一条异步备份任务,并按照本申请提供的方式实现下一条异步备份任务,以此类推,直到完成该异步备份任务表中的所有异步备份任务为止。
在这里,首先对该异步复制任务的生成过程进行介绍。作为一种示例,该异步复制任务的生成可以包括如下几种可能的情况:
第一种可能的实现方式:在第一对象数据的写入过程中,在满足一定条件下,生成该异步复制任务。
在第一对象数据的写入过程中,该第一存储节点接收该第一对象数据的写入请求,该写入请求携带该第一哈希参数和该第一哈希环信息。基于该第一哈希参数和该第一哈希环信息,确定主存储节点,将该第一对象数据存储至该主存储节点,在将该第一对象数据成功存储至该主存储节点的情况下,从该第一哈希环中确定该主存储节点的下一个存储节点。如果该主存储节点的下一个存储节点不在线,在该异步备份任务表中记录该异步备份任务。
其中,该第一哈希环信息可以包括第一哈希环的版本信息和该第一哈希环对应的存储节点列表,该存储节点列表中包括该第一哈希环上的存储节点的节点信息。示例性的,该第一哈希环的版本信息为version-1,该第一哈希环对应的存储节点列表包括:serial-id1,serial-id2,serial-id3…serial-idn。譬如,该第一哈希环信息为verserion-6:serial-A、serial-C、serial-D、serial-E。
不难理解,该写入请求还携带该第一对象数据,进一步地,该写入请求还可以携带该第一对象数据的长度、数据类型之类的对象数据描述信息,本申请实施例对此不做限定。
第一存储节点在接收到客户端发送的写入请求后,可以对该写入请求进行解析,得到该第一哈希参数和第一哈希环信息。之后,该第一存储节点可以根据该第一哈希环信息,确定该第一哈希环中的存储节点数量,然后,基于该第一哈希参数和存储节点数量进行哈希计算,得到该哈希值,譬如,可以通过如下公式(1)确定哈希值:
Hash_index=HASH(bucket+objectkey)%hash(1)
其中,该Hash_index表示该哈希值,该bucket表示资源池标识,该objectkey表示第一对象数据的键值,hash表示存储节点数量,%表示取余运算。
该哈希值即为该第一哈希环对应的存储节点列表的下标位置,所以,根据该哈希值,可以从该第一哈希环中确定对应的存储节点,得到主存储节点。需要说明的是,在本申请实施例中,将基于该哈希值从第一哈希环上确定的存储节点称为主存储节点。
该第一存储节点将该第一对象数据存储至该主存储节点中,在存储成功的情况下,该第一存储节点从该第一哈希环中确定该主存储节点的下一个存储节点,即确定用于对第一对象数据进行备份的存储节点。如果该第一哈希环中该主存储节点的下一个存储节点不在线,可以认为当前无法进行备份,在该种情况下,该第一存储节点生成异步备份任务,并存储至该异步备份任务表中。
作为一种示例,如果该主存储节点的下一个存储节点在线,向该主存储节点的下一个存储节点写入该第一对象数据,在向该主存储节点的下一个存储节点写入该第一对象数据失败的情况下,在该异步备份任务表中记录该异步备份任务。
也即是,在一种可能的实现方式中,该第一哈希环中该主存储节点的下一个存储节点在线,在该种情况下,可以向该主存储节点的下一个存储节点写入该第一对象数据,即可以在该主存储节点的下一个存储节点中对该第一对象数据进行备份。然而,在一些情况下,如果备份失败,则说明还需要重新对该第一对象数据进行备份,所以,此时可以生成异步备份任务,并记录至异步备份任务表中。
需要说明的是,该第一存储节点在确定主存储节点后,可以判断该第一存储节点是否为主存储节点,如果该第一存储节点是主存储节点,则将该第一对象数据存储至本地的SSD中。如果该第一存储节点不是主存储节点,则可以将该第一对象数据发送给主存储节点进行存储,主存储节点写入成功后,可以返回写入成功消息,该第一存储节点接收到该写入成功消息后,可以确定主存储节点的下一个存储节点,并向所确定的主存储节点的下一个存储节点发送该写入请求,使得主存储节点的下一个存储节点将该第一对象数据存储至自身的SSD中,从而对该第一对象数据进行备份。
在本申请实施例中,将用于对该第一对象数据进行备份的存储节点称为备存储节点,即在上述过程中,该主存储节点的下一个存储节点即为备存储节点。
进一步地,第一存储节点可以向客户端返回该第一对象数据的存储结果,如果将该第一对象数据成功写入主存储节点,即使向备存储节点写入失败,也可以返回写入成功消息。当然,若该第一存储节点向该主存储节点写入第一对象数据失败,则可以向该客户端返回写入失败消息。
譬如,请参考图4,该客户端、存储节点1和存储节点2从管理模块中同步各个版本的哈希环信息。客户端根据第一哈希参数和第一哈希环信息,确定对应的存储节点1,并向该存储节点1写入第一对象数据,该第一存储节点1存储该第一对象数据,并从第一哈希环中确定用于对该第一对象数据进行备份的存储节点2。该第一存储节点向该存储节点2发送该第一对象数据,存储节点2对该第一对象数据进行备份,并返回存储结果,如果存储结果为写入失败消息,则说明存储节点2对该第一对象数据备份失败,此时该存储节点1记录该异步备份任务。
第二种可能的实现方式:若用于存储该第一对象数据的主存储节点或备存储节点离线,则生成该异步复制任务。
在一些实施例中,云存储***中的存储节点可能存在某些异常,如服务器宕机、***崩溃等等,导致存储节点离线,无法对外提供对象读写业务。若用于存储该第一对象数据的主存储节点或备存储节点离线,将导致该云存储***中仅存在一个存储节点存储有该第一对象数据,即该云存储***不存在该第一对象数据的备份,在该种情况下,需要副本补充,为此,该第一存储节点生成异步复制任务,并将该异步复制任务记录至异步复制任务表中。
在实施中,该第一存储节点可以读取副本补充任务,该副本补充任务是在确定存在存储节点离线事件的情况下生成的,该副本补充任务包括离线存储节点的节点信息和离线时间点,巡检本地的对象索引信息表中的索引信息。若根据该节点信息、该离线时间点和该对象索引信息表中的索引信息,确定该离线存储节点为用于存储目标索引信息对应的第二对象数据的存储节点,则基于该目标索引信息,在该异步备份任务表中记录该异步备份任务,该目标索引信息为该对象索引信息表中的索引信息。
如前文所述,该云存储***中的部分存储节点中配有管理模块,该管理模块可以巡检与其连接的其他存储节点的状态。若某存储节点离线,则该管理模块将会生成新的哈希环,譬如,请参考图5,哈希环版本1对应的存储节点列表为:A->B->C->D->E;若存储节点B离线后,哈希环版本2产生,其对应的存储节点列表为:A->C->D->E,新对象数据写入将按此队列进行计算和定位。
作为一种示例,该管理模块检测到某存储节点离线,可以生成存储节点离线事件,该存储节点离线事件包括离线存储节点的节点信息和离线时间点。进一步地,为了避免由于偶尔掉电造成的存储节点短暂离线的误判,该管理节点也可以在检测到存储节点掉线超过一定时间阈值后,再生成该存储节点离线事件。
其中,该时间阈值可以根据实际需求进行设置,譬如,该时间阈值可以为2小时,本申请实施例对此不做限定。
生成该存储节点离线事件后,该管理模块可以将该存储节点离线事件同步给其他在线的存储节点。
对于第一存储节点来说,若该第一存储节点中配有该管理模块,则可以自身在检测到存储节点离线(或离线超过一定时间阈值)的情况下生成该存储节点离线事件,或者,若该第一存储节点中没有配置该管理模块,则该第一存储节点接收该管理模块发送的存储节点离线事件。
第一存储节点确定存在存储节点离线事件后,可以记录副本补充任务至副本补充任务表中。如此,第一存储节点可以定期巡检该副本补充任务表,读取副本补充任务,并巡检本地的对象索引信息表中的索引信息,其中,该对象索引信息表中可以存储有所有对象数据的索引信息,即该对象索引信息表中的索引信息的数量可以为多个。该第一存储节点根据该离线存储节点的节点信息、离线时间点和对象索引信息表中的索引信息,查询该离线存储节点是否为用于存储目标索引信息对应的第二对象数据的存储节点,如果是,说明当前云存储***中仅剩一个存储节点存储有该目标索引信息对应的第二对象数据,在该种情况下,基于该目标索引信息,生成该异步备份任务,并将该异步备份任务添加至该异步备份任务表中,以便于后续进行备份,譬如,若管理模块检测到上述存储节点B离线超过2个小时,则触发副本补充任务,此时副本互备关系应当变更为:[AC]、[CD]、[DE]、[EA]。
作为一种示例,该索引信息包括对应的对象数据的存储时间点、以及对应的哈希环信息,在该种情况下,若该对象索引信息表中存在对应的存储时间点位于该离线时间点之前的索引信息,则将对应的存储时间点位于该离线时间点之前的索引信息确定为该目标索引信息。如果根据该节点信息、以及该目标索引信息对应的哈希环信息,确定在该目标索引信息对应的第二哈希环中,该离线存储节点为该第一存储节点的上一个存储节点,或者,该离线存储节点为该第一存储节点的下一个存储节点,则确定该离线存储节点为用于存储该目标索引信息对应的第二对象数据的存储节点。
不难理解,若该对象索引信息表中存在对应的存储时间点位于该离线时间点之前的索引信息,说明该第一存储节点中存在在该离线时间点之前存储的对象数据,该种情况下,该对象数据可能是存储在该离线存储节点下,为了进一步确认,该第一存储节点将该对象索引信息表中存在对应的存储时间点位于该离线时间点之前的索引信息确定为目标索引信息。
之后,可以根据该目标索引信息对应哈希环信息,确定对应的第二哈希环,然后确定在该第二哈希环中,该离线存储节点是否为该第一存储节点的上一个存储节点,如果该离线存储节点为该第一存储节点的上一个存储节点,说明该离线存储节点是用于存储该第二对象数据的主存储节点,不难理解,此时可以确定该离线存储节点为用于存储该目标索引信息对应的第二对象数据的存储节点。另外,若该离线存储节点不是该第一存储节点的上一个存储节点,但该离线存储节点是该第一存储节点的下一个存储节点,说明该离线存储节点是用于存储该第二对象数据的备存储节点,不难理解,此时可以确定该离线存储节点为用于存储该目标索引信息对应的第二对象数据的存储节点。
进一步地,该第一存储节点检索完该对象索引信息表中的所有索引信息后,可以删除副本补充任务表中的记录。
如此,在异步复制任务表中记录异步复制任务后,该第一存储节点可以定期巡检该异步复制任务表,即读取异步复制任务,以便于执行副本复制操作,如下文所述。
步骤302:根据该第一哈希参数和该第一哈希环信息,确定第二存储节点,该第二存储节点是指用于对该第一对象数据进行备份的存储节点。
也即是,该第一存储节点读取第一对象数据的异步备份任务后,可以确定用于对该第一对象数据进行备份的存储节点,即确定第二存储节点,以便于后续可以对该第一对象数据进行备份,从而完成该异步备份任务。
作为一种示例,根据该第一哈希参数和该第一哈希环信息确定第二存储节点的具体实现可以包括如下内容:
3021:基于该第一哈希环信息,确定该第一哈希环中是否存在其他存储节点在线,该其他存储节点是指除该第一存储节点之外的存储节点。
该第一哈希环信息可以包括第一哈希环对应的存储节点列表,因此,根据该第一哈希环信息,可以确定该第一哈希环中的其他存储节点,之后,可以确定该其他存储节点的状态,从而确定该其他存储节点当前是否在线。
作为一种示例,若该第一哈希环中存在其他存储节点在线,说明可以从该第一哈希环中确定该第二存储节点,在该种情况下,执行如下3022-3025。若该第一哈希环中不存在其他存储节点在线,说明无法从该第一哈希环中确定该第二存储节点,在该种情况下,可以执行如下步骤3026。
3022:若该第一哈希环中存在其他存储节点在线,根据该第一哈希环信息,确定该第一哈希环中的存储节点数量,根据该第一哈希参数和该存储节点数量进行哈希运算,得到哈希值,从该第一哈希环中确定该哈希值对应的存储节点。
在实施中,该第一存储节点可以统计第一哈希环对应的存储节点列表包括的存储节点的数量,得到该第一哈希环中的存储节点数量。然后,可以根据该第一哈希参数和该存储节点数量进行哈希运算,譬如可以通过上述公式(1)进行哈希运算,得到哈希值,如前文所述,该哈希值表示该第一哈希环中存储节点的下标位置,所以,根据该哈希值可以从该第一哈希环中确定对应的存储节点。
3023:若该哈希值对应的存储节点是该第一存储节点,且在该第一哈希环中该第一存储节点的下一个存储节点在线,则将该第一存储节点的下一个存储节点确定为该第二存储节点。
也即是,若该哈希值对应的存储节点是该第一存储节点,说明该第一存储节点为原来用于存储该第一对象数据的主存储节点,此时,如果该第一哈希环中该第一存储节点的下一个存储节点在线,可以将该第一存储节点的下一个存储节点确定为第二存储节点。
3024:若该哈希值对应的存储节点是该第一存储节点的上一个存储节点,且该第一存储节点的上一个存储节点在线,将该第一存储节点的上一个存储节点确定为该第二存储节点。
若该哈希值对应的存储节点是该第一存储节点的上一个存储节点,说明该第一存储节点的上一个存储节点为原来用于存储该第一对象数据的主存储节点,从而可以推断出该第一存储节点为原来用于存储该第一对象数据的备存储节点,在该种情况下,如果该第一存储节点的上一个存储节点在线,可以将该第一存储节点的上一个存储节点确定为第二存储节点。
3025:若该哈希值对应的存储节点是该第一存储节点的上一个存储节点,且该第一存储节点的上一个存储节点不在线,如果该第一存储节点的下一个存储节点在线,将该第一存储节点的下一个存储节点确定为该第二存储节点。
也就是说,如果该第一存储节点为原来用于存储该第一对象数据的备存储节点,则确定原来用于存储该第一对象数据的主存储节点,如果该主存储节点不在线,可以确定该第一存储节点的下一个存储节点是否在线,如果在线,则可以将该第一存储节点的下一个存储节点确定为第二存储节点。
需要说明的是,若该第一存储节点的下一个存储节点不在线,可以继续判断该第一存储节点的下一个存储节点的下一个存储节点是否在线,如果该第一存储节点的下一个存储节点的下一个存储节点在线,则将该第一存储节点的下一个存储节点的下一个存储节点确定为第二存储节点。如果该第一存储节点的下一个存储节点的下一个存储节点不在线,则继续按照该种方式查询,直到从该第一哈希环中查到在线的存储节点为止,将查到的在线的存储节点确定为第二存储节点。
作为一种示例,若该哈希值对应的存储节点不是该第一存储节点,且不是该第一存储节点的上一个存储节点,则如果该哈希值对应的存储节点在线,将该哈希值对应的存储节点确定为该第二存储节点。
也即是,如果该第一存储节点不是原本用于存储该第一对象数据的主存储节点,也不是原本用于存储该第一对象数据的备存储节点,则可以确定原本用于存储该第一对象数据的主存储节点是否在线,如果在线,将该在线的主存储节点确定为第二存储节点。如果该主存储节点不在线,可以从该第一哈希环中确定该哈希值对应的存储节点的下一个存储节点是否在线,如果确定该哈希值对应的存储节点的下一个存储节点在线,则将该哈希值对应的存储节点的下一个存储节点确定为第二存储节点,如果确定该哈希值对应的存储节点的下一个存储节点不在线,则继续查询该哈希值对应的存储节点的下一个存储节点的下一个存储节点是否在线,以此类推,按照该种方式,直到查询到在线的存储节点为止,将所确定的在线的存储节点确定为第二存储节点。
3026:若该第一哈希环中不存在其他存储节点在线,则获取最新的哈希环信息,基于该最新的哈希环信息和该第一哈希参数,从该最新的哈希环信息对应的哈希环中,确定该第二存储节点。
不难理解,如果该第一哈希环中不存在其他存储节点在线,则说明无法从该第一哈希环中确定用于对该第一对象数据进行备份的第二存储节点,在该种情况下,可以获取最新的哈希环信息,然后基于该最新的哈希环信息和该第一哈希参数,从该最新的哈希环信息对应的哈希环中,确定用于对该第一对象数据进行备份的第二存储节点。
其中,基于该最新的哈希环信息和该第一哈希参数,从该最新的哈希环信息对应的哈希环中确定第二存储节点的具体实现可以参见上述基于第一哈希环信息和该第一哈希参数,从第一哈希环中确定第二存储节点。
步骤303:将该第一对象数据备份至该第二存储节点中。
该第一存储节点确定该第二存储节点后,将该第一对象数据发送给该第二存储节点,由该第二存储节点进行存储,从而实现在该第二存储节点中对该第一对象数据进行备份。
譬如,如图5所示,在一种可能的实现方式中,该异步备份任务是在存储节点B离线的情况下生成的,在该种情况下,按照上述实现方式,可以从第一哈希环中确定存储节点C作为第二存储节点,之后,可以将第一对象数据备份至该存储节点C中。
另外,还需要说明的是,当云存储***中的某个存储节点离线后,管理模块可以生成新的哈希环,新的哈希环可以将离线存储节点节点排除在外,后续读写可以使用新的哈希环进行存储节点的定位,以保证***的可靠性。其中,新的哈希环对已存储的对象数据的读取具有一定的影响,譬如,采用新的哈希环可能无法成功定位到对象数据所在的存储节点,因此***可以维护各个版本的哈希环,若客户端通过最新版本的哈希环定位到的存储节点无对象数据,可以进行降级读。
作为一种示例,该第一存储节点接收读取请求,该读取请求携带索引信息和该第一哈希环信息,若本地存在该索引信息对应的第一对象数据,返回该第一对象数据,若本地不存在该索引信息对应的第一对象数据,根据该第一哈希环信息,读取该第一对象数据。
也即是,该第一存储节点接收到该第一对象数据的读取请求后,可以基于该第一对象数据的索引信息,查询本地是否存在该第一对象数据,如果本地存在该第一对象数据,则可以直接将该第一对象数据反馈给客户端。当然,如果本地不存在该索引信息,则可以进一步根据该第一哈希环信息来读取该第一对象数据。
作为一种示例,该读取请求中携带第一哈希参数,该第一哈希环信息还包括该第一哈希环的版本信息,在该种情况下,根据该第一哈希环信息,读取该第一对象数据的具体实现可以包括:根据该第一哈希环信息,确定该第一哈希环中该第一存储节点的下一个存储节点。若从第一存储节点的下一个存储节点中未读取到该第一对象数据,则根据该第一哈希环的版本信息,确定版本低于该第一哈希环的版本的所有哈希环。按照版本从高到低的顺序,从该所有哈希环中多次选择哈希环,每选择一个哈希环,根据当前所选择的哈希环和该第一哈希参数,从当前所选择的哈希环中确定存储节点,并从所确定的存储节点中读取该第一对象数据;直到读取到该第一对象数据为止。
也即是,该第一存储节点可以根据该第一哈希环信息,确定该第一哈希环中该第一存储节点的下一个存储节点,通常情况下,该第一存储节点的下一个存储节点为备存储节点,所以,该第一存储节点可以从该第一存储节点的下一个存储节点中读取该第一对象数据,譬如,可以向该第一存储节点的下一个存储节点发送读取请求,如果该第一存储节点的下一个存储节点接收到该读取请求,可以查询本地是否存在该第一对象数据,如果存在,则将该第一对象数据发送给第一存储节点,该第一存储节点接收到该第一对象数据后,反馈给客户端。
进一步地,如果该第一存储节点的下一个存储节点中不存在该第一对象数据,则该第一存储节点的下一个存储节点可以向该第一存储节点反馈读取失败消息。该第一存储节点接收到该读取失败消息后,可以根据该第一哈希环的版本信息,选择比该第一哈希环版本低一版本的哈希环,然后按照上述方式,从选择的哈希环中读取该第一对象数据,如果读取到该第一对象数据,则返回该第一对象数据给客户端。
如果未读取到该第一对象数据,则继续选择比该第一哈希环版本低两个版本的哈希环,然后继续按照上述方式,从选择的哈希环中读取该第一对象数据,如果读取到该第一对象数据,则返回该第一对象数据给客户端,如果未读取到该第一对象数据,继续按照该种方式,选择下一个版本的哈希环,并读取第一对象数据,直到读取到该第一对象数据为止。当然,如果遍历完所有版本的哈希环都未读取到该第一对象数据,则说明读取该第一对象数据失败,在该种情况下,该第一存储节点向该客户端返回读取失败消息。
在本申请实施例中,第一存储节点读取异步备份任务表中的异步备份任务,该异步备份任务中包括第一哈希参数和第一哈希环信息,该异步备份任务是指对该第一存储节点中的第一对象数据进行备份的任务,该第一哈希环信息指示的第一哈希环包括该云存储***中的多个存储节点。根据该第一哈希参数和该第一哈希环信息,确定第二存储节点,该第二存储节点是指用于对该第一对象数据进行备份的存储节点,将该第一对象数据备份至该第二存储节点中。在本申请中,可以动态确定用于备份的第二存储节点,可以避免某对象数据只能存储一份的情况,从而保证了存储的稳定性。
图6是本申请实施例提供的一种对象数据的备份装置的结构示意图,该对象数据的备份装置可以由软件、硬件或者两者的结合实现成为第一存储节点的部分或者全部。请参考图6,该装置包括:
读取模块610,用于读取异步备份任务表中的异步备份任务,所述异步备份任务中包括第一哈希参数和第一哈希环信息,所述异步备份任务是指对所述第一存储节点中的第一对象数据进行备份的任务,所述第一哈希环信息指示的第一哈希环包括所述云存储***中的多个存储节点;
确定模块620,用于根据所述第一哈希参数和所述第一哈希环信息,确定第二存储节点,所述第二存储节点是指用于对所述第一对象数据进行备份的存储节点;
备份模块630,用于将所述第一对象数据备份至所述第二存储节点中。
在本申请一种可能的实现方式中,所述确定模块620用于:
基于所述第一哈希环信息,确定所述第一哈希环中是否存在其他存储节点在线,所述其他存储节点是指除所述第一存储节点之外的存储节点;
若所述第一哈希环中存在其他存储节点在线,根据所述第一哈希环信息,确定所述第一哈希环中的存储节点数量;
根据所述第一哈希参数和所述存储节点数量进行哈希运算,得到哈希值;
从所述第一哈希环中确定所述哈希值对应的存储节点;
若所述哈希值对应的存储节点是所述第一存储节点,且在所述第一哈希环中所述第一存储节点的下一个存储节点在线,则将所述第一存储节点的下一个存储节点确定为所述第二存储节点。
在本申请一种可能的实现方式中,所述确定模块620用于:
若所述哈希值对应的存储节点是所述第一存储节点的上一个存储节点,且所述第一存储节点的上一个存储节点在线,将所述第一存储节点的上一个存储节点确定为所述第二存储节点;或者,
若所述哈希值对应的存储节点是所述第一存储节点的上一个存储节点,且所述第一存储节点的上一个存储节点不在线,如果所述第一存储节点的下一个存储节点在线,将所述第一存储节点的下一个存储节点确定为所述第二存储节点。
在本申请一种可能的实现方式中,所述确定模块620用于:
若所述哈希值对应的存储节点不是所述第一存储节点,且不是所述第一存储节点的上一个存储节点,则如果所述哈希值对应的存储节点在线,将所述哈希值对应的存储节点确定为所述第二存储节点。
在本申请一种可能的实现方式中,所述确定模块620用于:
若所述第一哈希环中不存在其他存储节点在线,则获取最新的哈希环信息;
基于所述最新的哈希环信息和所述第一哈希参数,从所述最新的哈希环信息对应的哈希环中,确定所述第二存储节点。
在本申请一种可能的实现方式中,所述确定模块620用于:
接收所述第一对象数据的写入请求,所述写入请求携带所述第一哈希参数和所述第一哈希环信息;
基于所述第一哈希参数和所述第一哈希环信息,确定主存储节点;
将所述第一对象数据存储至所述主存储节点;
在将所述第一对象数据成功存储至所述主存储节点的情况下,从所述第一哈希环中确定所述主存储节点的下一个存储节点;
如果所述主存储节点的下一个存储节点不在线,在所述异步备份任务表中记录所述异步备份任务。
在本申请一种可能的实现方式中,所述确定模块620用于:
如果所述主存储节点的下一个存储节点在线,向所述主存储节点的下一个存储节点写入所述第一对象数据;
在向所述主存储节点的下一个存储节点写入所述第一对象数据失败的情况下,在所述异步备份任务表中记录所述异步备份任务。
在本申请一种可能的实现方式中,所述确定模块620用于:
读取副本补充任务,所述副本补充任务是在确定存在存储节点离线事件的情况下生成的,所述副本补充任务包括离线存储节点的节点信息和离线时间点;
巡检本地的对象索引信息表中的索引信息;
若根据所述节点信息、所述离线时间点和所述对象索引信息表中的索引信息,确定所述离线存储节点为用于存储目标索引信息对应的第二对象数据的存储节点,则基于所述目标索引信息,在所述异步备份任务表中记录所述异步备份任务,所述目标索引信息为所述对象索引信息表中的索引信息。
在本申请一种可能的实现方式中,所述确定模块620用于:
若所述对象索引信息表中存在对应的存储时间点位于所述离线时间点之前的索引信息,则将对应的存储时间点位于所述离线时间点之前的索引信息确定为所述目标索引信息;
如果根据所述节点信息、以及所述目标索引信息对应的哈希环信息,确定在所述目标索引信息对应的第二哈希环中,所述离线存储节点为所述第一存储节点的上一个存储节点,或者,所述离线存储节点为所述第一存储节点的下一个存储节点,则确定所述离线存储节点为用于存储所述目标索引信息对应的第二对象数据的存储节点。
在本申请一种可能的实现方式中,所述读取模块610用于:
接收读取请求,所述读取请求携带索引信息和所述第一哈希环信息;
若本地存在所述索引信息对应的第一对象数据,返回所述第一对象数据;
若本地不存在所述索引信息对应的第一对象数据,根据所述第一哈希环信息,读取所述第一对象数据。
在本申请一种可能的实现方式中,所述读取请求中携带第一哈希参数,所述第一哈希环信息还包括所述第一哈希环的版本信息,所述读取模块610用于:
根据所述第一哈希环信息,确定所述第一哈希环中所述第一存储节点的下一个存储节点;
若从第一存储节点的下一个存储节点中未读取到所述第一对象数据,则根据所述第一哈希环的版本信息,确定版本低于所述第一哈希环的版本的所有哈希环;
按照版本从高到低的顺序,从所述所有哈希环中多次选择哈希环;
每选择一个哈希环,根据当前所选择的哈希环和所述第一哈希参数,从当前所选择的哈希环中确定存储节点,并从所确定的存储节点中读取所述第一对象数据;直到读取到所述第一对象数据为止。
在本申请实施例中,第一存储节点读取异步备份任务表中的异步备份任务,该异步备份任务中包括第一哈希参数和第一哈希环信息,该异步备份任务是指对该第一存储节点中的第一对象数据进行备份的任务,该第一哈希环信息指示的第一哈希环包括该云存储***中的多个存储节点。根据该第一哈希参数和该第一哈希环信息,确定第二存储节点,该第二存储节点是指用于对该第一对象数据进行备份的存储节点,将该第一对象数据备份至该第二存储节点中。在本申请中,可以动态确定用于备份的第二存储节点,可以避免某对象数据只能存储一份的情况,从而保证了存储的稳定性。
需要说明的是:上述实施例提供的对象数据的备份装置在对对象数据进行备份时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的对象数据的备份装置与对象数据的备份方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图7是本申请实施例提供的一种存储节点的结构示意图。存储节点700包括中央处理单元(CPU)701、包括随机存取存储器(RAM)702和只读存储器(ROM)703的***存储器704,以及连接***存储器704和中央处理单元701的***总线705。存储节点700还包括帮助计算机内的各个器件之间传输信息的基本输入/输出***(I/O***)706,和用于存储操作***713、应用程序714和其他程序模块715的大容量存储设备707。
基本输入/输出***706包括有用于显示信息的显示器708和用于用户输入信息的诸如鼠标、键盘之类的输入设备709。其中显示器708和输入设备709都通过连接到***总线705的输入输出控制器710连接到中央处理单元701。基本输入/输出***706还可以包括输入输出控制器710以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器710还提供输出到显示屏、打印机或其他类型的输出设备。
大容量存储设备707通过连接到***总线705的大容量存储控制器(未示出)连接到中央处理单元701。大容量存储设备707及其相关联的计算机可读介质为存储节点700提供非易失性存储。也就是说,大容量存储设备707可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。
不失一般性,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知计算机存储介质不局限于上述几种。上述的***存储器704和大容量存储设备707可以统称为存储器。
根据本申请的各种实施例,存储节点700还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即存储节点700可以通过连接在***总线705上的网络接口单元711连接到网络712,或者说,也可以使用网络接口单元711来连接到其他类型的网络或远程计算机***(未示出)。
上述存储器还包括一个或者一个以上的程序,一个或者一个以上程序存储于存储器中,被配置由CPU执行。
在一些实施例中,还提供了一种计算机可读存储介质,该存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例中对象数据的备份方法的步骤。例如,所述计算机可读存储介质可以是ROM、RAM、CD-ROM、磁带、软盘和光数据存储设备等。
值得注意的是,本申请提到的计算机可读存储介质可以为非易失性存储介质,换句话说,可以是非瞬时性存储介质。
应当理解的是,实现上述实施例的全部或部分步骤可以通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。所述计算机指令可以存储在上述计算机可读存储介质中。
也即是,在一些实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述所述的对象数据的备份方法的步骤。
以上所述为本申请提供的实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (14)
1.一种对象数据的备份方法,其特征在于,应用于第一存储节点,所述第一存储节点为云存储***中的任一存储节点,所述方法包括:
读取异步备份任务表中的异步备份任务,所述异步备份任务中包括第一哈希参数和第一哈希环信息,所述异步备份任务是指对所述第一存储节点中的第一对象数据进行备份的任务,所述第一哈希环信息指示的第一哈希环包括所述云存储***中的多个存储节点;
根据所述第一哈希参数和所述第一哈希环信息,确定第二存储节点,所述第二存储节点是指用于对所述第一对象数据进行备份的存储节点;
将所述第一对象数据备份至所述第二存储节点中。
2.如权利要求1所述的方法,其特征在于,所述根据所述第一哈希参数和所述第一哈希环信息,确定第二存储节点,包括:
基于所述第一哈希环信息,确定所述第一哈希环中是否存在其他存储节点在线,所述其他存储节点是指除所述第一存储节点之外的存储节点;
若所述第一哈希环中存在其他存储节点在线,根据所述第一哈希环信息,确定所述第一哈希环中的存储节点数量;
根据所述第一哈希参数和所述存储节点数量进行哈希运算,得到哈希值;
从所述第一哈希环中确定所述哈希值对应的存储节点;
若所述哈希值对应的存储节点是所述第一存储节点,且在所述第一哈希环中所述第一存储节点的下一个存储节点在线,则将所述第一存储节点的下一个存储节点确定为所述第二存储节点。
3.如权利要求2所述的方法,其特征在于,所述从所述第一哈希环中确定所述哈希值对应的存储节点之后,还包括:
若所述哈希值对应的存储节点是所述第一存储节点的上一个存储节点,且所述第一存储节点的上一个存储节点在线,将所述第一存储节点的上一个存储节点确定为所述第二存储节点;或者,
若所述哈希值对应的存储节点是所述第一存储节点的上一个存储节点,且所述第一存储节点的上一个存储节点不在线,如果所述第一存储节点的下一个存储节点在线,将所述第一存储节点的下一个存储节点确定为所述第二存储节点。
4.如权利要求2所述的方法,其特征在于,所述从所述第一哈希环中确定所述哈希值对应的存储节点之后,还包括:
若所述哈希值对应的存储节点不是所述第一存储节点,且不是所述第一存储节点的上一个存储节点,则如果所述哈希值对应的存储节点在线,将所述哈希值对应的存储节点确定为所述第二存储节点。
5.如权利要求2所述的方法,其特征在于,所述基于所述第一哈希环信息,确定所述第一哈希环中是否存在其他存储节点在线之后,还包括:
若所述第一哈希环中不存在其他存储节点在线,则获取最新的哈希环信息;
基于所述最新的哈希环信息和所述第一哈希参数,从所述最新的哈希环信息对应的哈希环中,确定所述第二存储节点。
6.如权利要求1所述的方法,其特征在于,所述方法还包括:
接收所述第一对象数据的写入请求,所述写入请求携带所述第一哈希参数和所述第一哈希环信息;
基于所述第一哈希参数和所述第一哈希环信息,确定主存储节点;
将所述第一对象数据存储至所述主存储节点;
在将所述第一对象数据成功存储至所述主存储节点的情况下,从所述第一哈希环中确定所述主存储节点的下一个存储节点;
如果所述主存储节点的下一个存储节点不在线,在所述异步备份任务表中记录所述异步备份任务。
7.如权利要求6所述的方法,其特征在于,所述从所述第一哈希环中确定所述主存储节点的下一个存储节点之后,还包括:
如果所述主存储节点的下一个存储节点在线,向所述主存储节点的下一个存储节点写入所述第一对象数据;
在向所述主存储节点的下一个存储节点写入所述第一对象数据失败的情况下,在所述异步备份任务表中记录所述异步备份任务。
8.如权利要求1所述的方法,其特征在于,所述方法还包括:
读取副本补充任务,所述副本补充任务是在确定存在存储节点离线事件的情况下生成的,所述副本补充任务包括离线存储节点的节点信息和离线时间点;
巡检本地的对象索引信息表中的索引信息;
若根据所述节点信息、所述离线时间点和所述对象索引信息表中的索引信息,确定所述离线存储节点为用于存储目标索引信息对应的第二对象数据的存储节点,则基于所述目标索引信息,在所述异步备份任务表中记录所述异步备份任务,所述目标索引信息为所述对象索引信息表中的索引信息。
9.如权利要求8所述的方法,其特征在于,所述索引信息包括对应的对象数据的存储时间点、以及对应的哈希环信息,所述方法还包括:
若所述对象索引信息表中存在对应的存储时间点位于所述离线时间点之前的索引信息,则将对应的存储时间点位于所述离线时间点之前的索引信息确定为所述目标索引信息;
如果根据所述节点信息、以及所述目标索引信息对应的哈希环信息,确定在所述目标索引信息对应的第二哈希环中,所述离线存储节点为所述第一存储节点的上一个存储节点,或者,所述离线存储节点为所述第一存储节点的下一个存储节点,则确定所述离线存储节点为用于存储所述目标索引信息对应的第二对象数据的存储节点。
10.如权利要求1所述的方法,其特征在于,所述方法还包括:
接收读取请求,所述读取请求携带索引信息和所述第一哈希环信息;
若本地存在所述索引信息对应的第一对象数据,返回所述第一对象数据;
若本地不存在所述索引信息对应的第一对象数据,根据所述第一哈希环信息,读取所述第一对象数据。
11.如权利要求10所述的方法,其特征在于,所述读取请求中携带第一哈希参数,所述第一哈希环信息还包括所述第一哈希环的版本信息,所述根据所述第一哈希环信息,读取所述第一对象数据,包括:
根据所述第一哈希环信息,确定所述第一哈希环中所述第一存储节点的下一个存储节点;
若从第一存储节点的下一个存储节点中未读取到所述第一对象数据,则根据所述第一哈希环的版本信息,确定版本低于所述第一哈希环的版本的所有哈希环;
按照版本从高到低的顺序,从所述所有哈希环中多次选择哈希环;
每选择一个哈希环,根据当前所选择的哈希环和所述第一哈希参数,从当前所选择的哈希环中确定存储节点,并从所确定的存储节点中读取所述第一对象数据;直到读取到所述第一对象数据为止。
12.一种对象数据的备份装置,其特征在于,配置于第一存储节点,所述第一存储节点为云存储***中的任一存储节点,所述装置包括:
读取模块,用于读取异步备份任务表中的异步备份任务,所述异步备份任务中包括第一哈希参数和第一哈希环信息,所述异步备份任务是指对所述第一存储节点中的第一对象数据进行备份的任务,所述第一哈希环信息指示的第一哈希环包括所述云存储***中的多个存储节点;
确定模块,用于根据所述第一哈希参数和所述第一哈希环信息,确定第二存储节点,所述第二存储节点是指用于对所述第一对象数据进行备份的存储节点;
备份模块,用于将所述第一对象数据备份至所述第二存储节点中。
13.一种计算机设备,其特征在于,所述计算机设备包括处理器、通信接口、存储器和通信总线,所述处理器、所述通信接口和所述存储器通过所述通信总线完成相互间的通信,所述存储器用于存放计算机程序,所述处理器用于执行所述存储器上所存放的程序,以实现权利要求1-11任一所述方法的步骤。
14.一种计算机可读存储介质,其特征在于,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-11任一所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010349216.4A CN111522883B (zh) | 2020-04-28 | 2020-04-28 | 对象数据的备份方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010349216.4A CN111522883B (zh) | 2020-04-28 | 2020-04-28 | 对象数据的备份方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111522883A CN111522883A (zh) | 2020-08-11 |
CN111522883B true CN111522883B (zh) | 2023-04-28 |
Family
ID=71903572
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010349216.4A Active CN111522883B (zh) | 2020-04-28 | 2020-04-28 | 对象数据的备份方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111522883B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113282243B (zh) * | 2021-06-09 | 2022-12-02 | 杭州海康威视***技术有限公司 | 存储对象文件的方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106572153A (zh) * | 2016-10-21 | 2017-04-19 | 乐视控股(北京)有限公司 | 集群的数据存储方法及装置 |
CN107707631A (zh) * | 2017-09-18 | 2018-02-16 | 北京潘达互娱科技有限公司 | 数据获取方法及装置 |
CN110096227A (zh) * | 2019-03-28 | 2019-08-06 | 北京奇艺世纪科技有限公司 | 数据存储方法、数据处理方法、装置、电子设备及计算机可读介质 |
CN110457263A (zh) * | 2019-08-13 | 2019-11-15 | 北京首都在线科技股份有限公司 | 一种数据存储方法和装置 |
CN110968453A (zh) * | 2018-09-28 | 2020-04-07 | 杭州海康威视***技术有限公司 | 一种数据存储方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8930320B2 (en) * | 2011-09-30 | 2015-01-06 | Accenture Global Services Limited | Distributed computing backup and recovery system |
-
2020
- 2020-04-28 CN CN202010349216.4A patent/CN111522883B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106572153A (zh) * | 2016-10-21 | 2017-04-19 | 乐视控股(北京)有限公司 | 集群的数据存储方法及装置 |
CN107707631A (zh) * | 2017-09-18 | 2018-02-16 | 北京潘达互娱科技有限公司 | 数据获取方法及装置 |
CN110968453A (zh) * | 2018-09-28 | 2020-04-07 | 杭州海康威视***技术有限公司 | 一种数据存储方法及装置 |
CN110096227A (zh) * | 2019-03-28 | 2019-08-06 | 北京奇艺世纪科技有限公司 | 数据存储方法、数据处理方法、装置、电子设备及计算机可读介质 |
CN110457263A (zh) * | 2019-08-13 | 2019-11-15 | 北京首都在线科技股份有限公司 | 一种数据存储方法和装置 |
Non-Patent Citations (1)
Title |
---|
赵彩云.CSCloud云存储***副本管理方法研究与实现.《中国优秀硕士学位论文全文数据库》.2019,全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111522883A (zh) | 2020-08-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106776130B (zh) | 一种日志恢复方法、存储装置和存储节点 | |
KR101602312B1 (ko) | 데이터 송신 방법, 데이터 수신 방법, 및 저장 장치 | |
US9996421B2 (en) | Data storage method, data storage apparatus, and storage device | |
EP2330519A1 (en) | Distributed file system and data block consistency managing method thereof | |
US11093387B1 (en) | Garbage collection based on transmission object models | |
CN104077380A (zh) | 一种重复数据删除方法、装置及*** | |
US11429498B2 (en) | System and methods of efficiently resyncing failed components without bitmap in an erasure-coded distributed object with log-structured disk layout | |
CN111930716A (zh) | 一种数据库扩容方法、装置及*** | |
CN116917880A (zh) | 分布式数据库远程备份 | |
CN115756955A (zh) | 一种数据备份、数据恢复的方法、装置及计算机设备 | |
CN112015591A (zh) | 一种日志管理方法、服务器和数据库*** | |
CN111522883B (zh) | 对象数据的备份方法、装置、设备及存储介质 | |
CN110121712B (zh) | 一种日志管理方法、服务器和数据库*** | |
WO2021082925A1 (zh) | 一种交易处理的方法及装置 | |
CN113986450A (zh) | 一种虚拟机备份方法及装置 | |
JP2019020816A (ja) | 分散コンピューティングシステムにおけるデータをリカバリする方法およびシステム | |
CN116303789A (zh) | 多分片多副本数据库并行同步方法、装置及可读介质 | |
CN116049306A (zh) | 数据同步方法、装置、电子设备以及可读存储介质 | |
CN107045426B (zh) | 一种多副本读取方法和*** | |
CN115470041A (zh) | 一种数据灾备管理方法及装置 | |
CN114880165A (zh) | 数据恢复方法及相关装置 | |
JP2017208113A (ja) | データ格納方法、データストレージ装置、及びストレージデバイス | |
CN109254870B (zh) | 数据备份的方法和装置 | |
US11645333B1 (en) | Garbage collection integrated with physical file verification | |
CN114442962B (zh) | 一种数据读方法、装置、设备以及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |