26 KVM热迁移虚拟机

文章目录

    • 26 KVM热迁移虚拟机
      • 26.1 总体介绍
        • 26.1.1 概述
        • 26.1.2 应用场景
        • 26.1.3 注意事项和约束限制
      • 26.2 热迁移操作
        • 26.2.1 前提条件
        • 26.2.2 热迁移脏页率预测(可选)
        • 26.2.3 设置热迁移参数(可选)
        • 26.2.4 热迁移操作(共享存储场景)
        • 26.2.5 热迁移操作(非共享存储场景)
        • 26.2.6 热迁移操作(加密传输)

26 KVM热迁移虚拟机

26.1 总体介绍

26.1.1 概述

当虚拟机在物理机上运行时,物理机可能存在资源分配不均,造成负载过重或过轻的情况。另外,物理机存在硬件更换、软件升级、组网调整、故障处理等操作,如何在不中断业务的情况下完成这些操作十分重要。虚拟机热迁移技术可以在业务连续前提下,完成负载均衡或上述操作,提升用户体验和工作效率。虚拟机热迁移通常是将整个虚拟机的运行状态完整保存下来,同时可以快速恢复到原有的甚至不同的硬件平台上。虚拟机恢复后,仍然可以平滑运行,用户感知不到任何差异。根据虚拟机数据存储在当前主机还是远端存储设备(共享存储)的不同,openEuler支持共享存储热迁移和非共享存储热迁移两种方式。

26.1.2 应用场景

共享存储和非共享存储热迁移的共同应用场景有:

  • 当物理机故障或者负载过重时,可以将运行的虚拟机迁移到另一台物理机上,以避免业务中断,保证业务的正常运行。
  • 当多数的物理机负载过轻时,可以将虚拟机迁移整合,以减少物理机数量,提高资源的利用率。
  • 当物理服务器硬件设备成为瓶颈,比如CPU、内存、硬盘等,需要更换性能更好的硬件,或者需要增加设备,但是又不能关闭虚拟机或者停止业务。
  • 服务器软件升级,比如虚拟化平台升级,就可以把虚拟机从旧版本虚拟化平台热迁移到新版本虚拟化平台。

对于非共享存储热迁移,还可以应用在如下场景:

  • 当物理机故障存储空间不足,需要将运行的虚拟机迁移到另一台物理机上,可以避免业务中断,保证业务的正常运行。
  • 当物理机存储设备老化,性能不能支撑当前业务数据处理,成为系统性能的瓶颈,需要更换性能更强的存储,但是又不能关闭虚拟机或者停止虚拟机,这需要将运行的虚拟机迁移到一个具有更好性能的物理机上。

26.1.3 注意事项和约束限制

  • 热迁移过程中,需要保证网络状态良好。如果发生网络中断,热迁移会暂停,直到网络恢复后才会继续,当发生超时,热迁移会失败。
  • 迁移过程中,不允许对虚拟机进行生命周期和管理虚拟机硬件设备等操作。
  • 虚拟机正在迁移的过程中,应尽可能保证源端、目的端服务器不被意外下电或重启,否则会导致热迁移失败,甚至可能导致虚拟机被下电。
  • 虚拟机正在迁移的过程中,不允许对虚拟机做关机、重启或恢复操作,否则可能会导致热迁移失败,当执行ACPI方式重启时,再执行热迁移会导致虚拟机关闭。
  • 只支持同构热迁移,即源端和目的端CPU型号需要相同。
  • 跨业务网段虚拟机迁移可以成功,但是到目的端后会出现网络异常,为了防止该情况发生,需要用户保证迁移业务网段一致。
  • 如果源端虚拟机vCPU数大于目的端的物理机CPU核数,则迁移后将会影响到虚拟机的性能,应保证目的端物理机CPU核数大于等于源端虚拟机vCPU数。

非共享存储热迁移过程中的额外注意事项:

  • 不支持迁移源端和目的端为同一个磁盘镜像文件的迁移,用户需要对该类迁移进行特殊处理,提防覆盖写坏数据而导致镜像损坏。
  • 不支持对共享磁盘的迁移,用户需要对该类迁移进行防呆处理。
  • 迁移的目的端镜像只支持文件,不支持裸设备,用户需要对目的端是裸设备的迁移进行防呆处理。
  • 目的端需要创建与源端大小、数量相同的磁盘镜像,否则迁移失败。
  • 混合迁移场景,需要传入迁移的磁盘,不能包括共享和只读的磁盘。

26.2 热迁移操作

26.2.1 前提条件

  • 进行热迁移之前要确保源端和目的端主机之间的网络是互通的,并且源端和目的端获得资源权限是对等的,即两端同时能够访问到相同的存储资源和网络资源。
  • 在执行虚拟机热迁移前应当对虚拟机进行健康检查,并确保目的端主机有足够的CPU、内存和存储资源。

26.2.2 热迁移脏页率预测(可选)

用户在迁移前可以使用dirtyrate功能,获取热迁移的内存脏页变化速率,根据虚拟机内存使用情况评估虚拟机是否适合迁移或配置合理的迁移参数。

使用方法:

例如,指定名为openEulerVM的虚拟机,计算时间为1s:

# virsh qemu-monitor-command openEulerVM '{"execute":"calc-dirty-rate", "arguments": {"calc-time": 1}}

间隔1s后,查询脏页变化速率:

# virsh qemu-monitor-command openEulerVM '{"execute":"query-dirty-rate"}'

26.2.3 设置热迁移参数(可选)

在执行热迁移之前,可以通过使用virsh migrate-setmaxdowntime命令来指定虚拟机热迁移过程中能够容忍的最大停机时间,这是一个可选的配置项。

例如,指定名为_openEulerVM_的虚拟机最大停机时间为500ms:

# virsh migrate-setmaxdowntime openEulerVM 500

同时,可以通过调用virsh migrate-setspeed来限制虚拟机热迁移占用的带宽大小,防止当前虚拟机热迁移的时候占用带宽过大,对主机上的其他虚拟机或者业务造成影响,这个选择同样也是热迁移的一个可选项。

例如,指定名为_openEulerVM_的虚拟机热迁带宽为500Mbps:

# virsh migrate-setspeed openEulerVM --bandwidth 500

用户可以使用migrate-getspeed来查询虚拟机热迁移过程中的最大带宽。

[root@superman-21 ~]# virsh migrate-getspeed openEulerVM
500
[root@superman-21 ~]# 

用户可以使用migrate-set-parameters来设置热迁移时相关的参数,与热迁移压缩的参数如下所示:

  1. compress-level: 压缩级别,默认:1
  2. compress-threads: 压缩线程数目,默认:8
  3. compress-wait-thread: 是否等待压缩线程,默认:true
  4. decompress-threads: 解压缩线程数目,默认:2
  5. compress-method: 压缩算法选择(zlib、zstd),默认:zlib

例如,指定名为_openEulerVM_的虚拟机热迁算法为zstd,其余参数采用默认设置。

# virsh qemu-monitor-command openEulerVM '{ "execute": "migrate-set-parameters", "arguments": {"compress-method": "zstd"}}'

用户可以使用query-migrate-parameters来查询热迁移时相关的参数。

# virsh qemu-monitor-command openEulerVM '{ "execute": "query-migrate-parameters"}' --pretty

{
  "return": {
    "xbzrle-cache-size": 67108864,
    "cpu-throttle-initial": 20,
    "announce-max": 550,
    "decompress-threads": 2,
    "compress-threads": 8,
    "compress-level": 1,
    "compress-method": "zstd",
    "multifd-channels": 2,
    "announce-initial": 50,
    "block-incremental": false,
    "compress-wait-thread": true,
    "downtime-limit": 300,
    "tls-authz": ,
    "announce-rounds": 5,
    "announce-step": 100,
    "tls-creds": ,
    "max-cpu-throttle": 99,
    "max-postcopy-bandwidth": 0,
    "tls-hostname": ,
    "max-bandwidth": 33554432,
    "x-checkpoint-delay": 20000,
    "cpu-throttle-increment": 10
  },
  "id": "libvirt-18"
}

26.2.4 热迁移操作(共享存储场景)

  1. 确认是否为共享存储。

    [root@superman-21 ~]# virsh domblklist <VMInstanse>
     Target   Source
    --------------------------------------------
    sda      /dev/mapper/open_euleros_disk
    sdb      /mnt/nfs/images/openeuler-test.qcow2
    [root@superman-21 ~]# 
    

    首先,使用virsh domblklist命令查询虚拟机的存储设备信息,例如上面的查询结果显示虚拟机配置有2个存储设备:sda盘和sdb盘,然后再分别查询一下这两个设备对应后端存储是本地存储还是远端存储,如果虚拟机的所有存储设备都在远端共享存储之上,则说明该虚拟机为共享存储虚拟机,否则为非共享存储虚拟机。

  2. 执行如下命令,进行虚拟机热迁移。

    例如,将虚拟机_openEulerVM_迁移到目的主机上使用virsh migrate命令。

    # virsh migrate --live --unsafe openEulerVM qemu+ssh://<destination-host-ip>/system
    

    其中,为目的主机IP地址,热迁移之前需要进行ssh认证以获取目的端主机管理员权限。

    另外,virsh migrate命令还有–auto-converge和–timeout子选项来保证迁移的顺利完成。

    其中,相关子选项:

    –unsafe命令会强制进行热迁移,忽略安全检查步骤。

    –auto-converge命令会对CPU进行降频限速,确保热迁移流程能够收敛。

    –timeout选项会指定一个热迁移超时时间,热迁移超过指定时间后会强制挂起虚拟机让热迁移得以收敛。

  3. 热迁移完成后命令返回,虚拟机在目的端主机正常运行。

26.2.5 热迁移操作(非共享存储场景)

  1. 首先,先查询虚拟机存储设备列表,确保虚拟机使用的是非共享存储。

    例如,通过virsh domblklist查询到准备迁移的虚拟机有一个qcow2格式的磁盘sda,sda的xml配置为:

        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2' cache='none' io='native'/>
          <source file='/mnt/sdb/openeuler/openEulerVM.qcow2'/>
          <target dev='sda' bus='scsi'/>
          <address type='drive' controller='0' bus='0' target='0' unit='0'/>
        </disk>
    

    执行热迁移之前需要在目的端主机相同磁盘目录下创建一个虚拟磁盘文件,注意磁盘的格式和大小必须保持一致。

    # qemu-img create -f qcow2 /mnt/sdb/openeuler/openEulerVM.qcow2 20G
    
  2. 在源端使用virsh migrate命令来执行热迁移,迁移的时候会将存储也一并迁移到目的端。

    # virsh migrate --live --unsafe --copy-storage-all --migrate-disks sda \
    openEulerVM qemu+ssh://<dest-host-ip>/system
    
  3. 热迁移完成后命令返回,虚拟机在目的端主机行正常运行,存储设备也被迁移到目的主机上。

26.2.6 热迁移操作(加密传输)

  1. 简介

为了能够更好的对虚拟机热迁移过程中数据的加密,openEuler提供了使用TLS对迁移数据进行加密的特性。几乎QEMU中所有的网络服务都能够使用TLS对会话数据进行加密操作,同时也可以使用X509证书对客户端进行简单的身份认证。

  1. 应用场景

典型应用场景为要求热迁移过程中虚拟机数据在源端和目的端进行传输时保证数据的安全性。

  1. 注意事项

在使用TLS对虚拟机进行热迁移前,需要申请证书,然后在源端和目的端分别设置证书。使用TLS功能前需要打开对端认证配置项,需在/etc/libvirt/qemu.conf文件中设置migrate_tls_x509_verify = 1。

单通道TLS热迁移的业务中断时长、迁移时长会有明显增长,迁移带宽上限100~200MB/s,可能导致迁移失败。

支持使用multiFd进行多通道TLS迁移,但会增加CPU开销(多开2个迁移线程),可能影响虚拟机运行;建议通过设置热迁移线程CPU亲和性将热迁移线程享受的CPU资源与虚拟机进程绑定的CPU资源隔离,迁移每台虚拟机建议绑定2个CPU。

  1. 使用方法

单通道热迁移加密传输命令

# virsh migrate --live --unsafe --tls --domain openEulerVM --desturi qemu+tcp://<destination-host-ip>/system --migrateuri tcp://<destionation-host-ip>

多通道热迁移加密传输命令

# virsh migrate --live --unsafe --parallel --tls --domain openEulerVM --desturi qemu+tcp://<destination-host-ip

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

image-20230521203239674

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

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

相关文章

微服务之事务处理

Informal Essay By English Hi guys、happy labor day. Everyone should have a good time to relax during the Labor Day holiday. But don’t forget to improve yourself during the holiday period 参考书籍&#xff1a; “凤凰架构” “微服务架构设计模式” 引言 …

golang 服务中 context 超时处理的思考

文章目录 前言起因&#xff1a;日志告警引发的思考什么是contextcontext的作用context超时之后继续执行 or 中断 最后 前言 公司运行的服务代码中&#xff0c;随处可见各种各样的日志信息&#xff0c;其中大多数是用来记录各种异常的日志&#xff0c;一方面&#xff0c;当出现…

Linux终端环境下的浏览器Lynx和Carbonyl 的基本使用方法

一、Carbonyl 是基于Chromium开发的运行于终端下的现代版浏览器&#xff0c;比Lynx的功能更好&#xff0c;目前尚在滚动开发过程中&#xff0c;但也基本可以用了。 1. 2安装非常简单&#xff0c;下载Binaries&#xff0c;Docker&#xff0c;nmp install, 都可以。 注意&#…

FPGA远程更新/远程调试的一种简单方法

之前介绍过一种远程&#xff08;无线&#xff09;更新的方式&#xff0c;详见《起飞&#xff01;通过无线WIFI下载调试FPGA》&#xff0c;这种方式缺点有两个&#xff1a;一是速度较慢&#xff1b;二是我们的设备中需要增加一个无线设备&#xff0c;增加成本的同时增加了暴露的…

SpringCloud(23):Sentinel对Spring Cloud Gateway的支持

代码地址&#xff1a;https://download.csdn.net/download/u013938578/87767363 从 1.6.0 版本开始&#xff0c;Sentinel 提供了 Spring Cloud Gateway 的适配模块&#xff0c;可以提供两种资源维度的限流&#xff1a; route 维度&#xff1a;即在 Spring 配置文件中配置的路…

setContentHuggingPriority和setContentCompressionResistancePriority的使用

需求&#xff1a; 两个label并排显示&#xff0c;文字内容由服务器返回&#xff0c;label宽度以文字内容自适应&#xff0c;label之间间距大于等于10. 需要考虑以下情况&#xff1a; 当两个label的宽度和 < 屏幕宽度时&#xff0c;各自设置约束&#xff0c;无需处理&#…

GPT-4版Windows炸场,整个系统就是一个对话机器人,微软开建AI全宇宙

原创 智东西编辑部 智东西 Windows的GPT时刻到来&#xff0c;变革PC行业。 作者 | 智东西编辑部 今日凌晨&#xff0c;Windows迎来了GPT-4时刻&#xff01; 在2023微软Build大会上&#xff0c;微软总裁萨蒂亚纳德拉&#xff08;Satya Nadella&#xff09;宣布推出Windows Co…

【模型预测】A-4D战斗机姿态控制的模型预测控制方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

力扣 695. 岛屿的最大面积

一、题目描述 给你一个大小为 m x n 的二进制矩阵 grid。 岛屿是由一些相邻的 1&#xff08;代表土地&#xff09;构成的组合&#xff0c;这里的相邻要求两个 1 必须在水平或者竖直的四个方向上相邻。你可以假设 grid 的四个边缘都被 0&#xff08;代表水&#xff09;包围着。…

[Nacos] Nacos Client获取所有服务和定时更新Client端的注册表 (三)

文章目录 1.Nacos Client获取所有服务1.1 Client如何获取所有服务1.2 Client获取服务方法getServices()详解 2.Nacos定时更新Client端的注册表2.1 Nacos和Eureka定时更新Client端的注册表的区别2.2 Client定时更新本地服务过程2.3 updateServiceNow方法解析2.4 定时更新本地注册…

40亿个QQ号,限制1G内存,如何去重?

40亿个QQ号&#xff0c;限制1G内存&#xff0c;如何去重&#xff1f; 40亿个unsigned int&#xff0c;如果直接用内存存储的话&#xff0c;需要&#xff1a; 4*4000000000 /1024/1024/1024 14.9G &#xff0c;考虑到其中有一些重复的话&#xff0c;那1G的空间也基本上是不够…

OPPO哲库事件 “ 始末 ” ! 集体打哑谜?

1►OPPO哲库解散 2019 年&#xff0c;美国商务部以“科技网络安全”为由&#xff0c;将华为公司及其70家附属公司列入出口管制“实体名单”。与此同时&#xff0c;OPPO 创始人兼 CEO陈明永对外宣布&#xff0c;公司将为未来三年内投入 500 亿元用于前沿技术和深水区技术的探索…

安装编译PostgreSql15.3.0

一、下载源码 方式一 官网手动下载 https://www.postgresql.org/download/. 解压 tar -zxvf postgresql-14.2.tar.gz方式二 git clone git clone https://github.com/postgres/postgres.git解压或下载后计入postgres目录 cd postgres-15.3二、创建目录 用root账户创建 创建…

Apache Pulsar入门指南

1.概述 Apache Pulsar 是灵活的发布-订阅消息系统&#xff08;Flexible Pub/Sub messaging&#xff09;&#xff0c;采用计算与存储分离的架构。雅虎在 2013 年开始开发 Pulsar &#xff0c;于 2016 年首次开源&#xff0c;目前是 Apache 软件基金会的顶级项目。Pulsar 具有支…

C++系列六:运算符

C运算符 1. 算术运算符2. 关系运算符3. 逻辑运算符4. 按位运算符5. 取地址运算符6. 取内容运算符7. 成员选择符8. 作用域运算符9. 总结 1. 算术运算符 算术运算符用于执行基本数学运算&#xff0c;例如加减乘除和取模等操作。下表列出了C中支持的算术运算符&#xff1a; 运算…

为什么要做问卷调查?企业获得用户心声的捷径

问卷调查作为一种重要的数据收集方法&#xff0c;在市场营销、社会学研究、用户研究等领域得到广泛应用。通过问卷调查&#xff0c;我们可以了解受访者的态度、行为、需求等信息&#xff0c;进而为企业和组织的决策提供支持。那么&#xff0c;为什么要做问卷调查呢&#xff1f;…

day5 - 利用阈值勾勒

阈值处理在计算机视觉技术中占有十分重要的位置&#xff0c;他是很多高级算法的底层逻辑之一。本实验将练习使用图像阈值处理技术来处理不同的情况的图像&#xff0c;并获得图像轮廓。 完成本期内容&#xff0c;你可以&#xff1a; 了解图像阈值处理技术的定义和作用 掌握各阈…

苏州狮山广场能耗管理系统

摘要&#xff1a;随着社会生活水平的提高&#xff0c;经济的繁荣发展&#xff0c;人们对能源的需求逐渐增长&#xff0c;由此带来的能源危机日益严重。商场如何实时的了解、分析和控制商场的能源消耗已成为需要解决的迫在眉睫的难题。传统的能源消耗智能以月/季度/年为周期进行…

Autosar RTE S/R接口implicit与Explicit的实现与区别

文章目录 前言接口的代码implicitIReadIWrite ExplicitReadWrite 区别与使用场景总结 前言 Autosar官方文档阅读起来比较费劲&#xff0c;一般从实际应用中来了解更多规范中的内容。本文介绍最常用的RTE S/R接口的implicit隐式与Explicit显式两种方式的实现与差别 接口的代码…

Node.js

目录 Node.js是什么 入门案例 fs文件系统模块 案例 http模块 创建最简单的web服务器 网页跳转案例 模块化 模块化概念 模块化规范 Node.js 中模块的分类 加载模块 模块作用域 module对象 Node.js中的模块化规范 第三方模块 (包) 安装包的命令 卸载包的命令 …