一种基于分布式存储系统的数据处理方法及存储设备与流程

文档序号:11133488阅读:1047来源:国知局
一种基于分布式存储系统的数据处理方法及存储设备与制造工艺

本发明属于数据读写技术领域,尤其涉及一种基于分布式存储系统的数据处理方法及存储设备。



背景技术:

在有冗余数据的分布式存储系统中,冗余数据对象会在不同的存储设备之间存放多份副本。但同一时刻一个数据对象的多个副本只能用于读或者用于写。

Quorum机制是分布式系统中用来保证数据冗余和最终一致性的一种投票算法。这个机制有三个关键值N、R和W,又可以称为NRW机制,其中,N表示数据所具有的副本数,R表示完成读操作所需要读取的最小副本数,W表示完成写操作所需要写入的最小副本数。采用该机制,只需要保证R+W>N,就会提供强一致性的保证,因为读取数据的存储节点和被同步写入的存储节点是有重叠的。例如:N=5,W=3,R=3,表示系统中数据有5个不同的副本,对于写操作,需要等待至少3个副本完成该写操作,系统才会返回写成功的状态;对于读操作,需要至少3个副本完成读操作,系统才会返回读成功的状态。

理论上,读取分布式系统中的数据对象时,可以只读取其中的一个副本,但是,采用Quorum机制,读操作需要成功读取的副本数与写操作需要写成功的副本数相同。而且,为了保证尽快获得要求的读成功副本数,通常需要向所有副本所在的存储节点发送读IO请求,因此,读IO请求比较多,读成功的时延增大,大大降低了读性能。



技术实现要素:

有鉴于此,本发明在于提供一种基于分布式存储系统的数据处理方法及存储设备,可以解决现有技术存在的读操作需要读成功的副本数较多、读成功时延大、读性能差的技术问题。

第一方面,本发明提供一种基于分布式存储系统的数据处理方法,读取数据时,主存储节点接收读IO请求,接着,主存储节点判断所述主存储节点上存储的目标数据对象是否可信;如果主存储节点上存储的所述目标数据对象可信,则只需读取主存储节点上存储的目标数据对象,并将该目标数据对象直接发送给发起该读IO请求的发起端,不需要再从主存储节点所在逻辑分区的其它存储节点上读取目标数据对象。该读IO请求用于请求读取主存储节点所在逻辑分区上的目标数据对象,每个所述逻辑分区包括多个存储节点,每个存储节点存储有数据对象,且每个逻辑分区中有一个存储节点是主存储节点。

第一方面提供的该数据处理方法的有益效果在于:在读取数据时,当主存储节点上存储的目标数据对象可信时,只需从主存储节点中读取目标数据对象,并直接将读取的目标数据对象返回给发起读IO请求的发起端,不需要再从当前逻辑分区的其它存储节点上读取数据。与Quorum机制相比,大大减少了读操作的副本数量,从而减少了读操作的时延,提高了读操作的性能。

在第一种可能的实现方式中,所述主存储节点判断所述主存储节点上存储的目标数据对象是否可信,包括:判断所述主存储节点的状态,所述主存储节点的状态包括可信状态和不可信状态;如果所述主存储节点的状态为可信状态,则确定所述主存储节点上存储的目标数据对象可信;如果所述主存储节点的状态为不可信状态,则获取所述主存储节点上的黑名单,并判断所述黑名单是否完整,所述黑名单中存储所述主存储节点上写失败的数据对象;如果所述黑名单不完整,则确定所述主存储节点上的目标数据对象不可信;如果所述黑名单完整,则判断所述黑名单中是否包含所述目标数据对象,如果包含所述目标数据对象,则确定所述主存储节点上的目标数据对象不可信;如果不包含所述目标数据对象,则确定所述主存储节点上的目标数据对象可信。

在第二种可能的实现方式中,所述方法还包括:所述主存储节点接收主存储节点确定消息,所述主存储节点确定消息包含主存储节点的标识信息;当所述主存储节点根据所述主存储节点确定消息确定自身为主存储节点时,向所述主存储节点所在逻辑分区内的全部存储节点收集对象降级写日志,并标记所述主存储节点为不可信状态;所述对象降级写日志用于记录数据对象写失败的存储节点的日志,且记录在所述逻辑分区内所述数据对象写成功的全部存储节点上;如果所述对象降级写日志中包含所述主存储节点上写失败的数据对象,则从所述对象降级写日志中,选取所述主存储节点上写失败的全部数据对象获得黑名单;如果所述对象降级写日志中不包含所述主存储节点上写失败的数据对象,则标记所述主存储节点为可信状态。

在第三种可能的实现方式中,所述判断所述黑名单是否完整,包括:所述主存储节点获取所述黑名单的状态,所述黑名单的状态包括完成状态和未完成状态,所述主存储节点收集所述对象降级写日志的过程中,所述黑名单为未完成状态,直到收集完所述主存储节点所在逻辑分区内所有存储节点的对象降级写日志,所述黑名单的状态为完成状态;当所述主存储节点获得的所述状态为完成状态时,确定所述黑名单完整;当所述主存储节点获得的所述状态为未完成状态时,确定所述黑名单不完整。

在第四种可能的实现方式中,若所述黑名单中包含在所述主存储节点上写失败的数据对象,则所述方法还包括:所述主存储节点逐个重构所述黑名单中写失败的数据对象,并从所述黑名单中删除重构成功的数据对象所对应的降级写日志;当所述黑名单中的全部数据对象都重构成功后,标记所述主存储节点为可信状态。

第二方面,本发明提供一种基于分布式存储系统的数据处理方法,包括:主存储节点接收写IO请求,所述写IO请求用于请求向所述主存储节点所在的逻辑分区写入目标数据对象,所述逻辑分区包括多个存储节点,每个逻辑分区中有一个存储节点是主存储节点;当所述主存储节点写入所述目标数据对象失败时,直接向所述写IO请求的发起端返回写失败响应消息;当所述主存储节点写入所述目标数据对象成功时,将所述目标数据对象复制到所述主存储节点所在逻辑分区的其它存储节点上;当所述主存储节点接收到所述主存储节点所在逻辑分区内预设数量个存储节点返回的写成功响应消息时,向所述写IO请求的发起端返回写成功响应消息,所述预设数量根据所述主存储节点所在逻辑分区的存储节点数量及Quorum机制确定。

第二方面提供的基于分布式存储系统的数据处理方法,在写数据时,如果主存储节点写数据失败,则直接向写IO请求的发起端返回写失败的响应消息。如果主存储节点写成功,则还需要在当前逻辑分区的预设数量个其它存储节点上写成功才向发起写IO请求的发起端返回写成功的响应消息,这样,才能保证当前主存储节点上的数据对象是可信数据。

第三方面,本发明提供一种存储设备,所述存储设备是分布式存储系统中一个逻辑分区中的主存储节点,所述存储设备包括:第一接收模块,用于接收读IO请求,所述读IO请求用于请求读取所述主存储节点所在逻辑分区上的目标数据对象;判断模块,用于判断所述存储设备中存储的所述目标数据对象是否可信;读取模块,用于当所述判断模块确定所述目标数据对象可信,则读取所述存储设备中的所述目标数据对象;发送模块,用于将所述读取模块读取的所述目标数据对象发送给所述读IO请求的发起端。

在第三方面的第一种可能的实现方式中,所述判断模块包括:第一判断子模块,用于判断所述存储设备的状态,所述存储设备的状态包括可信状态和不可信状态;如果所述主存储节点的状态为可信状态,则确定所述主存储节点上存储的目标数据对象可信;第二判断子模块,用于当所述第一判断子模块确定所述主存储节点的状态为不可信状态时,获取所述主存储节点上的黑名单,并判断所述黑名单是否完整,所述黑名单中存储所述主存储节点上写失败的数据对象;如果所述黑名单不完整,则确定所述主存储节点上的目标数据对象不可信;第三判断子模块,用于当所述第二判断子模块确定所述黑名单完整时,判断所述黑名单中是否包含所述目标数据对象,如果包含所述目标数据对象,则确定所述主存储节点上的目标数据对象不可信;如果不包含所述目标数据对象,则确定所述主存储节点上的目标数据对象可信。

在第三方面的第二种可能的实现方式中,所述存储设备还包括:第二接收模块,用于接收主存储节点确定消息,并根据所述主存储节点确定消息确定自身为主存储节点,所述主存储节点确定消息包含主存储节点的标识信息;收集模块,用于向所述主存储节点所在逻辑分区内的全部存储节点收集对象降级写日志,并标记所述主存储节点为不可信状态;所述对象降级写日志用于记录数据对象写失败的存储节点的日志,且记录在所述逻辑分区内所述数据对象写成功的全部存储节点上;黑名单构建模块,用于从所述对象降级写日志中,选取所述主存储节点上写失败的全部数据对象获得黑名单;可信标记模块,用于当所述对象降级写日志中不包含所述主存储节点上写失败的数据对象,则标记所述主存储节点为可信状态。

在第三方面的第三种可能的实现方式中,所述第二判断子模块具体用于:

获取所述黑名单的状态,所述黑名单的状态包括完成状态和未完成状态,所述主存储节点收集所述对象降级写日志的过程中,所述黑名单为未完成状态,直到收集完所述主存储节点所在逻辑分区内所有存储节点的对象降级写日志,所述黑名单的状态为完成状态;当所述黑名单的状态为完成状态时,确定所述黑名单完整;当所述黑名单的状态为未完成状态时,确定所述黑名单不完整。

在第三方面的第四种可能的实现方式中,若所述黑名单中包含在所述主存储节点上写失败的数据对象,则所述存储设备还包括:数据重构模块,用于逐个重构所述黑名单中写失败的数据对象,并从所述黑名单中删除重构成功的数据对象所对应的降级写日志;状态修改模块,用于当所述黑名单中的全部数据对象都重构成功后,标记所述主存储节点为可信状态。

在第三方面的第五种可能的实现方式中,还包括:第三接收模块,用于接收写IO请求,所述写IO请求用于请求向所述主存储节点所在的逻辑分区写入目标数据对象;写数据模块,用于根据所述写IO请求将所述目标数据对象写入所述存储设备的相应存储空间中;第一返回模块,用于当所述目标数据对象写入失败时,直接向所述写IO请求的发起端返回写失败响应消息;

复制模块,用于当所述目标数据对象写入成功时,将所述目标数据对象复制到所述主存储节点所在逻辑分区的其它存储节点上;第二返回模块,用于当所述主存储节点接收到所述主存储节点所在逻辑分区内预设数量个存储节点返回的写成功响应消息时,向所述写IO请求的发起端返回写成功响应消息,所述预设数量根据所述主存储节点所在逻辑分区的存储节点数量及Quorum机制确定。

第四方面,本发明提供一种存储设备,所述存储设备是分布式存储系统中一个逻辑分区中的主存储节点,所述存储设备包括:接收器,用于读IO请求,所述读IO请求用于请求读取所述主存储节点所在逻辑分区上的目标数据对象;处理器,用于判断所述存储设备中存储的所述目标数据对象是否可信;如果确定所述目标数据对象可信,则读取所述存储设备中的所述目标数据对象;发送器,用于将读取的所述目标数据对象发送给所述读IO请求的发起端。

在第四方面的第一种可能的实现方式中,所述接收器,还用于接收写IO请求,所述写IO请求用于请求向所述主存储节点所在的逻辑分区写入目标数据对象;所述处理器,还用于根据所述写IO请求将所述目标数据对象写入所述存储设备的相应存储空间中,如果所述目标数据对象写入失败时,直接向所述写IO请求的发起端返回写失败响应消息;如果所述目标数据对象写入成功,将所述目标数据对象复制到所述主存储节点所在逻辑分区的其它存储节点上,并接收所述其它存储节点返回的写成功响应消息;发送器,还用于当接收到所述其它存储节点返回的预设数量个写成功响应消息时,向所述写IO请求的发起端返回写成功响应消息,所述预设数量根据所述主存储节点所在逻辑分区的存储节点数量及Quorum机制确定。

本发明提供的基于分布式存储系统的数据处理方法,首先,对于分布式存储系统中的任意一个逻辑分区(Partition,PT)选取一个存储节点作为主存储节点。主存储节点接收到读IO请求,读IO请求用于读取所述主存储节点所在逻辑分区中的目标数据对象。主存储节点接收到读IO请求后,先判断主存储节点上存储的目标数据对象是否可信,如果可信,则只从主存储节点上读取目标数据对象并返回给发送读IO请求的发起端。采用该方法,在读取数据时,如果主存储节点上的目标数据对象可信只需从主存储节点上读取,不需要从其它存储节点上读取目标数据对象,与Quorum机制相比,大大减少了读操作的IO请求数量,从而减少了读操作的时延,提高了读操作的性能。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1是本发明实施例一种分布式存储系统的示意图;

图2是本发明实施例一种逻辑分区的示意图;

图3是本发明实施例一种基于分布式存储系统的数据处理方法的流程示意图;

图4是本发明实施例一种主存储节点构建黑名单的方法流程示意图;

图5是本发明实施例提供的一种主存储节点判断自身存储的目标数据对象是否可信的流程示意图;

图6是本发明实施例另一种基于分布式存储系统的数据处理方法的流程图;

图7是本发明实施例一种存储设备的框图;

图8是本发明实施例一种判断模块的框图;

图9是本发明实施例另一种存储设备的框图;

图10是本发明实施例又一种存储设备的框图;

图11是本发明实施例又一种存储设备的框图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

图1是本发明实施例一种分布式存储系统的示意图,如图1所示,一个分布式存储系统包括多个存储节点(或称为节点,例如,存储设备或硬盘)、数据集群服务器和集群管理模块;其中,节点1~节点N分别表示不同的存储节点的硬盘分区。

在本发明的一些实施例中,分布式存储系统中存储的数据是元数据,则所述数据集群服务器可以为MDS(MetaData Service,元数据服务器);当然,在其它实施例中,分布式存储系统中存储的数据可以是其它类型的数据。

数据集群服务器用于管理数据对象,例如,接收IO发起端发送的IO请求,根据该IO请求确定该IO请求所请求读/写操作的逻辑分区,然后,将该IO请求发送给对应逻辑分区中的主存储节点,从而完成所述IO请求对应的读/写操作。

集群管理模块用于管理存储节点及负责PT分组等。集群管理模块将各个存储节点所包含的硬盘分区,划分成不同的PT,并从每一个PT中选取一个硬盘分区对应的存储节点为主存储节点。

如图2所示,PT1包括节点1~节点7中的硬盘分区,例如,disk1~disk7,其中,disk1表示节点1中的硬盘分区,依次类推,disk7表示节点7中的硬盘分区。即,PT1包括7个节点成员;集群管理模块可以设定disk1为PT1的主存储节点。

PT2包括节点1~节点7中的另一些硬盘分区,如disk11~disk17,其中,disk11表示节点1中不同于disk1的硬盘分区,依次类推,disk17表示节点7中不同于disk7的硬盘分区。集群管理模块可以设定disk12为PT2的主存储节点。

图3是本发明实施例一种基于分布式存储系统的数据处理方法的流程示意图,本实施例以图2所示的PT分区为例进行说明,假设PT1分区中的主存储节点是disk1,则数据处理方法包括以下步骤:

S110,disk1接收主存储节点确定消息,并确定自身为当前逻辑分区的主存储节点。

集群管理模块从PT1中确定一个存储节点(例如,disk1)作为PT1分区的主存储节点,并向确定的主存储节点(disk1)发送主存储节点确定消息,其中,主存储节点确定消息中携带主存储节点的标识信息(例如,设备唯一标识)。主存储节点根据主存储节点确定消息中的标识信息确定自身为该逻辑分区的主存储节点。

S120,disk1接收读IO请求;

IO请求的发起端(例如,可以是PC机客户端或智能终端客户端等),发起端将IO请求发送给分布式存储系统中的数据集群服务器,然后,由数据集群服务器将该IO请求发送给对应的PT分区的主存储节点(即,本实施例中的disk1)。disk1判断IO请求的类型,IO请求包括读IO请求和写IO请求;读IO请求用于读取存储设备中的目标数据对象;写IO请求用于写存储设备中的目标数据对象。IO请求中包括所请求读或写的数据对象的对象标识。

S130,disk1判断自身上存储的读IO请求所请求读取的目标数据对象是否可信;如果可信,则执行S140;如果不可信,则执行S150。

disk1根据读IO请求携带的对象标识判断自身存储的所述对象标识对应的对象是否可信。

S140,disk1读取自身上存储的目标数据对象,并向读IO请求的发起端返回目标数据对象。

如果disk1上的目标数据对象可信,则直接从disk1上读取目标数据对象并返回给IO请求的发起端。

S150,按照Quorum机制读取目标数据对象。

如果disk1上的目标数据对象不可信,则按照传统的Quorum机制进行读取操作。

本实施例中,PT1包括7个存储节点,根据R+W>7的原则可知,R为4,W为4,即,至少读成功4份才认为读操作成功。

在本发明的一些应用场景中,如果disk1没有故障,只是disk1内存储的目标数据对象不可信,则可以由disk1向PT1内的其它存储节点转发读IO请求。为了能够尽快收集到至少4份读成功响应,通常需要向其它6个存储节点发送读IO请求,如图3所示,disk1分别向disk2~disk7转发读IO请求。

然后,disk1收集各个存储节点返回的读响应结果,收集到4个读成功响应结果时,确定读取操作成功;根据Quorum机制可知,4个读成功结果中必定包含一个最新的目标数据对象。如果收集到的4个读成功结果中目标数据对象的版本号不相同,则选取最新版本号对应的目标数据对象发送给IO请求的发起端。

在本发明的另一些应用场景中,如果集群管理模块检测到disk1故障,则由集群管理模块从当前逻辑分区中重新选取一个存储节点作为主存储节点,然后,将读IO请求重新发给新的主存储节点。

本实施例提供的基于分布式存储系统的数据处理方法,对分布式存储系统中的任意一个逻辑分区选取一个存储节点作为主存储节点。当接收到读IO请求后,首先判断相应的逻辑分区中主存储节点上的读IO请求所请求读取的目标数据对象是否可信,如果可信,则直接从主存储节点上读取目标数据对象并返回给发送读IO请求的发起端。如果主存储节点上的目标数据对象不可信,则按照传统的Quorum机制进行读取操作。采用该方法,在读取数据时,如果主存储节点上的目标数据对象可信只需从主存储节点上读取,此种应用场景只需从一个存储节点上读取数据,与Quorum机制相比,大大减少了读操作的副本数量,从而减少了读操作的时延,提高了读操作的性能。

图4是本发明实施例一种主存储节点构建黑名单的方法流程示意图,本实施例仍以图2所示的PT分区为例进行说明,本实施例将详细介绍主存储节点构建黑名单的过程,黑名单是存储节点成为当前逻辑分区的主存储节点之前,在该存储节点上写失败的数据对象的列表,即,该存储节点上黑名单内的数据对象不可信。该方法在图3所示实施例的S110和S120之间包括以下步骤:

S210,disk1接收主存储节点确定消息,并确定自身为当前逻辑分区的主存储节点。

S220,disk1收集当前逻辑分区内其它存储节点上的对象降级写日志,并标记disk1为不可信状态。

对象降级写日志是指数据对象在存储节点上写失败的日志并记录在当前逻辑分区内所有写成功的存储节点上。对象降级写日志中记录了写失败数据对象的对象标识、写失败的盘、所属的逻辑分区,以及写失败所发生的时间信息。例如,T1时刻数据对象1在disk2上写失败、其它存储节点均写成功,则数据对象1在disk2上写失败的日志会记录在disk1和disk3~disk7的日志中。

disk1只需要收集自身成为主存储节点之前、当前逻辑分区内的全部其它存储节点记录的对象降级写日志。disk1向当前逻辑分区内的其它各个节点发送收集对象降级写日志的请求,接收各个存储节点返回的对象降级写日志。在对象降级写日志收集过程中,将disk1标记为不可信状态,不可信状态表示不知道disk1上的数据对象是否完整。

S230,disk1判断收集到的对象降级写日志中是否包含在disk1上写失败的数据对象;如果包含,则执行S240;如果收集到的全部对象降级写日志中都不包含,则执行S270。

disk1在收集对象降级写日志过程中判断已收集到的对象降级写日志中是否包含在disk1上写失败的数据对象。

S240,将对象降级写日志中包含的在disk1上写失败的数据对象添加到黑名单中,并标记黑名单为未完成状态。

黑名单为未完成状态时,表示黑名单还不完整,不知道要读取的数据对象是否在黑名单中。

S250,当disk1收集到全部对象降级写日志得到完整的黑名单后,并标记黑名单为完成状态。

S260,逐个重构黑名单中写失败的数据对象,并从黑名单中删除将恢复成功的数据对象对应的降级写日志,直到黑名单中全部数据对象都重构成功,执行S270。

数据重构就是根据数据对象写成功的存储节点上的数据对象内容重新恢复数据对象写失败的存储节点上的该数据对象。具体的,可以由主存储节点(disk1)主动读取数据对象写成功的存储节点中存储的所要恢复的数据对象对应的对象内容。

例如,黑名单中写失败的数据对象包括数据对象1、数据对象2和数据对象3,然后,分别从数据对象1写成功的存储节点中复制数据对象1到disk1中;同理,从数据对象2写成功的存储节点中复制数据对象2到disk1中;从数据对象3写成功的存储节点中复制数据对象3到disk1中。

S270,标记disk1为可信状态。

如果黑名单中的数据对象全部重构完成后,重新将disk1标记为可信状态。如果disk1收集到的全部对象降级写日志中都不包含在disk1上写失败的数据对象,则确定disk1上不存在写失败的数据对象,即,disk1上的数据对象全部可信,则可以标记disk1为可信状态。

在本发明的其它应用场景中,当集群管理模块判断出PT1中的主存储节点disk1由于某种原因故障时,集群管理模块从PT1中重新选取一个存储节点作为新的主存储节点(根据每个存储节点都作为主存储节点的均衡原则选取),新的主存储节点确定自身为主存储节点后重复执行上述S210~S270的方法流程。

本实施例提供的数据处理方法,在disk1确定自身为当前逻辑分区的主存储节点后,收集当前逻辑分区中其它存储节点上的对象降级写日志,并从中选取在在自身作为主存储节点之前在自身上写失败的数据对象,得到黑名单,并在此期间标记disk1为不可信状态,需要进一步判断disk1上的目标数据对象是否可信。

图5是本发明实施例提供的一种主存储节点判断自身存储的目标数据对象是否可信的流程示意图,该方法根据图4所示实施例中构建的黑名单判断主存储节点上的目标数据对象是否可信,本实施例仍以图2所示的逻辑分区为例进行说明,PT1分区中disk1为主存储节点。如图5所示,该方法可以包括以下步骤:

S310,disk1接收读IO请求。

S320,disk1判断自身的状态,主存储节点的状态包括可信状态和非可信状态;如果disk1为不可信状态,则执行S330;如果disk1为可信状态,则执行S350。

S330,disk1判断自身对应的黑名单是否完整;如果完整,则执行S340;如果不完整,则执行S360。

S340,disk1判断黑名单中是否包含读IO请求所请求读取的目标数据对象;如果包含,则执行S360;如果不包含,则执行S350;

S350,disk1确定自身上存储的目标数据对象可信。

S360,disk1确定自身上存储的目标数据对象不可信。

本实施例提供的判断主存储节点上的目标数据对象是否可信的过程,首先判断主存储节点的状态,如果主存储节点为可信状态,则确定主存储节点上的目标数据对象可信;如果主存储节点为不可信状态,则判断主存储节点的黑名单是否完整;如果黑名单完整,则进一步判断黑名单中是否包含目标数据对象;如果包含,则确定主存储节点上的目标数据对象不可信;如果黑名单中不包含目标数据对象,或者,黑名单不完整,则确定主存储节点上的目标数据对象可信。确定主存储节点上的目标数据对象可信后,只需要从主存储节点上读取该目标数据对象即可,大大降低了读操作的时延,提高了读取性能。

本发明实施例为了减少读取数据的时延,从逻辑分区的多个存储节点中选取一个存储节点作为主存储节点,并在主存储节点上的目标数据对象可信的前提下,只需从主存储节点上读取目标数据对象。相应地,在写数据时,必须保证主存储节点的数据对象写成功。下面结合图6对写数据的过程进行详细说明。

图6是本发明实施例一种基于分布式存储系统的写数据方法的流程图,该方法仍以图2所示的逻辑分区为例进行说明,如图6所示,写数据方法可以包括以下步骤:

S410,disk1接收写IO请求,写IO请求中携带待写入的目标数据对象。

S420,disk1将目标数据对象写入本地。

S430,如果目标数据对象在disk1上写失败,则disk1向写IO请求的发起端返回写失败响应消息。

在本发明的一些应用场景中,如果由于disk1故障导致写操作失败,则由集群管理模块从当前逻辑分区中重新选择一个其它存储节点作为主存储节点,集群管理模块重新向新的主存储节点发送写IO请求进行写操作。

在本发明的另一些应用场景中,如果disk1没有故障,则发起重试请求,即重新发起写IO请求。

S440,如果目标数据对象在disk1上写成功,则直接将该目标数据对象复制到其它存储节点上。

S450,当disk1接收到其它存储节点返回的至少3个返回写成功的响应结果后,向写IO请求的发起端返回写成功响应消息。

写操作仍按照Quorum机制,而且,主存储节点必须包含在写成功的至少4个写成功的存储节点中,即,写成功的存储节点必须包括主存储节点及3个其它存储节点,此时,认为写操作成功,并向写IO请求的发起端返回写成功响应结果。

本实施例提供的基于分布式存储系统的写数据方法,主存储节点接收写IO请求并在主存储节点本地,如果主存储节点写成功,还需要在其它存储节点写数据,并写包含主存储节点在内的写成功的数量需要满足Quorum机制的规定,此时,才认为写操作成功,并由主存储节点向写IO请求的发起端返回写成功响应结果;如果主存储节点写操作失败,则直接由主存储节点向写IO请求的发起端返回写失败响应结果。保证主存储节点写成功能够最大程度地提高只从主存储节点上成功读取数据的概率。

对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

相应于上述的数据处理方法实施例,本发明还提供了相应的存储设备的实施例。

请参见图7,示出了本发明实施例一种存储设备的框图,该存储设备是分布式存储系统中一个逻辑分区的主存储节点。如图7所示,该存储设备包括:第一接收模块110、判断模块120、读取模块130和发送模块140;

第一接收模块110接收读IO请求,判断模块120判断存储设备的目标数据对象是否可信,目标数据对象是读IO请求所要读取的数据对象;如果可信,则由读取模块130从存储设备中读取目标数据对象;发送模块140将读取模块130读取的目标数据对象返回给读IO请求的发起端。

在本发明的一些实施例中,如图8所示,判断模块120包括第一判断子模块121、第二判断子模块122和第三判断子模块123。

第一判断子模块121,用于判断所述存储设备的状态,所述存储设备的状态包括可信状态和不可信状态;如果所述主存储节点的状态为可信状态,则确定所述主存储节点上存储的目标数据对象可信。

第二判断子模块122,用于当所述第一判断子模块确定所述主存储节点的状态为不可信状态时,获取所述主存储节点上的黑名单,并判断所述黑名单是否完整,所述黑名单中存储所述主存储节点上写失败的数据对象;如果所述黑名单不完整,则确定所述主存储节点上的目标数据对象不可信。

第二判断子模块具体用于:获取黑名单的状态,黑名单的状态包括完成状态和未完成状态,主存储节点收集所述对象降级写日志的过程中,所述黑名单为未完成状态,直到收集完所述主存储节点所在逻辑分区内所有存储节点的对象降级写日志,所述黑名单的状态为完成状态;当黑名单的状态为完成状态时,确定黑名单完整;当黑名单的状态为未完成状态时,确定黑名单不完整。

第三判断子模块123,用于当所述第二判断子模块确定所述黑名单完整时,判断所述黑名单中是否包含所述目标数据对象,如果包含所述目标数据对象,则确定所述主存储节点上的目标数据对象不可信;如果不包含所述目标数据对象,则确定所述主存储节点上的目标数据对象可信。

本实施例提供的存储设备,当接收到读IO请求后,首先判断相应的逻辑分区中主存储节点上的读IO请求所请求读取的目标数据对象是否可信,如果可信,则直接从主存储节点上读取目标数据对象并返回给发送读IO请求的发起端。如果主存储节点上的目标数据对象不可信,则按照传统的Quorum机制进行读取操作。采用该存储设备,在读取数据时,如果主存储节点上的目标数据对象可信只需从主存储节点上读取,此种应用场景只需从一个存储节点上读取数据,与Quorum机制相比,大大减少了读操作的副本数量,从而减少了读操作的时延,提高了读操作的性能。

请参见图9,示出了本发明实施例另一种存储设备的框图,该存储设备在图7所示实施例的基础上还包括:第二接收模块210、收集模块220、黑名单构建模块230、数据重构模块240、状态修改模块250和可信标记模块260。

第二接收模块210,用于接收主存储节点确定消息,并根据所述主存储节点确定消息确定自身为主存储节点。

所述主存储节点确定消息包含主存储节点的标识信息。

需要说明的是,在存储设备接收到主存储节点确定消息后,随时可能接收到读IO请求,例如,可能在主存储节点创建黑名单的过程中接收到读IO请求,或者,还有可能在创建完黑名单之后接收到读IO请求,或者,在黑名单中的数据对象重构完成后接收到读IO请求。

收集模块220,用于向所述主存储节点所在逻辑分区内的全部存储节点收集对象降级写日志,并标记所述主存储节点为不可信状态;所述对象降级写日志用于记录数据对象写失败的存储节点的日志,且记录在所述逻辑分区内所述数据对象写成功的全部存储节点上;

黑名单构建模块230,用于从所述对象降级写日志中,选取所述主存储节点上写失败的全部数据对象获得黑名单;

数据重构模块240,用于逐个重构所述黑名单中写失败的数据对象,并从所述黑名单中删除重构成功的数据对象所对应的降级写日志;

状态修改模块250,用于当所述黑名单中的全部数据对象都重构成功后,标记所述主存储节点为可信状态。

可信标记模块260,用于当所述对象降级写日志中不包含所述主存储节点上写失败的数据对象,则标记所述主存储节点为可信状态。

本实施例提供的存储设备,在存储设备确定自身为当前逻辑分区的主存储节点后,收集当前逻辑分区中其它存储节点上的对象降级写日志,并从中选取在在自身作为主存储节点之前在自身上写失败的数据对象,得到黑名单,并在此期间标记自身为不可信状态,需要进一步判断自身存储的目标数据对象是否可信。

请参见图10,示出了本发明实施例又一种存储设备的框图,该存储设备在图7所示实施例的基础上还包括:第二接收模块210、第三接收模块310、写数据模块320、第一返回模块330、复制模块340和第二返回模块350。

第二接收模块210,用于接收主存储节点确定消息,并根据所述主存储节点确定消息确定自身为主存储节点。

所述主存储节点确定消息包含主存储节点的标识信息。

第三接收模块310,用于接收写IO请求,所述写IO请求用于请求向所述主存储节点所在的逻辑分区写入目标数据对象。

写数据模块320,用于根据所述写IO请求将所述目标数据对象写入所述存储设备的相应存储空间中。

第一返回模块330,用于当所述目标数据对象写入失败时,直接向所述写IO请求的发起端返回写失败响应消息。

复制模块340,用于当所述目标数据对象写入成功时,将所述目标数据对象复制到所述主存储节点所在逻辑分区的其它存储节点上。

第二返回模块350,用于当所述主存储节点接收到所述主存储节点所在逻辑分区内预设数量个存储节点返回的写成功响应消息时,向所述写IO请求的发起端返回写成功响应消息。

所述预设数量根据所述主存储节点所在逻辑分区的存储节点数量及Quorum机制确定。

本实施例提供的存储设备,主存储节点接收写IO请求并在主存储节点本地,如果主存储节点写成功,还需要在其它存储节点写数据,并写包含主存储节点在内的写成功的数量需要满足Quorum机制的规定,此时,才认为写操作成功,并由主存储节点向写IO请求的发起端返回写成功响应结果;如果主存储节点写操作失败,则直接由主存储节点向写IO请求的发起端返回写失败响应结果。保证主存储节点写成功能够最大程度地提高只从主存储节点上成功读取数据的概率。

请参见图11,示出了本发明实施例又一种存储设备的框图,该存储设备是分布式存储系统中一个逻辑分区中的主存储节点。

如图11所示,该存储设备包括处理器410,以及与处理器410连接的接收器420和发送器430。

接收器420,用于接收IO请求并提供给处理器410。

IO请求的类型包括读IO请求和写IO请求,如果是读IO请求,则该读IO请求用于读取主存储节点所在逻辑分区上的目标数据对象;如果是写IO请求,则用于请求向所述主存储节点所在的逻辑分区写入目标数据对象;

处理器410,用于执行图3~图6所示实施例中的方法。

发送器430,用于将读取的目标数据对象发送给读IO请求的发起端,或者,当处理器410接收到所述其它存储节点返回的预设数量个写成功响应消息时,向所述写IO请求的发起端返回写成功响应消息。

本实施例提供的存储设备,当接收到读IO请求后,首先判断相应的逻辑分区中主存储节点上的读IO请求所请求读取的目标数据对象是否可信,如果可信,则直接从主存储节点上读取目标数据对象并返回给发送读IO请求的发起端。如果主存储节点上的目标数据对象不可信,则按照传统的Quorum机制进行读取操作。采用该存储设备,在读取数据时,如果主存储节点上的目标数据对象可信只需从主存储节点上读取,此种应用场景只需从一个存储节点上读取数据,与Quorum机制相比,大大减少了读操作的副本数量,从而减少了读操作的时延,提高了读操作的性能。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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