kvm虚拟机迁移

实验原理

静态迁移是指在虚拟机关闭或暂停的情况下,将源宿主机上虚拟机的磁盘文件和配置文件拷贝到目标宿主机上。这种方式需要显式的停止虚拟机运行,对服务可用性要求高的需求不合适。

动态迁移无需拷贝虚拟机配置文件和磁盘文件,但是需要迁移的主机之间有相同的目录结构放置虚拟机磁盘文件,可以通过多种方式实现,本例采用基于共享存储动态迁移,通过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,现在虚拟机的动态迁移完成。

没有更多推荐了,返回首页