Libvirt Live Migration 与 Pre-Copy 实现原理

目录

Libvirt 的 Live Migration

Libvirt 的 Live Migration 主要分为两个层面html

  • 网络数据传输层面
  • 控制层面

网络数据传输层

  1. 基于 Hypervisor 的传输,两个 Hypervisor 之间直接创建数据传输链接。优势:数据传输量少。缺点:须要额外配置 Hypervisor Network。须要在防火墙上面打开更多的端口来支持并发迁移,数据不必定支持加密(取决于 Hypervisor 实现)。
    在这里插入图片描述
  2. 基于 libvirtd Tunnel 的传输,源主机和目标主机上运行的 libvirtd 之间创建 RPC 隧道来传输数据。数据要先拷贝到 libvirtd,再由 libvirtd 中继到目标主机的 libvirtd。优势:不须要从新配置网络,防火墙上面只须要一个端口就能够支持并发迁移,数据强加密。缺点:相关的数据拷贝多,全部流量都经过一个端口,容易形成网络拥堵。
    在这里插入图片描述
    在 Tunnel 传输模式下,同一份数据须要被拷贝屡次,而且全部的流量都经过一个端口,在大内存、高业务(快速增长 RAM 脏数据)的场景下,一样的网络带宽,Tunnel 传输模式迁移速率较慢。所以,对于大内存、业务繁忙的场景下,首选基于 Hypervisor 的传输。

控制层

  1. Client 控制:由 Libvirt Client 直接控制迁移。Client 跟源主机 libvirtd 链接,也跟目的主机 libvirtd 链接,当目的主机迁移过程出现异常会反馈给 Client,再由 Client 通知源 libvirtd。整个过程,由 Client 主导控制。
    在这里插入图片描述
  2. 源主机 libvirtd 控制:由源主机 libvirtd 主导整个迁移过程。Client 仅做为迁移指令的发起者,将迁移指令异步发送给源主机 libvirtd。若是目的主机迁移过程出现异常会反馈给源主机 libvirtd。这种方式的好处是,Client 故障也不会影响到整个迁移过程。
    在这里插入图片描述
  3. Hypervisor 控制:有源主机 Hypervisor 控制整个迁移过程,Client 向源主机 Hypervisor 发送迁移指令,源主机和目的主机的 libvirtd 不参与控制。这种方式的前提是 Hypervisor 自身支持热迁移,好处在于 Client 和 libvirtd 的故障不会影响到整个迁移过程。
    在这里插入图片描述

经过 libvirt 库实现虚拟机迁移的示例

import libvirt 
import pprint

conn_src = libvirt.open('qemu+tcp://username@src_server/system') 
conn_dest = libvirt.open('qemu+tcp://username@dest_server/system') 

vm_domain = conn_src.lookupByName('instance_name') 
vm_domain.migrate(conn_dest, True, 'instance_name', None, 0)

pprint.pprint(help(vm_domain.migrate))

KVM 的预拷贝(Pre-Copy)Live Migration 过程

Step 1. 系统验证目标服务器的存储器和网络设置是否正确,并预保留目标服务器虚拟机的资源。
在这里插入图片描述python

Step 2. 当虚拟机还在源服务器上运转时,第一个循环内将所有内存镜像复制到目标服务器上。在这个过程当中,KVM 依然会监视内存的任何变化。linux

在这里插入图片描述

Step 3. 之后的循环中,检查上一个循环中内存是否发生了变化。 假如发生了变化,那么 VMM 会将发生变化的内存页即 dirty pages 从新复制到目标服务器中,并覆盖掉先前的内存页。在这个阶段,VMM 依然会继续监视内存的变化状况。web

在这里插入图片描述

Step 4. VMM 会持续这样的内存复制循环。随着循环次数的增长,所须要复制的 dirty pages 就会明显减小,而复制所耗费的时间就会逐渐变短,那么内存就有可能没有足够的时间发生变化。最后,当源服务器与目标服务器之间的差别达到必定标准时,内存复制操做才会结束,同时暂停源系统。服务器

在这里插入图片描述

Step 5. 在源系统和目标系统都停机的状况下,将最后一个循环的 dirty-pages 和源系统设备的工做状态复制到目标服务器。网络

在这里插入图片描述

Step 6. 而后,将存储从源系统上解锁,并锁定在目标系统上。启动目标服务器,并与存储资源和网络资源相链接。并发

在这里插入图片描述

参考资料

https://www.ibm.com/developerworks/cn/linux/l-cn-mgrtvm1/index.htmldom

相关文章
相关标签/搜索