一种基于分布式锁的存储的IO操作方法及装置与流程

文档序号:11215866阅读:704来源:国知局
一种基于分布式锁的存储的IO操作方法及装置与流程

本发明涉及计算机应用技术领域,特别是涉及一种基于分布式锁的存储的io操作方法及装置。



背景技术:

随着计算机技术以及网络技术的发展,在存储的实际生产环境中,常常出现虚拟化的大型集群。在虚拟化系统中,可能有不同系统或者同一系统的多个主机连接至同一个或者一组资源,这时就需要分布式锁来避免获取资源的各个主机间的相互干扰。

现有技术中,通常采用共享存储的方案来实现分布式锁。对于连接至同一共享存储的每个主机,当其中一个主机对共享存储进行占用时,例如其中一个主机对共享存储进行写操作时,将其称为一号主机,其他主机要等待一号主机的写操作进程结束才能对共享存储进行io操作。通常,现有技术的分布式锁方案中会采用一个超时机制,即当一号主机断开与共享存储的连接超过一定时间时,分布式锁会解除一号主机对共享存储的占用,使得其他主机可以占用该共享存储。然而,如果共享存储的io压力大,即使一号主机并未断开与共享存储的连接,分布式锁也会误将一号主机对共享存储的占用解除,当共享存储重新接收到一号主机的io操作指令时,由于其他主机此时占用了该共享存储,使得一号主机被隔离,无法完成此前未完成的io操作。

因此,如何找到一个稳定的分布式锁方案,是目前本领域技术人员急需解决的技术问题。



技术实现要素:

本发明的目的是提供一种基于分布式锁的存储的io操作方法及装置,避免了第二主机并未离线,但由于第二主机的io超时造成对第二主机的意外的隔离,从而无法完成对共享存储的io操作的情况。

为解决上述技术问题,本发明提供如下技术方案:

一种基于分布式锁的存储的io操作方法,应用于第一主机,所述第一主机与多个其他主机均连接于同一共享存储,该方法包括:

按照预设的读取周期读取每个其他主机按照预设的写入周期写入至所述共享存储的时间戳;

在对所述共享存储中的目标数据下发第一io操作指令时,检测所述目标数据是否被第二主机占用,所述第二主机为多个其他主机中的任意一个;

如果是,则读取所述第二主机的时间戳,根据此次读取的所述第二主机的时间戳和上一次读取的所述第二主机的时间戳,确定所述第二主机是否离线;

如果是,则解除所述第二主机对所述目标数据的占用并进行io操作。

优选的,所述根据此次读取的所述第二主机的时间戳和上一次读取的所述第二主机的时间戳,确定所述第二主机是否离线,包括:

获得所述第二主机的io等待时间;

确定上一次读取的所述第二主机的时间戳加上所述io等待时间是否大于此次读取的所述第二主机的时间戳;

如果否,则确定所述第二主机离线。

优选的,所述获得所述第二主机的io等待时间,包括:

根据所述第二主机的第二io指令队列的等待时间,确定所述第二主机的io等待时间;

其中,所述第二io指令队列具有非超时属性,包含所述第二主机对所述目标数据下发的第二io操作指令。

优选的,所述第一io操作指令为具有非超时属性的第一io指令队列中的指令。

优选的,所述读取周期大于或等于所述写入周期。

一种基于分布式锁的存储的io操作装置,应用于第一主机,所述第一主机与多个其他主机均连接于同一共享存储,该装置包括:

时间戳读取模块,用于按照预设的读取周期读取每个其他主机按照预设的写入周期写入至所述共享存储的时间戳;

目标数据检测模块,用于在对所述共享存储中的目标数据下发第一io操作指令时,检测所述目标数据是否被第二主机占用,如果是,则触发第二主机离线确定模块,所述第二主机为多个其他主机中的任意一个;

所述第二主机离线确定模块,用于读取所述第二主机的时间戳,根据此次读取的所述第二主机的时间戳和上一次读取的所述第二主机的时间戳,确定所述第二主机是否离线,如果是,则触发io操作模块;

所述io操作模块,用于解除所述第二主机对所述目标数据的占用并进行io操作。

优选的,所述第二主机离线确定模块,包括:

io等待时间获得子模块,用于获得所述第二主机的io等待时间;

时间戳确定子模块,用于确定上一次读取的所述第二主机的时间戳加上所述io等待时间是否大于此次读取的所述第二主机的时间戳,如果否,则进入第二主机离线确定子模块;

所述第二主机离线确定子模块,用于确定所述第二主机离线。

优选的,所述io等待时间获得子模块,具体用于:

根据所述第二主机的第二io指令队列的等待时间,确定所述第二主机的io等待时间;

其中,所述第二io指令队列具有非超时属性,包含所述第二主机对所述目标数据下发的第二io操作指令。

优选的,所述第一io操作指令为具有非超时属性的第一io指令队列中的指令。

优选的,所述读取周期大于或等于所述写入周期。

应用本发明实施例所提供的技术方案,按照预设的读取周期读取每个其他主机按照预设的写入周期写入至共享存储的时间戳,在对共享存储中的目标数据下发第一io操作指令时,检测目标数据是否被第二主机占用,如果是,则读取第二主机的时间戳,根据此次读取的第二主机的时间戳和上一次读取的第二主机的时间戳,确定第二主机是否离线,如果是,则解除第二主机对目标数据的占用并进行io操作。

当共享存储的读写压力比较大时,可能无法及时对第二主机的io操作进行响应,因此第二主机下发的io操作指令出现io超时,可能是第二主机断开了与共享存储的连接导致第二主机的io超时,也可能是共享存储的io压力大造成第二主机的io超时。本发明的方案中,当第一主机检测到目标数据被第二主机占用时,读取第二主机的时间戳,将此次读取的第二主机的时间戳与上一次读取的第二主机的时间戳进行比较,确定第二主机是否离线。当共享存储的io压力大时,第二主机的io出现超时,但第二主机可以通过下发时间戳,使得第一主机确定第二主机是否离线,避免了第二主机并未离线,但由于第二主机的io超时造成对第二主机的意外的隔离,从而无法完成对共享存储的io操作的情况。

附图说明

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

图1为本发明中一种基于分布式锁的存储的io操作方法实施场景示意图;

图2为本发明中一种基于分布式锁的存储的io操作方法的实施流程图;

图3为本发明中一种基于分布式锁的存储的io操作装置的结构示意图。

具体实施方式

本发明的核心是提供一种基于分布式锁的存储的io操作方法,第一主机通过读取第二主机的时间戳确定第二主机是否离线,避免了第二主机并未离线,但由于第二主机的io超时造成对第二主机的意外的隔离,从而无法完成对共享存储的io操作的情况。

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参考图1,为本发明中一种基于分布式锁的存储的io操作方法实施场景示意图。主机101、主机102、主机103以及主机104都连接至同一共享存储105中。每个主机可以在共享存储的对应的位置写下各自的时间戳,在每次写下时间戳的同时,向共享存储下发io操作的等待时间。

请参考图2,为本发明中一种基于分布式锁的存储的io操作方法的实施流程图,该方法可以应用于第一主机,第一主机和多个其他主机均连接于同一共享存储,该方法可以包括以下步骤:

s201:按照预设的读取周期读取每个其他主机按照预设的写入周期写入至共享存储的时间戳。

共享存储可以是一个或者一组资源,可以有多个主机与同一共享存储连接。连接至同一共享存储的每一个主机均可以将各自的时间戳写入该共享存储中。在本申请文件中,主机的时间戳指的是当前主机的开机时长,例如可以为当前主机的开机时间的秒数。每个主机可以启动一个进程,按照预设的写入周期,在共享存储中写入各自的时间戳。每个主机在共享存储中写入的时间戳,其他主机只能读取该时间戳,不能对该时间戳进行修改,例如,可以在共享存储上为每个加入的主机分配对应该主机的唯一空间,每个主机对自己的空间可以进行读写操作,对其他主机对应的空间只能进行读取操作。

第一主机按照预设的读取周期读取每个其他主机按照预设的写入周期写入至共享存储的时间戳之后,可以进行步骤s202的操作。

需要说明的是,读取周期和写入周期可以根据实际情况进行设定和调整,并不影响本发明的实施。优选的,读取周期大于或等于写入周期。

s202:在对共享存储中的目标数据下发第一io操作指令时,检测目标数据是否被第二主机占用。

如果是,则进入步骤s203。其中,第二主机为多个其他主机中的任意一个。

目标数据为存放在共享存储中的数据。当第一主机对目标数据下发第一io操作指令时,检测目标数据是否被第二主机占用。第二主机和第一主机连接至同一共享存储,目标数据在被第二主机占用时,第一主机无法对目标数据下发io操作指令。例如,当第二主机对目标数据进行写操作时,通过分布式锁对目标数据设置一个标识,标识中可以携带第二主机的名称。当目标数据存在第二主机的标识时,第一主机则确定该目标数据被第二数据占用。

当然,如果确定目标数据并未被其他任意主机占用,则第一主机可以对目标数据下发io操作指令,以完成相应的读写操作。

s203:读取第二主机的时间戳,根据此次读取的第二主机的时间戳和上一次读取的第二主机的时间戳,确定第二主机是否离线。

在检测到目标数据被第二主机占用之后,第一主机读取第二主机的时间戳,并根据此次读取的第二主机的时间戳和上一次读取的第二主机的时间戳,确定第二主机是否离线。

第一主机可以将此次读取的第二主机的时间戳和上一次读取的第二主机的时间戳进行比较,确定两次读取的时间戳是否有变化,如果两次读取的时间戳没有变化,可以确定第二主机离线。

当然,在本发明的一种具体实施方式中,考虑到对目标数据的io操作可能比较频繁,或者预设的读取周期较短等因素,当第一主机确定此次读取的第二主机的时间戳相较于上次读取的第二主机的时间戳没有变化时,可以进一步确定两次读取时间戳的时间间隔是否超过第二主机的写入周期,如果不超过,可以在一个等待时长之后,读取第二主机的时间戳。如果在等待时长之后读取的时间戳仍不发生变化,则可以确定第二主机离线。

例如,第二主机的写入周期预设为10秒,第一主机的读取周期预设为30秒。通常,预设的读取周期大于或者等于预设的写入周期。第一主机检测到目标数据被第二主机占用时,读取的第二主机的时间戳为一小时,上一次读取的第二主机的时间戳也为一小时,两次读取第二主机的时间戳的时间间隔为7秒。由于7秒低于第二主机的写入周期10秒,可以在一个等待时长后读取第二主机的时间戳。等待时长可以根据实际情况进行设定和调整,例如设定为与第二主机的写入周期相同,也可以设定为第二主机的写入周期的三倍时长等,本发明对此不作限制。例如当等待时长设为20秒,在20秒后读取第二主机的时间戳,如果读取的第二主机的时间戳仍为一小时,则确定第二主机离线。

第一主机在确定第二主机离线之后,可以进行s204的操作。

s204:解除第二主机对目标数据的占用并进行io操作。

第一主机确定第二主机离线后,解除第二主机对目标数据的占用。例如,可以将第二主机通过分布式锁对目标数据设置的标识进行删除。第一主机在解除第二主机对目标数据的占用之后,可以对目标数据进行io操作。

应用本发明实施例所提供的技术方案,按照预设的读取周期读取每个其他主机按照预设的写入周期写入至共享存储的时间戳,在对共享存储中的目标数据下发第一io操作指令时,检测目标数据是否被第二主机占用,如果是,则读取第二主机的时间戳,根据此次读取的第二主机的时间戳和上一次读取的第二主机的时间戳,确定第二主机是否离线,如果是,则解除第二主机对目标数据的占用并进行io操作。

当共享存储的读写压力比较大时,可能无法及时对第二主机的io操作进行响应,因此第二主机下发的io操作指令出现io超时,可能是第二主机断开了与共享存储的连接导致第二主机的io超时,也可能是共享存储的io压力大造成第二主机的io超时。本发明的方案中,当第一主机检测到目标数据被第二主机占用时,读取第二主机的时间戳,将此次读取的第二主机的时间戳与上一次读取的第二主机的时间戳进行比较,确定第二主机是否离线。当共享存储的io压力大时,第二主机的io出现超时,但第二主机可以通过下发时间戳,使得第一主机确定第二主机是否离线,避免了第二主机并未离线,但由于第二主机的io超时造成对第二主机的意外的隔离,从而无法完成对共享存储的io操作的情况。

在本发明的一种具体实施方式中,步骤s203包括:

步骤一:获得第二主机的io等待时间;

步骤二:确定上一次读取的第二主机的时间戳加上io等待时间是否大于此次读取的第二主机的时间戳,如果否,则进入步骤三;

步骤三:确定第二主机离线。

第一主机从共享存储中读取第二主机的io等待时间,第二主机的io等待时间由第二主机下发至共享存储的相应区域。

需要说明的是,可以根据第二主机的第二io指令队列的等待时间,确定第二主机的io等待时间。其中,第二io指令队列具有非超时属性,包含第二主机对目标数据下发的第二io操作指令。具体地:第二主机可以增加一个具有非超时属性的第二io指令队列,该队列由第二io操作指令构成。非超时属性指的第二主机下发该队列中的io第二io操作指令时,下发不成功则继续下发,并不将该队列进行删除,直至该队列中的第二io操作指令下发成功。当然,连接至同一共享存储中的每一个主机,都可以采用具有非超时属性的io指令队列,进行io操作指令的下发。

第二主机可以在下发时间戳的同时,下发第二主机的io等待时间。当然,io等待时间的下发也可以采用其他的下发方案,并不影响本发明的实施。第一主机将上一次读取的第二主机的时间戳与第二主机的io等待时间相加,确定相加结果是否大于此次读取的第二主机的时间戳,如果否,则确定第二主机离线。

如果仅通过此次读取的第二主机的时间戳与上一次读取的第二主机的时间戳,确定第二主机是否离线,那么第一主机的读取周期较短,对共享存储的目标数据的io操作比较频繁,以及第二主机进行时间戳的下发可能存在延迟等多种因素都会影响第一主机判断第二主机是否离线的准确性。当第二主机并未断开与共享存储的连接时,由于共享存储的io压力大造成第二主机的io操作指令出现超时,则将上次读取的第二主机的时间戳,加上第二主机的io等待时间,得到的和会大于或者等于此次读取的第二主机的时间戳。当第二主机断开与共享存储的连接时,例如第二主机宕机或者第二主机的网络连接中断,由于第二主机无法下发io等待时间以更新共享存储中保存的第二主机的io等待时间,第一主机将从共享存储中读取的第二主机的io等待时间,与上一次读取的第二主机的时间戳进行求和,结果会小于此次读取的第二主机的时间戳。

例如,第一主机检测到第二主机占用共享存储中的目标数据时,此次读取的第二主机的时间戳为60秒,第二主机的io等待时间为32秒,上一次读取的第二主机的时间戳为30秒,则将上一次读取的第二主机的时间戳加上第二主机的io等待时间后,得到的时间大于此次读取的第二主机的时间戳,则可以确定第二主机并未断开与共享存储的连接。

相应于上面的方法实施例,本发明实施例还提供了一种基于分布式锁的存储的io操作装置,下文描述的一种基于分布式锁的存储的io操作装置与上文描述的一种基于分布式锁的存储的io操作方法可相互对应参照。

参见图3所示,为本发明实施例中一种基于分布式锁的存储的io操作装置的结构示意图,应用于第一主机,第一主机与多个其他主机均连接于同一共享存储,该装置包括以下模块:

时间戳读取模块301,用于按照预设的读取周期读取每个其他主机按照预设的写入周期写入至共享存储的时间戳;

目标数据检测模块302,用于在对共享存储中的目标数据下发第一io操作指令时,检测目标数据是否被第二主机占用,如果是,则触发第二主机离线确定模块303,第二主机为多个其他主机中的任意一个;

第二主机离线确定模块303,用于读取第二主机的时间戳,根据此次读取的第二主机的时间戳和上一次读取的第二主机的时间戳,确定第二主机是否离线,如果是,则触发io操作模块304;

io操作模块304,用于解除第二主机对目标数据的占用并进行io操作。

应用本发明实施例所提供的装置,按照预设的读取周期读取每个其他主机按照预设的写入周期写入至共享存储的时间戳,在对共享存储中的目标数据下发第一io操作指令时,检测目标数据是否被第二主机占用,如果是,则读取第二主机的时间戳,根据此次读取的第二主机的时间戳和上一次读取的第二主机的时间戳,确定第二主机是否离线,如果是,则解除第二主机对目标数据的占用并进行io操作。

当共享存储的读写压力比较大时,可能无法及时对第二主机的io操作进行响应,因此第二主机下发的io操作指令出现io超时,可能是第二主机断开了与共享存储的连接导致第二主机的io超时,也可能是共享存储的io压力大造成第二主机的io超时。本发明的方案中,当第一主机检测到目标数据被第二主机占用时,读取第二主机的时间戳,将此次读取的第二主机的时间戳与上一次读取的第二主机的时间戳进行比较,确定第二主机是否离线。当共享存储的io压力大时,第二主机的io出现超时,但第二主机可以通过下发时间戳,使得第一主机确定第二主机是否离线,避免了第二主机并未离线,但由于第二主机的io超时而无法完成对共享存储的io操作的情况。

在本发明的一种具体实施方式中,第二主机离线确定模块303,包括:

io等待时间获得子模块,用于获得第二主机的io等待时间;

时间戳确定子模块,用于确定上一次读取的第二主机的时间戳加上io等待时间是否大于此次读取的第二主机的时间戳,如果否,则进入第二主机离线确定子模块;

第二主机离线确定子模块,用于确定第二主机离线。

在本发明的一种具体实施方式中,io等待时间获得子模块,具体用于:

根据第二主机的第二io指令队列的等待时间,确定第二主机的io等待时间;

第二io指令队列具有非超时属性,包含第二主机对目标数据下发的第二io操作指令。

在本发明的一种具体实施方式中,第一io操作指令为具有非超时属性的第一io指令队列中的指令。

在本发明的一种具体实施方式中,读取周期大于或等于写入周期。

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

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

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