一种虚拟机迁移方法及装置与流程

文档序号:11176921阅读:334来源:国知局
一种虚拟机迁移方法及装置与流程

本发明实施例涉及虚拟化、云计算领域,特别是涉及一种虚拟机迁移方法及装置。



背景技术:

在云计算技术浪潮的推动下,虚拟化技术不断发展。虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源,根据不同需求进行重新规划以达到最大利用率,实现各种资源的自动部署、动态扩展、按需分配,提高it资源利用率。

虚拟化技术催生了虚拟机,即通过软件模拟的、具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。当硬件发生故障或需要维护时,正在运行的服务需要被迁移到其他的平台上继续运行,并且这一过程不能对虚拟机所承载的应用服务产生影响,这就涉及到虚拟机迁移技术,虚拟机迁移技术能使虚拟机在物理主机之间进行快速的在线迁移,并且保持虚拟机在运行过程中不间断运行,有效的改善资源分配。

由于不同的物理主机的硬件配置不同,尤其是cpu个数与核数不尽相同,虚拟机在迁移时需要与原绑定的主机进行解除绑定关系,但是由于虚拟机中的配置文件有时无法立即更新,导致虚拟机跨主机迁移失败,严重的限制了虚拟机的应用场景及实用性。



技术实现要素:

本发明实施例的目的是提供一种虚拟机迁移方法及装置,提高了虚拟机跨主机迁移的成功率,有利于提高虚拟化产品的竞争力。

为解决上述技术问题,本发明实施例提供以下技术方案:

本发明实施例一方面提供了一种虚拟机迁移方法,包括:

s101:获取当前主机cpu的个数;

s102:获取待迁移虚拟机的vcpu绑定字节的长度,并判断与所述主机的各个cpu字节长度是否相同;

s103:当判定与所述cpu字节长度不相同时,执行s106;反之,将所述vcpu的比特图与对应绑定的cpu的比特图逐位进行与运算;

s104:当运算结果为0时,执行s106;反之,获取已绑定的vcpu的总数,当所述总数为1时,将所述总数设置为0,并将vcpu绑定比特位的数据结构置空,执行s106;

s105:当所述总数不为1时,按照预设的算法依次对每个vcpu绑定比特位的数据结构进行处理;

s106:将所述虚拟机的xml中存储的vcpu绑定比特位的数据结构及已绑定的vcpu的总数进行更新。

可选的,所述按照预设的算法依次对每个vcpu绑定比特位的数据结构进行处理包括:

依次获取保存vcpu绑定比特位的数据结构的数组中的元素;

将各个已绑定的vcpu的标识号与待绑定vcpu的标识号进行比较,当所述vcpu的标识号与所述待绑定vcpu的标识号相同时,则将该vcpu绑定比特位的数据结构赋值为所述数组中的最后一个元素,相应的,将所述数组中的最后一个元素置空,数组的元素个数减一。

可选的,所述获取当前主机cpu的个数为:

获取当前主机的numa拓扑信息,根据所述numa拓扑信息确定所述主机cpu的个数。

可选的,还包括:

s107:发送所述待迁移虚拟机进行迁移的指令,并获取所述待迁移虚拟机的迁移信息;

s108:根据所述迁移信息判断所述待迁移虚拟机是否迁移成功;

s109:当判定所述待迁移虚拟机迁移失败时,向用户进行发送迁移失败的反馈信息。

可选的,在所述当判定所述待迁移虚拟机迁移失败时之后,还包括:

进行报警提示。

本发明实施例另一方面提供了一种虚拟机迁移装置,包括:

获取数据模块,用于获取当前主机cpu的个数及待迁移虚拟机的vcpu绑定字节的长度;

判断模块,用于判断与所述主机的各个cpu字节长度是否相同,当判定与所述cpu字节长度不相同时,将所述虚拟机的xml中存储的vcpu绑定比特位的数据结构及已绑定的vcpu的总数进行更新;反之,将所述vcpu的比特图与对应绑定的cpu的比特图逐位进行与运算;

数据处理模块,用于当运算结果为1时,获取已绑定的vcpu的总数,当所述总数为1时,将所述总数设置为0,并将vcpu绑定比特位的数据结构置空;当所述总数不为1时,按照预设的算法依次对每个vcpu绑定比特位的数据结构进行处理;

更新模块,用于将所述虚拟机的xml中存储的vcpu绑定比特位的数据结构及已绑定的vcpu的总数进行更新。

可选的,所述数据处理模块为依次获取保存vcpu绑定比特位的数据结构的数组中的元素;将各个已绑定的vcpu的标识号与待绑定vcpu的标识号进行比较,当所述vcpu的标识号与所述待绑定vcpu的标识号相同时,则将该vcpu绑定比特位的数据结构赋值为所述数组中的最后一个元素,相应的,将所述数组中的最后一个元素置空,数组的元素个数减一的模块。

可选的,所述获取数据模块为获取当前主机的numa拓扑信息,根据所述numa拓扑信息确定所述主机cpu的个数的模块。

可选的,还包括:

发送模块,用于发送所述待迁移虚拟机进行迁移的指令,并获取所述待迁移虚拟机的迁移信息;根据所述迁移信息判断所述待迁移虚拟机是否迁移成功;当判定所述待迁移虚拟机迁移失败时,向用户进行发送迁移失败的反馈信息。

可选的,还包括:

报警模块,用于当判定所述待迁移虚拟机迁移失败时,进行报警提示。

本发明实施例提供了一种虚拟机迁移方法,首先将待迁移虚拟机的vcpu绑定字节的长度与当前主机的各个cpu字节长度进行比较,以判断vcpu的绑定情况;当vcpu绑定字节的长度与cpu字节长度相同时,逐位计算vcpu的比特图与对应绑定的cpu的比特图;在运算结果为1时,当已绑定的vcpu的总数为1时,将该总数设置为0,并将vcpu绑定比特位的数据结构置空;而总数不为1时,则按照预设的算法依次对每个vcpu绑定比特位的数据结构进行处理;最后将所述虚拟机的xml中存储的vcpu绑定比特位的数据结构及已绑定的vcpu的总数进行更新。

本申请提供的技术方案的优点在于,通过在虚拟机进行迁移之前,通过修改libvirt源码来删除虚拟机中xml中指定的vcpu元素,实现了解除vcpu与之前主机的cpu绑定,使得libvirt和qemu进程中保存的虚拟机xml数据的一致性。完善了vcpu绑定功能,提高了虚拟机的跨主机迁移的成功率,有效的增加虚拟机迁移功能的使用场景,减少迁移限制,同时由于这种方式只涉及到软件部分的修改,方便后期虚拟化产品的升级与维护,有利于提高虚拟化产品的竞争力

此外,本发明实施例还针对虚拟机迁移方法提供了相应的实现装置,进一步使得所述方法更具有实用性,所述装置具有相应的优点。

附图说明

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

图1为本发明实施例提供的一种虚拟机迁移方法的流程示意图;

图2为本发明实施例提供的另一种虚拟机迁移方法的流程示意图;

图3为本发明实施例提供的虚拟机迁移装置的一种具体实施方式结构图;

图4为本发明实施例提供的虚拟机迁移装置的另一种具体实施方式结构图。

具体实施方式

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

本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等是用于区别不同的对象,而不是用于描述特定的顺序。此外术语“包括”和“具有”以及他们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可包括没有列出的步骤或单元。

本申请的发明人经过研究发现,在linux系统中,可以用modprobe系统工具去加载kvm(kernel-basedvirtualmachine)模块,如果用rpm安装kvm软件包,系统会在启动时自动加载模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有kvm模块是远远不够的,由于用户无法直接控制内核模块去执行任务,还必须有一个用户空间的工具。可采用开源虚拟化软件qemu作为用户空间的工具。qemu是一个强大的虚拟化软件,它可以虚拟不同的cpu构架。比如说在x86的cpu上虚拟一个power的cpu,并利用它编译出可运行在power上的程序。kvm使用了qemu的基于x86的部分,并稍加改造,形成可控制kvm内核模块的用户空间工具qemu-kvm。

尽管qemu-kvm工具可以创建和管理kvm虚拟机,由于qemu工具效率不高,不易于使用。libvirt是一套提供了多种语言接口的api,为各种虚拟化工具提供一套方便、可靠的编程接口,只需要通过libvirt提供的函数连接到kvm宿主机,便可以用同样的命令控制不同的虚拟机了。

基于qemu和libvirt创建的vm(virtualmachine,虚拟机),在运行过程中,可以根据主机cpu资源使用情况,将vcpu(virtualcpu,虚拟中央处理器)绑定到主机指定的cpu上,进而提高资源利用率,实现主机资源的合理调度。在进行cpu绑定的同时,会在对应的vm的xml里生成相应的元素,显示vcpu具体绑定到主机的哪些cpu上。在默认情况下,vcpu不会进行绑定,在xml中体现为vcpu绑定到主机的全部cpu上,此时,vm对应的qemu进程会在主机的所有cpu上进行轮转,若将vcpu绑定到主机的全部cpu上,即是解除绑定。虚拟机的一个重要功能是可以实现主机之间的迁移,由于不同主机的硬件配置不同,特别是cpu的个数与核数不尽相同,若想实现vm的迁移,需在迁移之前解除cpu的绑定。但是原生的libvirt在解除vcpu绑定后,并没有消除xml中cpu绑定元素,导致libvirt在传给qemu进程中的参数中包含vcpu绑定列表,进而导致虚拟机跨主机迁移失败,严重限制了虚拟机的应用场景以及实用性。

鉴于此,本申请提出了一种基于libvirt的解除vcpu绑定实现虚拟机迁移的方法,通过修改libvirt源码来删除虚拟机对应的xml中vcpu元素,来实现虚拟机的迁移。通过对libvirt源码的再次开发,进一步完善vcpu绑定的功能,提高虚拟化产品的竞争力。

在介绍了本发明实施例的技术方案后,下面详细的说明本申请的各种非限制性实施方式。

首先参见图1,图1为本发明实施例提供的一种虚拟机迁移方法的流程示意图,本发明实施例可包括以下内容:

s101:获取当前主机cpu的个数。

非统一内存访问(numa)是一种用于多处理器的电脑记忆体设计,内存访问时间取决于处理器的内存位置。numa通过提供分离的存储器给各个处理器,避免当多个处理器访问同一个存储器产生的性能损失。对于涉及到分散的数据的应用(在服务器和类似于服务器的应用中很常见),numa可以通过一个共享的存储器提高性能至n倍,而n大约是处理器(或者分离的存储器)的个数。

故可通过获取当前主机的numa拓扑信息,根据所述numa拓扑信息确定主机cpu的个数。

s102:获取待迁移虚拟机的vcpu绑定字节的长度,并判断与所述主机的各个cpu字节长度是否相同;

vcpu虚拟处理器,虚拟机内的cpu,即cpu的虚拟化技术,cpu的虚拟化就是单cpu模拟多cpu并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

一般每8个cpu核对应一个字节,通过判断虚拟机的vcpu绑定字节的长度与主机各个cpu字节长度是否一致,可以得知该vcpu是否绑定cpu,如果二者相等,则证明需要进行解除绑定,也就是将vcpu绑定在主机的所有cpu上。如果都不相等,则证明不需要进行解除绑定,即vcpu与主机各个cpu均不存在绑定关系。

s103:当判定与所述cpu字节长度不相同时,执行s106;反之,将所述vcpu的比特图与对应绑定的cpu的比特图逐位进行与运算;

由于虚拟机上可能存在多个vcpu,为了区别每个不同的vcpu,可给每个vcpu设置唯一的标识码。在确定当前虚拟机的vcpu与主机的cpu有绑定时,获取vcpu的标识码,该vcpu的比特图以及与该vcpu对应绑定的cpu的比特图。

比特图,即位模式,是指二进制比特“0”与“1””的组合格式。有n位就有2的n次方种组合。比特是计算机领域信息量的度量单位,二进制数的一位所包含的信息就是1比特。

一般将绑定vcpu的cpu的比特图设置为1,故可直接将vcpu的比特图与1进行与运算。

s104:当运算结果为0时,执行s106;反之,获取已绑定的vcpu的总数,并判断总数是否为1;

当二者与运算的结果为0时,说明不是全部绑定,直接进行更新xml中的绑定列表即可。由于虚拟机的vcpu不一定为一个,故绑定的vcpu也不一定为1个,故在与运算结果为1时,需要进一步的判断当前虚拟机绑定vcpu的个数。当仅仅有一个时,直接将总数置0,即设置当前无绑定的vcpu。

s105:当所述总数为1时,将所述总数设置为0,并将vcpu绑定比特位的数据结构置空,执行s106;

s106:当所述总数不为1时,按照预设的算法依次对每个vcpu绑定比特位的数据结构进行处理;

具体的可为:

依次获取保存vcpu绑定比特位的数据结构的数组中的元素;

将各个已绑定的vcpu的标识号与待绑定vcpu的标识号进行比较,当所述vcpu的标识号与所述待绑定vcpu的标识号相同时,则将该vcpu绑定比特位的数据结构赋值为所述数组中的最后一个元素,相应的,将所述数组中的最后一个元素置空,数组的元素个数减一。按照上述处理过程对每一个绑定的vcpu执行,直至处理完毕。

s107:将所述虚拟机的xml中存储的vcpu绑定比特位的数据结构及已绑定的vcpu的总数进行更新。

xml(extensiblemarkuplanguage,可扩展标记语言),是一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。xml为一种简单的数据存储语言,重在数据本身,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立。虚拟机中关于虚拟机的所有配置文件存储在xml中,例如vcpu绑定列表。

将虚拟机中存储的xml中的vcpu绑定列表进行更新,以使虚拟机中xml文件中关于vcpu绑定的情况与实际绑定情况一致,例如,当原生的libvirt在解除vcpu绑定后,并没有消除xml中cpu绑定元素,而通过修改libvirt源码来删除虚拟机对应的xml中vcpu元素,实现了vcpu绑定列表的更新,使得libvirt在传给qemu进程中的参数中包含vcpu绑定列表与实际相符,有利于虚拟机跨主机迁移成功。

上述各个步骤,可以通过c语言进行控制实现,当然,也可采用其他计算机语言,这均不影响本申请的实现。

在本发明实施例所提供的技术方案中,通过在虚拟机进行迁移之前,通过修改libvirt源码来删除虚拟机中xml中指定的vcpu元素,实现了解除vcpu与之前主机的cpu绑定,使得libvirt和qemu进程中保存的虚拟机xml数据的一致性。完善了vcpu绑定功能,提高了虚拟机的跨主机迁移的成功率,有效的增加虚拟机迁移功能的使用场景,减少迁移限制,同时由于这种方式只涉及到软件部分的修改,方便后期虚拟化产品的升级与维护,有利于提高虚拟化产品的竞争力

考虑到系统自动更新虚拟机中xml文件中vcpu绑定列表中vcpu的绑定情况,可能会出错;或者由于其他情况发生,导致虚拟机迁移不成功,鉴于此,基于上述实施例,还可包括:

s108:发送所述待迁移虚拟机进行迁移的指令,并获取所述待迁移虚拟机的迁移信息;

s109:根据所述迁移信息判断所述待迁移虚拟机是否迁移成功;

s110:当判定所述待迁移虚拟机迁移失败时,向用户进行发送迁移失败的反馈信息。

当然,在一种具体的实施方式中,当判定所述待迁移虚拟机迁移失败时,还可进行报警提示。

对用户进行反馈迁移不成功的信息以及报警提示,可在虚拟机迁移失败时,及时通知用户,以便尽快排查失败的原因,及时进行维修,有利于提升虚拟机迁移的速率。

本发明实施例还针对虚拟机迁移方法提供了相应的实现装置,进一步使得所述方法更具有实用性。下面对本发明实施例提供的虚拟机迁移装置进行介绍,下文描述的虚拟机迁移装置与上文描述的虚拟机迁移方法可相互对应参照。

参见图3,图3为本发明实施例提供的虚拟机迁移装置在一种具体实施方式下的结构图,该装置可包括:

获取数据模块301,用于获取当前主机cpu的个数及待迁移虚拟机的vcpu绑定字节的长度。

判断模块302,用于判断与所述主机的各个cpu字节长度是否相同,当判定与所述cpu字节长度不相同时,将所述虚拟机的xml中存储的vcpu绑定比特位的数据结构及已绑定的vcpu的总数进行更新;反之,将所述vcpu的比特图与对应绑定的cpu的比特图逐位进行运算。

数据处理模块303,用于当运算结果为1时,获取已绑定的vcpu的总数,当所述总数为1时,将所述总数设置为0,并将vcpu绑定比特位的数据结构置空;当所述总数不为1时,按照预设的算法依次对每个vcpu绑定比特位的数据结构进行处理;

更新模块304,用于将所述虚拟机的xml中存储的vcpu绑定比特位的数据结构及已绑定的vcpu的总数进行更新。

在本实施例的一些具体实施方式中,所述数据处理模块303可为依次获取保存vcpu绑定比特位的数据结构的数组中的元素;将各个已绑定的vcpu的标识号与待绑定vcpu的标识号进行比较,当所述vcpu的标识号与所述待绑定vcpu的标识号相同时,则将该vcpu绑定比特位的数据结构赋值为所述数组中的最后一个元素,相应的,将所述数组中的最后一个元素置空,数组的元素个数减一的模块。

所述获取数据模块301还可为获取当前主机的numa拓扑信息,根据所述numa拓扑信息确定所述主机cpu的个数的模块。

可选的,在本实施例的一些实施方式中,请参阅图4,所述装置例如可以包括:

发送模块305,用于发送所述待迁移虚拟机进行迁移的指令,并获取所述待迁移虚拟机的迁移信息;根据所述迁移信息判断所述待迁移虚拟机是否迁移成功;当判定所述待迁移虚拟机迁移失败时,向用户进行发送迁移失败的反馈信息。

在另外一种实施方式中,所述装置例如还可以包括:

报警模块306,用于当判定所述待迁移虚拟机迁移失败时,进行报警提示。

本发明实施例所述的虚拟机迁移装置的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。

由上可知,本发明实施例通过在虚拟机进行迁移之前,通过修改libvirt源码来删除虚拟机中xml中指定的vcpu元素,实现了解除vcpu与之前主机的cpu绑定,使得libvirt和qemu进程中保存的虚拟机xml数据的一致性。完善了vcpu绑定功能,提高了虚拟机的跨主机迁移的成功率,有效的增加虚拟机迁移功能的使用场景,减少迁移限制,同时由于这种方式只涉及到软件部分的修改,方便后期虚拟化产品的升级与维护,有利于提高虚拟化产品的竞争力。

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

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

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

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

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