一种基于LVM的逻辑卷动态扩容的方法及系统与流程

文档序号:11807577阅读:354来源:国知局
一种基于LVM的逻辑卷动态扩容的方法及系统与流程

本发明涉及云计算存储虚拟化领域,特别涉及一种基于LVM的逻辑卷动态扩容的方法及系统。



背景技术:

KVM(Kernel Virtual Machine)虚拟化已经在大多数的Linux系统上得到应用支持。它是基于硬件的完全虚拟化,需要硬件支持(如Inter VT技术或AMDV技术),主要支持CPU和内存的虚拟化管理。qemu主要模拟磁盘、网卡等IO设备。基于qemu-KVM的技术是一个完整的模拟器,它可以提供完整的CPU、内存、网络、IO等模拟环境。libvirt是一个软件集全,提供一种单一的方式为多种不同的虚拟化管理提供方式和hypervisor,同时为开发或管理人员提供了多种多样的API库和命令行工具用于管理虚拟机、存储和网络等。

随着云计算技术的快速发展,逻辑卷管理器(LVM)逐渐应用于云存储的各个领域。LVM隐藏物理硬件之间的差异性和异构性,在物理存储上构建抽象层,向文件系统或直接向应用程序提供逻辑卷使用。基于LVM技术提供的逻辑卷,经过qemu技术转换为qcow2格式文件后可以被虚拟机挂载使用。但是由于底层逻辑卷的容量大小不能根据上层业务实时动态扩容分配,从而无法提高磁盘空间利用率。



技术实现要素:

本发明的目的是提供一种基于LVM的逻辑卷动态扩容的方法及系统,能根据上层业务实时动态扩容,动态按需分配底层逻辑卷的容量大小,从而提高磁盘空间利用率。

为解决上述技术问题,本发明提供一种基于LVM的逻辑卷动态扩容的方法,包括:

利用qemu命令将逻辑卷的映射文件转变为qcow2文件格式,并通过下发的写IO,触发底层逻辑卷的容量最大上限值;

获取libvirt中虚拟磁盘上报的容量不足错误,并记录对应的虚拟机名称、虚拟机id及虚拟磁盘路径;

根据所述虚拟磁盘路径查找对应的逻辑卷,判断是否满足扩容条件;

若满足,则对所述逻辑卷执行扩容操作,并根据所述虚拟机名称及所述虚拟机id重启虚拟机。

其中,利用qemu命令将逻辑卷的映射文件转变为qcow2文件格式,并通过下发的写IO,触发底层逻辑卷的容量最大上限值之后,还包括:

当libvirt中虚拟磁盘上报容量不足错误时,利用libvirt触发虚拟机保护机制,暂停对应虚拟机的上层业务。

其中,利用qemu命令将逻辑卷的映射文件转变为qcow2文件格式,并通过下发的写IO,触发底层逻辑卷的容量最大上限值之前,还包括:

设置逻辑卷容量值,逻辑卷的容量最大上限值,卷组容量值,各业务对应的扩容步长值。

其中,判断是否满足扩容条件,包括:

根据所述虚拟机的上层业务,确定扩容步长值;

根据所述虚拟磁盘路径查找对应的逻辑卷,判断所述逻辑卷的容量加上扩容步长值是否大于所述容量最大上限值;

若不大于,则判断扩容步长值是否大于卷组剩余容量值;

若不大于,则满足扩容条件。

其中,获取libvirt中虚拟磁盘上报的容量不足错误,并记录对应的虚拟机名称、虚拟机id及虚拟磁盘路径,包括:

LMD的第一线程获取libvirt中虚拟磁盘上报的容量不足错误,将需要执行的扩容任务放入到任务队列中;

LMD的第二线程从所述任务队列中读取扩容任务,并记录对应的虚拟机名称、虚拟机id及虚拟磁盘路径。

其中,当多个虚拟机的多个虚拟磁盘同时执行扩容操作时,在执行扩容操作之前对卷组添加独占锁;虚拟磁盘获得独占锁之后,对对应的逻辑卷执行扩容操作。

本发明还提供一种基于LVM的逻辑卷动态扩容的系统,包括:

格式转换模块,用于利用qemu命令将逻辑卷的映射文件转变为qcow2文件格式,并通过下发的写IO,触发底层逻辑卷的容量最大上限值;

容量错误获取模块,用于获取libvirt中虚拟磁盘上报的容量不足错误,并记录对应的虚拟机名称、虚拟机id及虚拟磁盘路径;

判断模块,用于根据所述虚拟磁盘路径查找对应的逻辑卷,判断是否满足扩容条件;

扩容模块,用于当满足扩容条件时,对所述逻辑卷执行扩容操作,并根据所述虚拟机名称及所述虚拟机id重启虚拟机。

其中,还包括:

暂停业务模块,用于当libvirt中虚拟磁盘上报容量不足错误时,利用libvirt触发虚拟机保护机制,暂停对应虚拟机的上层业务。

其中,所述判断模块包括:

扩容步长值单元,用于根据所述虚拟机的上层业务,确定扩容步长值;

第一判断单元,用于根据所述虚拟磁盘路径查找对应的逻辑卷,判断所述逻辑卷的容量加上扩容步长值是否大于所述容量最大上限值;

第二判断单元,用于当所述逻辑卷的容量加上扩容步长值不大于所述容量最大上限值,则判断扩容步长值是否大于卷组剩余容量值;若不大于,则满足扩容条件。

其中,所述容量错误获取模块包括:

第一线程单元,用于LMD的第一线程获取libvirt中虚拟磁盘上报的容量不足错误,将需要执行的扩容任务放入到任务队列中;

第二线程单元,用于LMD的第二线程从所述任务队列中读取扩容任务,并记录对应的虚拟机名称、虚拟机id及虚拟磁盘路径。

本发明所提供的基于LVM的逻辑卷动态扩容的方法,包括:利用qemu命令将逻辑卷的映射文件转变为qcow2文件格式,并通过下发的写IO,触发底层逻辑卷的容量最大上限值;获取libvirt中虚拟磁盘上报的容量不足错误,并记录对应的虚拟机名称、虚拟机id及虚拟磁盘路径;根据所述虚拟磁盘路径查找对应的逻辑卷,判断是否满足扩容条件;若满足,则对所述逻辑卷执行扩容操作,并根据所述虚拟机名称及所述虚拟机id重启虚拟机;

可见,该方法能根据上层业务实时动态扩容,动态按需分配底层逻辑卷的容量大小,从而无法提高磁盘空间利用率满足上层业务需求;本发明还提供了基于LVM的逻辑卷动态扩容的系统,具有上述效果,在此不再赘述。

附图说明

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

图1为本发明实施例所提供的基于LVM的逻辑卷动态扩容的方法的流程图;

图2为本发明实施例所提供的基于LVM的逻辑卷动态扩容的示意图;

图3为本发明实施例所提供的基于LVM的逻辑卷动态扩容的系统的结构框图。

具体实施方式

本发明的核心是提供一种基于LVM的逻辑卷动态扩容的方法及系统,能根据上层业务实时动态扩容,动态按需分配底层逻辑卷的容量大小,从而提高磁盘空间利用率。

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

请参考图1,图1为本发明实施例所提供的基于LVM的逻辑卷动态扩容的方法的流程图;该方法可以包括:

S100、利用qemu命令将逻辑卷的映射文件转变为qcow2文件格式,并通过下发的写IO,触发底层逻辑卷的容量最大上限值;

其中,请参考图2,LVM的数据布局主要是将LUN存储空间分为两部分:元数据区域meta data section和数据区域data section。为了方便元数据将每个LUN制作成为一个物理卷和卷组,即元数据和数据区域存在同一个LUN上。使用数据区域创建逻辑卷后,使用qemu命令将逻辑卷的映射文件转换为qcow2格式。原理是将qcow2格式的头文件header写在逻辑卷之上。执行扩容的操作只是更改底层的逻辑卷大小,而不更改上层的qcow2文件大小。即qcow2文件挂载给虚拟机使用之后,虚拟机并不会感知底层逻辑卷的扩容操作。

其中,虚拟机挂载的qcow2虚拟磁盘,经过qemu-kvm下发的写IO,触发了底层LV的最大值上限即底层逻辑卷的容量最大上限值。这里的容量最大上限值的设定可以由用户根据上层业务的实际需要进行设定。例如,对容量需求量不是很大的业务场景可以设置小点的容量;对容量需求量很大的业务场景可以设置大点的容量;这样可以根据实际需求分配容量值,使得不会出现大量资源闲置的情况。

S110、获取libvirt中虚拟磁盘上报的容量不足错误,并记录对应的虚拟机名称、虚拟机id及虚拟磁盘路径;

其中,由于并不是在一开始就已经给底层的逻辑卷分配容量最大上限值对应的容量,只是给分配基本容量给用户,因此,当这部分基本容量已经不能满足用户需求时,就需要给该逻辑卷进行扩容。即需要监测上层业务是否容量不足。因此可以利用libvirt技术来监测上层业务是否出现IO Error,即libvirt统一虚拟化管理平台捕获qcow2上报的IO Error;当出现该错误时即表明上层业务容量不足。

这里为了保证扩容操作时,不会出现混乱现象而造成元数据的一致性被破坏,这里可以使用逻辑卷服务管理方法LMD(Logical Volume Manager Daemon),它是以消费者-生产者模型实现的守护进程服务,主要应用于LVM动态扩容方法之中。具体过程可以是:

LMD的第一线程获取libvirt中虚拟磁盘上报的容量不足错误即No Space Error,将需要执行的扩容任务放入到任务队列中;

LMD的第二线程从所述任务队列中读取扩容任务,并记录对应的虚拟机名称、虚拟机id及虚拟磁盘路径。

为了保证元数据的一致性,当多个虚拟机的多个虚拟磁盘同时执行扩容操作时,在执行扩容操作之前对卷组添加独占锁;虚拟磁盘获得独占锁之后,对对应的逻辑卷执行扩容操作。

其中,LMD主要包括两个线程,一个线程主要负责监控捕获libvirt上报的“NO SPACE”错误,将需要执行的扩容任务放入到任务队列中;另一个线程从队列中读取任务,执行扩容。由于需要保护LVM元数据的数据一致性,当多个虚拟机的多个虚拟磁盘同时执行扩容操作,在执行扩容之前需要对卷组(VG)添加独占锁。获得独占锁之后,对逻辑卷(LV)执行扩容操作。最后是重新启动挂载该虚拟磁盘的虚拟机。

其中,为了保证在容量不足时,可以保护虚拟机以及虚拟机对应的上层业务,当libvirt中虚拟磁盘上报容量不足错误时或捕获qcow2上报的IO Error时,利用libvirt触发虚拟机保护机制,暂停对应虚拟机的上层业务。

S120、根据所述虚拟磁盘路径查找对应的逻辑卷,判断是否满足扩容条件;

其中,这里的扩容条件可以根据实际用户的需求进行制定;影响扩容条件的参数可以包括逻辑卷容量值,逻辑卷的容量最大上限值,卷组容量值,各业务对应的扩容步长值,或每种业务对应同样的扩容步长。这里值的设定也可以由用户进行设定,且可以有用户根据需求对设置的值进行修改。扩容策略即扩容条件可以根据用户制定的扩容步长、LUN值大小、虚拟磁盘大小、逻辑卷大小等评估是否达到扩容条件。

由于扩容值与用户设置的虚拟磁盘大小、底层逻辑卷大小有着必然的联系,因此在扩容之前需要判断是否达到扩容条件。只有达到扩容条件才会允许扩容。同时用户根据业务模型(如数据库场景、数据归档、邮箱服务器等)、底层的LUN读写速率、内存、缓存等基础信息,设置属于的业务场景。根据业务场景指定不同的扩容步长,即逻辑卷每次扩容增加值。然后根据逻辑卷当前容量与扩容步长,与虚拟磁盘大小和卷组可用容量比较,判定是否达到扩容条件,只能达到扩容条件,才能触发LMD的扩容操作。

优选的,判断是否满足扩容条件,包括:

根据所述虚拟机的上层业务,确定扩容步长值;

根据所述虚拟磁盘路径查找对应的逻辑卷,判断所述逻辑卷的容量加上扩容步长值是否大于所述容量最大上限值;

若不大于,则判断扩容步长值是否大于卷组剩余容量值;

若不大于,则满足扩容条件。

其中,这里的每种上层业务可以设定不同的扩容步长,这样可以满足用户根据每种业务的实际容量需求或者容量增长需求进行设定,避免容量闲置。

S130、若满足,则对所述逻辑卷执行扩容操作,并根据所述虚拟机名称及所述虚拟机id重启虚拟机。

下面通过一个具体实施过程说明上述方法:

第1步,虚拟机挂载的qcow2虚拟磁盘,经过qemu-kvm下发的写IO,触发了底层LV的最大值上限。

第2步,libvirt统一虚拟化管理平台捕获qcow2上报的IO Error。

第3步,libvirt触发虚拟机保护机制,暂停虚拟机上层业务。

第4步,LMD捕获libvirt中虚拟磁盘上报的No Space Error,并记录虚拟机名称、虚拟机对应id及虚拟磁盘路径。

第5步,根据虚拟磁盘路径查找对应的逻辑卷,对逻辑卷执行扩容操作。

第6步,重新开启虚拟机,继续下发业务。直至扩容队列中没有任务。

基于上述技术方案,本发明实施例提供的基于LVM的逻辑卷动态扩容的方法,以LVM的逻辑卷(Logical Volume)为底层载体,以qemu技术对文件进行格式转换,在虚拟化场景下通过监控libvirt告警作为扩容触发点,判断是否达到扩容条件后,最后实现动态扩容。实现根据上层业务规划,预先分配,自动扩容;从而提高磁盘空间利用率。

本发明实施例提供了基于LVM的逻辑卷动态扩容的方法,能根据上层业务实时动态扩容,动态按需分配底层逻辑卷的容量大小。

下面对本发明实施例提供的基于LVM的逻辑卷动态扩容的系统进行介绍,下文描述的基于LVM的逻辑卷动态扩容的系统与上文描述的基于LVM的逻辑卷动态扩容的方法可相互对应参照。

请参考图3,图3为本发明实施例所提供的基于LVM的逻辑卷动态扩容的系统的结构框图;该系统可以包括:

格式转换模块100,用于利用qemu命令将逻辑卷的映射文件转变为qcow2文件格式,并通过下发的写IO,触发底层逻辑卷的容量最大上限值;

容量错误获取模块200,用于获取libvirt中虚拟磁盘上报的容量不足错误,并记录对应的虚拟机名称、虚拟机id及虚拟磁盘路径;

判断模块300,用于根据所述虚拟磁盘路径查找对应的逻辑卷,判断是否满足扩容条件;

扩容模块400,用于当满足扩容条件时,对所述逻辑卷执行扩容操作,并根据所述虚拟机名称及所述虚拟机id重启虚拟机。

基于上述技术方案,该系统还包括:

暂停业务模块,用于当libvirt中虚拟磁盘上报容量不足错误时,利用libvirt触发虚拟机保护机制,暂停对应虚拟机的上层业务。

可选的,所述判断模块300包括:

扩容步长值单元,用于根据所述虚拟机的上层业务,确定扩容步长值;

第一判断单元,用于根据所述虚拟磁盘路径查找对应的逻辑卷,判断所述逻辑卷的容量加上扩容步长值是否大于所述容量最大上限值;

第二判断单元,用于当所述逻辑卷的容量加上扩容步长值不大于所述容量最大上限值,则判断扩容步长值是否大于卷组剩余容量值;若不大于,则满足扩容条件。

可选的,所述容量错误获取模块200包括:

第一线程单元,用于LMD的第一线程获取libvirt中虚拟磁盘上报的容量不足错误,将需要执行的扩容任务放入到任务队列中;

第二线程单元,用于LMD的第二线程从所述任务队列中读取扩容任务,并记录对应的虚拟机名称、虚拟机id及虚拟磁盘路径。

基于上述技术方案,该系统还包括:

设置模块,用于设置逻辑卷容量值,逻辑卷的容量最大上限值,卷组容量值,各业务对应的扩容步长值。

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

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

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

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

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