倚天产品介绍|倚天虚拟化:虚拟机热迁移特性介绍

简介: 热迁移分为热迁移和冷迁移,冷迁移过程中有一段明显的时间VM的服务不可用,而热迁移的服务的服务暂停时间非常短。热迁移过程中无需关闭或者长时间暂停VM,VM保持正常运行,只有在热迁移临近结束时有一个非常短暂的停机切换时间。热迁移可保证了VM服务的可用性,提升业务的连续性和用户体验。

1. 基本概念

热迁移,又叫动态迁移,相对应的,就有冷迁移或者静态迁移,那么热迁移相比于冷迁移,热迁移的特点是什么?

热迁移和冷迁移最大的区别就是,冷迁移过程中有一段明显的时间VM的服务不可用,而热迁移则没有明显的服务暂停时间。热迁移的过程中,无需关闭或者长时间暂停VM,VM的应用保持正常运行,只有在热迁移临近结束时,才会有一个非常短暂的停机切换时间,这样保证了VM服务的可用性,客户在这个过程中,感觉不到正在使用的VM的停机时间,提升了业务的连续性和用户体验。

2. 热迁移总体流程

当使用libvirt管理虚拟机并执行热迁移命令时, 源端libvirt与目的端libvirt会建立socket连接,并检测和控制整个热迁移过程状态, 如果热迁移过程中有错误发生,libvirt可以进行热迁移回退,防止虚拟机发生异常。

image.png

3. 热迁移基本原理

一般来说,一个VM的正常运行只需要以下几个组成部分:虚拟机内存、vCPU、block IO设备、net网络设备以及其它配置信息。热迁移要做的事情就是要把VM从一个物理机热迁移到另外一个物理机。以内存拷贝方式的不同, 热迁移分为预拷贝(pre-copy)和后拷贝(post-copy)两种方式。以预拷贝(pre-copy)为例,热迁移大致可以分成以下几个步骤:

  • 步骤一:把虚拟机的配置同步到目的物理机;
  • 步骤二:把VM的内存拷贝至目的端;
  • 步骤三:把VCPU、存储和网络设备的状态拷贝到目的端。
  • 步骤四:把VM在目的端物理机上恢复运行。

image.png

3.1. 内存迁移

我们知道在热迁移的时候,VM是持续的保持运行的,或者说VM持续对内存进行着读写操作。所以热迁移中在进行内存备份的时候需要有一个明确的标志位来标志哪些内存是已经被拷贝过,哪些内存在拷贝过后,又再次发生了修改。这些都是一个叫做log dirty的机制来实现的。

即在热迁移一开始的时候,hypervisor会把VM的所有内存在stage2页表中都先标记为写保护,然后开始将VM的内存从源端物理机拷贝到目的端物理机。在这个拷贝的过程中,不可避免的会发生VM对某个页进行写操作情况,这时就会触发page fault,产生VM Exit,退回到KVM。KVM在处理stage2页表的缺页异常时,会重新把这个页面标记为可读写从而允许VM继续进行写操作, 并在脏页位图中把该页面标记为脏页。qemu会从KVM中获取脏页信息,并将这些脏页拷贝到目的端。一轮脏页拷贝流程结束。

这一轮内存拷贝结束后,KVM会做一个校验,看看哪些内存页面属性被重新设置了可写标记,并把这些页面属性又重新设置为写保护,并开始下一轮的内存脏页跟踪和拷贝,这一过程将一直迭代,直到剩余脏页达到我们的预期。

image.png

当剩余的脏页数目达到预期之后,即qemu判断在当前物理机网络带宽以及虚拟机停止时间符合设定要求的情况下能够将剩余的脏页和设备状态信息发送到目的端,就可以开始最后一轮的脏页拷贝和设备状态拷贝。在最后一轮拷贝开始之前,会将源端的VM设置成停机状态,将剩余的脏页和设备状态都拷贝到目的端,目的端将内存和设备状态恢复之后,恢复VM的运行。

需要注意的是, Intel对脏页跟踪有PML (Page Modification Logging)的硬件支持。 在开启脏页跟踪功能后,vCPU写页面之后,硬件自动将脏页信息记录在PML Buffer中,并在PML Buffer满时触发VM Exit退出到KVM,KVM将PML Buffer中的脏页信息同步到脏页位图中。PML可以很大程度上减小热迁移过程中的内存写性能下降。ARM硬件没有类似的机制,当开启脏页同步功能时,需要在KVM中将内存全部设置为写保护状态。在一轮脏页迭代过程中,vCPU首次写一个页面时会VM Exit退出到KVM中处理。

4. 热迁移流程梳理

4.1. qemu热迁移架构

qemu中的内存和各种设备, 在热迁移开始之前都会将需要save和load的数据、回调函数注册到热迁移相关的全局变量列表中。

static SaveState savevm_state = {
    .handlers = QTAILQ_HEAD_INITIALIZER(savevm_state.handlers),
    .global_section_id = 0,
};

注册的方式有两种:

  1. VMState方式注册(推荐方式):定义VMStateDescription,其中包含热迁移想要保存的数据,也可定义对应的pre_save/pre_load/post_save/post_load回调函数。定义完成后通过vmstate_register 函数添加到全局链表savevm_state.handlers中。

例如RootPort设备定义的VMStateDescription如下:

static const VMStateDescription vmstate_rp_dev = {
    .name = "pcie-root-port",
    .priority = MIG_PRI_PCI_BUS,
    .version_id = 1,
    .minimum_version_id = 1,
    .post_load = pcie_cap_slot_post_load,
    .fields = (VMStateField[]) {
        VMSTATE_PCI_DEVICE(parent_obj.parent_obj.parent_obj, PCIESlot),
        VMSTATE_STRUCT(parent_obj.parent_obj.parent_obj.exp.aer_log,
                       PCIESlot, 0, vmstate_pcie_aer_log, PCIEAERLog),
        VMSTATE_MSIX_TEST(parent_obj.parent_obj.parent_obj.parent_obj,
                          GenPCIERootPort,
                          gen_rp_test_migrate_msix),
        VMSTATE_END_OF_LIST()
    }
};
  1. legacy方式:调用register_savevm_live函数注册save_state/load_state回调函数,用来保存和恢复该设备的状态。

4.2. qemu热迁移流程

以qemu v4.2.0版本为准,热迁移分为以下几个阶段:准备阶段,迭代拷贝阶段,结束拷贝和状态迁移阶段。源端执行这三个步骤的函数是migration_thread,对应的流程如下图所示:

image.png

相对应的是目的端qemu中的内存和设备恢复流程,目的端qemu会根据源端传输的数据,按照约定的格式进行解析和状态恢复。这里不再赘述。

5、小结

本文主要介绍了热迁移的基本原理,并对qemu中的热迁移代码流程进行了梳理。

好啦!小弹的分享到此为止。我们更欢迎您分享您对阿里云产品的设想、对功能的建议或者各种吐槽,请扫描提交问卷并获得社区积分或精美礼品一份。https://survey.aliyun.com/apps/zhiliao/P4y44bm_8

【扫码填写上方调研问卷】

欢迎每位来到弹性计算的开发者们来反馈问题哦~

相关文章
|
3月前
|
XML 存储 数据安全/隐私保护
使用virsh migrate进行虚拟机迁移
使用virsh migrate进行虚拟机迁移
143 0
|
16天前
|
KVM 虚拟化
KVM虚拟机的热迁移
这篇文章详细介绍了KVM虚拟机的热迁移过程,包括临时迁移和永久迁移的步骤,以及可能遇到的故障和解决方案。
32 1
KVM虚拟机的热迁移
|
6天前
|
存储 SQL 数据挖掘
虚拟化数据恢复—VMware虚拟机vmdk文件被误删除的数据恢复案例
虚拟化数据恢复环境: 某品牌服务器(部署VMware EXSI虚拟机)+同品牌存储(存放虚拟机文件)。 虚拟化故障: 意外断电导致服务器上某台虚拟机无法正常启动。查看虚拟机配置文件发现这台故障虚拟机除了磁盘文件以外其他配置文件全部丢失,xxx-flat.vmdk磁盘文件和xxx-000001-delta.vmdk快照文件还在。管理员联系VMware工程师寻求帮助。VMware工程师尝试新建一个虚拟机来解决故障,但发现ESXi存储空间不足。于是将故障虚拟机下的xxx-flat.vmdk磁盘文件删除,然后重建一个虚拟机并且分配固定大小的虚拟磁盘。
|
10天前
|
存储 SQL 数据挖掘
虚拟化数据恢复—EXSI虚拟机误还原快照的数据恢复案例
虚拟化技术原理是将硬件虚拟化供不同的虚拟机使用,一台物理机上可以有多台虚拟机。人为误操作或者物理机故障会导致上层虚拟机不可用,甚至虚拟机里的重要数据丢失。下面给大家分享一个vmware虚拟化误操作还原快照的数据恢复案例。 虚拟化数据恢复环境: 一台由物理机迁移到EXSI上面的虚拟机,迁移完成后做了一个快照。该虚拟机上运行SQL Server数据库,记录了几年的数据。 EXSI虚拟化平台上一共有数十台虚拟机,EXSI连接了一台EVA存储,所有的虚拟机(包括故障虚拟机)都放在EVA存储上。
|
16天前
|
存储 虚拟化
使用DiskGenius工具来实现物理机迁移虚拟机,实现虚拟化
【9月更文挑战第1天】使用 DiskGenius 工具可将物理机迁移到虚拟机,实现系统与数据的虚拟化。此过程包括:安装 DiskGenius 和准备虚拟化平台;备份物理机数据;使用 DiskGenius 备份磁盘;在虚拟化软件中创建新虚拟机并导入磁盘备份;配置及调整虚拟机设置;测试性能并优化资源分配。这有助于测试、开发及系统管理。
|
2月前
|
存储 安全 虚拟化
虚拟化数据恢复—虚拟机数据丢失导致Hyper-V服务瘫痪数据恢复
虚拟化数据恢复环境: 一台服务器上部署的Hyper-V虚拟化平台,虚拟机的硬盘文件和配置文件放在一台某品牌MD3200存储中。该存储中有一组由4块硬盘组建的raid5磁盘阵列,还有一块大容量硬盘存放虚拟机数据文件的备份。 虚拟化故障: MD3200存储中虚拟机数据文件丢失,导致Hyper-V服务瘫痪,虚拟机无法使用。
虚拟化数据恢复—虚拟机数据丢失导致Hyper-V服务瘫痪数据恢复
|
29天前
|
Linux KVM 虚拟化
在Linux中,如何进行虚拟机和容器的备份和迁移?
在Linux中,如何进行虚拟机和容器的备份和迁移?
|
2月前
|
SQL 存储 数据库
虚拟化数据恢复—XenServer虚拟机磁盘文件丢失的数据恢复案例
虚拟化数据恢复环境: 某品牌R720服务器,4块STAT硬盘通过H710P阵列卡组建了一组raid10磁盘阵列。服务器上部署XenServer虚拟化平台,虚拟机安装Windows Server系统,作为Web服务器使用,运行SQL Server数据库。共有2个虚拟磁盘:数据盘+系统盘。 虚拟化故障: 机房断电导致XenServer虚拟化平台中一台VPS不可用,XenServer虚拟机磁盘文件丢失。
虚拟化数据恢复—XenServer虚拟机磁盘文件丢失的数据恢复案例
|
3月前
|
存储 IDE 开发工具
【读书笔记】 玩转虚拟机基于Vmware+Windows 虚拟化技术
【读书笔记】 玩转虚拟机基于Vmware+Windows 虚拟化技术
|
27天前
|
存储 Linux 调度
OpenStack如何支持虚拟化技术?
【8月更文挑战第21天】
85 0