虚拟机的迁移 【待补充】

ref:《KVM实战 原理、进阶与性能调优》

  • 目的:将客户机迁移到另一台物理机器上,增强系统的可维护性

  • 种类:静态迁移和动态迁移

    • 静态迁移有一段明显时间客户机中的服务不可用, 而动态迁移则没有明显的服务暂停时间。

    • 虚拟化环境中的静态迁移也可以分为两种, 一种是关闭客户机后, 将其硬盘镜
      复制到另一台宿主机上然后恢复启动起来, 这种迁移不能保留客户机中运行的工作负 载; 另一种是两台宿主机共享存储系统, 只需在暂停(而不是完全关闭) 客户机后, 复制 其内存镜像到另一台宿主机中恢复启动即可, 这种迁移可以保持客户机迁移前的内存状态和系统运行的工作负载。

    • 动态迁移是指在保证客户机上应用服务正常运行的同时, 让客户机在不同的宿主机之间进行迁移, 有硬盘存储和内存都复制的动态迁移, 也有仅复制内存镜像的动态迁移。

    • ps:工作负载:在集群上的运行程序 【后续用到再进行补充】

      • workloads分为pod与controllers

        pod通过控制器实现应用的运行,如何伸缩,升级等
        controllers 在集群中管理pod
        pod与控制器之间通过label-selector相关联,是唯一的关联方式

  • 静态迁移的应用场景:对服务可用性要求不高的场景

  • 动态迁移的应用场景:

    • 1) 负载均衡: 当一台物理服务器的负载较高时, 可以将其上运行的客户机动态迁移
      到负载较低的宿主机服务器中, 以保证客户机的服务质量(QoS)
    • 2) 解除硬件依赖: 当系统管理员需要在宿主机上升级、 添加、 移除某些硬件设备的
      时候, 可以将该宿主机上运行的客户机非常安全、 高效地动态迁移到其他宿主机上。
    • 3) 节约能源: 当有较多服务器的资源使用率都偏低时, 可以通过动态迁移将宿主机上的客户机集中迁移到其中几台服务器上。
    • 4) 实现客户机地理位置上的远程迁移: 由于距离和网络互联带宽拥堵( 如电信与网通之间的带宽) 的问题 ,可以将运行的应用服务迁移至离客户较近的服务器
  • KVM迁移的原理

    • 静态迁移:

      • 对于静态迁移, 在源宿主机上某客户机的QEMU monitor中, 用“savevm my_tag”命令来保存一个完整的客户机镜像快照(标记为my_tag) , 然后在源宿主机中关闭或暂停该客户机。
      • 将该客户机的镜像文件复制到另外一台宿主机中, 用于源宿主机中启动客户机时以相同的命令启动复制过来的镜像, 在其QEMU monitor中用“loadvm my_tag”命令来恢复刚才保存的快照, 即可完全加载保存快照时的客户机状态。
      • 这里的“savevm”命令保存的完整客户机状态包括CPU状态、 内存、 设备状态、 可写磁盘中的内容。 注意, 这种保存快照的方法需要qcow2、qed等格式的磁盘镜像文件, 因为只有它们才支持快照这个特性
    • 动态迁移:

      -KVM的动态迁移

      • 如果源宿主机和目的宿主机共享存储系统, 则只需要通过网络发送客户机的vCPU执行状态、 内存中的内容、虚拟设备的状态到目的主机上即可, 否则, 还需要将客户机的磁盘存储发送到目的主机上去。
      • 在不考虑磁盘存储复制的情况下(基于共享存储系统) , KVM动态迁移的具体迁移
        过程为: 在客户机动态迁移开始后, 客户机依然在源宿主机上运行, 与此同时, 客户机的内存页被传输到目的主机之上。 QEMU/KVM会监控并记录下迁移过程中所有已被传输的内存页的任何修改, 并在所有的内存页都被传输完成后即开始传输在前面过程中内存页的更改内容。 QEMU/KVM也会估计迁移过程中的传输速度, 当剩余的内存数据量能够在一个可设定的迁移停机时间(目前QEMU中默认为300毫秒) 内传输完成时, QEMU/KVM将会关闭源宿主机上的客户机, 再将剩余的数据量传输到目的主机上去, 最后传输过来的内存内容在目的宿主机上恢复客户机的运行状态。 至此, KVM的一个动态迁移操作就完成了。 迁移后的客户机状态尽可能与迁移前一致, 除非目的宿主机上缺少一些配置。

动态迁移的一些注意事项:

  • 源宿主机和目的宿主机之间尽量用网络共享的存储系统来保存客户机磁盘镜像,
    尽管KVM动态迁移也支持连同磁盘镜像一起复制,共享存储(如NFS) 在源宿主机和目的宿主机上的挂载位置必须完全一致。
  • 尽量在同类型CPU主机上进行动态迁移
  • 只能在相同字长的宿主机之间进行迁移
  • 动态迁移的源宿主机和目的宿主机对NX(Never eXecute) 位的设置是相同, 要
    么同为关闭状态, 要么同为打开状态。 ps. NX(Never eXecute) 位是CPU中的一种技术, 用于在内存区域中对指令的存储和数据的存储进行标志以便区分。 由于NX位技术的支持, 操作系统可以将特定的内存区域标志为不可执行, 处理器就不会执行该区域中的任何代码。 这种技术在理论上可以防止“缓冲区溢出”(buffer overflow) 类型的黑客攻击。 在Intel处理器上被称为“XD Bit”(eXecuteDisable) , 在AMD中被称为EVP(Enhanced Virus Protection) , 在ARM中被称为“XN”(eXecute Never) 。 目前主流的操作系统(如Windows、 Linux、 Mac OS等) 都有对NX位技术的支持。
  • 需要保证迁移前后客户机的名称是唯一的
  • 目的宿主机和源宿主机的软件配置需要尽可能的相同,如同名的网桥等

更多推荐