一、背景介绍
我们知道,虚机的运行分为存储位置与运行位置,其中运行位置是指虚拟机以进程的方式运行在哪一台宿主机的内存中,而存储位置指的是虚拟机的磁盘文件存放位置
按照虚机状态可分为:在线迁移,离线迁移
按照迁移方式可分为:迁移运行位置,迁移存储位置,同时迁移运行和存储位置
在kvm环境下,虚拟平台通过libvirt进行管理,而libvirt在数据传输时提供了两种方案
在迁移过程中的通信控制提供了三种方案
以下重点就虚机状态迁移展开详细说明
二、离线迁移
1.同宿主机迁移
由于迁移的源,目的是同一台宿主机,运行位置并不会发生改变,只是存储位置会由原先的A变为钱以后的B,这种场景适用于原先存放虚机的磁盘空间不足,需要更改存放位置,具体操作步骤:
- 将虚机关机
- 确认虚机磁盘当前存放位置
[root@node4 images]# virsh list --all
Id Name State
----------------------------------------------------
21 centos7-1 running
- centos7-2 shut off
[root@node4 images]#
[root@node4 images]#
[root@node4 images]# virsh domblklist centos7-2
Target Source
------------------------------------------------
vda /var/lib/libvirt/images/centos7-2.qcow2
hda -
- 通过mv命令将虚机磁盘移动到指定目录下
- 然后通过virsh edit --domain xxxxx 编辑虚机配置文件,更改磁盘存放位置后,再重启
[root@node4 images]# mv /var/lib/libvirt/images/centos7-2.qcow2 /nfs/
[root@node4 images]#
[root@node4 images]# virsh edit centos7-2
Domain centos7-2 XML configuration edited.
[root@node4 images]# virsh start centos7-2
Domain centos7-2 started
[root@node4 images]# virsh domblklist centos7-2
Target Source
------------------------------------------------
vda /nfs/centos7-2.qcow2
hda -
2.不同宿主机迁移
不同宿主机之前迁移,又分为是否有共享存储,一般在有共享存储的场景下,不同宿主机都采用在线迁移方式,在没有共享存储的场景下,virsh migrate命令只支持传输配置文件,还不支持非共享存储的迁移
[root@node4 images]# virsh migrate --domain centos7-2 qemu+ssh://root@node5/system --persistent --undefinesource \
> --migrateuri tcp://10.0.0.15 --unsafe --copy-storage-all
error: Cannot access storage file '/var/lib/libvirt/images/centos7-2.qcow2' (as uid:107, gid:107): No such file or directory
折中的方法就是:
- 通过scp命令将配置文件与磁盘文件复制到目标主机
- 在目标宿主机上通过virsh define重新注册虚机
- 在原宿主机上删除磁盘并且通过virsh undefine注销虚机
三、在线迁移
如果有共享存储,在虚机关机情况下,将虚机磁盘文件移动到共享存储中后再启动,后期就可以通过迁移运行位置,将虚机快速迁移至其他主机上,本例中将虚机磁盘放到nfs存储中(搭建过程略)
1.使用界面操作
需要说明的是:默认情况下不勾选unsafe选项无法进行迁移,原因是磁盘也有缓存,在开启磁盘缓存后,缓存中的数据未落盘之前,此时迁移数据可能会有丢失,认为此时是unsafe状态,所以勾选表示接受该风险
2.使用virsh命令操作
需要说明的是:在生产环境下,有时会指定一个网卡作为迁移的专用网卡,不会由于流量的突然增大,导致管理或业务网络产生高延时,此时需要通过--migrateuri来指定
[root@node4 ~]# virsh list -all
Id Name State
----------------------------------------------------
14 centos7-2 running
18 centos7-1 running
[root@node4 ~]# virsh migrate --domain centos7-1 qemu+ssh://root@node5/system \
> --live --persistent --undefinesource --migrateuri tcp://10.0.0.15 --unsafe
[root@node4 ~]# virsh list --all
Id Name State
----------------------------------------------------
14 centos7-2 running