这波无感升级有点秀——天翼云QEMU组件热升级方案来了

news2025/2/4 0:57:45

虚拟化技术作为云计算时代的核心技术,近年来应用越来越广泛。目前,大多数云厂商提供的云主机都是基于KVM/QEMU虚拟化技术实现的。而随着虚拟化技术的发展,QEMU组件也在不断引入新功能并进行功能优化和问题修复。

在公有云场景中,如何在不影响存量虚拟机业务的情况下快速解决资源池中QEMU组件的BUG或升级QEMU版本,是云厂商不得不面对的问题。

目前,业界通常采用的解决方式有两种:

▍通过热补丁方式在线修复QEMU BUG;

▍使用热迁移技术将虚拟机迁移到安装了新版本QEMU的宿主机上。

这两种方式都因底层技术特点导致实施起来难度很大,且对运维团队和云管系统要求更高。

为解决上述问题,天翼云弹性计算虚拟化团队在深入研究了现有虚拟化技术和实际业务场景后,打造了QEMU热升级方案,可以快速地在线升级QEMU组件,实现在线修复BUG和升级业务版本。基于该方案云管系统或管理工具可以非常方便地实现一键升级云主机功能,极大提高整个宿主机上云主机的升级效率。

技术路线

热补丁技术

热补丁技术通常用来在线修复用户态程序中和安全相关的严重BUG。对于QEMU组件,一般使用libcare工具制作热补丁,然后再将热补丁应用在虚拟机的QEMU进程中,以达到在线修复BUG的目的。

但是,热补丁技术只对特别简单的BUG有效,对于涉及代码改动较多的BUG,可能无法通过libcare制作出热补丁,即便制作出热补丁后也可能无法成功打上。此外,不同BUG的热补丁及其针对不同QEMU版本的维护,将随着资源池规模的变大以及BUG数量的增多,变得越来越困难,维护成本也越来越高。

热迁移技术

对于需要升级QEMU版本的场景,通常可以使用虚拟机热迁移技术将所有虚拟机从原来的宿主机在线迁移到升级后的宿主机上。由于虚拟机在迁移过程中仍然正常运行,使用这种方式升级QEMU对于一般用户来说基本上没影响,实现用户业务无感知,因此被很多云厂商采纳使用。

不过,由于是跨主机迁移虚拟机,如果虚拟机内存规格比较大或涉及内存密集型业务,那么迁移一个虚拟机的时间也会比较长。而升级资源池中的QEMU版本需要迁移所有虚拟机,可想而知,整个升级周期将持续很长时间,甚至以月为单位。

不仅如此,虚拟机迁移过程将占用大量的网络资源,迁移期间可能对宿主机和虚拟机的网络业务造成较大影响。最后迁移资源池所有虚拟机需要进行资源的统一调度和管理,这对资源调度系统提出了更高要求。

QEMU热升级方案

在介绍QEMU热升级方案之前,一起先了解一下虚拟机热迁移技术背后的原理。

迁移虚拟机时,首先需要使用与源虚拟机相同配置的命令行参数,在目的宿主机上启动一个目的虚拟机进程。然后,再通过多次迭代的形式,将源虚拟机的内存数据通过网络迁移到目的虚拟机的内存中。当剩余内存脏页总量足够小时,立即暂停虚拟机,并将剩余内存以及设备状态数据一次性迁移到目的虚拟机中。最后运行目的虚拟机,同时删除源虚拟机。

从热迁移技术原理可以看出,只要将源虚拟机的内存和设备状态数据迁移到目的虚拟机中,就能保证目的虚拟机和源虚拟机状态一致,而目的虚拟机进程运行在哪个宿主机上并不重要了。

基于热迁移技术原理,QEMU热升级方案通过在相同宿主机上创建一个使用新版QEMU二进制文件启动的目的虚拟机来替换源虚拟机,达到升级QEMU版本的目的。和热迁移不一样的是,新创建的目的虚拟机共享源虚拟机的内存,不再需要迁移,只需在替换前将源虚拟机的设备状态迁移到目的虚拟机中即可。QEMU热升级整体方案流程如图所示。

虚拟机内存共享

在QEMU热升级方案中,如何让同一个宿主机上的两个虚拟机进程间共享同一份虚拟机内存成为关键。在此过程中,天翼云基于memfd机制实现了虚拟机内存的分配。memfd机制在Linux 3.17版引入,其提供的memfd_create()接口可以创建一个匿名的文件描述符,且其引用的文件保存在内存中,然后通过ftruncate()系统调用可以分配指定大小的匿名内存。

该方案修改了QEMU进程启动时为虚拟机分配内存的方式,使用memfd机制为虚拟机分配内存,并保存对应的memfd,然后在热升级时将其共享给目的虚拟机进程。

除此之外,为了方便将memfd共享给目的进程以及减少代码的修改,该方案通过源虚拟机进程来创建目的虚拟机进程。基于父子进程共享资源的方式,memfd很自然地就共享给了目的虚拟机进程。目的虚拟机进程启动时不再给虚拟机重新创建内存,而是直接共享使用memfd对应的源虚拟机内存。

设备状态迁移

和共享内存一样,创建目的虚拟机进程前,天翼云将源虚拟机的设备状态保存在另一个memfd关联的内存中,并将对应的memfd共享给目的虚拟机进程。目的虚拟机初始化后,通过读取对应内存中数据即可恢复设备状态。

QEMU热升级方案的优势

升级时间短,占用网络资源少,业务无感知

新创建的目的虚拟机共享源虚拟机的内存,不再需要迁移,只需要在替换前将源虚拟机的设备状态迁移到目的虚拟机中即可。由于设备状态对应的数据量很小,迁移很快,因此虚拟机在热升级过程中的虚拟机暂停时间很短。

天翼云对比测试了同样场景下热升级和热迁移过程中整体耗时以及虚拟机网络中断时间。从测试结果看,热升级虚拟机的整个过程耗时1s左右,网络中断时间大约为100ms;而热迁移的整个过程耗时100s~400s,网络中断时间为300ms。测试结果表明,相比热迁移,热升级的整体耗时减少了99%,网络中断时间减少了67%左右。

支持失败回滚功能,不影响虚拟机业务

QEMU热升级方案支持失败回滚,当升级失败后,可以立即恢复源虚拟机运行,不会影响虚拟机内部业务。由于该方案创建了一个目的虚拟机进程用来替换源虚拟机进程,在升级成功前,源虚拟机只是暂停执行,其所有状态仍然保持原样,因此即便热升级失败后,源虚拟机也可以立即恢复运行。

虚拟机对外接口保持一致,对管理系统透明

虚拟机热升级对上层管理系统(如OpenStack)透明,升级前后虚拟机对外提供的接口不变, 如vnc端口、console等。天翼云在QEMU代码层面做了修改,支持服务端口号、fd等资源的共享,升级后目的虚拟机直接共享源虚拟机拥有的资源,继续对外提供服务。

网卡设备后端资源共享,无需重新配置网络端口

通常虚拟机在迁移到另外一个宿主机后都需要网络控制器重新配置网络开端口和下发对应的流表,保证网络正常工作。而QEMU热升级方案却不需要网络控制器的介入,对其透明,这得益于天翼云对QEMU virtio网卡设备的工作机制及代码框架的深入的研究。天翼云在QEMU网卡设备代码层面进行了优化,实现了virtio 网卡设备后端资源共享以及恢复机制,使得目的虚拟机可以共享源虚拟机virtio网卡设备的后端资源。

安全保护机制,让热升级更加安全可靠

针对某些场景下(比如设备配置的socket使用了TLS或websocket选项)QEMU虚拟机无法执行热升级操作的情况,天翼云构建了安全保护机制,通过禁止执行热升级操作,使方案更加安全可靠。在QEMU代码中,天翼云相应地增加了热升级blocker机制,在虚拟机进程启动时,一旦检查到不支持热升级的场景,将设置一个blocker,以告知QEMU热升级接口禁止执行该操作。由于blocker的存在,热升级接口直接报错退出。

一键热升级QEMU 虚拟机,维护简单

在该方案中,QEMU只提供了热升级方案所需的所有原子操作接口,通过封装这些接口,libvirt可以实现一键热升级QEMU虚拟机的功能。

持续优化,共建开源生态

天翼云云主机热升级方案是基于QEMU开源社区版本上的优化和增强,接下来天翼云也将积极推进该方案开源到社区,共建开源生态。同时,天翼云弹性计算虚拟化团队还将持续优化方案,下一步将支持直通设备的热升级。

未来,天翼云将继续坚持科技创新,加大关键核心技术自主攻关,推进国产软硬件产品升级,以安全可信、自主可控的新一代云计算基础设施底座,助推中国数字经济高质量发展。

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

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

相关文章

【解决方案】艾美捷脂肪生成测定试剂盒的功能和应用

肥胖在世界范围内日益受到关注,在美国已达到流行程度。1它是困扰我们社会的许多主要慢性疾病的危险因素,包括心血管疾病、糖尿病和癌症。近年来,许多研究集中于确定肥胖的发病机制,这是一个增加脂肪细胞数量(脂肪细胞增…

游戏开发 dictionary 源码解析

Dictionary是我们经常使用的,一起来看看它是如何构造的,及有哪些优缺点。 Dictionary是一种键值对的形式存放数据,即 key值 、value 值 一 一映射的。key的类型没有限制,可以是整数、字符串甚至是实例对象。 Dictionary的实现原…

Java项目:springboot+vue大学生健康档案管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 大学生健康档案管理系统,目前演示数据中主要包括三种角色:管理员、医生、学生;其中管理员包含最高权限&…

Metal每日分享,自然饱和度滤镜效果

本案例的目的是理解如何用Metal实现自然饱和度效果滤镜,简单讲就是调整图像整体的明亮程度,如调节到较高数值,图像会产生色彩过饱和从而引起图像失真; Demo HarbethDemo地址iDay每日分享文档地址 实操代码 // 自然饱和度滤镜 l…

攻防世界get_post

攻防世界get_post 题目描述:X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗? 查看界面,要求用GET方式提交一个名为a,值为1的变量。 打开burp suite。 设置浏览器本地代理。 抓包。 发送到重发器。 用GET方式提交一个…

点击化学试剂一种环炔烃DBCO-PEG-N3及同系列产品

中文名称:氮杂二苯并环辛炔-聚乙二醇-叠氮 英文名称:DBCO-PEG-N3 英文别名: Dibenzocycolctyne-PEG-Azide 产品纯度: ≥95% 产品用途: 应用于医学研究,药物释放,纳米技术和新材料研究&am…

代码复现之:RCNN(1)分类任务构建 + 模型训练

文章目录资源链接复现开始环境安装创建 conda 虚拟环境,python 3.6 版本安装程序运行环境1. mkdoc 相关的环境2. 程序运行需要的环境流程参考数据集创建分类任务1. 加载原数据集 VOC20072. 将所有类数据单独提取3. 对于每个 class 的数据,构造正负例样本…

AVL树详解

1.AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。 因此,两位俄罗斯的数学家发明了一种解决上述问题的方法: 当向二叉…

内网穿透软件对比——cpolar : 花生壳(下)

系列文章 内网穿透软件对比——cpolar : 花生壳(上)内网穿透软件对比——cpolar : 花生壳(中)内网穿透软件对比——cpolar : 花生壳(下) 文章目录系列文章1. 前言2. 对比内容2.1.TCP协议功能及操作对比2.1…

【JavaEE】多线程(二)Thread 类及常见方法

✨哈喽,进来的小伙伴们,你们好耶!✨ 🛰️🛰️系列专栏:【JavaEE】 ✈️✈️本篇内容:Thread类再剖析! 🚀🚀代码存放仓库gitee:JavaEE初阶代码存放! ⛵⛵作者简…

对记录做横向分栏

【问题】 Hi i have a single list of employees. Each employee will have his name and salary. i have given the list of employees to a table but it appears as follows Employee Name Salary harish 3000 kiran 4000 Emili 6000 h…

Jenkins(2)— 配置webhook触发器

1、webhook介绍 Gitee WebHook触发器 的功能是帮助用户 push 代码后,自动回调一个您设定的 http 地址。例如我们可以通过添加webhook触发器来实现这样一个功能: 每当开发push代码到提测分支后,自动触发jenkins构建,运行自动化测…

闲暇之际敲敲代码,记录Leetcode刷题03

文章目录前言一、删除链表中的节点1.1 问题描述1.2 思路分析二、反转链表2.1 问题描述2.2 思路分析前言 利用闲暇之际敲敲代码,提升编程技能及提高算法能力。 一、删除链表中的节点 1.1 问题描述 有一个单链表的 head,我们想删除它其中的一个节点 no…

Tensorflow基础入门超全总结

1.1 TensorFlow介绍 深度学习框架TensorFlow一经发布,就受到了广泛的关注,并在计算机视觉、音频处理、推荐系统和自然语言处理等场景下都被大面积推广使用,现在已发布2.3.0版本,接下来我们深入浅出的介绍Tensorflow的相关应用。 …

记录一个阿里云Android端文件上传的BUG

背景 Android移动端需要接入阿里云视频点播模块下的一个客户端上传的SDK。需要将移动端本地文件上传至阿里云服务器。 问题描述 调用方法及业务逻辑不赘述,贴张官方图,选择了上传地址和凭证的方法进行上传,并且是后台集成点播服务端SDK并调用…

关于哈希表

package com.javase.map.hashmap;import java.util.HashMap; import java.util.Map; import java.util.Set;/*** 关于HashMap:* 1.HashMap集合的底层是哈希表/散列表的数据结构。* 2.哈希表是数组和单向链表的结合体,充分发挥了它们各自的优点。…

【机器学习】三种主要集成学习思想简介

集成学习 集成学习通过训练多个分类器,然后将其组合起来,从而达到更好的预测性能,提高分类器的泛化能力。 目前集成学习有3个主要框架:bagging、boosting、stacking。 bagging套袋法 bagging是并行集成学习方法的最著名代表,其算法过程如下: 从原始样本集中抽取训练…

【云原生进阶之容器】第一章Docker核心技术1.8节——DockerFile解析

1 Dockfile详解 1.1 什么是Dockerfile 首先通过一张图来了解 Docker 镜像、容器和 Dockerfile 三者之间的关系。 通过上图可以看出使用 Dockerfile 定义镜像,运行镜像启动容器。 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文…

技术分享 | 黑盒测试方法论—场景法

场景法就是模拟用户操作软件时的场景,主要用于测试系统的业务流程。 测试不能只关注某个控件的边界值、等价类是否满足要求,也要关注它的主要功能和业务流程是否正确实现,这时就需要使用场景法来完成。 场景法 用例场景是用来描述流经用例路…

OpenHarmony 物联网设备开发环境搭建

前言 我们介绍的是华为官方推荐的 Windows + Ubuntu 混合开发的环境,使用Windows平台的DevEco Device Tool 进行可视化界面进行相关操作,通过远程连接的方式对接Ubuntu下的DevEco Device Tool,然后对Ubuntu下的源码进行开发、编译、烧录等操作。 目前官方不支持Mac系统,所…