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虚拟化环境

  1. 查看CPU是否支持KVM

    egrep "(svm|vmx)" /proc/cpuinfo

    如果有输出,则说明CPU支持KVM

  2. 安装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
  3. 启动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身份访问

scp拷贝磁盘文件

磁盘文件成功拷贝至目的物理机

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访问

VM1迁移前源物理机状态

VM1迁移后源物理机状态

在目的物理机上,查看虚拟机状态

sudo virsh list --all

可见,虚拟机VM1已经迁移成功并且在目的物理机上运行

迁移到目的物理机上的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协议 。转载请注明出处!