KVM虚拟机迁移原理与实践

虚拟机迁移

迁移(migration)包括系统整体的迁移和某个工作负载的迁移,系统整体迁移是将系统上的所有软件,包括操作系统,完全复制到另一台物理硬件机器上,而工作负载迁移仅仅迁移特定的工作负载。

虚拟化技术的出现,丰富了迁移技术的内涵和实践,在传统的应用环境中,没有虚拟化技术的支持,系统整体迁移主要是静态迁移,静态迁移主要考系统备份和恢复技术,将系统的软件完全复制到另一台机器上,可以通过先做出来系统的镜像文件,然后复制到其他机器上,或者直接使用硬盘复制达到迁移的目的。早些年网吧常用的GHOST备份恢复技术,就是这种类型的迁移。

在虚拟化环境中的迁移,又分为静态迁移和动态迁移,或者冷迁移和热迁移,也可以叫离线迁移和在线迁移。静态迁移和动态迁移最大的区别就是,静态迁移有一段明显的时间客户机中的服务不可用,而动态迁移则没有明显的服务暂停时间。

虚拟化中的静态迁移也可以分为两种,一种是关闭客户机后,将其硬盘镜像复制到另一台宿主机上然后恢复启动,这种迁移不能保留客户机中运行的工作负载,另一种是两台宿主机共享存储系统,只需在暂停(不是完全关闭)客户机后,复制其内存镜像到另一台宿主机中恢复启动即可,这种迁移可以保持客户机迁移前的内存状态和系统的系统运行的工作负载。

动态迁移是指在保证客户机上应用服务正常运行的同时,让客户机在不同的宿主机之间进行迁移,为了保证迁移过程中客户机服务的可用性,迁移过程仅有非常短暂的停机时间,动态迁移允许系统管理员将客户机在不同的物理机上迁移,同时不会断开访问客户机中服务的客户端或应用程序的连接。迁移后保证客户机的内存,硬盘存储,网络连接在迁移到目标的主机后依然保持不变,而且迁移过程的服务暂停时间较短。

另外,虚拟化的底层技术有多种,比如常见的kvm, virtualbox, Xen等,对于虚拟化环境的迁移,不仅包括相同Hypervisor之间的客户机迁移,比如KVM迁移到KVM, Xen迁移到Xen,还包括不同的Hypervisor之间客户机的迁移,比如Xen迁移到KVM,VMware迁移到KVM等等。

不同的迁移技术可以总结如下图表示:

KVM静态迁移实践

step1:启动源虚拟机

$ sudo qemu-system-x86_64 -m 4096 -smp 4 --enable-kvm -drive file=./ps.img -monitor stdio

这一步需要注意两点:

1.启动QEMU虚拟机中不能不能带有透传的PCIE设备,如果虚拟机安装的时候包含PCIE设备的透传,则需要将透传参数删掉后再启动虚拟机。

2.最好运行一个负载应用,比如top程序,以便迁移后检测负载是否正常运行。

step2:备份虚拟机

在qemu的monitor控制台中,输入如下命令保存完整的虚拟机快照:

savevm czl.vm.tag

这里的"savem"命令保存的完整客户机状态包括CPU,内存,设备状态,磁盘内容等。这种方法需要使用qcow2格式的磁盘映像文件,目前只有这种格式的文件才支持快照特性。

然后关闭源虚拟机,同时将虚拟机安装镜像(本例中是ps.img)通过网络或者离线磁盘拷贝到目标机器环境下。

step3:在目标机恢复虚拟机快照

在目标机中,首先用源主机一样的命令启动拷贝过来的虚拟机镜像(本例是上一步拷贝过来的ps.img)

sudo qemu-system-x86_64 -m 4096 -smp 4 --enable-kvm -drive file=/media/zlcao/7CC840FCC840B5E4/out/ps.img -monitor stdio

然后在qemu monitor中,用如下命令恢复上一步保存下来的快照。即可完全加载保存快照时保存的客户机状态,在快照恢复的瞬间,虚拟机界面将从上图转换为下图,显示的恰好是我们保存快照时,虚拟机TOP副在运行时刻的状态。

loadvm czl.vm.tag

KVM动态迁移实践

结束

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

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

相关文章

Day03:注意事项、this关键字、构造器、JavaBean、String、ArrayList

OOP的注意事项 类名要跟class文件名一致(一个class可以有多个类,但只有一个public,且与文件名一致),命名介意大驼峰;如果某个对象没有变量指向他,就成垃圾对象了(空指针&#xff09…

Redis(三)

4、分布式锁 4.1 、基本原理和实现方式对比 分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路 那么…

FM8317-USB TYPE-C PD 多协议控制器

产品描述: FM8317是一款集成了USB Type-C、USB Power Delivery(PD3.0)、PPS的多协议端口控制器,为AC-DC适配器、车载充电器等设备提供高性价比的USB Type-C 端口充电解决方案。 FM8317内置的Type-C协议可以支持Type-C设备插入自动…

Netty - 回顾Netty高性能原理和框架架构解析

文章目录 概述JDK 原生 NIO 程序的问题Why Netty使用场景Related ProjectsNetty 高性能设计I/O 模型【阻塞 I/O】:【I/O 复用模型】【基于 Buffer】 线程模型事件驱动模型Reactor 线程模型Netty的线程模型异步处理 Netty框架的架构设计功能特性模块组件Bootstrap、S…

Linux驱动开发——PCI设备驱动

目录 一、 PCI协议简介 二、PCI和PCI-e 三、Linux PCI驱动 四、 PCI设备驱动实例 五、 总线类设备驱动开发习题 一、 PCI协议简介 PCI (Peripheral Component Interconnect,外设部件互联) 局部总线是由Intel 公司联合其他几家公司一起开发的一种总线标准&#…

2560 动物保护宣传网站设计JSP【程序源码+文档+调试运行】

摘要 本文介绍了一个动物保护宣传网站的系统的设计与实现。该系统包括前台用户模块和后台管理员模块,具有用户注册/登录、新闻、资源库、法律法规、图片赏析、留言板、关于我们、用户后台等功能。通过数据库设计和界面设计,实现了系统的基本功能&#x…

腾讯云3年期轻量应用服务器优惠(薅羊毛教程)

腾讯云轻量应用服务器特价是有新用户限制的,所以阿腾云建议大家选择3年期轻量应用服务器,一劳永逸,免去续费困扰。腾讯云轻量应用服务器3年优惠可以选择2核2G4M和2核4G5M带宽,3年轻量2核2G4M服务器540元,2核4G5M轻量应…

SW如何显示样条曲线的控标

刚刚学习隔壁老王的sw画图时,怎么点都点不出样条曲线的控标,于是果断查询了一下解决方法,其实很简单,只不过是培训机构故意不说,叫你还解决不了,难受了就会花钱买他们的课了。毕竟如果学会了怎么解决问题了…

泛微E-Office信息泄露漏洞复现

简介 Weaver E-Office是中国泛微科技(Weaver)公司的一个协同办公系统。 Weaver E-Office 9.5版本存在安全漏洞。攻击者利用该漏洞可以访问文件或目录。 漏洞编号:CVE-2023-2766 漏洞复现 FOFA语法: app"泛微-EOffice&qu…

快速走进通信世界 --- 基础知识扫盲

想不到吧,家人们,博主好久没来更新文章了,而且这次更新的是关于通信工程的文章。博主确实以前一直更新关于编程的文章,只不过最近在学习一些新的知识,以后有机会了我还是会继续更新一些编程技术文章的。不过每一门技术…

智慧工地源码:助力数字建造、智慧建造、安全建造、绿色建造

智慧工地围绕建设过程管理,建设项目与智能生产、科学管理建设项目信息生态系统集成在一起,该数据在虚拟现实环境中,将物联网收集的工程信息用于数据挖掘和分析,提供过程趋势预测和专家计划,实现工程建设的智能化管理&a…

在 Microsoft Word 中启用护眼模式

在 Microsoft Word 中启用护眼模式 在使用 Microsoft Word 365 或 Word 2019(Windows)版本时,启用护眼模式(也称为“夜间模式”)可以有效减轻屏幕亮度,有助于减少眼睛疲劳。以下是启用护眼模式的步骤&…

YOLOv5算法进阶改进(1)— 改进数据增强方式 + 添加CBAM注意力机制

前言:Hello大家好,我是小哥谈。本节课设计了一种基于改进YOLOv5的目标检测算法。首先在数据增强方面使用Mosaic-9方法来对训练集进行数据增强,使得网络具有更好的泛化能力,从而更好适用于应用场景。而后,为了更进一步提升检测精度,在backbone中嵌入了CBAM注意力机制模块,…

[100天算法】-面试题 04.01.节点间通路(day 72)

题目描述 节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。示例1:输入:n 3, graph [[0, 1], [0, 2], [1, 2], [1, 2]], start 0, target 2 输出:true 示例2:输入:n 5, graph [[0, 1], …

Python异常处理:三种不同方法的探索与最佳实践

Python异常处理:三种不同方法的探索与最佳实践 前言 本文旨在探讨Python中三种不同的异常处理方法。通过深入理解各种异常处理策略,我们可以更好地应对不同的编程场景,选择最适合自己需求的方法。 异常处理在编程中扮演着至关重要的角色。合…

Springboot集成JWT,用户名,密码生成token

何为token?【如果想直接看代码可以往下翻】 使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的: 1. 客户端使用用户名跟密码请求登录 2. 服务端收到请求,去验证用户名与密码 3. 验证成功后&a…

IOC - Google Guice

Google Guice是一个轻量级的依赖注入框架,专注于依赖注入和IoC,适用于中小型应用。 Spring Framework是一个全面的企业级框架,提供了广泛的功能,适用于大型企业应用。 是吧!IOC 容器不止Spring,还有Google Guice,来体…

Linux的make和Makefile

目录 一、 介绍二、快速使用三、依赖关系和依赖方法四、语法 一、 介绍 1、makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。 2、make是一个命令工具&…

一文了解游戏行业(数据分析)

一.概况 1.基本术语 游戏行业基础术语——持续更新ing... 2.产业链 包括游戏开发,发行和销售等环节 游戏开发:上游环节;是游戏产业链的核心环节,包括游戏策划,美术设计,程序开发等,是决定游…

redux-devtools谷歌扩展插件的使用示例

目录 1. store.ts 2. reducer.ts 3. ReduxProvider.tsx 4. mapStateToProps.ts 5. mapDispatchToProps.ts 6. Todo组件(最外层包ReduxProvider 7. Todo组件里面涉及的子组件 1) TodoInput.tsx 2) TodoList.tsx 3) TodoItem.tsx 8. App组件使用Todo组件 1. store.ts …