libvirt 热迁移流程及参数介绍

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 大小的影响,适用于主机内存资源充足,且虚拟机内存频繁读写的场景。

主要参数

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

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

星火认知大模型,让我感受到了国产AI的崛起

文章目录 一、申请和测试代码二、实测GPT4.0和星火认知大模型的对比2.1 测试网站2.2 经典问题提问对比2.3 代码问题提问对比2.4 论文问题对比2.5 评价 一、申请和测试代码 在我之前的一篇文章中&#xff0c;我分享了如何申请星火认知大模型的内测&#xff0c;并提供了一份可以…

python opencv 级联Haar多目标检测

一、基于OpenCV的haar分类器实现笑脸检测 1、Haar分类器介绍 &#x1f680;Haar分类器是一种基于机器学习的目标检测算法&#xff0c;它使用Haar特征描述图像中的目标。Haar特征是基于图像亮度的局部差异计算得出的&#xff0c;可以用来描述目标的边缘、角落和线条等特征。 使用…

大模型开发(七):LLM提示工程(Prompt)与思维链(CoT)

全文共6500余字&#xff0c;预计阅读时间约13~20分钟 | 满满干货(附案例)&#xff0c;建议收藏&#xff01; 一、LLM模型的涌现能力 在GPT没有爆火之前&#xff0c;一直以来的共识都是&#xff1a;模型的规模越大&#xff0c;模型在下游任务上的能力越多、越强。 LLM原始训…

QT_Creator格式化工具使用

QT_Creator代码格式化工具使用 为了确保代码格式整齐统一&#xff0c;使用代码格式化工具会将写的代码自动格式化以保证格式统一 Astyle&#xff1a; A Free, Fast, and Small Automatic Formatter for C, C, C/CLI, Objective-C, C#, and Java Source Code 一、C和C代码格式化…

Ceph 服务的运用

目录 一、资源池 pool 管理 1.创建一个 Pool 资源池 2.查看集群 Pool 信息 3.查看资源池副本的数量 4.查看 PG 和 PGP 数量 5.修改 pg_num 和 pgp_num 的数量为 128 6.修改 Pool 副本数量为 2 7.修改默认副本数为 2 8.删除 Pool 资源池 8.1修改配置文件 8.2推送 ceph…

【半监督医学图像分割 2023 CVPR】PatchCL

文章目录 【半监督医学图像分割 2023 CVPR】PatchCL摘要1. 简介2. 相关工作2.1 半监督学习2.2 对比学习 3. 方法3.1 类感知补丁采样3.2 伪标记引导对比损失3.3 总体学习目标3.4 伪标号生成与求精 4. 实验5. 结果 【半监督医学图像分割 2023 CVPR】PatchCL 论文题目&#xff1a;…

MySQL操作库

MySQL操作库 一.创建数据库1. 创建数据库的方式2. 创建数据库时的编码问题3. 指定编码创建数据库4. 验证校验规则对数据库的影响 二.数据库与文件系统的关系三.操纵数据库1. 查看数据库2. 删除数据库3. 修改数据库 四.数据库的备份和恢复1.数据库的备份2.数据库的恢复 五.查看连…

OpenCV——总结《车牌识别》

1.图片中的hsv hsv提取蓝色部分 # hsv提取蓝色部分 def hsv_color_find(img):img_copy img.copy()cv2.imshow(img_copy, img_copy)"""提取图中的蓝色部分 hsv范围可以自行优化cv2.inRange()参数介绍&#xff1a;第一个参数&#xff1a;hsv指的是原图第二个参…

pytest 结合logging输出日志保存至文件

API_log.py import loggingclass loger():def logering(self):# 创建logger对象logger logging.getLogger(test_logger)# 设置日志等级logger.setLevel(logging.DEBUG)# 追加写入文件a &#xff0c;设置utf-8编码防止中文写入乱码test_log logging.FileHandler(test.log, a,…

11、动手学深度学习——语言模型和数据集:代码详解

我们了解了如何将文本数据映射为词元&#xff0c;以及将这些词元可以视为一系列离散的观测&#xff0c;例如单词或字符。 假设长度为 T T T的文本序列中的词元依次为 x 1 , x 2 , … , x T x_1, x_2, \ldots, x_T x1​,x2​,…,xT​。于是&#xff0c; x t x_t xt​&#xff08…

初识C++(上)——“C++”

各位CSDN的uu们你们好呀&#xff0c;小雅兰的全新专栏又来啦&#xff0c;这次的专栏主要介绍的是C&#xff0c;下面&#xff0c;让我们进入C的世界吧&#xff01;&#xff01;&#xff01; 什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的…

【MySQL】根据MVCC和Read View分析事务的四种隔离级别在读写场景分别是如何体现其隔离性的

目录 一、数据库并发的三种场景 二、读写场景的MVCC 1、3个&#xff08;4个&#xff09;记录隐藏列字段 2、undo log&#xff08;撤销日志&#xff09; 3、模拟MVCC场景 3.1update场景 3.2delete场景 3.3insert 3.4select场景 4、Read View 5、RR和RC的区别 5.1当…

AI制图工具丨Midjourney产品功能介绍

了解如何使用Discord上的Midjourney Bot通过简单的文本提示创建自定义图像 Midjourney是一款AI制图工具&#xff0c;只要关键字&#xff0c;就能透过AI算法生成相对应的图片&#xff0c;只需要不到一分钟。 可以选择不同画家的艺术风格&#xff0c;例如安迪华荷、达芬奇、达利…

H3C-Cloud Lab实验-OSPF配置实验

一、实验拓扑图 实验需求&#xff1a; 1、按照图示配置 IP 地址 2、按照图示分区域配置 OSPF &#xff0c;实现全网互通 3、为了路由结构稳定&#xff0c;要求路由器使用环回口作为 Router-id&#xff0c;ABR 的环回口宣告进骨干区域 4、掌握OSPF初始化流程、路由表学习的过…

react和vue2/3父子组件的双向绑定

目录 Vue .sync&#xff08;2.3.0&#xff09; $emit &#xff08;2.3后&#xff09; 自定义组件的 v-model 2.2.0 v-modelemits(3.0取消了.sync) React 父组件回调函数 相关基础 框架 MVC &#xff08;Model View Controller&#xff09;/MVP&#xff08;Model View…

西安丨高时空分辨率、高精度一体化预测技术之风、光、水能源自动化预测技术应用

目录 ​第一章 预测平台讲解及安装 第二章 一体化预测工具详解与数据获取及制备 第三章 风资源预测自动化技术 第四章 太阳能资源自动化预测技术 第五章 水资源自动化预测技术 第六章 后处理自动化技术 更多推荐 能源是国民经济发展和人民生活必须的重要物质基础。在过去…

大数据存储架构详解:数据仓库、数据集市、数据湖、数据网格、湖仓一体

前言 本文隶属于专栏《大数据理论体系》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见大数据理论体系 思维导图 数据仓库 数据仓库是一个面向主题的&…

Python自动化之pytest常用插件

目录 1、失败重跑 pytest-rerunfailures 2、多重校验 pytest-assume 3、设定执行顺序 pytest-ordering 4、用例依赖&#xff08;pytest-dependency&#xff09; 5.分布式测试(pytest-xdist) 6.生成报告&#xff08;pytest-html&#xff09; 1、失败重跑 pytest-rerunfailu…

华夏ERP在虚拟机Ubuntu上的安装(测试实例)

1.虚拟机软件VirtualBOX 7.0 2.Ubuntu 版本 3.宝塔面板安装 百度搜索宝塔面板&#xff0c;按官网提示进行安装。下面截图是官网示例。 if [ -f /usr/bin/curl ];then curl -sSO download.cnnbt.net/install_panel.sh;else wget -O install_panel.sh download.cnnbt.net/install…

EasyCVR告警类型设置后首页需要刷新才能更新的问题优化

EasyCVR视频融合平台基于云边端一体化架构&#xff0c;可支持多协议、多类型设备接入&#xff0c;包括&#xff1a;NVR、IPC、视频编码器、无人机、车载设备、智能手持终端、移动执法仪等。平台具有强大的数据接入、处理及分发能力&#xff0c;可在复杂的网络环境中&#xff0c…