一种分布式独占锁的实现方法和装置与流程

文档序号:16845571发布日期:2019-02-12 22:11阅读:183来源:国知局
一种分布式独占锁的实现方法和装置与流程

本发明涉及虚拟化计算平台技术,尤指一种分布式独占锁的实现方法和装置。



背景技术:

随着计算机技术和网络技术的快速发展,大型集群在实际生产环境中得到广泛使用。通过将服务器集群虚拟化,组成云计算平台虚拟化系统,在虚拟化系统中,常常需要协调动作,不同系统或者是在同一个系统不同主机之间共享同一个或一组资源,往往需要互斥来防止彼此的干扰,保证一致性,因此需要分布式锁来保证上述情况下系统的正常运行。

分布式锁一般来说需要支撑大规格环境下的使用,因此需要使用带租约的分布式锁来保证获取锁资源的节点的唯一性,同时还要保证同一个节点唯一的获取该资源。由于分布式锁的获取者是集群中的主机成员,因此分布式锁的实现方式分为两种:一种为网络型的,即dlm实现方式;一种是共享存储型的,即sanlock实现方式。但是sanlock并不支持ceph的可靠的自动的分布式存储块设备(rbd),因此需要实现一套基于rbd的分布式锁系统。现有的基于rbd的分布式锁系统中,当节点离线或者是网络断开时后容易造成锁资源的残留。



技术实现要素:

为了解决上述技术问题,本发明提供了一种分布式独占锁的实现方法和装置。通过租约进程对锁资源进行管理,解决了基于rbd的分布式锁锁资源残留的问题。

为了达到本发明目的,本发明提供了一种分布式独占锁的实现方法,包括:

维护租约进程;

节点在获取锁资源时,注册至所述租约进程,通过所述租约进程完成对分布式锁的i/o操作。

优选的,该方法还包括:

定时向所述分布式锁的存储池下发所述节点的时间戳,表明所述节点在线。

优选的,该方法还包括:

在预置的检测间隔没有接收到所述节点更新的时间戳时,判定所述节点已经离线。

优选的,该方法还包括:

在检测到节点离线后,释放所述节点占用的锁资源。

优选的,节点在获取锁资源时,注册至所述租约进程,通过所述租约进程完成对分布式锁的i/o操作的步骤之前,还包括:

进行锁信息查询,根据所述节点请求的锁资源的标识,查询占用所述锁资源的主机;

在所述锁资源未被任何主机占用或占用所述锁资源的主机已离线时,将所述锁资源分配给所述节点。

优选的,所述锁资源的标识包含所述租约进程的进程id信息和节点id信息。

优选的,该方法还包括:

当所述租约进程终结时,释放所述租约进程涉及的全部锁资源。

本发明还提供了一种分布式独占锁的实现装置,包括:

进程管理模块,用于维护租约进程;

i/o操作模块,用于在获取锁资源时,注册至所述租约进程,通过所述租约进程完成对分布式锁的i/o操作。

优选的,该装置还包括:

检测模块,用于接收定时向所述分布式锁的存储池下发所述节点的时间戳,并在预置的检测间隔没有接收到所述节点更新的时间戳时,判定所述节点已经离线。

优选的,该装置还包括:

锁资源存储池,用于在检测到节点离线后,释放所述节点占用的锁资源,

当所述租约进程终结时,释放所述租约进程涉及的全部锁资源。

本发明提供了一种分布式独占锁的实现方法和装置,维护租约进程,节点在获取锁资源时,注册至所述租约进程,通过所述租约进程完成对分布式锁的i/o操作。实现了支持租约的分布式锁系统,解决了基于rbd的分布式锁锁资源残留的问题。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

附图说明

附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。

图1为本发明的一实施例提供的一种分布式独占锁的实现方法的流程示意图;

图2为本发明的一实施例提供的一种分布式独占锁的实现方法的流程示意图;

图3为本发明的一实施例提供的一种分布式独占锁的实现装置的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

现有的基于rbd的分布式锁系统中,当节点离线或者是网络断开时后容易造成锁资源的残留。

为了解决上述问题,本发明的实施例提供了一种分布式独占锁的实现方法,使用该方法实现分布式锁的流程如图1所示,包括:

步骤101、维护租约进程。

本发明实施例中,增加租约进程,同时修改rbd的lock获取流程,从而实现了一套rbd至此带租约的分布式独占锁。

步骤102、进行锁信息查询,根据所述节点请求的锁资源的标识,查询占用所述锁资源的主机。

本发明实施例中,给rbd的所有的节点的客户端(client)分配唯一的锁资源标识,每一个标识对应自己的i/o块锁资源,租约进程定时的对锁资源进行i/o自己的时间戳,从而证明该节点存活。

本发明实施例中,所述锁资源的标识包含所述租约进程的进程id信息和节点id信息。

步骤103、在所述锁资源未被任何主机占用或占用所述锁资源的主机已离线时,将所述锁资源分配给所述节点。

本发明实施例中,租约进程对自己的锁资源进行i/o,当i/o在一定的时间中无法下发i/o时候,则认为存储不可达,需要终止所有的获取rbd存储池的进程,同时停止更新自己的时间戳。

步骤104、节点在获取锁资源时,注册至所述租约进程,通过所述租约进程完成对分布式锁的i/o操作。

本步骤中,租约进程需要进行资源管理操作,即每一个租约进程获取锁资源时候必须在该租约进程进行注册标注进程的id,进程获取的锁资源信息,在执行获取锁资源时候写入的锁资源的id是该租约进程约定好的id信息。

租约进程进行锁资源的管理操作,租约进程会检测获取锁资源的进程状态,当进程意外终止时主动去释放该进程获取的锁资源。

步骤105、当所述租约进程终结时,释放所述租约进程涉及的全部锁资源。

本发明的一实施例还提供了一种分布式独占锁的实现方法,在进行锁资源管理时,通过检测节点的在线状态对锁资源进行管理,具体流程如图2所示,包括:

步骤201、定时向所述分布式锁的存储池下发所述节点的时间戳,表明所述节点在线。

步骤202、在预置的检测间隔没有接收到所述节点更新的时间戳时,判定所述节点已经离线。

步骤203、在检测到节点离线后,释放所述节点占用的锁资源。

本发明实施例中,修改rbd的锁资源获取流程,当获取rbd的锁资源时,需要从租约进程中获取该锁资源的标识,之后进行锁资源的检测机制,当没有进程获取该锁资源,直接以当前的锁资源的id进程获取锁资源,当有节点获取该资源的锁时候读取所资源的id信息,通过锁资源的id信息分辨出节点的id信息,然后读取占有锁资源节点的时间戳信息,从而判断节点是否存活,如果获取锁资源的节点存活则获取锁失败,进行失败回滚,如果节点已经离线,则释放原来节点所拥有的锁资源,之后获取自己的锁资源。

需要说明的是,图2所示的节点存活检测流程与图1所示的分布式锁资源管理流程之间并不严格时序关系。根据节点在线或离线的检测结果,可随时对节点占用的锁资源进行调整。

本发明的一实施例还提供了一种分布式独占锁的实现方法,实现rbd的租约信息,从而实现了支持带租约的基于rbd的分布式锁。

本发明实施例提供了一个租约机制和锁管理机制,通过每一个节点一个唯一的id来标示集群的节点的唯一性,通过定时的在rbd的存储池的一个卷上进行i/o下发时间戳来实现rbd的定时刷新,认为节点在线,保证在节点存活的状况下其他主机无法获取该节点获取的锁资源,保证了独占性。

通过定制rbd的资源锁的标识,标志锁资源拥有的节点的id。通过检查时间戳的刷新时间,判断节点是否离线,及是否能够获取其他节点获取的锁资源,同时通过检查当前节点对rbd的i/o信息来判断当前节点是否能够下发时间戳,无法下发时间戳一定时间之后执行fence操作,fence该节点管理的该rbd存储池的锁资源。

rbdimage的资源锁通过执行添加锁(lockadd)进行加锁操作,通过传入唯一的资源锁的标识(lockid)来区分锁资源,因此可以定制lockid来进行锁资源的管理。例如,lockid由占用资源锁的主机id信息和获取该锁资源的租约进程的id两部分组成。

rbd带租约的分布式独占锁的租约是通过定时的向rbd存储池中的一个卷中下发该节点的时间戳实现的。通过节点的时间戳的刷新来证明该节点存活,当时间戳一定时间(例如预置的检测时间)没有刷新的话就认为该节点已经离线,该离线节点的锁资源释放,可以获取离线节点的锁资源。

获取rbd的锁资源时候需要先进行image锁信息查询,如果锁资源当前没有被获取,可以直接进行获取;如果锁资源已经被获取,通过锁资源的标识中包含的主机的后四位,来判断获取该锁资源的主机(即节点)的id,通过该主机的id信息,读取该主机对应的资源锁的时间戳记录来判断节点是否在线。

租约进程还需要进行获取锁资源的进程的管理,当租约进程终止的时候,主动释放该租约进程获取的锁资源。

租约进程使用节点的开机时间当作时间戳来进行下发,避免用户修改时间导致时间戳出现差异问题,保证了各节点的时间戳处于同一轴。同时租约进程重启时修改租约进程的标示,避免因为重启导致的原来已经释放的资源锁还被占用的问题。

当租约进程进行重启时候需要释放掉所有的已经获取的锁资源,同时终止(kill)掉所有的获取锁的进程,避免因为更新新的资源锁标识导致原来获取的锁资源无法释放的问题。

本发明的一实施例还提供了一种分布式独占锁的实现装置,其结构如图3所示,包括:

进程管理模块301,用于维护租约进程;

i/o操作模块302,用于在获取锁资源时,注册至所述租约进程,通过所述租约进程完成对分布式锁的i/o操作。

优选的,该装置还包括:

检测模块303,用于接收定时向所述分布式锁的存储池下发所述节点的时间戳,并在预置的检测间隔没有接收到所述节点更新的时间戳时,判定所述节点已经离线。

优选的,该装置还包括:

锁资源存储池304,用于在检测到节点离线后,释放所述节点占用的锁资源,

当所述租约进程终结时,释放所述租约进程涉及的全部锁资源。

本发明的实施例提供了一种分布式独占锁的实现方法和装置,维护租约进程,节点在获取锁资源时,注册至所述租约进程,通过所述租约进程完成对分布式锁的i/o操作。实现了支持租约的分布式锁系统,解决了基于rbd的分布式锁锁资源残留的问题。本发明通过增加租约进程,通过修改rbd锁的获取流程,实现了支持ceph的rbd的带租约的分布式独占锁,租约进程定时的刷新时间戳,从而实现了rbd锁的租约,能够让rbd在集群下正常的共享给所有的集群节点,使rbd能够适用于集群存储,保证了集群数据的一致性。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

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