前面一篇文章介绍了利用NFS创建虚拟机的过程,本文就介绍下如何利用NFS对虚拟机进行动态迁移。
动态迁移就是把一台虚拟机在不停止其运行的情况下迁移到另一台物理机上。这看起来似乎不太可能,不过还好kvm本身就支持者一特性,且libvirt也提供了相应的API,我们可以通过virsh命令或者virt-manager对虚拟机进行动态迁移。
进行动态迁移由于不间断虚拟机的运行,所以其所需的条件就必要多:
1、两台虚拟机的虚拟化环境必须一致,libvirt版本、qemu版本。
2、两台物理机必须有着相同的共享目录,即把NFS服务器上的镜像文件夹挂载到相同目录下
3、源主机需要配置DNS,这样LIbvirt才可以找到目的主机,hostname可以自己命名
4、物理主机开启nfs虚拟化支持
5、给qemu设置root权限
为了迁移成功,我们先检查下上述条件:
1、
目的主机:
源主机:
前面两行是在安装vtpm引起的,这里不影响,可以看到这里的虚拟化环境是一致的。
2、NFS共享文件挂载目录
目的主机:
源主机:
由于不需要安装虚拟机,所以我们就不用挂载ISO目录。可以看到这里镜像文件目录结构是一样的。
3、检查目的主机和源主机的域名配置
目的主机域名查看
源主机:
这里注意修改了host文件后注意重启网络服务生效。
4、检查selinux中nfs对虚拟化支持的相关选项
目的主机:
源主机:
5、给qemu设置root权限:
源主机:
在/etc/libvirt/qemu.conf
目的主机:
注意设置以后要重启libvirtd服务:systemctl restart libvirtd.service
6、执行迁移
(1)迁移前虚拟机的标签:
迁移之后:
可以发现其实sVIrt标签已经变化了,即在动态迁移过程后,虚拟机的隔离性依然有效。
当然在利用NFS迁移的过程中也有一些问题,总结如下:
Question1:
unable to migrate guest: internal error: Attempt to migrate guest to the same host domain
Solution1:
1、在/etc/hosts中添加$(target IP) domain
2、重启网络服务
Question2:
internal error: hostname on destination resolved to localhost, but migration requires an FQDN
solution2:
1、在对方运行hostname domain
Question3:
internal error: process exited while connecting to monitor: 2016-09-04T06:11:21.526046Z qemu-kvm: -drive file=/nfsFile/images/ubuntu12.04.qcow2,if=none,id=drive-ide0-0-0,format=qcow2: could not open disk image /nfsFile/images/ubuntu12.04.qcow2: Could not open ‘/nfsFile/images/ubuntu12.04.qcow2‘: Permission denied。
Solution3:
1、应该是在对方或者本地没有开启virt_nfs_use
2、运行setsebool virt_nfs_use on
Question4:
问题1和问题2每次执行迁移时都会遇见,不晓得为何!
Solution:
想了许久终于明白,这里需要在source主机添加目的主机的域名,即修改source主机的/etc/hosts文件添加:
源IP targetname
//targetname 为目标主机的hosname,如果不清楚可以在目标主机执///行hostname查看下。
但是默认情况下,hostname是localhost.localdomain,而这个会被libvirt认为是本地,所以会拒绝,那么就只能给目标机器修改一个hostname,然后在源主机上配置DNS解析即可。
至于前面为何出现那种情况,是因为我们如果利用hostname命令修改了hostname,那么/etc/hosts中的设置就失效,那么就需要重启网络服务,而一旦重启,那么下次在使用domain这个域名就会失效,仍然需要利用hostname设置,就这样形成循环。