0x00 目录
0x01 虚拟机迁移方式
虚拟机迁移一般指虚拟机从一台物理机上迁移到另一台物理机上,迁移的内容包括虚拟机的磁盘文件、配置文件和内存状态。
从迁移方式上可分为两种:静态迁移和动态迁移。
静态迁移
这种方式又称为离线迁移或线下迁移,指的是虚拟机需要在关机的前提下,完成迁移操作。
迁移的过程分为两个阶段:
1.从源物理机上拷贝虚拟机的磁盘文件、配置文件至目的物理机上,可以使用SCP命令完成拷贝工作
2.在目的物理机上,根据拷贝的磁盘文件及配置文件,定义并创建虚拟机
动态迁移
这种方式也成为热迁移、在线迁移、线上迁移等,总之就是指虚拟机在运行的情况下,完成从源物理机迁移至目的物理机,在这过程中虚拟机只经历一个很短暂的暂停(虚拟机从源物理机上切换到目的物理机上),用户几乎感受不到服务的中断
根据磁盘文件的存储位置,又可分为以下两类:
基于共享存储
基于本地存储(块存储)
基于共享存储
源物理机与目的物理机拥有共享的存储设备,虚拟机的磁盘文件可以被源物理机和目的物理机所访问,因此无需迁移。迁移的过程如下:
1.从源物理机上迁移虚拟机的内存状态到目的物理机
注:迁移结束后,虚拟机就已经在目的物理机上运行了,但是由于目的物理机上无该虚拟机配置文件,若此时关闭虚拟机,就无法找到该虚拟机了,所以需要完成接下来的操作
2.在目的物理机上,根据迁移的内存状态导出虚拟机的配置文件
3.在目的物理机上,根据导出的虚拟机配置文件,定义并创建虚拟机
基于本地存储
源物理机与目的物理机都使用独立的存储设备,因此迁移的内容包括虚拟机的磁盘文件、内存状态以及配置文件(从内存状态中导出),迁移的过程如下:
1.从源物理机上拷贝磁盘文件到目的物理机
例如:使用SCP命令,同时要使用相同的目录结构放置虚拟机磁盘文件
2.从物理机上迁移内存状态到目的物理机
例如:使用virsh migrate --live命令,或直接使用virt-manager图形化界面上的迁移操作
注:迁移结束后,虚拟机就已经在目的物理机上运行了,但是由于目的物理机上无该虚拟机配置文件,若此时关闭虚拟机,就无法找到该虚拟机了,所以需要完成接下来的操作
3.在目的物理机上,根据迁移的内存状态导出虚拟机的配置文件
4.在目的物理机上,根据导出的虚拟机配置文件,定义并创建虚拟机
0x02 虚拟机管理工具
- libvirt:用于实现虚拟机管理的开源API,可以实现对虚拟机的创建、删除、分配资源等
- virt-manager:基于libvirt实现的虚拟机管理工具,图形化界面,类似VMware Workstation和VirtualBox
- virsh:基于libvirt实现的虚拟机管理工具,命令行
0x03 搭建KVM虚拟化环境
查看CPU是否支持KVM
egrep "(svm|vmx)" /proc/cpuinfo
如果有输出,则说明CPU支持KVM
安装KVM及相关依赖包
sudo apt-get install qemu-kvm sudo apt-get install qemu sudo apt-get install virt-manager sudo apt-get install virt-viewer sudo apt-get install libvirt-bin sudo apt-get install bridge-utils
启动KVM虚拟系统管理器
sudo virt-manager
0x04 基于virsh实现虚拟机动态迁移
这里采用基于本地存储的动态迁移方式,实现在物理机1上的虚拟机VM1动态迁移到物理机2上。
实验环境
名称 主机名 IP地址 操作系统
源物理机 kvm-node1 192.168.111.130 ubuntu-16.04.4-desktop
目的物理机 kvm-node2 192.168.111.132 ubuntu-16.04.4-desktop
虚拟机 VM1 192.168.122.18 ubuntu-16.04.3-server
SCP拷贝磁盘文件
在源物理机上使用SCP命令拷贝磁盘文件至目的物理机上
sudo scp /var/lib/libvirt/images/node.qcow2 192.168.200.132:/var/lib/libvirt/images
- /var/lib/libvirt/images:存放虚拟机磁盘文件的目录
- node.qcow2:虚拟机VM1的磁盘文件
- 192.168.200.132:目的物理机IP地址
- 注1:磁盘文件拷贝到目的物理机上后,要存放在相同的目录结构中
- 注2:192.168.200.132前若不加用户名,则默认以root身份访问。若kvm@192.168.200.132,则以kvm身份访问
virsh动态迁移内存状态
在源物理机上使用virsh命令迁移虚拟机内存状态至目的物理机上
sudo virsh migrate --live --verbose VM1 qemu+ssh://192.168.200.131/system tcp://192.168.200.131 --unsafe
- virsh migrate –live:动态迁移
- –verbose:显示迁移详情
- VM1:需要迁移的虚拟机
- qemu+ssh:通过ssh连接到目的物理机上的system实例,具有最大权限来管理远程节点上的虚拟机资源
- /system: 以root身份进行状态迁移
- tcp:使用tcp连接
- 192.168.200.131:目的物理机IP地址
- –unsafe:跳过安全检测
- 注:可以指定身份访问远程主机,如远程主机用户名为kvm,则可以使用
qemu+ssh://kvm@192.168.200.131/system
,若不添加kvm,默认使用root访问
在目的物理机上,查看虚拟机状态
sudo virsh list --all
可见,虚拟机VM1已经迁移成功并且在目的物理机上运行
virsh导出配置文件
在目的物理机上,根据内存状态导出虚拟机VM1配置文件,否则迁移后远程主机没有虚拟机VM1的配置文件,关闭VM1后,VM1就没有了
sudo virsh dumpxml VM1 > /etc/libvirt/qemu/VM1.xml
virsh定义并创建虚拟机
根据VM1的配置文件定义并创建虚拟机
sudo virsh define /etc/libvirt/qemu/VM1.xml
0x05 参考
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!