KVM迁移

前端之家收集整理的这篇文章主要介绍了KVM迁移前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

kvm迁移分为冷迁移和热迁移。

冷迁移:虚拟机在关机情况下从hostA迁移至hostB

热迁移:虚拟机在开机情况下从hostA迁移至hostB


本文以centos6.5为例,介绍冷/热迁移的方法


1. 冷迁移

① 导出虚拟机xml文件配置文件

# virsh dumpxml vm-name > dump.xml

vm-name 为你的虚拟机名称


② 拷贝虚拟机磁盘和xml文件(从hostA -> hostB)

# scp /path-to-image/vm-image hostB:/root

# scp dump.xml hostB:/root

vm-image的默认路径为/var/lib/libvirt/images/ (libvirt管理的虚拟机)


登录hostB,修改dump.xml

根据B的硬件环境,修改dump.xml的文件内容

比如<interface>中bridge名称,<disk>中<source file>的路径。


④ 加载虚拟机

# virsh define dump.xml

切记不能用virsh create。否则虚拟机关闭后,该虚拟机从虚拟机列表删除

如果你要再次使用该虚拟机的话:则必须重新进行create/define操作。


2. 热迁移

英文名称live-migrate,也叫在线迁移。即虚拟机在运行时进行无缝迁移。

本文以centos6为例(被迁移的虚拟机,hostA,hostB均为centos6)进行说明。


① hostA共享虚拟机磁盘目录给hostB

默认情况下,虚拟机磁盘目录为/var/lib/libvirt/image/centos6.img。

把此目录(/var/lib/libvirt/image)设置成nfs共享(这里不详细阐述如何设置nfs)。

hostB通过mount命令把hostA目录挂载至相同路径下(/var/lib/libvirt/image)。

这里有TX肯定会问,如果挂载至hostB的/var/lib/libvirt/image目录下,那么hostB

原目录下的虚拟机文件不就无法读取了?确实是这样的!一旦你挂载了,那么hostB

上原本的虚拟机就无法访问了。除非你自定义磁盘目录到其他路径下,否则无其他方法

同理,如果你hostA的虚拟机修改了默认磁盘路径,那么你在hostB上必须也创建相同的路径,

用于挂载hostA上的虚拟机磁盘。


② 迁移虚拟机

在hostA上执行下列命令:

# virsh migrate --live vm-name qemu+ssh://hostB/system

然后会提示你输入hostB的root密码,输入完成后就开始迁移了。


这里记录几个live migrate过程中遇到的problem及其workaround

A. error: Unable to resolve address '***" service "**" : Name or service not know

B. error: Unable to resolve address '***" service "**" : Temporary failure in name resolution

这两个问题都是因为hostname没有设置的原因。

解决方法是 :1. hostA和hostB都设置hostname 2. 在/etc/hosts文件中配置对方hostname解析


C. error: unsupport configuration: Unable to find security driver for label selinux

这个问题是因为hostA和hostB的selinux状态不一样。可能hostA是permission/enforce而hostB是disabled。

这个问题修改方法如下:(假设hostA是permissive ,hostB是disabled)

1. 修改hostA的/etc/selinux/config,selinux改成disabled

2. 修改/etc/libvirt/qemu.conf文件,把selinux-dirver改成none

3. 重启hostA

4. virsh start vm --force-boot (必须加上force-boot参数,否则无法启动vm)

5. 执行迁移命令


关于这点我还有个想法:那就是把hostB的selinux开启,是不是也能解决问题。

这个我还没有试验,mark一下。欢迎试验过得TX留言补充~~

猜你在找的XML相关文章