虚拟机迁移方法及系统
技术领域
本发明涉及虚拟机技术领域,具体涉及虚拟机迁移方法及系统。
背景技术
虚拟机(VirtualMachine)指通过软件模拟的具有完成硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。通过虚拟机软件,可以在一台物理计算机上套模拟出另一台或多台虚拟的计算机,这些虚拟机完全就像真正的计算机那样进行工作,例如可以按照安装操作系统、安装应用程序、访问网络资源等。常用的虚拟机技术平台有:Xen、KVM(Kernel-basedVirtualMachine,基于内核的虚拟机)和VMwareESX。其中,KVM是一个热门的开源虚拟技术,有红帽子(RedHat)公司的支持,使用时更加简单方便。VMwareESX虚拟技术是全球领先的虚拟化和云计算厂商VMware公司提供的技术,相关产品为一款商业软件VMwarevCenterServer。
现有技术中,virt-v2v工具是RedHat公司开发的用于虚拟机迁移的开源软件工具,可以自动化的将创建在Xen,KVM和VMwareESX平台上的虚拟机拷贝到virt-v2v的主机,并且自动的更改配置。CloudStack是一个支持KVM虚拟机的开源云计算平台,随着KVM虚拟机和CloudStack的日渐成熟稳定,CloudStack平台应用也越来越广泛。然而,通过virt-v2v工具转换得到的KVM虚拟机并不能直接交由例如CloudStack、OpenStack等云计算平台进行管理,因此,将不同虚拟技术平台上虚拟机迁移至其他云计算平台进行管理存在困难。
发明内容
针对现有技术中存在的上述缺陷,本发明所要解决的技术问题是如何实现对将不同平台上的虚拟机转化成将要迁移到的云计算平台并且该云计算平台支持的虚拟机。
为解决上述技术问题,一方面,本发明提供一种虚拟机迁移方法,包括步骤:
S1、收集第一虚拟机系统中已有虚拟机的虚拟机信息,根据所述虚拟机信息将所述第一虚拟机系统中的虚拟机转换为第二虚拟机系统中的虚拟机;
S2、调用注册模板将所述第二虚拟机系统中的虚拟机注册到云计算平台上;
S3、若所述第二虚拟机系统中的虚拟机包括第一数据盘,则在云计算平台创建第二数据盘,确认第二数据盘的镜像文件的位置,用第一数据盘的镜像文件覆盖掉第二数据盘的镜像文件,完成所述第二虚拟机系统中的虚拟机到所述云计算平台的迁移。
优选地,所述步骤S1具体包括:
收集第一虚拟机系统已有的包括所在主机的IP、用户名、密码和虚拟机名字的虚拟机信息,将所述虚拟机信息写入配置文件,根据配置文件信息生成virt-v2v命令,将所述第一虚拟机系统中的虚拟机转换为第二虚拟机系统中的虚拟机。
优选地,所述方法还包括:
S0、安装配置virt-v2v工具用于将第一虚拟机系统中的虚拟机转换为第二虚拟机系统的虚拟机;以及安装配置nginx工具用于提供注册模板所需要的模板下载链接。
优选地,所述步骤S2具体包括:
通过nginx工具和云计算平台的调用接口调用注册模板将所述第二虚拟机系统中的虚拟机注册到云计算平台上。
另一方面,本发明还同时提供一种虚拟机迁移系统,包括:
转换单元,用于收集第一虚拟机系统中已有虚拟机的虚拟机信息,根据所述虚拟机信息将所述第一虚拟机系统中的虚拟机转换为第二虚拟机系统中的虚拟机;
注册单元,用于调用注册模板将所述第二虚拟机系统中的虚拟机注册到云计算平台上;
迁移单元,用于若所述第二虚拟机系统中的虚拟机包括第一数据盘,则在云计算平台创建第二数据盘,确认第二数据盘的镜像文件的位置,用第一数据盘的镜像文件覆盖掉第二数据盘的镜像文件,完成所述第二虚拟机系统中的虚拟机到所述云计算平台的迁移。
优选地,该系统还包括:
配置单元,用于安装配置virt-v2v工具用于将第一虚拟机系统中的虚拟机转换为第二虚拟机系统的虚拟机;以及安装配置nginx工具用于提供注册模板所需要的模板下载链接。
优选地,所述转换单元具体包括:
收集单元,用于收集第一虚拟机系统已有的包括所在主机的IP、用户名、密码和虚拟机名字的虚拟机信息;
生成单元,用于将所述虚拟机信息写入配置文件,根据配置文件信息生成virt-v2v命令,将所述第一虚拟机系统中的虚拟机转换为第二虚拟机系统中的虚拟机。
优选地,所述迁移单元具体包括:
创建单元,若所述第二虚拟机系统中的虚拟机包括第一数据盘,则在云计算平台创建第二数据盘;
覆盖单元,用于确认第二数据盘的镜像文件的位置,用第一数据盘的镜像文件覆盖掉第二数据盘的镜像文件,完成所述第二虚拟机系统中的虚拟机到所述云计算平台的迁移。
本发明通过假盘做中介实现KVM虚拟机注册到云平台进行管理的功能,在云计算平台上创建一个与需迁移的虚拟机数据盘A同类型同大小的数据盘B,挂载给云计算平台,确认数据盘B的镜像文件位置,用数据盘A替换覆盖,文件名、路径不变,镜像文件位置通过查找数据库,拼接IP、路径、文件名信息,获得位置,可通过脚本文件批量对虚拟机转换,并迁移至新平台,通过调用转换工具将不同平台上虚拟机转换成将要迁移到的云计算平台支持的虚拟机,进行迁移。
附图说明
图1是本发明的一个实施例中虚拟机迁移方法的流程示意图;
图2为本发明的另一个优选实施例中虚拟机迁移方法的流程示意图;
图3为本发明的另一个优选实施例中虚拟机迁移系统的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例为实施本发明的较佳实施方式,所述描述是以说明本发明的一般原则为目的,并非用以限定本发明的范围。本发明的保护范围应当以权利要求所界定者为准,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
现有技术中,通过virt-v2v工具转换得到的虚拟机并不能交由例如CloudStack、OpenStack等云计算平台进行管理,将不同虚拟技术平台上虚拟机迁移至其他云计算平台进行管理存在困难。本发明通过调用转换工具将不同平台上虚拟机转换成将要迁移到的云计算平台支持的虚拟机,进行迁移。通过假盘做中介实现KVM虚拟机注册到云平台进行管理的功能,在云计算平台上创建一个与需迁移的虚拟机数据盘A同类型同大小的数据盘B,挂载给云计算平台;确认数据盘B的镜像文件位置,用数据盘A替换覆盖,文件名、路径不变;镜像文件位置通过查找数据库,拼接IP、路径、文件名信息,获得位置;可通过脚本文件批量对虚拟机转换,并迁移至新平台。
图1是本发明的一个实施例中虚拟机迁移方法的流程示意图,如图1所示,该方法包括步骤:
S101、收集第一虚拟机系统中已有虚拟机的虚拟机信息,根据所述虚拟机信息将所述第一虚拟机系统中的虚拟机转换为第二虚拟机系统中的虚拟机。
优选地,所述步骤S101具体包括:
收集第一虚拟机系统已有的包括所在主机的IP、用户名、密码和虚拟机名字的虚拟机信息,将所述虚拟机信息写入配置文件,根据配置文件信息生成virt-v2v命令,将所述第一虚拟机系统中的虚拟机转换为第二虚拟机系统中的虚拟机。
S102、调用注册模板将所述第二虚拟机系统中的虚拟机注册到云计算平台上。
优选地,所述步骤S102具体包括:
通过nginx工具和云计算平台的调用接口调用注册模板将所述第二虚拟机系统中的虚拟机注册到云计算平台上。
S103、若所述第二虚拟机系统中的虚拟机包括第一数据盘,则在云计算平台创建第二数据盘,确认第二数据盘的镜像文件的位置,用第一数据盘的镜像文件覆盖掉第二数据盘的镜像文件,完成所述第二虚拟机系统中的虚拟机到所述云计算平台的迁移。
优选地,所述方法还包括:
S100、安装配置virt-v2v工具用于将第一虚拟机系统中的虚拟机转换为第二虚拟机系统的虚拟机;以及安装配置nginx工具用于提供注册模板所需要的模板下载链接。
图2为本发明的另一个优选实施例中虚拟机迁移方法的流程示意图,如图2所示,该方法中通过使用脚本,配置目标主机IP,用户名密码,要迁移的虚拟机名称等信息,通过virt-v2v工具和云计算平台调用接口CloudStackAPI将Vcenter虚拟机转换为KVM虚拟机,并将KVM虚拟机迁移至云计算平台,主要步骤包括如下:
步骤S201:脚本执行前准备工作,配置Vcenter主机名,用户名,密码,安装virt-p2v,nginx等软件并配置正确,将要迁移的Vcenter中的虚拟机关机。
步骤S202:执行脚本,脚本读取配置信息,连接到Vcenter的主机上,使用virt-p2v将要转换的一台虚拟机转换为KVM虚拟机,镜像文件保存到nginx目录中。
步骤S203:将迁移得到的虚拟机镜像文件作为模板注册到CloudStack上,创建虚拟机。
具体地,步骤S203进一步包括:
步骤S2031:脚本根据转换过来的虚拟机镜像文件的文件名区分文件时系统盘镜像或者数据盘镜像,调用CloudStack的API将系统盘镜像注册成为CloudStack的模板;
步骤S2032:脚本调用CloudStack的API使用上一步骤S注册的模板创建一台虚拟机,如果配置文件中有配置IP,可以指定该虚拟机的IP。
步骤S204:在CloudStack中为虚拟机挂载数据盘,将它的镜像文件用转换得来的数据盘镜像覆盖掉。
具体地,步骤S204进一步包括:
步骤S2041:脚本根据转换过来虚拟机的镜像文件数量判断是否该虚拟机只有一块系统盘,如果是,此台虚拟机迁移成功。如果不是,需要进行数据盘挂载。
步骤S2042:脚本根据文件名判断数据盘数量,并且使用qemu命令查询数据盘大小,然后调用CloudStack的API在CloudStack中创建相同数量相同大小的磁盘文件,并且挂载给步骤S203中创建的虚拟机。
步骤S2043:从数据库查询步骤S2041中创建的磁盘镜像文件在CloudStack的存储中所存放的位置的路径,文件名。
步骤S2044:根据文件所在主机的IP,文件存放路径,文件名,使用scp工具将步骤S2044中查询的文件替换为步骤S202中所得到的镜像文件。
步骤S205:启动虚拟机,判断是否迁移成功。
具体地,调用CloudStack的API在CloudStack启动步骤S2032中创建的虚拟机,并且调用API判断是否创建成功。失败则停止程序,报错,成功则继续。
步骤S206:重复步骤S201~S205,直到将配置文件中所有虚拟机都被迁移到CloudStack上。
在实际应用中,具体地,虚拟机迁移方法包括:
步骤S’201:安装配置virt-v2v工具用于转换Vcenter虚拟机为KVM虚拟机,安装配置nginx用于提供CloudStack注册模板所需要的模板下载链接,收集要迁移虚机所在主机的IP,用户名,密码,要迁移虚拟机的名字,迁移后的IP等信息,写入配置文件。
步骤S’202:根据配置文件生成virt-v2v命令并执行,示例:
virt-v2v-icesx://10.22.125.150/?no_verify=1-ospool01--bridgecloudbr0win7_v2v
这条命令实现了将Vcenter的一台IP为10.22.125.150主机上的一台名叫win7_v2v的虚拟机转化成KVM虚拟机,镜像文件存放在存储池pool01上。
步骤S’203:将转换得到的KVM虚拟机镜像文件转换改名,加上后缀.qcow2,移动到nginx配置的目录下,然后调用CloudStackAPI注册模板,API示例如下:
RegTmplUrl='http://'+csip+':8096/client/api?command=registerTemplate&domainid=45d79a03-e52e-4f63-910c-ab50f1237f26&account=admin&name='+tmplName+'&displayText='+tmplName+'&url=http://'+ngip+':'+ngp
ort+'/'+tmplName+'.qcow2&zoneid='+newzoneid+'&format=QCOW2&isextractable=false&passwordEnabled=false&osTypeId='+ostypeid+'&hypervisor=KVM&ispublic=false&isfeatured=false&response=json'
步骤S’204:调用API查询模板注册结果,确认成功之后调用API,以此模板创建虚拟机,API示例如下:
CreateVmUrl='http://'+csip+':8096/client/api?command=deployVirtualMachine&domainid=45d79a03-e52e-4f63-910c-ab50f1237f26&account=admin&zoneId='+newzoneid+'&templateId='+tmplId+'&ipaddress='+InstandI
p+'&hypervisor=KVM&serviceOfferingId='+serviceOfferingId+'&networkIds='+newnetworkid+'&displayname='+OldInstandName2+'&name='+OldInstandName2+'&response=json
步骤S’205:如果该虚拟机还有数据盘,调用API创建数据盘,API示例如下:
createVolumeUrl='http://'+csip+':8096/client/api?command=createVolume&domainid=45d79a03-e52e-4f63-910c-ab50f1237f26&account=admin&name='+volname+'&zoneId='+newzoneid+'&diskOfferingId='+diskoffe
ringid+'&response=json'
步骤S’206:将数据盘添加给步骤S’204创建的虚拟机,API示例如下:
attachVolumeUrl='http://'+csip+':8096/client/api?command=attachVolume&id='+desvolid+'&virtualMachineId='+NewInstandId+'&response=json'
步骤S’207:通过查询数据库获得数据盘的信息,拼接获得它所存放的位置,也可以专门将此功能作为一个API添加到CloudStack中,提供给脚本调用,发明人选择这种做法,API示例如下:
getDesVolumeUrl='http://'+csip+':8096/client/api?command=getVolumePath&id='+desvolid+'&storage='+desstorage+'&response=json'
最终获得的结果格式示例如下10.10.10.10:/data/ss.qcow2
步骤S’208:使用scp将上一步中获得数据盘的镜像文件位置的文件替换掉,示例如下:scp/data/win7210.10.10.10:/data/ss.qcow2
步骤S’209:调用API,将步骤S’204创建的虚拟机开机,API示例如下:
RegTmplUrl='http://'+csip+':8096/client/api?command=startVirtualMachine&id='+NewInstandId+'&forced=true&response=json'
步骤S’210:删除步骤S’203中注册的模板,API示例如下:
DeleteTmplUrl='http://'+csip+':8096/client/api?command=deleteTemplate&id=%s&response=json'%tmplId
步骤S’211:重复执行步骤S’201~S’210操作,直到将配置的所有虚拟机均转换到CloudStack中。
本发明提供的虚拟机迁移方法中,通过将Vcenter虚拟机批量自动化转换成KVM虚拟机并迁移到CloudStack平台上的方法,并统计Vcenter主机的的用户名密码,虚机的名字,生产virt-v2v命令,将Vcenter虚拟机转换为KVM虚拟机,然后将系统盘以模板形式注册到CloudStack重新创建出虚拟机,如果虚拟机有数据盘需要迁移,在CloudStack创建数据盘,用之前转换得到的数据盘镜像文件覆盖掉到CloudStack新创建数据盘的镜像文件,达到成功迁移虚拟机的目的。最终实现Vcenter虚拟机平衡迁移到CloudStack中,为企业节省购买Vcenter软件的开支和管理成本。
图3为本发明的另一个优选实施例中虚拟机迁移系统的结构示意图,如图3所示,该系统包括:转换单元301、注册单元302和迁移单元303,其中,转换单元301用于收集第一虚拟机系统中已有虚拟机的虚拟机信息,根据虚拟机信息将第一虚拟机系统中的虚拟机转换为第二虚拟机系统中的虚拟机;注册单元302用于调用注册模板将第二虚拟机系统中的虚拟机注册到云计算平台上;迁移单元303用于若第二虚拟机系统中的虚拟机包括第一数据盘,则在云计算平台创建第二数据盘,确认第二数据盘的镜像文件的位置,用第一数据盘的镜像文件覆盖掉第二数据盘的镜像文件,完成第二虚拟机系统中的虚拟机到云计算平台的迁移。
优选地,该系统还包括:配置单元300。配置单元300用于安装配置virt-v2v工具用于将第一虚拟机系统中的虚拟机转换为第二虚拟机系统的虚拟机;以及安装配置nginx工具用于提供注册模板所需要的模板下载链接。
优选地,转换单元301具体包括收集单元3011和生成单元3012。其中,收集单元3011,用于收集第一虚拟机系统已有的包括所在主机的IP、用户名、密码和虚拟机名字的虚拟机信息;生成单元3012用于将虚拟机信息写入配置文件,根据配置文件信息生成virt-v2v命令,将第一虚拟机系统中的虚拟机转换为第二虚拟机系统中的虚拟机。
优选地,迁移单元303具体包括创建单元3031和覆盖单元3032。其中,创建单元3031用于若第二虚拟机系统中的虚拟机包括第一数据盘,则在云计算平台创建第二数据盘;覆盖单元3032用于确认第二数据盘的镜像文件的位置,用第一数据盘的镜像文件覆盖掉第二数据盘的镜像文件,完成第二虚拟机系统中的虚拟机到云计算平台的迁移。
本发明提供的虚拟机迁移系统中,通过将Vcenter虚拟机批量自动化转换成KVM虚拟机并迁移到CloudStack平台上的方法,并统计Vcenter主机的的用户名密码,虚机的名字,生产virt-v2v命令,将Vcenter虚拟机转换为KVM虚拟机,然后将系统盘以模板形式注册到CloudStack重新创建出虚拟机,如果虚拟机有数据盘需要迁移,在CloudStack创建数据盘,用之前转换得到的数据盘镜像文件覆盖掉到CloudStack新创建数据盘的镜像文件,达到成功迁移虚拟机的目的,最终实现Vcenter虚拟机平衡迁移到CloudStack中,为企业节省购买Vcenter软件的开支和管理成本。
可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。