实验原理
静态迁移是指在虚拟机关闭或暂停的情况下,将源宿主机上虚拟机的磁盘文件和配置文件拷贝到目标宿主机上。这种方式需要显式的停止虚拟机运行,对服务可用性要求高的需求不合适。
动态迁移无需拷贝虚拟机配置文件和磁盘文件,但是需要迁移的主机之间有相同的目录结构放置虚拟机磁盘文件,可以通过多种方式实现,本例采用基于共享存储动态迁移,通过NFS来实现。
实验环境:
本机IP:192.168.1.94
目标机IP:192.168.1.87
NFS服务器(Windows端):192.168.1.97
进行虚拟机的动态迁移的时候,我采用给的是Windows的nfs共享存储来进行虚拟机的迁移,而且限制于硬件的资源有限,我的目标主机是我Windows安装在VMware的虚拟机看,但是不影响使用,在进行动态迁移的时候,一定呀保证,目标主机和本地主机的相同的目录结构,从而来存放客户机的资源。而且还将客户机用于存储的镜像文件放到nfs共享存储上面。
静态迁移:
1,首先查看本机虚拟机demo-2的状态为关机状态其次将虚拟机的配置文件demo-2.xml拷贝到root文件夹下面,或者直接生成demo-2.xml文件的命令为:
Virsh dumpxml demo-2 >/root/demo-2.xml
2,查看虚拟机的磁盘文件,命令为:
virsh domblklist demo-2
3,将虚拟机磁盘文件和配置文件都拷贝到另一台Ubuntu中.
4,以下的操作就在目标主机上进行了,我为了方便起见,我就直接ssh连接到目的主机直接进行操作,如下图,并查看已经复制过来的虚拟机文件。
5 使用virsh的子命令define定义并注册demo虚拟机
此时出现了setlocale: No such file or directory错误,解决方法如下
网上普遍的解决方法都是:修改/etc/default/locale,增加:LC_ALL="C"
确实能解决这个问题,但是似乎我有一台不出错的服务器上,并没有设置LC_ALL。强制设置LC_ALL有点粗暴,一定有更好的解决方法。
研究了一下,最佳方法是,修改/var/lib/locales/supported.d/local,追加一行:zh_CN.UTF-8 UTF-8
然后:sudo locale-gen sudo dpkg-reconfigure locales就完美解决了
6,在进行启动迁移过来的虚拟机emo-2时候出现一下问题
经过百度后发现是qemu的权限不够,然后进行一下修改即可
Vim :/etc/libvirt/qemu.conf
# Some examples of validvalues are:
# user = "qemu" # Auser named "qemu"
# user = "+0" #Super user (uid=0)
# user = "100" # Auser named "100" or a user with uid=100
user = "root"
# The group for QEMU processesrun by the system instance. It can be
# specified in a similar wayto user.
group = "root"
# Whether libvirt shoulddynamically change file ownership
# to match the configureduser/group above. Defaults to 1.
# Set to 0 to disable fileownership changes.
dynamic_ownership = 1
/etc/init.d/libvirt-bin restart 即可
7,使用命令进行虚拟机的启动如下图,所以虚拟机的静态迁移算是成功了。
虚拟机动态迁移:
1,我在Windows端下载了一个NFS服务器,用这个服务器用来共享虚拟机的磁盘文件,输出路径如下(NFS搭载我的以下博客里面有)
在目标主机中也进行相同的挂载,而且目录保持一致。
2,然后在本机中开启虚拟机,并执行迁移命令
3,在目的主机上查看虚拟机迁移的情况
4,将已经迁移成功的虚拟机的内存状态进行保存至XML文件中
5,使用命令“virsh console demo3”连接节点2上的demo3虚拟机
6,现在虚拟机的动态迁移完成。