本发明涉及虚拟化技术领域,特别涉及一种非共享存储动态迁移虚拟机的方法及系统。
背景技术:
随着虚拟化技术的发展,人们几乎所有的功能操作都是针对虚拟机进行的,很多情况下人们在使用虚拟机的时候,需要对虚拟机进行迁移,在生产环境中人们经常需要把一台主机上的虚拟机迁移到另外一台主机上,这两台主机有可能相隔很远,存在于2个数据中心的主机上,而这两台主机之间只是仅仅存在网络上的连接,这就需要人们既要保证虚拟机的正常运行,又要在这两台主机之间进行虚拟机的热迁移工作,这种通过网络进行虚拟机迁移的操作在一定的程度上会使得人们的迁移过程存在安全性问题。
目前使用人们使用共享存储进行迁移,这需要很高的环境要求和硬件设备支持。且远距离的迁移也是共享存储无法做到的,这也在一定的程度上要求人们进行夸主机的迁移操作,因此人们既要在两台设备配置相同的主机上仅通过网络连接就能实现虚拟机的在线迁移,也要能保证虚拟机在迁移的过程中数据的安全。在这种情况下使用共享存储迁移非常麻烦且安全性不能够保证,因此如何解决在跨主机迁移虚拟机时保证迁移数据安全性的问题,是本领域技术人员需要解决的技术问题。
技术实现要素:
本发明的目的是提供一种非共享存储动态迁移虚拟机的方法及系统,采用TCP的socket可加密的特性,安全有效的完成跨主机的迁移虚拟机任务。
为解决上述技术问题,本发明提供一种非共享存储动态迁移虚拟机的方法,包括:
接收迁移请求,在目标主机上创建空的虚拟机镜像文件;
修改libvirt的配置信息,使所述libvirt开启TCP监控;
开启所述TCP监控的libvirt根据迁移命令,将源主机的迁移虚拟机对应的磁盘数据和内存数据分别传输到所述目标主机中的空的虚拟机镜像文件和内存中。
可选的,所述接收迁移请求之后,还包括:
检测网络是否满足迁移要求,并检测目标主机的配置是否符合迁移配置需求;
当均符合要求时,执行所述在目标主机上创建空的虚拟机镜像文件的步骤。
可选的,所述接收迁移请求,包括:
接收从Horizon或命令行或API接口发起的动态迁移请求。
可选的,所述修改libvirt的配置信息,使所述libvirt开启TCP监控,包括:
在/etc/sysconfig/libvirtd文件中设置LIBVIRTD_ARGS="--listen";
在/etc/sysconfig/libvirtd.conf文件中设置listen_tls=0,listen_tcp=1,将listen_tls=0listen_tcp=1去掉注释并修改auth_tcp="none";
在vi/etc/default/libvirt-bin文件中设置libvirt_opts="-d-l"监听tcp;
重启libvirt服务。
可选的,本方案还包括:
将所述源主机中的所述迁移虚拟机删除。
可选的,将所述源主机中的所述迁移虚拟机删除,还包括:
检测所述源主机和所述目标主机中对应所述迁移虚拟机的数据是否一致;
当数据一致时执行所述将所述源主机中的所述迁移虚拟机删除的步骤。
本发明还提供一种非共享存储动态迁移虚拟机的系统,包括:
镜像文件创建模块,用于接收迁移请求,在目标主机上创建空的虚拟机镜像文件;
修改模块,用于修改libvirt的配置信息,使所述libvirt开启TCP监控;
数据迁移模块,用于开启所述TCP监控的libvirt根据迁移命令,将源主机的迁移虚拟机对应的磁盘数据和内存数据分别传输到所述目标主机中的空的虚拟机镜像文件和内存中。
可选的,所述镜像文件创建模块包括:
检测单元,用于检测网络是否满足迁移要求,并检测目标主机的配置是否符合迁移配置需求;
创建单元,用于当均符合要求时,在目标主机上创建空的虚拟机镜像文件。
可选的,所述修改模块包括:
第一修改单元,用于在/etc/sysconfig/libvirtd文件中设置LIBVIRTD_ARGS="--listen";
第二修改单元,用于在/etc/sysconfig/libvirtd.conf文件中设置listen_tls=0,listen_tcp=1,将listen_tls=0listen_tcp=1去掉注释并修改auth_tcp="none";
第三修改单元,用于在vi/etc/default/libvirt-bin文件中设置libvirt_opts="-d-l"监听tcp;
重启单元,用于重启libvirt服务。
可选的,本方案还包括:
删除模块,用于将所述源主机中的所述迁移虚拟机删除。
本发明所提供的一种非共享存储动态迁移虚拟机的方法,包括:接收迁移请求,在目标主机上创建空的虚拟机镜像文件;修改libvirt的配置信息,使所述libvirt开启TCP监控;开启所述TCP监控的libvirt根据迁移命令,将源主机的迁移虚拟机对应的磁盘数据和内存数据分别传输到所述目标主机中的空的虚拟机镜像文件和内存中;
可见,该方法采用TCP的socket可加密的特性,安全有效的完成跨主机的迁移虚拟机任务;即通过TCP协议加密保证迁移的安全性,不需要增加额外的硬件支持,且利用开源项目libvirt完成TCP监控使得在技术上有保证;本发明还提供了一种非共享存储动态迁移虚拟机的系统,具有上述有益效果,在此不再赘述。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例所提供的非共享存储动态迁移虚拟机的方法的流程图;
图2为本发明实施例所提供的libvirt的隧道化的数据传输方式示意图;
图3为本发明实施例所提供的非共享存储动态迁移虚拟机的系统的结构框图。
具体实施方式
本发明的核心是提供一种非共享存储动态迁移虚拟机的方法及系统,采用TCP的socket可加密的特性,安全有效的完成跨主机的迁移虚拟机任务。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本实施例中通过在libvirt开启TCP监控,保证了数据安全,即使用TCP这种技术成熟且安全可靠的协议,使得在跨主机迁移过程中安全性能得到保证(通过TCP协议加密保证迁移的安全性)。在技术中仅需要修改libvirt的配置信息。不需要额外增加硬件支持,对虚拟机迁移环境要求低。其中,libvirt是一套免费、开源的支持Linux下主流虚拟化工具的C函数库,技术上保证动态迁移顺利进行。具体请参考图1,图1为本发明实施例所提供的非共享存储动态迁移虚拟机的方法的流程图;该方法可以包括:
S100、接收迁移请求,在目标主机上创建空的虚拟机镜像文件;
其中,迁移请求的发起可以是从Horizon、命令行或API发起动态迁移请求。
具体的,实现跨主机迁移即把主机1(可以理解为源主机)上的虚拟机通过网络迁移到主机2(可以理解为目标主机)上。当源主机和目标主机在没有共享存储的情况下,通常要做的是:首先要在目标主机上创建空的虚拟机的镜像文件,以便用于接收从源主机传输过来的虚拟机文件数据。例如可以在openstack环境下进行虚拟机的跨主机迁移,需要有两个物理主机作为计算节点,在控制节点上接收并处理动态迁移的请求。
进一步,为了保证迁移工作的顺利进行需要保证源主机和目标主机之间的网络是畅通的,以免数据传输失败,造成迁移失败。因此,在接收迁移请求之后,该方法还可以包括:
检测网络是否满足迁移要求,并检测目标主机的配置是否符合迁移配置需求;当均符合要求时,执行所述在目标主机上创建空的虚拟机镜像文件的步骤。
具体的,只要两台主机网络是通畅的,满足迁移是的硬件要求时,才执行动态迁移工作。即在动态迁移之前准备好迁移环境,检查目标主机是否存在,目标主机和源主机之间的网络是否通畅,目标主机配置是否符合迁移等。
S110、修改libvirt的配置信息,使所述libvirt开启TCP监控;
具体的,虚拟机的迁移,其实就是数据的转移。而非共享存储动态迁移虚拟机又由于计算节点(即源主机和目标主机)之间没有共享存储,所以要转移的数据包括两部分:静态数据,存储在本地的虚拟机(需要执行迁移的虚拟机,也称为迁移虚拟机)的镜像文件;动态数据,内存里虚拟机的运行时数据,内存里的数据是动态变化的数据。因此本实施例中使用libvirt所提供的隧道化的数据传输方式来完成数据转移,如图2所示。源主机(Source host)通过隧道化的数据传输方式(Libvirt daemon)将虚拟机(VM)中的数据传输到目标主机(Destination host)创建的空的虚拟机镜像文件中。
数据的转移就涉及数据的传输,数据的传输需要通过网络,libvirt默认情况下不支持TCP协议,但是本实施例需要通过TCP的socket可加密的特性保证传输数据的安全性。因此需要对libvirt的配置做修改,使libvirt能够支持TCP协议。从而实现TCP协议加密保证迁移数据的安全性。
可选的,所述修改libvirt的配置信息,使所述libvirt开启TCP监控可以包括:
在/etc/sysconfig/libvirtd文件中设置LIBVIRTD_ARGS="--listen";
在/etc/sysconfig/libvirtd.conf文件中设置listen_tls=0,listen_tcp=1,将listen_tls=0listen_tcp=1去掉注释并修改auth_tcp="none";
在vi/etc/default/libvirt-bin文件中设置libvirt_opts="-d-l"监听tcp;
重启libvirt服务。
S120、开启所述TCP监控的libvirt根据迁移命令,将源主机的迁移虚拟机对应的磁盘数据和内存数据分别传输到所述目标主机中的空的虚拟机镜像文件和内存中。
其中,这里所说的迁移虚拟机即在源主机中需要进行迁移的虚拟机本实施例中可以称之为迁移虚拟机。
具体的,设置的Tcp协议,把源虚拟机的磁盘数据和内存数据传送到目标主机上的虚拟机。即在迁移的过程中,运行在目的物理主机(即目标主机)中的libvirt进程要根据迁移命令提供的address和port创建一个URI,URI是目的物理主机用来接收数据和发回数据到源物理主机(即源主机)的libvirtd进程的。这里的内存不需要创建,是在开始libvirt迁移命令的时候,由libvirt在目标主机上主动拉起的。
进一步,在完成数据传输后即在目标主机上存在对应的迁移虚拟机后,需要将所述源主机中的所述迁移虚拟机删除。即迁移完成后把源主机上的相关的迁移虚拟机销毁,磁盘文件删除,与迁移虚拟机相关的防火墙规则删除等。即释放源主机中迁移虚拟机的空间。
进一步,在将源主机中的所述迁移虚拟机删除之前,还要确认一下迁移工作是否成功完成。例如迁移虚拟机的数据是否成功传输到目标主机中。防止出现在迁移工作没有成功时,就将源主机中数据删除。造成迁移虚拟机数据无法复原的现象。即可选的,在将源主机中的所述迁移虚拟机删除之前,还可以包括:检测所述源主机和所述目标主机中对应所述迁移虚拟机的数据是否一致;当数据一致时执行所述将所述源主机中的所述迁移虚拟机删除的步骤。
基于上述技术方案,本发明实施例提的非共享存储动态迁移虚拟机的方法,采用TCP的socket可加密的特性,安全有效的完成跨主机的迁移虚拟机任务;即通过TCP协议加密保证迁移的安全性,不需要增加额外的硬件支持,且利用开源项目libvirt完成TCP监控使得在技术上有保证。
下面对本发明实施例提供的非共享存储动态迁移虚拟机的系统进行介绍,下文描述的非共享存储动态迁移虚拟机的系统与上文描述的非共享存储动态迁移虚拟机的方法可相互对应参照。
请参考图3,图3为本发明实施例所提供的非共享存储动态迁移虚拟机的系统的结构框图;该系统可以包括:
镜像文件创建模块100,用于接收迁移请求,在目标主机上创建空的虚拟机镜像文件;
修改模块200,用于修改libvirt的配置信息,使所述libvirt开启TCP监控;
数据迁移模块300,用于开启所述TCP监控的libvirt根据迁移命令,将源主机的迁移虚拟机对应的磁盘数据和内存数据分别传输到所述目标主机中的空的虚拟机镜像文件和内存中。
基于上述实施例,所述镜像文件创建模块100可以包括:
检测单元,用于检测网络是否满足迁移要求,并检测目标主机的配置是否符合迁移配置需求;
创建单元,用于当均符合要求时,在目标主机上创建空的虚拟机镜像文件。
基于上述任意实施例,所述修改模块200可以包括:
第一修改单元,用于在/etc/sysconfig/libvirtd文件中设置LIBVIRTD_ARGS="--listen";
第二修改单元,用于在/etc/sysconfig/libvirtd.conf文件中设置listen_tls=0,listen_tcp=1,将listen_tls=0listen_tcp=1去掉注释并修改auth_tcp="none";
第三修改单元,用于在vi/etc/default/libvirt-bin文件中设置libvirt_opts="-d-l"监听tcp;
重启单元,用于重启libvirt服务。
基于上述任意实施例,该系统还可以包括:
删除模块,用于将所述源主机中的所述迁移虚拟机删除。
基于上述任意实施例,该系统还可以包括:
一致性检测模块,用于检测所述源主机和所述目标主机中对应所述迁移虚拟机的数据是否一致。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本发明所提供的一种非共享存储动态迁移虚拟机的方法及系统进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。