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留言补充~~ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- react-native – 在React Native中的组件之间进行通信?
- 简单实现对flex dataGrid一列在某些行可编辑,在另一些行不
- Fragment异常 Binary XML file line #8: Error inflating c
- Oracle SQL Developer保持数据库连接的方法
- ruby-on-rails – Rails application.html.erb?
- 微信开发,对象转换为xml时候引用XStream这个类报错处理方案
- 生成 XML 文档时出错。使用 XmlInclude 或 SoapInclude 特性
- 具有依赖项的Android Studio导出jar
- ajax分页
- 正则表达式 – 使用正则表达式表示标识符