一种分布式锁故障隔离方法、装置、计算机存储器及设备与流程

文档序号:16262893发布日期:2018-12-14 21:43阅读:259来源:国知局
一种分布式锁故障隔离方法、装置、计算机存储器及设备与流程

本申请涉及计算机技术领域,特别涉及一种分布式锁故障隔离方法、装置、计算机存储器及设备。

背景技术

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

分布式锁实现方案大致分两种,一种是依赖于网络,通过网络通信来保证获取资源的一致性,但是对于网络的稳定性依赖,比如dlm(distributedlockmanager,一种分布式锁管理器);第二种实现方案是依赖共享存储,通过对共享存储的读写保证多方的协商,实现方案如sanlock(一种分布式锁软件)。sanlock的实现方案是依赖于diskpaxos算法。两种方案各有优劣,对于dlm来说,如果网络环境比较复杂时候或者网络环境不稳定时候容易造成dlm速度下降,严重影响dlm的速度,同时,如果节点比较多时候,dlm消息传递容易造成网络阻塞,一般来说dlm用于小型的集群中进行锁的管理;分布式锁sanlock依赖于存储,定时下发deltaleases来证明自己节点存活,diskpaxos算法来保证分布式锁的获取,此处只依赖于磁盘,但是磁盘压力比较大的时候因为deltalease每次下发的io仅有一个块的大小,存储高压力时候容易造成deltaleases无法下发,导致sanlockfence。

为了支持大批量的集群锁,因此需要解决sanlock因为deltaleases无法下发时候的fence(故障隔离)问题。



技术实现要素:

有鉴于此,本申请的目的在于提供一种。其具体方案如下:

第一方面,本申请实施例提供了一种分布式锁故障隔离方法,所述方法包括:

当sanlock的deltaleases下发io累计超时时间大于或等于预设的时间阈值时,检查存储池是否由于压力过大导致sanlock的deltaleases无法下发io;

若存储池由于压力过大导致sanlock的deltaleases无法下发io,则杀死主机上io压力最大的进程。

优选地,所述当sanlock的deltaleases下发io累计超时时间大于或等于预设的时间阈值时,检查存储池是否由于压力过大导致sanlock的deltaleases无法下发io,包括:

sanlock在连接存储时制定io超时时间,并在k倍io超时时间下发一次io;

若第m次io无法下发,则检查存储池是否由于压力过大导致sanlock的deltaleases无法下发io。

优选地,所述若存储池由于压力过大导致sanlock的deltaleases无法下发io,则杀死主机上io压力最大的进程,包括:

若存储池由于压力过大导致sanlock的deltaleases无法下发io,且第n次io无法下发,则杀死主机上io压力最大的进程,其中,m≤n。

优选地,所述k=2,m=3,n=4。

第二方面,本申请实施例提供了一种分布式锁故障隔离装置,所述装置包括:

检查模块,用于当sanlock的deltaleases下发io累计超时时间大于或等于预设的时间阈值时,检查存储池是否由于压力过大导致sanlock的deltaleases无法下发io;

杀死模块,用于若存储池由于压力过大导致sanlock的deltaleases无法下发io,则杀死主机上io压力最大的进程。

优选地,所述检查模块具体用于:

sanlock在连接存储时制定io超时时间,并在k倍io超时时间下发一次io;

若第m次io无法下发,则检查存储池是否由于压力过大导致sanlock的deltaleases无法下发io。

优选地,杀死模块具体用于:

若存储池由于压力过大导致sanlock的deltaleases无法下发io,且第n次io无法下发,则杀死主机上io压力最大的进程,其中,m≤n。

优选地,所述k=2,m=3,n=4。

第三方面,本申请实施例提供了一种计算机存储器,所述计算机存储器上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面任一项所述的步骤。

第四方面,本申请实施例提供了一种计算机设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现上述第一方面任一项所述的步骤。

采用本申请实施例提供的一种分布式锁故障隔离方法,当存储池压力较大时候启用io检查装置,通过检查存储池io的性能,除去io压力较大的进程,从而保证sanlock的deltaleases能够正常的下发io,减少sanlock因为存储池压力较大,误杀全部进程的问题。

本申请提供一种方法应用于上述装置,计算机存储器及设备能运行上述方法,也具有上述的有益效果,在此不再赘述。

附图说明

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

图1为本申请具体实施方式提供的一种分布式锁故障隔离方法流程示意图;

图2为本申请具体实施方式提供的一种分布式锁故障隔离装置示意图。

具体实施方式

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

基于上述问题本发明提出了一种优化的一种分布式锁故障隔离方法、装置、计算机存储器及设备,通过检查存储池是不是因为io压力过大,导致sanlock的deltaleases无法下发io,如果是的话检查该存储池上io压力最大的进程,杀死该进程来释放存储池的压力,保证io的正常下发。以下结合附图进行详细说明。

请参考图1,图1为本申请具体实施方式提供的一种分布式锁故障隔离方法流程示意图,如图1所示,该方法主要包括以下步骤。

步骤s101:当sanlock的deltaleases下发io累计超时时间大于或等于预设的时间阈值时,检查存储池是否由于压力过大导致sanlock的deltaleases无法下发io。

步骤s102:若存储池由于压力过大导致sanlock的deltaleases无法下发io,则杀死主机上io压力最大的进程。

具体来讲,存储池上多个进程进行下发大io时候,进程下发大io块的优先级高的时候会造成sanlock的deltaleases下发的小io块无法正常的下发到存储上,因此,超时一定时间时候需要启动io检查装置检查存储池上io压力较大的进程,通过kill操作,杀掉压力较大的进程,保证sanlock的deltaleases能够正常的下发io。而传统方案中,sanlock的deltaleases无法下发,则认为sanlock的deltaleases失效,sanlock下所有获取的锁信息都已经失效,因此sanlock需要kill掉所有获取锁的进程,从而保证锁失效时候在其他节点上进程被拉起。因此,本申请实施例可以保证sanlock的deltaleases下发,减少sanlock因为存储池压力较大时候导致的误杀所有进程的问题。

具体地,sanlock的deltaleases算法是定时在ids空间上定时刷新自己的时间戳,sanlock在连接存储池时候即add_lockspace时候可以制定io超时时间,sanlock会在k*io超时时间去下发一次io,当第m次io无法下发,则检查存储池是否由于压力过大导致sanlock的deltaleases无法下发io,若存储池由于压力过大导致sanlock的deltaleases无法下发io,且第n次io无法下发,则杀死主机上io压力最大的进程,其中,m≤n。

其中,当杀死主机上io压力最大的进程后,返回步骤s101,继续判断sanlock的deltaleases是否能够正常下发io,若不能,则继续杀死当前时刻主机上io压力最大的进程,知道能够正常的下发io。

需要指出的是,一般情况下,使用sanlock时候会同时使用ha,即相应进程在主机上异常挂掉时会在其他主机上ha起来该进程,因此不会造成该进程无法提供服务。

在一种可选实施例中,所述k=2,m=3,n=4。

在本申请实施例中,当存储池压力较大时候启用io检查装置,通过检查存储池io的性能,除去io压力较大的进程,从而保证sanlock的deltaleases能够正常的下发io,减少sanlock因为存储池压力较大,误杀全部进程的问题。

与上述方法实施例相对应,本申请还提供了一种分布式锁故障隔离装置。

请参考图2,图2为本申请具体实施方式提供的一种分布式锁故障隔离装置示意图,如图2所示,该装置主要包括以下模块。

检查模块201,用于当sanlock的deltaleases下发io累计超时时间大于或等于预设的时间阈值时,检查存储池是否由于压力过大导致sanlock的deltaleases无法下发io;

杀死模块202,用于若存储池由于压力过大导致sanlock的deltaleases无法下发io,则杀死主机上io压力最大的进程。

在一种可选实施例中,所述检查模块201具体用于:

sanlock在连接存储时制定io超时时间,并在k倍io超时时间下发一次io;

若第m次io无法下发,则检查存储池是否由于压力过大导致sanlock的deltaleases无法下发io。

在一种可选实施例中,杀死模块202具体用于:

若存储池由于压力过大导致sanlock的deltaleases无法下发io,且第n次io无法下发,则杀死主机上io压力最大的进程,其中,m≤n。

在一种可选实施例中,所述k=2,m=3,n=4。

在本申请实施例中,当存储池压力较大时候启用io检查装置,通过检查存储池io的性能,除去io压力较大的进程,从而保证sanlock的deltaleases能够正常的下发io,减少sanlock因为存储池压力较大,误杀全部进程的问题。

在本申请的又一种具体实施方式中,本申请实施例提供一种计算机可读存储器,所述计算机存储器上存储有计算机程序,所述计算机程序被处理器执行时实现上述具体实施方式中的分布式锁故障隔离方法的步骤。

在本申请的一种具体实施方式中,本申请实施例提供一种计算机设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现上述具体实施方式中的分布式锁故障隔离方法的步骤。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置,设备和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置,设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,功能调用设备,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

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

以上对本申请所提供的一种服务器上电状态监测系统及方法、计算机存储器及设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

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