libvirt 热迁移流程及参数介绍

news2024/11/24 11:37:51

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_LIVE1 << 0在线迁移,迁移过程中不停机,注意如果内存改变速度持续大于传输速度,迁移过程无法收敛,在迁移过程中可以手动暂停(pause)虚拟机。
VIR_MIGRATE_PEER2PEER1 << 1迁移由源节点libvirt主导,直接与目标节点libvirtd建立连接并控制迁移过程。
VIR_MIGRATE_TUNNELLED1 << 2通过隧道传输迁移数据,只有当VIR_MIGRATE_PEER2PEER设置时才生效。
VIR_MIGRATE_PERSIST_DEST1 << 3迁移完成后,在目标节点持久化虚拟机。
VIR_MIGRATE_UNDEFINE_SOURCE1 << 4迁移成功完成后在源主机上删除虚拟机。
VIR_MIGRATE_PAUSED1 << 5在目标节点挂起虚拟机,必须显式调用resume虚拟机。
VIR_MIGRATE_NON_SHARED_DISK1 << 6迁移过程中全量拷贝非共享存储。
VIR_MIGRATE_NON_SHARED_INC1 << 7迁移过程中增量拷贝非共享存储。
VIR_MIGRATE_CHANGE_PROTECTION1 << 8迁移过程中改变对虚拟机的保护策略,当迁移双方都支持时,该参数被自动设置。如果显式指定该参数但其中一方不支持时,将导致迁移失败。
VIR_MIGRATE_UNSAFE1 << 9忽略潜在的数据损坏风险,对于QEMU虚拟机,当没有显式设置缓存模式为‘none’时,迁移被认为是不安全的。
VIR_MIGRATE_OFFLINE1 << 10在目标节点不启动虚拟机,同时在源节点不停止虚拟机,需要设置VIR_MIGRATE_PERSIST_DEST才能使该标志生效,该标志会导致disk storage和基于文件的存储不会被迁移。
VIR_MIGRATE_COMPRESSED1 << 11开启迁移数据压缩。
VIR_MIGRATE_ABORT_ON_ERROR1 << 12当发生错误时取消迁移。
VIR_MIGRATE_AUTO_CONVERGE1 << 13开启自动收敛,这意味着将使用一定的算法来降低虚拟机运行速度来使内存数据强制收敛。
VIR_MIGRATE_RDMA_PIN_ALL1 << 14当迁移URI以‘rdma://'开头时,可以开启该标志,这意味着迁移开始前将锁定所有虚拟机内存页到主机物理内存,不允许虚拟机内存页放到交换分区(swap)。对于QEMU/KVM虚拟机,需要在xml中设置hard_limit限制虚拟机使用的最大内存,而且需要设置虚拟机配置的最大内存加上QEMU进程自身占用的内存的限制,当内存使用限制设置过高时,该参数将可能导致锁定大部分的物理内存,最终可能导致OOM。
VIR_MIGRATE_POSTCOPY1 << 15后拷贝模式。
VIR_MIGRATE_TLS1 << 16设置该标志意味着将尝试使用TLS加密数据传输,当源节点和目标节点任意一方不满足TSL配置时,将导致迁移失败。
VIR_MIGRATE_PARALLEL1 << 17使用多个网络连接同时进行内存数据的拷贝。

03 热迁移方式介绍

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

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

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

  • Hypervisor native transport。
  • libvirt tunnelled transport。

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

image

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

04 热迁移流程介绍

热迁移操作执行时序图

image

 

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 多线程压缩

image

特点

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

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

主要参数

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

5.2 XBZRLE

特点

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

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

主要参数

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

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/752506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3、wampserver中查看各项当前版本及简单配置PHP

wampserver点击左键&#xff0c;即可查看Apache&#xff0c;PHP&#xff0c;MySQL&#xff0c;MariaDB的当前版本 在wampserver的安装目录中&#xff0c;在相应的D:\wamp64\bin\php\php8.0.26 php.ini文件中&#xff0c;short_open_tag On&#xff08;是否允许使用 PHP代码开…

在新建环境下配置低版本opencv

我这边是要解决 python报错&#xff1a;AttributeError: ‘module’ object has no attribute xfeatures2d’的问题&#xff0c; xfeatures2d在新版本已经被取消&#xff0c;但是需要使用老版本的一个函数 确定opencv与python的版本对应关系 一般来说可以对照这个表 具体来说…

Mac下安装python使用TensorFlow训练自己的模型

程序猿日常 Mac下安装python使用TensorFlow训练自己的模型目标 https://www.tensorflow.org/lite/models/modify/model_maker/image_classification?hlzh-cn 安装Python3.8版本 下载地址双击安装 安装pip curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py pyth…

ZKML:区块链世界的AI+隐私

1. 引言 本文主要参考&#xff1a; 2023年6月drCathieSo.eth 与 Ethereum Malaysia 视频 ZKML: Verifiable & Privacy-Preserving Compute in Blockchain2023年6月drCathieSo.eth 与 PSE 视频 Folding Circom circuits: a ZKML case study - Dr. Cathie So ZKML&#xf…

解决SpringMVC中@ResponseBody返回中文乱码

错误 解决方案一 Controller中的注解采用如下方式&#xff1a; GetMapping(value "/init" ,produces "application/json;charsetutf-8")这种方式仅对设置了的方法有效。 解决方案二 在applicationContext.xml中添加如下代码&#xff1a; <!-- 解…

广播与组播

目录 一、广播1. 什么是广播&#xff1f;2. 广播的实现 二、组播1. 分类的IP地址2. 多播IP地址3. 组播的实现 广播与组播和实现UDP通信的代码差不多 一、广播 1. 什么是广播&#xff1f; 数据包发送方式只有一个接受方&#xff0c;称为单播 如果同时发给局域网中的所有主机&…

解决vite+vue3打包部署到非根目录路径问题

修改vite.config.js文件&#xff0c;base为部署路径 base配置选项&#xff1a;

vue3 my-cron-vue3插件的使用

my-cron-vue3 这是一个cron表达式生成插件,基于vue3.0与element-plus实现。 npm i my-cron-vue3//前置配置 import { createApp } from vue import ElementPlus from element-plus; import element-plus/lib/theme-chalk/index.css; import App from ./App.vue //全局引入 imp…

探索华为、思科和瞻博网络的基本ACL和高级ACL配置方法

在网络安全中&#xff0c;访问控制列表&#xff08;Access Control List&#xff0c;简称ACL&#xff09;是一种重要的工具&#xff0c;用于控制数据包在网络中的流动。多家网络设备厂商提供了各自的ACL配置方法&#xff0c;其中华为、思科和瞻博网络是备受认可和使用广泛的品牌…

(中等)LeetCode 剑指OfferII 074. 合并区间

排序&#xff1a; 用数组merged存储最终的答案 首先&#xff0c;将列表中的区间按照左端点升序排序&#xff0c;将第一个区间加入merged数组中&#xff0c;并按顺序依次考虑之后的每个区间&#xff1a; 如果当前区间的左端点在数组merged中最后一个区间的右端点之后&#xf…

ChatGPT提问的万能公式,强烈建议收藏!泰裤辣!

在实际使用GPT的时候&#xff0c;并不是GPT不够强大&#xff0c;而是我们需要很多时间去调教AI&#xff0c;以便输出我们期望的答案&#xff0c;为了让输出无限的靠近你的期望&#xff0c;就需要下面这个万能的框架&#xff0c;如果大家记不住这个框架或者没有形成习惯&#xf…

nginx相关

1、nginx无默认配置文件 参考文章&#xff1a;nginx配置失败&#xff0c;卸载后重装无 nginx.conf文件_haojuntu的博客-CSDN博客 2、nginx更改服务器的端口号 参考文章&#xff1a;https://www.cnblogs.com/chaosfe/p/16123585.html#:~:text%E6%88%91%E4%BB%AC%E6%9F%A5%E7%…

【雕爷学编程】Arduino动手做(149)---MAX9814咪头传感器模块7

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

​LeetCode解法汇总​979. 在二叉树中分配硬币

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 给定一个有 N 个结点的二叉树的根结点 root&#xff0c;树中的每个结点上都对应…

从0到1学习Yalmip工具箱(2)-决策变量进阶

博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译&#xff1a;https://yalmip.github.io/tutorials/ 1.决策变量的定义 1.1 sdpvar 上文简单介绍了sdpvar函数的用法&#xff0c;接下来将对其进行详细介绍。复习一下&#xff0c;sdpvar函数的基本语…

模板方法模式:简化代码,提高复用性

在软件开发中&#xff0c;我们经常会遇到一些算法或业务流程&#xff0c;其中的步骤或顺序是固定的&#xff0c;但某些步骤的具体实现方式可能会有所不同。这时&#xff0c;模板方法模式就能派上用场。模板方法模式是一种行为设计模式&#xff0c;它定义了一个算法的骨架&#…

环肽科研试剂:161552-03-0,Cyclo(-Arg-Gly-Asp-D-Phe-Lys),IC50为0.94nM

资料编辑|陕西新研博美生物科技有限公司小编MISSwu 五元环肽Cyclo(-Arg-Gly-Asp-D-Phe-Lys) &#xff08;CAS号&#xff1a;161552-03-0&#xff09;&#xff0c;是αvβ3整联蛋白的有效和选择性抑制剂&#xff0c;IC50为0.94nM。可以高放射化学纯度&#xff08;>97&#xf…

高数笔记2(第一章函数 极限 连续-无穷小量与无穷大量)

目录 二、无穷小量与无穷大量概念 &#xff08;1&#xff09;无穷小的概念&#xff08;2&#xff09;无穷小的性质无穷个无穷小的和不是无穷小-证明无穷个无穷小量的乘积不是无穷小-证明&#xff08;没看懂&#xff09;无穷小量与有界量的乘积仍是无穷小-证明 &#xff08;3&am…

IIS部署vue项目刷新404问题

在dist目录下新建web.config文件 <?xml version"1.0" encoding"UTF-8"?> <configuration><system.webServer><rewrite><rules><rule name"Handle History Mode and custom 404/500" stopProcessing"t…

前端(六)——TypeScript在前端中的重要性与应用

&#x1f60a;博主&#xff1a;小猫娃来啦 &#x1f60a;文章核心&#xff1a;TypeScript在前端中的重要性与应用 文章目录 什么是TypeScript&#xff1f;TypeScript与JavaScript的关系如何使用TypeScriptTypeScript在前端开发中的应用场景提升开发效率减少错误和调试时间优化…