首页 > 其他分享 >关于云平台虚拟机核心组件 libvirt 热迁移流程及关键参数介绍 | 龙蜥技术

关于云平台虚拟机核心组件 libvirt 热迁移流程及关键参数介绍 | 龙蜥技术

时间:2023-07-28 21:33:19浏览次数:40  
标签:MIGRATE 虚拟机 libvirt VIR 内存 组件 迁移 节点


编者按:libvirt 是用于管理虚拟机的开源项目,是各大基于 OpenStack 二次开发的云平台管理底层 qemu-kvm 虚拟机的核心组件,而热迁移作为虚拟机管理中较为常用的功能,其在稳定性和效率关乎云平台的整体使用体验。今天,浪潮数据云计算高级研发工程师李世东带大家了解虚拟机热迁移在 libvirt 项目中的主要流程及迁移参数作用和影响。本文整理自龙蜥大讲堂 81 期,以下为本次分享内容:



01

热迁移基本原理

1.1 热迁移概念

热迁移也叫在线迁移,是指虚拟机在开机状态下,且不影响虚拟机内部业务正常运行的情况下,从一台宿主机迁移到另外一台宿主机上的过程。

1.2 虚拟机数据传输预拷贝和后拷贝

预拷贝(pre-copy):

原理:

1)将全部内存数据拷贝到目标节点。

2)循环的将源节点虚拟机运行时产生的内存脏页拷贝到目标节点虚拟机。



3)源节点虚拟机停机,启动目标节点虚拟机完成迁移。

优点 :可靠性高,迁移过程中对业务影响小。

缺点 :网络开销大,迁移时间长,内存读写频繁时可能迁移失败。

后拷贝(post-copy):

原理

1)将源节点虚拟机 CPU 状态、寄存器状态、non-pageable 内存页拷贝到目标节点。

2)启动目标节点虚拟机,动态地传输剩余内存。

3)目标节点虚拟机访问到未拷贝内存页时,触发 pagefault,需要到源节点读取对应 page。



优点 :网络开销低、停机时间短。

缺点 :迁移稳定性差,迁移过程中虚拟机性能下降,网络延迟高时,对业务影响大。

02

热迁移参数

下表列出了 libvirt 支持的迁移 flag、值及其具体含义:

flag


说明

VIR_MIGRATE_LIVE

1 << 0

在线迁移,迁移过程中不停机,注意如果内存改变速度持续大于传输速度,迁移过程无法收敛,在迁移过程中可以手动暂停(pause)虚拟机。

VIR_MIGRATE_PEER2PEER

1 << 1

迁移由源节点libvirt主导,直接与目标节点libvirtd建立连接并控制迁移过程。

VIR_MIGRATE_TUNNELLED

1 << 2

通过隧道传输迁移数据,只有当VIR_MIGRATE_PEER2PEER设置时才生效。

VIR_MIGRATE_PERSIST_DEST

1 << 3

迁移完成后,在目标节点持久化虚拟机。

VIR_MIGRATE_UNDEFINE_SOURCE

1 << 4

迁移成功完成后在源主机上删除虚拟机。

VIR_MIGRATE_PAUSED

1 << 5

在目标节点挂起虚拟机,必须显式调用resume虚拟机。

VIR_MIGRATE_NON_SHARED_DISK

1 << 6

迁移过程中全量拷贝非共享存储。

VIR_MIGRATE_NON_SHARED_INC

1 << 7

迁移过程中增量拷贝非共享存储。

VIR_MIGRATE_CHANGE_PROTECTION

1 << 8

迁移过程中改变对虚拟机的保护策略,当迁移双方都支持时,该参数被自动设置。如果显式指定该参数但其中一方不支持时,将导致迁移失败。

VIR_MIGRATE_UNSAFE

1 << 9

忽略潜在的数据损坏风险,对于QEMU虚拟机,当没有显式设置缓存模式为‘none’时,迁移被认为是不安全的。

VIR_MIGRATE_OFFLINE

1 << 10

在目标节点不启动虚拟机,同时在源节点不停止虚拟机,需要设置VIR_MIGRATE_PERSIST_DEST才能使该标志生效,该标志会导致disk storage和基于文件的存储不会被迁移。

VIR_MIGRATE_COMPRESSED

1 << 11

开启迁移数据压缩。

VIR_MIGRATE_ABORT_ON_ERROR

1 << 12

当发生错误时取消迁移。

VIR_MIGRATE_AUTO_CONVERGE

1 << 13

开启自动收敛,这意味着将使用一定的算法来降低虚拟机运行速度来使内存数据强制收敛。

VIR_MIGRATE_RDMA_PIN_ALL

1 << 14

当迁移URI以‘rdma://'开头时,可以开启该标志,这意味着迁移开始前将锁定所有虚拟机内存页到主机物理内存,不允许虚拟机内存页放到交换分区(swap)。对于QEMU/KVM虚拟机,需要在xml中设置hard_limit限制虚拟机使用的最大内存,而且需要设置虚拟机配置的最大内存加上QEMU进程自身占用的内存的限制,当内存使用限制设置过高时,该参数将可能导致锁定大部分的物理内存,最终可能导致OOM。

VIR_MIGRATE_POSTCOPY

1 << 15

后拷贝模式。

VIR_MIGRATE_TLS

1 << 16

设置该标志意味着将尝试使用TLS加密数据传输,当源节点和目标节点任意一方不满足TSL配置时,将导致迁移失败。

VIR_MIGRATE_PARALLEL

1 << 17

使用多个网络连接同时进行内存数据的拷贝。

03



热迁移方式介绍

迁移过程控制的三种方式:

  • Managed direct migration。
  • Managed peer to peer migration。
  • Unmanaged direct migration。

迁移过程虚拟机数据传输两种方式:

  • Hypervisor native transport。
  • libvirt tunnelled transport。

OpenStack nova 项目中默认迁移模式:

关于云平台虚拟机核心组件 libvirt 热迁移流程及关键参数介绍 | 龙蜥技术_显式


  • 控制面采用了 managed peer to peer 的方式,nova 通过调用 libvirt.so 触发迁移,整个迁移过程由源节点 libvirtd 控制。
  • 数据面采用 hypervisor native transport,hypervisor 程序负责完成迁移过程中数据的传输。

04



热迁移流程介绍

热迁移操作执行时序图

关于云平台虚拟机核心组件 libvirt 热迁移流程及关键参数介绍 | 龙蜥技术_数据_02


1)libvirt client 调用接口触发迁移 ,源节点 libvirtd 接收到迁移请求后,获取迁移的 flag 和 params,并对 flag 和 params 进行校验。

2)源节点 libvirtd 程序调用 virConnectOpenAuth 函数与目标节点建立连接 ,用于后续跟目标节点数据传输和远程过程调用。

3)begin 阶段 ,源节点 libvirtd 调用 qemuDomainDefFormatXML 完成虚拟机 xml 的生成。

4)prepare阶段 ,源节点通过 RPC 的方式调用目标节点 domainMigratePrepare3Params 函数,在目标节点启动一个带 incoming 参数的虚拟机,然后启动 NBD server。

5)perform 阶段 ,源节点调用 qemuMigrationRun 函数,正式开始迁移并在此阶段将虚拟机内存、状态等数据迁移到目标节点虚拟机。

6)finish 阶段 ,源节点 libvirtd 通过 RPC 的方式调用目标节点 qemuMigrationFinish 方法,在目标节点停止 NBD server,并调用 qemuProcessStartCPUs 使目标节点虚拟机进入运行状态。

7)confirm 阶段 ,源节点调用 qemuProcessStop 函数,停止源节点虚拟机对应的 qemu 进程,完成迁移。


05



热迁移加速方法

5.1 多线程压缩




特点

  • 利用 host CPU 提供的算力,对需要传输的内存数据进行压缩。
  • 网络传输带宽一定的情况下,传输数据体积变小。
  • 压缩/解压缩数据本身耗费一定的时间。
  • 压缩率受数据特征影响较大。

加速效果 :加速效果受到压缩率、CPU 压缩计算能力影响,加速效果不稳定。

主要参数

  • 压缩线程数:在源节点用于对内存数据进行压缩的线程数。
  • 解压线程数:在目标节点用于解压内存数据线程数,一般为压缩线程数的1/4。
  • 压缩级别:压缩级别分为 1-9 共九个级别,数值越大对应压缩率越高,压缩数据所消耗的 CPU 资源越多,压缩时间越长。

5.2 XBZRLE

特点

  • 传输内存脏页的差异数据,减少数据的传输量。
  • 占用源节点一定量的内存作为 cache 保存原始内存。
  • cache_size 小于虚机内存时,加速效果与 cache_size 成正相关。

加速效果 :加速效果受到 cache 大小的影响,适用于主机内存资源充足,且虚拟机内存频繁读写的场景。

主要参数

缓存大小:在源节点临时保存当前内存值,用于产生脏页后计算内存差异数据。

关于直播课件及视频回放获取方式:

【PPT 课件获取】:关注微信公众号(OpenAnolis),回复“ 龙蜥课件 ” 即可获取。

【视频回放】:视频回放可在龙蜥视频 号(账 号:龙蜥社区_小龙)或龙蜥官网 https://openanolis.cn/video 查 看 。


—— 完 ——


关于龙蜥


龙蜥社区是立足云计算打造面向国际的 Linux  服务器操作系统开源根社区及创新平台。龙蜥操作系统(Anolis OS)是龙蜥社区推出的 Linux 发行版,拥有三大核心能力:提效降本、更加稳定、更加安全。



目前,Anolis OS 8.8 已发布,更多龙蜥自研特性,支持 X86_64 、RISC-V、Arm64、LoongArch 架构,完善适配 Intel、兆芯、鲲鹏、龙芯等芯片,并提供全栈国密支持。

加入我们,一起打造面向云时代的操作系统!



标签:MIGRATE,虚拟机,libvirt,VIR,内存,组件,迁移,节点
From: https://blog.51cto.com/u_15308345/6887351

相关文章

  • 如何复制文件到 Hyper-V 虚拟机上
    想要实现复制文件到虚拟机上,主要是需要在Hyper-V主机上打开增强会话模式如果Hyper-V主机运行的是Windows10或Windows8.1,则默认情况下,增强会话模式处于打开状态,因此你可以跳过此步骤并转到下一部分。但是,如果主机运行的是WindowsServer2016或WindowsServer2012......
  • 如何用 Java 写一个 Java 虚拟机
    github项目链接https://github.com/FranzHaidnor/haidnorJVMhaidnorJVM使用Java17编写的Java虚拟机意义纸上得来终觉浅,绝知此事要躬行。只学习JVM机制和理论,很多时候任然觉得缺乏那种大彻大悟之感使用简单的方式实现JVM,用于学习理解JVM运行原理主要技术选型J......
  • springcloud一些组件
    springcloud官网文档略记录下 1、springcloud阿里巴巴 Nacos:服务注册和发现,分布式配置数据存储事件驱动:可扩展的事件驱动微服务,连接rocketmq消息总线:rocketmq 连接节点分布式事务:seata?DubboRPC:服务间的连接协议2、springcloudbus 用轻量的消息中介,来连接分......
  • java——虚拟机、线程
    java虚拟机:是一台想象中的机器,有自己想象的硬件(处理器、堆栈、寄存器等)以及相应的指令系统。生命周期:当执行java程序时,虚拟机开始运行,程序结束虚拟机停止。同一台计算机每多运行一个程序,就会多运行一个虚拟机。虚拟机开始于main()方法。java虚拟机的体系结构:......
  • 【HarmonyOS】ArkTS 组件内转场动画,动画播放时颜色异常问题
    ​【关键字】HarmonyOS、ArkTS、组件内转场动画、颜色异常 【问题描述】根据组件内转场动画文档中示例编写代码,使用动画转场组件button,并给button设置背景色让button透明度为0,实现动画转场时,会先出现默认蓝色button,然后动画再消失,问题代码如下所示:@Stateflag:boolean=t......
  • 【HarmonyOS】ArkTS 组件内转场动画,动画播放时颜色异常问题
    【关键字】HarmonyOS、ArkTS、组件内转场动画、颜色异常【问题描述】根据组件内转场动画文档中示例编写代码,使用动画转场组件button,并给button设置背景色让button透明度为0,实现动画转场时,会先出现默认蓝色button,然后动画再消失,问题代码如下所示:@Stateflag:boolean=true;@State......
  • 看看Vue中如何封装一个自动化注册全局组件
    在项目的开发过程中,我们常常会去封装一些比较常用的全局组件,但是每添加一个组件就需要手动在main.js引入注册,不仅麻烦还代码量多,着实让人心烦。所以干脆封装一个自动化注册全局组件。1、自定义全局组件文件夹在src下新建一个globalComponents,用于存放全局组件,并新建一个组件,例......
  • Android-组件属性
    ImageView:app:tint=“”(tint:染色)作用:将非透明像素点染成指定颜色 EditText:android:selectAllOnFocus="true"作用:输入框获取焦点后,获取到所有文本内容 ......
  • 如何用DHTMLX组件为Web应用创建甘特图?(一)
    dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。甘特图仍然是项目管理应用程序中最需要的工具之一,DHTMLXGantt组件提供了能提升研发甘特图功能所需的重要工具。在这篇文章中,您将学习如何添加一个基本......
  • Unity UGUI的Physics2DRaycaster (2D物理射线检测)组件的介绍及使用
    UnityUGUI的Physics2DRaycaster(2D物理射线检测)组件的介绍及使用一、什么是Physics2DRaycaster组件?Physics2DRaycaster是Unity中的一个UGUI组件,用于在2D场景中进行物理射线检测。它可以检测鼠标或触摸事件在UI元素上的碰撞,并将事件传递给相应的UI元素。二、Physics2DRaycaste......