1 简单迁移

      虚拟机是可以被导入到另一个物理机上使用的,但是这是有限制的。如果两个物理机的CPU型号不同,直接过去也是无法使用的。因为虚拟机在创建时会默认物理机的CPU型号,导入到另一个具有不同CPU型号的物理机上就无法被识别。

      在生产环境中,客户是不会让我们关机重新修改CPU型号再给他使用的,所以就需要动态迁移虚拟机。这就需要新物理机上有CPU模型模拟之前物理机CPU的型号。也就是增加原有CPU的特性与指令集来模拟。更改CPU型号时要硬关机,不能reboot,要用destroy。

      虚拟机在物理机中以镜像文件和xml文件的形式存在,而xml配置文件位置在物理机的 /var/run/libvirt/qemu/xxx.xml 与 /etc/libvirt/qemu/xxx.xml 两处。镜像文件位置是自己定义的,是物理机下的某个目录里。

1.1  简单迁移——关机,只迁移镜像文件

1)把Vmware workstations 的虚拟机镜像文件放到kvm虚拟机里使用

第一步: 首先把Vmware workstations 的虚拟机镜像文件copy到物理机中,然后把镜像文件的格式转换成 qcow2格式的,例如 test.qcow2 。

第二步:在物理机上新建一个kvm虚拟机,镜像选择test.qcow2 。

#virsh  define   test.xml文件,添加

<domain type='kvm'>

<cpu mode='custom' match='exact'>

<model fallback='allow'>Westmere</model>

</cpu>

</domain>

<domain type='kvm'>

<cpu mode='host-passthrough'/>

<domain type='kvm'>

2)将kvm虚拟机镜像文件copy到Vmware里面使用

第一步:将kvm下虚拟机关机;

第二步:将kvm下img文件格式的虚拟机转换成vmdk格式,命令如下:

# qemu-img  convert  -f   qcow2  vm1.qcow2   -O   vmdk    test.vmdk

第三步:在VMware里创建一个虚拟机haha,磁盘类型选择为IDE,将test.vmdk更名为haha.vmdk,移到haha虚拟机文件所在文件夹下,询问是否替换,选择是,然后开启虚拟机即可。一定要让镜像的名字与虚拟机名字相同,不行的话就在转换格式之后,把test.vmdk文件的权限改成777再试一次。 

开机登录之后会发现,原来虚拟机的内容也还在,这就成功了!!!

2  P2V 物理机迁移到虚拟机

      如果有个物理机,物理机上的服务是我们搭建不了的,而且有些服务还有验证序列号,所以我们如果想要创建一个一模一样的虚拟机是不可能的了。那么就要做P2V,把物理机变成虚拟机。

      对于一个主机而言,硬盘是最重要的,只要把硬盘的内容拷贝成一个裸格式的镜像文件,然后把这个镜像文件挂载到虚拟机上即可。

1)制作类似于PE的管理系统——一个img镜像文件

#virt-p2v-make-disk -o /dev/sdx

#virt-p2v-make-disk -o /var/tmp/p2v.img

#qemu-kvm -m 1024 -boot c -drive file=/var/tmp/p2v.img,if=virtio,index=0 -drive file=/var/lib/libvirt/images/xfobase.qcow,if=virtio,index=1

#vncviewer 127.0.0.1:5900

这就是制作PE镜像文件的过程,用这个镜像文件就能看见要虚拟化的物理机的硬盘。

2)创建一个虚拟机vm2,把这个PE镜像p2v.img挂载到虚拟机vm2的硬盘1(容量要比p2v.img大)里,然后添加硬盘2,把要虚拟化的物理机vm1的硬盘镜像vm1.qcow2添加在硬盘2上,选在引导项为p2v.img。这就是在使用vm2和p2v.img打开vm1.qcow2。

CPU的个数一定要比原物理机的多,内存也要比原来的多,然后开启虚拟机,出现了下面的窗口。

conversion  server 地址要写虚化到的地址,比如想把vm1虚化到服务器上,就要填写服务器的地址。

localhost是新虚拟机的名称,/var/tmp  就是服务器172.16.2.1下的一个目录,这个目录的大小一定要比host2.qcow2大

拷贝过程很慢。拷贝完了之后会在服务器172.16.2.1的/var/tmp目录下产生两个文件,一个是xml,一个是localhost-sda。

然后使用下面的命令导入新的虚拟机: #virsh   define   /var/tmp/localhost.xml

然后再用 #virt-manager 就看到界面上有了localhost虚拟机,然后开启虚拟机,查看一下是不是原来的host2.

原来vm1中就有test文件,可看到localhost虚拟机中也有test文件,这就是成功了。

3 动态迁移

      静态迁移(static migration)又叫冷迁移(cold  migration)、离线迁移(offline  migration),就是在虚拟机关机状态下进行迁移;动态迁移(live migration)又叫热迁移(hot  migration)、在线迁移(online  migration),就是在虚拟机开机正常运行状态下迁移。

      动态迁移时要考虑以下几个影响因素:整体迁移时间(包括服务器停机时间),服务器停机时间(包括业务停止时间、业务启动时间、业务恢复时间),性能影响(包括迁移后对其他客户机的影响)。

      动态迁移能够解决以下问题:负载均衡问题,解除硬件依赖,节约能源,远程迁移。

      动态迁移之前还需要去迁移到的新地址查看是否能够承担原来的计算机资源,并且需要在新地址做好迁移准备,比如网络配置、存储配置等基础配置要相一致;迁移之后网络地址与网关都会改变,所以还要更改网络相关的配置。同时,迁移的时间也要考虑,不能选在业务高峰期,因为迁移肯定会导致业务暂时性中断。

      迁移还要满足一定得条件:第一,要有共享的存储;第二,如果是跨平台迁移还要满足以下几个条件——64位操作系统可以迁移到64位的上面去,32位的可以迁到32位与64位操作系统,但是64位的不能迁移到32位的;硬件支持NX(never execute) #cat  /proc/cpuinfo  |  grep   nx;源主机与目的主机配置相同(ip、网关、网卡模式、CPU型号、挂载设备、存储等等)、虚拟机名称唯一。

4 实验演示

把物理机1(172.16.2.1)中的虚拟机迁移到物理机2(172.16.8.1)中使用,物理机之间可以相互通信。关键点是要搭建好共享存储,然后就是把xml文件中的镜像路径改为共享目录下,开机时是不能对镜像文件做任何操作的!

第一步  在物理机2上,创建nfs共享目录/mnt/nfs。再用 #virt-manager创建共享存储池nfs,类型是netfs网络导出的目录,目标路径默认是 /var/lib/libvirt/images/nfs ,主机名是自己的ip地址,源路径是共享目录 /mnt/nfs ;

第二步  在物理机1上使用 #virt-manager连接172.16.8.1 ,给自己也创建共享存储,共享名称也为nfs,主机名是172.16.8.1,源路径是共享目录 /mnt/nfs。然后把虚拟机vm1关机,再把它的镜像vm1.qcow2 移动到该路径下。

第三步  然后打开物理机1的虚拟机vm1,添加1块硬盘,空间大小为vm1.qcow2的大小,然后删除原有的硬盘,然后开机。右键虚拟机,地址写物理机2的ip,勾选允许不可靠,开始迁移。迁移过程中使用ping命令,相互ping,看是否能够一直ping通,如果能,说明没有影响业务。


 

热迁移的命令

#virsh migrate xfobase --live qemu+ssh://des_ip:/system --unsafe

转载请注明出处,谢谢!

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐