KVM学习笔记(虚拟机迁移)

 1、虚拟机迁移概述

libvirt有两种迁移方案,方案1:在Hypervisor层直接进行迁移。方案2:由libvirt之间建立隧道来进行迁移。
迁移时的通信控制:
第一种由控制节点管理程序来统一控制
第二种由管理程序通知迁移节点libvirt,迁移节点libvirt控制迁移过程
第三种由管理程序通知迁移节点Hyperv,迁移节点Hyperv控制迁移过程,libvirt不参与迁移

2、URI统一资源标识符

virsh和libvirt使用URI来连接远程宿主机
格式:
driver[+transport]://[username@][hostname][:port]/path[?extraparameters]
示例:
qemu://hostname/
xen://hostname/
xen+ssh://hostname/
qemu+ssh://username@hostname/

使用URI来连接远程的virsh
virsh -c URI

3、虚拟机在线迁移要求

虚拟机在线迁移要求
  • 两台宿主机都启动了libvirtd服务
  • 迁移的平台和版本符合兼容性要求
  • 防火墙方通所需端口
  • 两个宿主机在相同的虚拟网络下
  • 如果是共享存储,建议两个宿主机上的mount路径一致

4、静态迁移

同一宿主机内部迁移

更改虚拟机配置文件source字段的存储位置即可

不同宿主机之间迁移

分别迁移虚拟机的磁盘文件和配置文件,在目标宿主机上生成虚拟机,完成迁移
文件拷贝命令rsync
本地拷贝
rsync [OPTION...] SRC... [DEST]
通过远程shell拷贝
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
通过远程rysnc进程拷贝
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
        rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
          rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
常用参数
-a --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
-v --verbose 详细模式输出。
-S --sparse 对稀疏文件进行特殊处理以节省DST的空间。
-H --hard-links 保留硬链结。
-P --progress 显示备份过程。
迁移虚拟机磁盘文件
迁移虚拟机配置文件
在目标宿主机上拉起虚拟机

使用virsh migrate命令

migrate只传输配置文件,只能支持共享存储的迁移,非共享存储需要手工拷贝虚拟机磁盘文件
migrate <domain> <desturi> [--live] [--offline].....
参数解释
--live           live migration
--offline      offline migration
--persistent  persist VM on destination
在目标宿主机上能看到迁移过来的虚拟机

5、基于共享存储的动态迁移

首先建立共享存储,本例使用基于NFS共享文件夹的方式。

5.1 在存储服务器上准备好文件夹

5.2 宿主机挂载存储上的文件夹

mount 192.168.234.250:/vm /vmdata
编辑虚拟机的配置文件,将硬盘文件改为共享存储文件夹内的硬盘文件。
virsh edit <domain>
配置防火墙,放通迁移用的端口
firewall-cmd --add-port=16509/tcp --permanent
firewall-cmd --add-port=49152-49215/tcp --permanent
firewall-cmd --reload
安装openssh-askpass包(可选)

5.3 使用命令迁移虚拟机

启动虚拟机后,使用migrate命令进行迁移
virsh # migrate Centos6b --desturi qemu+ssh://root@kvm-1/system --live --persistent --undefinesource --unsafe
参数解释
--live           live migration
--unsafe      force migration even if it may be unsafe    虚机磁盘的cache模式不是none模式,则在数据写盘的时候可能在cache中,还没落盘存在脏数据,迁移时造成数据丢失。使用--unsafe模式可以强制迁移。否则只能迁移cache模式是none模式的虚机。
--persistent  persist VM on destination
--undefinesource  undefine VM on source
--migrateuri <string>  migration URI, usually can be omitted exp:tcp://hostname:port  当迁移地址和kvm管理地址不一致时,用于指定迁移地址
migrate命令参数图

6、无共享存储迁移

无共享存储时,除了迁移配置文件,需要同时迁移磁盘文件。
标准RHEL/CentOS7自带的qemu-kvm不支持无共享存储的迁移。oVirt或RHEV支持,需要安装增强版的软件包。
安装如下两个软件包:
yum -y install centos-release-qemu-ev         安装扩展的软件仓库
yum -y install qemu-kvm-ev                          安装增强型软件包,将原有软件替换成ev版本
安装好软件包后,ev版的kvm支持--copy-storage参数
--copy-storage-all   全量迁移 migration with non-shared storage with full disk copy
--copy-storage-inc  增量迁移 migration with non-shared storage with incremental copy (same base image shared between source and destination)
这种类型的迁移基于存储池,虚拟机磁盘所在的存储池必须在源和目的宿主机上同时存在,否则会报错。
配置好相同的存储池后可完成迁移
migrate --domain Centos6b --desturi qemu+ssh://root@kvm-2/system  --live --persistent --copy-storage-all  --unsafe --undefinesource 

评论