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

主要参数

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

 

 

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

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

相关文章

Windows如何恢复已删除的Word文档?

案例&#xff1a;可以恢复已删除的Word文档吗&#xff1f; “大家好&#xff0c;我遇到了一个问题&#xff0c;需要大家的帮助。昨天我编辑了一个Word文档并保存到了桌面上&#xff0c;但当我今天再次打开电脑时&#xff0c;它就不见了&#xff01;昨天工作完成后&#xff…

Sentinel 规则详解

Sentinel 规则 流控规则 flow1、QPS流控2、并发线程数流控3、流控模式4、流控效果 熔断&#xff08;降级&#xff09;规则 degrade1、慢调用比例2、异常比例3、异常数 热点规则 param-flow授权规则 authority1、应用场景2、自定义来源3、授权规则配置 系统规则 前言&#xff1a…

JMeter进行WebSocket压力测试

背景 之前两篇内容介绍了一下 WebSocket 和 SocketIO 的基础内容。之后用 Netty-SocketIO 开发了一个简单的服务端&#xff0c;支持服务端主动向客户端发送消息&#xff0c;同时也支持客户端请求&#xff0c;服务端响应方式。本文主要想了解一下服务端的性能怎么样&#xff0c;…

4.6.tensorRT基础(1)-实际模型上onnx文件的各种操作

目录 前言1. onnx1.1 读取节点1.2 修改节点1.3 替换节点1.4 删除节点1.5 修改input和output1.6 预处理的接入 总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#…

【深度学习】神经网络初学者指南

一、说明 这是一篇对神经网络的泛泛而谈的文章&#xff0c;我的意见是&#xff0c;先知道框架&#xff0c;而后知道每一个细节&#xff0c;这是学习人工智能的基本路线。本文就神经网络而言&#xff0c;谈到一些基础概念&#xff0c;适应于初学者建立概念。 二、神经网络定义 神…

计算机网络————网络层

文章目录 网络层设计思路IP地址IP地址分类IP地址与硬件地址 协议ARP和RARPIP划分子网和构造超网划分子网构造超网&#xff08;无分类编址CIDR&#xff09; ICMP 虚拟专用网VPN和网络地址转换NATVPNNAT 网络层设计思路 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数…

【MQTT】Esp32数据上传采集:最新mqtt插件(支持掉线、真机调试错误等问题)

前言 这是我在Dcloud发布的插件-最完整Mqtt示例代码&#xff08;解决掉线、真机调试错误等问题&#xff09;&#xff0c;经过整改优化和替换Mqtt的js文件使一些市场上出现的问题得以解决&#xff0c;至于跨端出问题&#xff0c;可能原因有很多&#xff0c;例如&#xff0c;合法…

<数据结构>并查集

目录 并查集概念 合并 查找集合的数量 并查集类代码实现 并查集概念 并查集和堆一样&#xff0c;都是通过数组来实现树的节点映射&#xff0c;不过并查集作用是&#xff0c;把一堆数据分为不同的几个小集合 不过并查集是森林的概念&#xff0c;并查集的学习可以帮助我们去更…

IDEA中侧边栏没有git commit模块,如何恢复?

一、修改之前 侧边栏没有git commit模块 二、修改之后 侧边栏恢复了git commit模块 三、下面是恢复教程 1.中文版 打开 文件 -> 设置 -> 版本控制 -> 提交 -> 勾选 【使用非模式提交界面】 -> 点击【确定】 2.英文版 打开 file -> Settings -> Version Co…

同步和异步的区别

同步&#xff0c;可以理解为在执行完一个函数或方法之后&#xff0c;一直等待系统返回值或消息&#xff0c;这时程序是处于阻塞的&#xff0c;只有接收到返回的值或消息后才往下执行其他的命令&#xff1b; 异步&#xff0c;执行完函数或方法后&#xff0c;不必阻塞性地等待返回…

Linux与Windows:操作系统的比较与技巧分享

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

【数学建模】国赛真题分析 2012 A题 葡萄酒的评价

2012 A题 葡萄酒的评价 优秀论文地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/19WGpybgM6RncxTYhx61JRA?pwdvl22 提取码&#xff1a;vl22 –来自百度网盘超级会员V6的分享 确定葡萄酒质量时一般是通过聘请一批有资质的评酒员进行品评。每个评酒员在对葡萄酒进…

计讯物联网关型水利遥测终端机TY910确保闸站自动化监测长效运行

闸站是我国水利建设工程的重要组成部分&#xff0c;具备调度水源、防洪排涝、灌溉等能力&#xff0c;在农业、水路运输、养殖业等行业领域起着关键作用&#xff0c;进而解决区域水资源不均衡的问题&#xff0c;促进水资源多方面的利用。当前&#xff0c;我国闸站存在数量多、分…

线性代数 4 every one(线性代数学习资源分享)

Linear Algebra 4 Every One 版权说明&#xff0c;以下我分享的都是一个名叫Kenji Hiranabe的日本学者&#xff0c;在github上分享的&#xff0c;关于Gilbert Strang教授所撰写的《Linear Algebra for Everyone》一书的总结&#xff0c;更像是一个非常精美的线性代数手册&#…

.net core 2.1 简单部署IIS运行

netcore的项目不像netFramework那么方便部署到iis还是要费点功夫的 比如我想把这个netcore2.1的项目部署到iis并运行&#xff1a; 按照步骤走&#xff1a; 一、确认自己的netcore环境 1、需要安装下面3个环境包(如果电脑已安装请忽略) 检查是否安装cmd命令&#xff1a;cmd&…

go mod vendor简明介绍

Go 语言在 go 1.6 版本以后编译 go 代码会优先从 vendor 目录先寻找依赖包&#xff0c;它具有以下优点&#xff1a; 复制依赖&#xff1a;go mod vendor 会把程序所依赖的所有包复制到项目目录下的vendor 文件夹中&#xff0c;所以即使这些依赖包在外部源&#xff08;如 GitHu…

OpenCV中掩膜(Mask)、setTo()、copyTo()、clone()、inRange()的定义与使用

文章目录 1、掩膜(Mask)是什么&#xff08;1&#xff09;从物理的角度来看&#xff1a;&#xff08;2&#xff09;图像处理中的掩膜Mask&#xff08;3&#xff09;掩膜的用法&#xff1a;&#xff08;4&#xff09;掩膜Mask 的运算&#xff1a; 2、setTo()函数&#xff1a;将图…

flutter开发实战-dio文件下载实现

flutter开发实战-dio文件下载实现 在开发中&#xff0c;需要下载文件&#xff0c;这里使用的是dio dio 是一个强大的 Dart HTTP 请求库&#xff0c;支持全局配置、Restful API、FormData、拦截器、 请求取消、Cookie 管理、文件上传/下载、超时以及自定义适配器等。 一、引入d…

JS脚本 - 批量给所有指定标签追加Class属性

JS脚本 - 批量给所有指定标签追加Class属性 前言一. 脚本二. 测试运行 前言 公司里我们有个应用引入了UBT埋点&#xff0c;记录了页面上所有的点击操作以及对应的点击按钮。但是我们看下来发现&#xff0c;我们需要给每个按钮加一个唯一标识做区分&#xff0c;并且这个ID是给U…

Flask 使用Flask的session来保存用户登录状态例子

使用Python的Flask库实现的登录接口、查询金额接口和注销接口的示例。 当用户发送POST请求到/login接口时&#xff0c;代码会获取请求中的用户名和密码。如果用户名和密码匹配&#xff08;在示例中是admin和admin123&#xff09;&#xff0c;则会将用户名保存在session中&…