首页 > 其他分享 >26 KVM热迁移虚拟机

26 KVM热迁移虚拟机

时间:2023-05-21 21:02:51浏览次数:46  
标签:26 openEulerVM -- 虚拟机 KVM migrate virsh 迁移

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
    

    其中,<destination-host-ip>为目的主机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

标签:26,openEulerVM,--,虚拟机,KVM,migrate,virsh,迁移
From: https://blog.51cto.com/u_237826/6320206

相关文章

  • 深入理解 python 虚拟机:魔术方法之数学计算
    深入理解python虚拟机:魔术方法之数学计算在本篇文章当中主要给大家介绍在python当中一些常见的魔术方法,本篇文章主要是关于与数学计算相关的一些魔术方法,在很多科学计算的包当中都使用到了这些魔术方法。大小比较当我们在Python中定义自己的类时,可以通过重写一些特殊方法来......
  • 微软推出Windows 11 Insider预览版22621.1255和22623.1255
    您好,WindowsInsider,今天我们将向Beta频道发布Windows11Insider预览版22621.1255和22623.1255(KB5022918)。Build22623.1255=推送新功能。Build22621.1255=默认情况下关闭新功能。提醒:以前在22622版本上的内部人员将通过启用包自动转移到22623版本。启用包人为地增加了新功能推出......
  • hdu-2680-Choose the best route(dijkstra)
    ChoosethebestrouteTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):10470    AcceptedSubmission(s):3367ProblemDescriptionOneday,Kikiwantstovisitoneofherfriends.Assheis......
  • 26水仙花数
      #include<stdio.h>#defineINTEGER_MAXIMUM999//数字范围,最大值#defineINTEGER_MINIMUM100//最小值intif_narcissistic_number(intnum);intmain(){inti=0;for(i=INTEGER_MINIMUM;i<=INTEGER_MAXIMUM;i++){if(if_narcissistic_......
  • 25 KVM管理虚拟机-虚拟机安全启动
    25KVM管理虚拟机-虚拟机安全启动25.1总体介绍25.1.1概述安全启动(SecureBoot)就是利用公私钥对启动部件进行签名和验证。启动过程中,前一个部件验证后一个部件的数字签名,验证通过后,运行后一个部件,验证不通过则启动失败。安全启动的作用是检测设备启动阶段固件(Fireware)以及软件......
  • 来谈谈jvm虚拟机
    JVM(JavaVirtualMachine)是Java虚拟机的缩写,它是一种能够在多个平台上运行Java字节码的虚拟计算机。JVM是Java语言跨平台的关键技术之一,它使得Java程序可以在不同操作系统和硬件平台上运行,而无需进行修改或重新编译。在Java编程中,开发人员将Java代码编译成字节码,然后将字节码交给JV......
  • 关于VM虚拟机Win7系统不能安装VM Tool的解决事件记录
    感谢CSDN的网友分享,根据其分享经验,我随即去弄,发现可以成功解决Win7系统在VM虚拟机不能安装VMTool的问题。 解决步骤: 1、先检查Win7系统是否为SP1及以上。  不是的话,要去下载Win7SP1系统。下载地址可以去下边这个,也可以自行去微软官网找Win7SP1下载,这两下载的都是......
  • ESP8266串口WiFi模块简单了解
    ESP8266简介ESP8266是一款超低功耗的UART-WiFi透传模块,拥有业内极富竞争力的封装尺寸和超低能耗技术,专为移动设备和物联网应用设计,可将用户的物理设备连接到Wi-Fi无线网络上,进行互联网或局域网通信,实现联网功能。ESP8266是上海乐鑫信息科技设计的低功耗WiFi芯片,集成完整的TCP/IP......
  • vm虚拟机
    官网:VMware中国–交付面向企业的数字化基础|CN1、介绍wm,virtualmanufacturing是wmware的简称。是一种虚拟机程序。在现有操作系统上运行,可以部署其他操作系统,并进行相关操作,比如联网、访问、安装和使用程序等。2、安装访问https://customerconnect.vmware.com/cn/downl......
  • 【BSP视频教程】BSP视频教程第26期:CAN/CANFD/CANopen专题,CANFD整个运行机制精讲,图文并
     上期视频教程为大家分享了很多CAN理论方面的知识,本期视频教程我们在实战应用中学习CANFD。CANFD涉及到的知识点非常多,我们本期重点是把CANFD整个运行机制搞明白,知其然知其所以然。视频:https://www.bilibili.com/video/BV1iX4y117Bv视频提纲:参考资料:1、【原创】H7-TOOL的CANFDT......