本发明涉及计算机技术领域,更具体的说,涉及一种LVM数据一致性的控制方法及装置。
背景技术:
共享存储作为目前企业虚拟化软件中的主流存储方式,它的主要执行时为虚拟机和上层业务提供数支撑。目前市场上开源软件及部分商业软件主要采用共享文件系统,如vmware提供的VMFS(VMware Virtual Machine File System,高性能的群集文件系统),Oracle VM中的OCFS文件系统,NAS(Network Attached Storage,网络附属存储)中的NFS(Network File System,网络文件系统)、CIFS(Common Internet File System,通用网络文件系统)等,对共享存储进行存储管理。
但是,由于文件系统自身限制(如性能),导致文件系统提供的共享存储性能不及块存储,因此,目前主要采用块存储对共享存储进行存储管理。在块存储中,通常选用LVM(Logical Volume Manager,逻辑卷管理)。LVM是一种linux环境对磁盘或分区提供的管理机制,通过将底层的物理存储抽象封装,在磁盘和分区之上建立逻辑层,然后以逻辑卷的方式呈现给上层应用。LVM支持对磁盘的动态管理,能够根据业务需求增大或减小已分配的存储空间,从而大大提高了存储管理的灵活性。
然而,目前LVM的开源实现仅仅支持单节点的存储管理,对于集群环境,由于无法保证LVM元数据的一致性,而无法广泛应用于存储虚拟化平台中。
技术实现要素:
有鉴于此,本发明公开一种LVM数据一致性的控制方法及装置,以解决传统方案中,无法保证LVM元数据的一致性,从而使LVM无法广泛应用于存储虚拟化平台中的问题。
一种LVM数据一致性的控制方法,包括:
将LVM系统中数据的一致性分为两个维度,分别为卷组元数据和逻辑卷;
在修改所述卷组元数据时,根据多机之间单一访问控制原则和各个主机元数据保持一致原则,向Sanlock代理模块申请添加与所述卷组元数据相对应的独占锁进行保护;
在所述逻辑卷被激活使用前,根据所述逻辑卷被单主机使用还是被多主机使用,向Sanlock代理模块申请添加对应的独占锁或共享锁进行保护。
优选的,所述在修改所述卷组元数据时,根据多机之间单一访问控制原则和各个主机元数据保持一致原则,向Sanlock代理模块申请添加与所述卷组元数据相对应的独占锁进行保护包括:
在修改所述卷组元数据之前,根据多机之间单一访问控制原则和各个主机元数据保持一致原则,向Sanlock代理模块申请添加独占锁请求;
当所述Sanlock代理模块接收到所述添加独占锁请求之后,通过所述Sanlock代理模块,向与所述Sanlock代理模块预关联的Sanlock进程发送第一锁请求;
当所述Sanlock进程接收到所述第一锁请求之后,通过所述Sanlock进程向元数据锁存储空间申请与所述卷组元数据对应的元数据锁空间;
使用Sanlock中的租约paxos lease,向所述元数据锁空间添加锁租约,实现独占锁的添加。
优选的,所述当所述Sanlock代理模块接收到所述添加独占锁请求之后,通过所述Sanlock代理模块,向与所述Sanlock代理模块预关联的Sanlock进程发送第一锁请求包括:
当所述Sanlock代理模块接收到所述添加独占锁请求之后,通过所述Sanlock代理模块判断所述卷组元数据是否已经被其他资源占用修改;
若所述卷组元数据未被其他资源占用修改,则向与所述Sanlock代理模块预关联的Sanlock进程发送所述第一锁请求。
优选的,还包括:
若所述卷组元数据已经被其他资源占用修改,则在预设时间段后,再次判断所述卷组元数据是否已经被其他资源占用修改。
优选的,所述在所述逻辑卷被激活使用前,根据所述逻辑卷被单主机使用还是被多主机使用,向Sanlock代理模块申请添加对应的独占锁或共享锁进行保护包括:
在所述逻辑卷被主机激活使用前,根据所述逻辑卷被单主机使用还是被多主机使用,向Sanlock代理模块申请添加对应的独占锁或共享锁;
当所述Sanlock代理模块接收到所述添加独占锁请求之后,通过所述Sanlock代理模块,向与所述Sanlock代理模块预关联的Sanlock进程发送第二锁请求;
当所述Sanlock进程接收到所述第二锁请求之后,通过所述Sanlock进程向激活锁存储空间,申请与所述逻辑卷对应的锁存储空间;
使用Sanlock中的租约paxos lease,向所述锁存储空间添加锁租约,实现独占锁或共享所的添加。
一种LVM数据一致性的控制装置,包括:
划分单元,用于将LVM系统中数据的一致性分为两个维度,分别为卷组元数据和逻辑卷;
第一保护单元,用于在修改所述卷组元数据时,根据多机之间单一访问控制原则和各个主机元数据保持一致原则,向Sanlock代理模块申请添加与所述卷组元数据相对应的独占锁进行保护;
第二保护单元,用于在所述逻辑卷被激活使用前,根据所述逻辑卷被单主机使用还是被多主机使用,向Sanlock代理模块申请添加对应的独占锁或共享锁进行保护。
优选的,所述第一保护单元包括:
第一申请子单元,用于在修改所述卷组元数据之前,根据多机之间单一访问控制原则和各个主机元数据保持一致原则,向Sanlock代理模块申请添加独占锁请求;
第一发送子单元,用于当所述Sanlock代理模块接收到所述添加独占锁请求之后,通过所述Sanlock代理模块,向与所述Sanlock代理模块预关联的Sanlock进程发送第一锁请求;
第二申请子单元,用于当所述Sanlock进程接收到所述第一锁请求之后,通过所述Sanlock进程向元数据锁存储空间申请与所述卷组元数据对应的元数据锁空间;
第一添加子单元,用于使用Sanlock中的租约paxos lease,向所述元数据锁空间添加锁租约,实现独占锁的添加。
优选的,所述第一发送子单元包括:
判断子单元,用于当所述Sanlock代理模块接收到所述添加独占锁请求之后,通过所述Sanlock代理模块判断所述卷组元数据是否已经被其他资源占用修改;
第二发送子单元,用于在所述判断子单元判断为是的情况下,向与所述Sanlock代理模块预关联的Sanlock进程发送所述第一锁请求。
优选的,还包括:
再次发送子单元,用于在所述判断子单元判断为否的情况下,在预设时间段后,再次判断所述卷组元数据是否已经被其他资源占用修改。
优选的,所述第二保护单元包括:
第三申请子单元,用于在所述逻辑卷被主机激活使用前,根据所述逻辑卷被单主机使用还是被多主机使用,向Sanlock代理模块申请添加对应的独占锁或共享锁;
第三发送子单元,用于当所述Sanlock代理模块接收到所述添加独占锁请求之后,通过所述Sanlock代理模块,向与所述Sanlock代理模块预关联的Sanlock进程发送第二锁请求;
第四申请子单元,用于当所述Sanlock进程接收到所述第二锁请求之后,通过所述Sanlock进程向激活锁存储空间,申请与所述逻辑卷对应的锁存储空间;
第二添加子单元,用于使用Sanlock中的租约paxos lease,向所述锁存储空间添加锁租约,实现独占锁或共享所的添加。
从上述的技术方案可知,本发明公开了一种LVM数据一致性的控制方法及装置,将LVM系统中数据的一致性分为卷组元数据和逻辑卷两个维度,在修改所述卷组元数据时,向Sanlock代理模块申请添加与所述卷组元数据相对应的独占锁进行保护,在所述逻辑卷被激活使用前,根据所述逻辑卷被单主机使用还是被多主机使用,向Sanlock代理模块申请添加对应的独占锁或共享锁进行保护。因此,本发明从卷组元数据和逻辑卷两个维度对集群中的LVM元数据进行了保护,保证了LVM元数据的一致性,使LVM能够广泛应用于存储虚拟化平台中。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据公开的附图获得其他的附图。
图1为本发明实施例公开的一种LVM数据一致性的控制方法流程图;
图2为本发明实施例公开的一种卷组元数据的控制方法流程图;
图3为本发明实施例公开的一种逻辑卷的控制方法流程图;
图4为本发明实施例公开的一种LVM数据一致性的控制装置的结构示意图;
图5为本发明实施例公开的一种第一保护单元的结构示意图;
图6为本发明实施例公开的一种第二保护单元的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种LVM数据一致性的控制方法及装置,以解决传统方案中,无法保证LVM元数据的一致性,从而使LVM无法广泛应用于存储虚拟化平台中的问题。
参见图1,本发明实施例公开的一种LVM数据一致性的控制方法流程图,该方法包括步骤:
步骤S101、将LVM系统中数据的一致性分为两个维度,分别为卷组元数据和逻辑卷;
具体的,在实际应用中,可以将卷组(Volume Group,VG)元数据定义为LVM系统的控制面数据,将逻辑卷(Logical Volume,LV)定义为LVM系统的数据面数据,这样,实现LVM系统中数据的一致性,也即实现控制面数据一致性和数据面数据一致性。
步骤S102、在修改所述卷组元数据时,根据多机之间单一访问控制原则和各个主机元数据保持一致原则,向Sanlock代理模块申请添加与所述卷组元数据相对应的独占锁进行保护;
需要说明的是,逻辑卷的创建、删除、扩容、缩容等操作都会改变卷组元数据,尤其在集群环境中,每个主机可以访问同一个共享存储的情况,因此,主机之间卷组元数据操作的一致性尤为重要,在步骤中,也即实现控制面数据一致性。
本步骤中,通过在修改卷组元数据时,申请该卷组元数据对应的独占锁,实现对待修改卷组元数据的保护,从而有效避免了当某个主机修改卷组元数据时,存在其他主机也修改元数据的情况,进而实现了多机之间的单一访问和各个主机卷组元数据的一致性。
其中,Sanlock是一种基于软件实现的轻量级分布式锁管理器,在oVirt和Libvirt等虚拟化项目中已广泛应用。它是一个基于SAN实现的,集群中的每个节点各自运行Sanlock服务,并将锁的状态写在共享存储上,以delta lease算法保证节点的唯一性,以paxos lease读写共享存储以实现对分布式锁的获取和释放。
paxos lease和delta lease是Sanlock中两种不同的租约,一个paxos lease就是一个带有时间戳的锁,用来保护一项抽象的资源。另一种租约delta lease,只由sanlock内部使用,不对外暴露,主要作用是保证节点ID的唯一性,并提供简单的成员管理服务。
Sanlock中的paxos lease能够提供两种锁类型,独占锁和共享锁,独占锁是一个共享资源,只能被一个主机使用;共享锁是共享资源,同时可以被多个主机使用。
步骤S103、在所述逻辑卷被激活使用前,根据所述逻辑卷被单主机使用还是被多主机使用,向Sanlock代理模块申请添加对应的独占锁或共享锁进行保护。
具体的,本步骤中,对逻辑卷进行保护的目的是实现数据面数据一致性,也即保证集群LVM向上层提供的逻辑卷数据一致。
集群LVM的逻辑卷的使用有两种模式:共享模式和独占模式。共享模式指的是:逻辑卷可以被多个主机同时激活使用;独占模式指的是:逻辑卷只能被单主机使用。
当逻辑卷被主机使用时,需要将逻辑卷加载到内核,可定义此动作为激活逻辑卷;当逻辑卷使用完成时,需要将逻辑卷从内核卸载,可定义次动作为冻结逻辑卷。
本步骤中,为保证数据面数据一致,采用逻辑卷的激活锁类型(包括独占锁和共享锁)与逻辑卷的使用方式保持一致的方式。也即,当逻辑卷被同一主机的多个虚拟机使用时,或逻辑卷被多个主机的多个虚拟机使用时,激活共享锁对逻辑卷进行保护;当逻辑卷只能被一个主机上的一个虚拟机使用时,激活独占锁对逻辑卷进行保护。
需要说明的是,步骤S102和步骤S103在实际执行过程中,没有先后顺序要求,可以按照图1所示实施例的顺序执行,也可以先执行步骤S103,后执行步骤S102,或是两个步骤同时执行。
综上可知,本发明将LVM系统中数据的一致性分为卷组元数据和逻辑卷两个维度,在修改所述卷组元数据时,向Sanlock代理模块申请添加与所述卷组元数据相对应的独占锁进行保护,在所述逻辑卷被激活使用前,根据所述逻辑卷被单主机使用还是被多主机使用,向Sanlock代理模块申请添加对应的独占锁或共享锁进行保护。因此,本发明从卷组元数据和逻辑卷两个维度对集群中的LVM元数据进行了保护,保证了LVM元数据的一致性,使LVM能够广泛应用于存储虚拟化平台中。
需要说明的是,在上述实施例中,在步骤S101将LVM系统中数据的一致性分为两个维度之前,需要对集群LVM环境进行初始化。
集群LVM环境进行初始化的内容包括:
(1)将LVM的配置文件中的元数据缓存功能关闭,具体的,将LVM的配置文件中/etc/lvm/lvm.conf文件中的use_lvmetad的1修改为0;
(2)将LVM相关的通信服务和代理服务管理关闭,具体的,关闭LVM相关的lvm2-lvmetad.socket和lvm2-lvmetad.service两个服务。
其中,在实现控制面数据一致性和数据面数据一致性之前,还需要将Sanlock锁空间初始化。
具体的,按照单卷组单股控制流原则,将一个共享存储LUN(Logical Unit Number,逻辑单元号)创建成一个物理卷(Physical Volume,PV);将一个所述物理卷创建成一个卷组(Volume Group,VG);将一个所述卷组创建成两个存储空间,分别为:元数据锁空间和激活锁存储空间。
在实现控制面数据一致性和数据面数据一致性的过程中,需要启动Sanlock锁服务,即需要将Sanlock代理模块和Sanlock进程预关联,以实现Sanlock加锁的逻辑控制。同时,启动Sanlock锁服务,还可以为每个Sanlock锁申请提供排队机制,以保证卷组元数据的顺序操作。
需要说明的是,实现控制面数据一致性主要遵循如下几个原则:
1、将单个VG作为单股控制流;
具体的,为简化管理,本发明将每个VG作为单股控制流,即一个VG由一个PV(Physical Volume,物理卷),同时VG的卷组元数据只保存在相对应的LUN上。
2、各个主机的卷组元数据保持一致;
具体的,每个主机的卷组元数据由该主机上的LVM单独控制,这是由默认的文件锁来保证,各个主机之间的卷组元数据操作都互不影响。
3、多机之间采用单一访问控制;
具体的,多机之间的卷组元数据保持一致,采用读不加锁、写加锁的原则,即读者-写者问题。在修改卷组元数据之前,首先添加Sanlock提供的独占锁,若此时由其他主机需要修改卷组元数据时,会添加独占锁失败,从而保证了单一主机修改;对于读写卷组元数据操作,即用vgdisplay,lvdisplay命令时不添加锁。
4、卷组元数据修改时采用顺序操作;
具体的,对于并发的卷组元数据采用排队机制,即将所有的添加锁操作放入到一个任务队列中,避免并发加锁;若独占锁已经被占用,则等待预设时间段后重试。
因此,为进一步优化上述实施例,如图2所示,本发明一实施例公开了一种卷组元数据的控制方法流程图,也即步骤S102具体包括:
步骤S201、在修改所述卷组元数据之前,根据多机之间单一访问控制原则和各个主机元数据保持一致原则,向Sanlock代理模块申请添加独占锁请求;
步骤S202、当所述Sanlock代理模块接收到所述添加独占锁请求之后,通过所述Sanlock代理模块,向与所述Sanlock代理模块预关联的Sanlock进程发送第一锁请求;
步骤S203、当所述Sanlock进程接收到所述第一锁请求之后,通过所述Sanlock进程向元数据锁存储空间申请与所述卷组元数据对应的元数据锁空间;
步骤S204、使用Sanlock中的租约paxos lease,向所述元数据锁空间添加锁租约,实现独占锁的添加。
其中,本实施例中,当所述述卷组元数据修改完成之后,会向所述Sanlock代理模块发送释放锁请求,释放所述独占锁。
根据对卷组元数据修改需要保证顺序操作原则,对卷组元数据的修改,即添加独占锁需要顺序添加。因此,上述实施例中的步骤S202具体包括:
当所述Sanlock代理模块接收到所述添加独占锁请求之后,通过所述Sanlock代理模块判断所述卷组元数据是否已经被其他资源占用修改;
若所述卷组元数据未被其他资源占用修改,则向与所述Sanlock代理模块预关联的Sanlock进程发送所述第一锁请求。
其中,若所述卷组元数据已经被其他资源占用修改,则在预设时间段后,再次判断所述卷组元数据是否已经被其他资源占用修改。
需要说明的是,预设时间段的具体数值依据实际需要而定。
数据面数据一致性主要是保证集权LVM向上层提供的逻辑卷数据一致。其中,逻辑卷被激活记载到内核时才能被使用,但是,如果两个主机同时激活逻辑卷,在一个主机执行删除操作,则在另一个主机会残留该逻辑卷的内核数据。因此,对数据面数据一致性控制需要遵循如下原则:
1、将单个LV作为单股控制流;
具体的,将每个LV作为单股数据流管理,每个LV在交给上层使用时包含两个部分:激活锁和LV资源,每个LV在Sanlock的共享存储上。
2、LV激活锁类型与逻辑的使用方式保持一致;
具体的,激活锁的类型包含两种类型:共享锁和独占锁,共享锁主要用于逻辑卷被同一主机多个虚拟机使用,或多个主机的多个虚拟机使用的场景;独占锁主要应用逻辑卷只能被一个主机上的虚拟机使用的场景。
因此,为进一步优化上述实施例,如图3所示,本发明一实施例公开了一种逻辑卷的控制方法流程图,也即步骤S103具体包括:
步骤S301、在所述逻辑卷被主机激活使用前,根据所述逻辑卷被单主机使用还是被多主机使用,向Sanlock代理模块申请添加对应的独占锁或共享锁;
步骤S302、当所述Sanlock代理模块接收到所述添加独占锁请求之后,通过所述Sanlock代理模块,向与所述Sanlock代理模块预关联的Sanlock进程发送第二锁请求;
步骤S303、当所述Sanlock进程接收到所述第二锁请求之后,通过所述Sanlock进程向激活锁存储空间,申请与所述逻辑卷对应的锁存储空间;
步骤S304、使用Sanlock中的租约paxos lease,向所述锁存储空间添加锁租约,实现独占锁或共享所的添加。
其中,本实施例中,当所述逻辑卷使用完成后,会向所述Sanlock代理模块发送释放锁请求。
综上可知,本发明将LVM系统中数据的一致性分为卷组元数据和逻辑卷两个维度,在修改所述卷组元数据时,向Sanlock代理模块申请添加与所述卷组元数据相对应的独占锁进行保护,在所述逻辑卷被激活使用前,根据所述逻辑卷被单主机使用还是被多主机使用,向Sanlock代理模块申请添加对应的独占锁或共享锁进行保护。因此,本发明从卷组元数据和逻辑卷两个维度对集群中的LVM元数据进行了保护,保证了LVM元数据的一致性,使LVM能够广泛应用于存储虚拟化平台中。
与上述方法实施例相对应,本发明还公开了一种LVM数据一致性的控制装置。
如图4所示,本发明实施例公开的一种LVM数据一致性的控制装置的结构示意图,包括:
划分单元401,用于将LVM系统中数据的一致性分为两个维度,分别为卷组元数据和逻辑卷;
具体的,在实际应用中,可以将卷组(Volume Group,VG)元数据定义为LVM系统的控制面数据,将逻辑卷(Logical Volume,LV)定义为LVM系统的数据面数据,这样,实现LVM系统中数据的一致性,也即实现控制面数据一致性和数据面数据一致性。
第一保护单元402,用于在修改所述卷组元数据时,根据多机之间单一访问控制原则和各个主机元数据保持一致原则,向Sanlock代理模块申请添加与所述卷组元数据相对应的独占锁进行保护;
需要说明的是,逻辑卷的创建、删除、扩容、缩容等操作都会改变卷组元数据,尤其在集群环境中,每个主机可以访问同一个共享存储的情况,因此,主机之间卷组元数据操作的一致性尤为重要,在步骤中,也即实现控制面数据一致性。
第一保护单元402通过在修改卷组元数据时,申请该卷组元数据对应的独占锁,实现对待修改卷组元数据的保护,从而有效避免了当某个主机修改卷组元数据时,存在其他主机也修改元数据的情况,进而实现了多机之间的单一访问和各个主机卷组元数据的一致性。
第二保护单元403,用于在所述逻辑卷被激活使用前,根据所述逻辑卷被单主机使用还是被多主机使用,向Sanlock代理模块申请添加对应的独占锁或共享锁进行保护。
具体的,对逻辑卷进行保护的目的是实现数据面数据一致性,也即保证集群LVM向上层提供的逻辑卷数据一致。
集群LVM的逻辑卷的使用有两种模式:共享模式和独占模式。共享模式指的是:逻辑卷可以被多个主机同时激活使用;独占模式指的是:逻辑卷只能被单主机使用。
当逻辑卷被主机使用时,需要将逻辑卷加载到内核,可定义此动作为激活逻辑卷;当逻辑卷使用完成时,需要将逻辑卷从内核卸载,可定义次动作为冻结逻辑卷。
本实施例中,为保证数据面数据一致,采用逻辑卷的激活锁类型(包括独占锁和共享锁)与逻辑卷的使用方式保持一致的方式。也即,当逻辑卷被同一主机的多个虚拟机使用时,或逻辑卷被多个主机的多个虚拟机使用时,激活共享锁对逻辑卷进行保护;当逻辑卷只能被一个主机上的一个虚拟机使用时,激活独占锁对逻辑卷进行保护。
综上可知,本发明将LVM系统中数据的一致性分为卷组元数据和逻辑卷两个维度,在修改所述卷组元数据时,向Sanlock代理模块申请添加与所述卷组元数据相对应的独占锁进行保护,在所述逻辑卷被激活使用前,根据所述逻辑卷被单主机使用还是被多主机使用,向Sanlock代理模块申请添加对应的独占锁或共享锁进行保护。因此,本发明从卷组元数据和逻辑卷两个维度对集群中的LVM元数据进行了保护,保证了LVM元数据的一致性,使LVM能够广泛应用于存储虚拟化平台中。
需要说明的是,在上述实施例中,在划分单元401将LVM系统中数据的一致性分为两个维度之前,需要对集群LVM环境进行初始化。
集群LVM环境进行初始化的内容包括:
(1)将LVM的配置文件中的元数据缓存功能关闭,具体的,将LVM的配置文件中/etc/lvm/lvm.conf文件中的use_lvmetad的1修改为0;
(2)将LVM相关的通信服务和代理服务管理关闭,具体的,关闭LVM相关的lvm2-lvmetad.socket和lvm2-lvmetad.service两个服务。
其中,在实现控制面数据一致性和数据面数据一致性之前,还需要将Sanlock锁空间初始化。
具体的,按照单卷组单股控制流原则,将一个共享存储LUN(Logical Unit Number,逻辑单元号)创建成一个物理卷(Physical Volume,PV);将一个所述物理卷创建成一个卷组(Volume Group,VG);将一个所述卷组创建成两个存储空间,分别为:元数据锁空间和激活锁存储空间。
需要说明的是,实现控制面数据一致性主要遵循如下几个原则:
1、将单个VG作为单股控制流;
具体的,为简化管理,本发明将每个VG作为单股控制流,即一个VG由一个PV(Physical Volume,物理卷),同时VG的卷组元数据只保存在相对应的LUN上。
2、各个主机的卷组元数据保持一致;
具体的,每个主机的卷组元数据由该主机上的LVM单独控制,这是由默认的文件锁来保证,各个主机之间的卷组元数据操作都互不影响。
3、多机之间采用单一访问控制;
具体的,多机之间的卷组元数据保持一致,采用读不加锁、写加锁的原则,即读者-写者问题。在修改卷组元数据之前,首先添加Sanlock提供的独占锁,若此时由其他主机需要修改卷组元数据时,会添加独占锁失败,从而保证了单一主机修改;对于读写卷组元数据操作,即用vgdisplay,lvdisplay命令时不添加锁。
4、卷组元数据修改时采用顺序操作;
具体的,对于并发的卷组元数据采用排队机制,即将所有的添加锁操作放入到一个任务队列中,避免并发加锁;若独占锁已经被占用,则等待预设时间段后重试。
因此,为进一步优化上述实施例,如图5所示,本发明一实施例公开的一种第一保护单元的结构示意图,包括:
第一申请子单元501,用于在修改所述卷组元数据之前,根据多机之间单一访问控制原则和各个主机元数据保持一致原则,向Sanlock代理模块申请添加独占锁请求;
第一发送子单元502,用于当所述Sanlock代理模块接收到所述添加独占锁请求之后,通过所述Sanlock代理模块,向与所述Sanlock代理模块预关联的Sanlock进程发送第一锁请求;
第二申请子单元503,用于当所述Sanlock进程接收到所述第一锁请求之后,通过所述Sanlock进程向元数据锁存储空间申请与所述卷组元数据对应的元数据锁空间;
第一添加子单元504,用于使用Sanlock中的租约paxos lease,向所述元数据锁空间添加锁租约,实现独占锁的添加。
根据对卷组元数据修改需要保证顺序操作原则,对卷组元数据的修改,即添加独占锁需要顺序添加。
因此,上述实施例中的第一发送子单元具体包括:
判断子单元,用于当所述Sanlock代理模块接收到所述添加独占锁请求之后,通过所述Sanlock代理模块判断所述卷组元数据是否已经被其他资源占用修改;
第二发送子单元,用于在所述判断子单元判断为是的情况下,向与所述Sanlock代理模块预关联的Sanlock进程发送所述第一锁请求。
其中,若所述卷组元数据已经被其他资源占用修改,则在预设时间段后,判断子单元会再次判断所述卷组元数据是否已经被其他资源占用修改。
因此,第一发送子单元还包括:
再次发送子单元,用于在所述判断子单元判断为否的情况下,在预设时间段后,再次判断所述卷组元数据是否已经被其他资源占用修改。
数据面数据一致性主要是保证集权LVM向上层提供的逻辑卷数据一致。其中,逻辑卷被激活记载到内核时才能被使用,但是,如果两个主机同时激活逻辑卷,在一个主机执行删除操作,则在另一个主机会残留该逻辑卷的内核数据。因此,对数据面数据一致性控制需要遵循如下原则:
1、将单个LV作为单股控制流;
具体的,将每个LV作为单股数据流管理,每个LV在交给上层使用时包含两个部分:激活锁和LV资源,每个LV在Sanlock的共享存储上。
2、LV激活锁类型与逻辑的使用方式保持一致;
具体的,激活锁的类型包含两种类型:共享锁和独占锁,共享锁主要用于逻辑卷被同一主机多个虚拟机使用,或多个主机的多个虚拟机使用的场景;独占锁主要应用逻辑卷只能被一个主机上的虚拟机使用的场景。
因此,为进一步优化上述实施例,如图6所示,本发明一实施例公开的一种第二保护单元的结构示意图,包括:
第三申请子单元601,用于在所述逻辑卷被主机激活使用前,根据所述逻辑卷被单主机使用还是被多主机使用,向Sanlock代理模块申请添加对应的独占锁或共享锁;
第三发送子单元602,用于当所述Sanlock代理模块接收到所述添加独占锁请求之后,通过所述Sanlock代理模块,向与所述Sanlock代理模块预关联的Sanlock进程发送第二锁请求;
第四申请子单元603,用于当所述Sanlock进程接收到所述第二锁请求之后,通过所述Sanlock进程向激活锁存储空间,申请与所述逻辑卷对应的锁存储空间;
第二添加子单元604,用于使用Sanlock中的租约paxos lease,向所述锁存储空间添加锁租约,实现独占锁或共享所的添加。
其中,本实施例中,当所述逻辑卷使用完成后,会向所述Sanlock代理模块发送释放锁请求。
综上可知,本发明将LVM系统中数据的一致性分为卷组元数据和逻辑卷两个维度,在修改所述卷组元数据时,向Sanlock代理模块申请添加与所述卷组元数据相对应的独占锁进行保护,在所述逻辑卷被激活使用前,根据所述逻辑卷被单主机使用还是被多主机使用,向Sanlock代理模块申请添加对应的独占锁或共享锁进行保护。因此,本发明从卷组元数据和逻辑卷两个维度对集群中的LVM元数据进行了保护,保证了LVM元数据的一致性,使LVM能够广泛应用于存储虚拟化平台中。
需要说明的是,装置实施例中,各组成部分的具体工作原理,请参见方法实施例对应部分,此次不再赘述。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。