一、静态迁移(虚拟机需要关闭)

1、确定需要迁移的虚拟机的磁盘的存放路径,如虚拟机名称为vm1

virsh domblklist vm1 查看,我的为/disk3/CentOS-6.8-x86_64.raw

2、导出需要迁移的虚拟机的配置文件

virsh dumpxml vm1 > /disk3/CentOS-6.8-x86_64.xml

3、将需要迁移的虚拟机的配置文件和磁盘文件转移到另一台主机上

mkdir /home/transfer

scp /disk3/CentOS-6.8-x86_64.xml > 10.100.55.41:/home/transfer

scp /disk3/CentOS-6.8-x86_64.raw > 10.100.55.41:/home/transfer

4、修改一下/home/transfer/CentOS-6.8-x86_64.xml文件中的<source file>的路径即可

5、定义启动虚拟机

virsh dumpxml name>name.xml

virsh define name.xml

二、动态迁移(虚拟机不用关闭   基于数据块)

1、在目标主机上执行命令,创建一个与源主机同名的磁盘文件

qemu-img create -f raw /disk3/CentOS-6.8-x86_64.raw 2G

2、在源主机上执行命令  ssh或者tcp只要其中一种可以与目标主机进行连接就行

virsh -c qemu+ssh://root@10.100.55.41/system list --all

3、开始热迁移(在源主机上执行命令)

virsh migrate fir --live  --verbose --copy-storage-all  qemu+tcp://10.100.55.41/system tcp://10.100.55.41

--copy-storage-all   (基于非共享存储的全部磁盘迁移) 性能消耗较大

qemu+tcp 就是使用tcp进行对远程libvirtd进行连接访问,需要修改文件vim /etc/sysconfig/libvirtd,用来启用tcp的端口,

修改文件vim /etc/libvirt/libvirtd.conf来实现

4、定义和启动虚拟机

virsh dumpxml name>name.xml

virsh define name.xml

三、动态迁移(基于共享存储)

1、搭建NFS服务器

    1)首先确认nfs和rpc是否安装

          

                  [root@server ~]# rpm -qa |grep nfs

                  nfs-utils-1.2.3-39.el6.i686

                  [root@server ~]# rpm -qa |grep rpcbind

                  rpcbind-0.2.0-11.el6.i686

     2)启动服务

                systemctl start nfs

               systenctl start  rpcbind

      3)编辑配置文件

             mkdir /home/shared_memory

             chmod o+w /home/shared_memory

            vi  /etc/exports

            /home/shared_memory  10.100.55.0/24(rw,sync,no_root_squash)

           /usr/src 10.100.55.0/24(rw,async)

         #no_root_squash:登陆到NFS主机的如果是ROOT用户,他就有ROOT权限

        #sync:资料同步写入存储器中

       #async:资料会先暂时存放在内存中,不会直接写入磁盘

    3)重启nfs和rpcbind服务

以上均在服务器端10.100.55.42这台主机上操作,现在需要测试客户机是否可以,即服务端的两个文件是否成功共享到了10.100.55.0这个网段

4)在客户机上测试

mkdir -p /disk3/share

//挂载NFS服务器上的共享文件

mount 10.100.55.42:/home/shared_memory /disk3/share/

可以在客户机的/disk3/share中新建一个txt文件,再看服务器主机上/home/shared_memory中有没有出现这个歌新建的文件即可

2、定义存储池与其目录(源主机执行命令)

virsh pool-define-as vmdisk --type netfs --target /disk3/share --source-host 10.100.55.42 --source-path /home.shared_memory --source-format nfs

3、创建已定义的存储池-激活-在存储池中创建存储卷-在存储卷中安装虚拟机(源主机执行命令)

virsh pool-build vmdisk

virsh pool-autostart vmdisk

virsh pool-start vmdisk

virsh vol-create-as vmdisk share1.qcow2 3G --format qcow2

virt-install --name share1 --virt-type kvm --ram 1024 --cdrom=/disk3/CentOS-6.8-x86_64-minimal.iso ---disk path=/disk3.share/share1.qcow2 --network bridge=br0 --graphic vnc,listen=0.0.0.0

4、目标主机执行命令(不用创建存储卷,因为存储卷是共享的)

//NFS服务器已经搭建,其中因为/home/shared_memory是共享存储,客户机中/disk3/share挂载了该文件,所有在客户机/disk3/share文件中创建的存储卷也会在NFS服务器上

mkdir -p /disk3/share/

virsh pool-create-define-as vmdisk netfs --target /disk3/share/ --source-host 10.100.55.42 --souce-path /home/shared_memory  --souce-format nfs

virsh pool-build vmdisk

virsh pool-autostart vmdisk

virsh pool-start vmdisk

5、在源主机中开始迁移

virsh migrate share1 --live --verbose qemu+ssh://10.100.55.42/system tcp://10.100.55.42  #其中share1为虚拟机名称

5、在目标主机中定义启动虚拟机

virsh dumpxml share1>/disk3/share1.xml

virsh define /disk3/share1.xml