【KVM虚拟化】· 虚拟机的冷迁移和热迁移

这篇具有很好参考价值的文章主要介绍了【KVM虚拟化】· 虚拟机的冷迁移和热迁移。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【KVM虚拟化】· 虚拟机的冷迁移和热迁移

目录

🍎静态迁移(冷迁移)

🍎动态迁移(热迁移)

🍎迁移注意事项

🍒静态迁移

🍒动态迁移

🍒迁移帮助命令

🍎迁移实例

🍓冷迁移

🍓热迁移

🍓错误总结


    🦐博客主页:大虾好吃吗的博客

    🦐专栏地址:KVM虚拟化专栏

静态迁移(冷迁移)

        对于静态迁移,你可以在宿主机上保存一个完整的客户机镜像快照,然后在宿主机中关闭或者暂停该客户机,然后将该客户机的镜像文件复制到另一台宿主机中,使用在源主机中启动该客户机时的命令来启动复制过来的镜像。

动态迁移(热迁移)

        如果源宿主机和目的宿主机共享存储系统,则只需要通过网络发送客户机的 vCPU 执行状态、内存中的内容、虚机设备的状态到目的主机上。否则,还需要将客户机的磁盘存储发到目的主机上。共享存储系统指的是源和目的虚机的镜像文件目录是在一个共享的存储上的。

在基于共享存储系统时,KVM 动态迁移的具体过程为:

1、迁移开始时,客户机依然在宿主机上运行,与此同时,客户机的内存页被传输到目的主机上。

2、QEMU/KVM 会监控并记录下迁移过程中所有已被传输的内存页的任何修改,并在所有内存页都传输完成后即开始传输在前面过程中内存页的更改内容。

3、QEMU/KVM 会估计迁移过程中的传输速度,当剩余的内存数据量能够在一个可以设定的时间周期(默认 30 毫秒)内传输完成时,QEMU/KVM 会关闭源宿主机上的客户机,再将剩余的数据量传输到目的主机上,最后传输过来的内存内容在目的宿主机上恢复客户机的运行状态。

4、至此,KVM 的动态迁移操作就完成了。迁移后的客户机尽可能与迁移前一致,除非目的主机上缺少一些配置,比如网桥等。

注意:当客户机中内存使用率非常大而且修改频繁时,内存中数据不断被修改的速度大于KVM能够传输的内存速度时,动态迁移的过程是完成不了的,这时候只能静态迁移。关于实时迁移的效率,业界不少人提出了改进的建议,比如通过使用内存压缩技术,减少需要传输的内存的大小

迁移注意事项

1、最好迁移的服务器cpu品牌一样

2、64位只能在64位宿主机间迁移,32位可以迁移32位和64位宿主机

3、宿主机名字不能冲突

4、目的宿主机和源宿主机软件配置尽可能的相同,如 有相同的桥接网卡,资源池等。

5、两台迁移的主机 cat /proc/cpuinfo |grep nx 的设置是相同的NX,全名为“No eXecute”,即“禁止运行”,是应用在CPU的一种技术,用作把存储器区域分隔为只供存储处理器指令集,或只供数据使用。任何使用NX技术的存储器,代表仅供数据使用,因此处理器的指令集并不能在这些区域存储。这种技术可防止大多数的缓冲溢出攻击,即一些恶意程序,把自身的恶意指令集放在其他程序的数据存储区并运行,从而把整台计算机控制。

静态迁移

1.拷贝镜像文件和虚拟机配置文件

2.重新定义此虚拟机

动态迁移

1.创建共享存储

2.两台机器挂载共享存储(手工挂载;使用资源池)

3.启动动态迁移

4.创建迁移后的虚拟机配置文件

5.重新定义虚拟机

迁移帮助命令

virsh migrate --help
​
[--domain] <string> 域名,id 或 uuid
[--desturi] <string> 客户端(常规迁移)或者源(p2p 迁移)中看到到目的地主机连接 URI
--live 热迁移
--offline 离线迁移
--p2p 点对点迁移
--direct 直接迁移--tunnelled 管道迁移
--persistent 目的地中的持久 VM
--undefinesource 在源中取消定义 VM
--suspend 部启用目的地主机中的域
--copy-storage-all 使用全磁盘复制的非共享存储进行迁移
--copy-storage-inc 使用增值复制(源和目的地共享同一基础映像)的非共享存储进行迁移
--change-protection 迁移结束前不得对域进行任何配置更改
--unsafe 即使不安全也要强制迁移
--verbose 显示迁移进程
--compressed 实时迁移过程中压缩重复的页
--auto-converge force convergence during live migration
--rdma-pin-all support memory pinning during RDMA live migration
--abort-on-error 在迁移过程中忽略软错误
--migrateuri <string> 迁移 URI, 通常可省略
--graphicsuri <string> 无空隙图形迁移中使用的图形 URI
--listen-address <string> listen address that destination should bind to forincoming migration
--dname <string> 在迁移过长中重新命名为一个新名称(如果支持)
--timeout <number> 如果 live 迁移超时(以秒计)则强制虚拟机挂起
--xml <string> 包含为目标更新的 XML 的文件名
--migrate-disks <string> comma separated list of disks to be migrated

迁移实例

        冷迁移时把kvm1中的配置文件,通过scp命令传到kvm2中;热迁移时需要把配置输入到nfs服务器中,导入本地目录,达到开机状态还可以继续迁移。拓扑图如下:

【KVM虚拟化】· 虚拟机的冷迁移和热迁移

冷迁移

        顾名思义,关机后迁移,类似与克隆。

        先查看都有哪些虚拟机,下面正好打开一台myvm02,连接进入在当前目录创建一个文件,输入一些内容,等迁移完成的时候查看。

[root@kvm1 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 4     myvm02                         running
 -     vm01                           shut off
 -     vm02                           shut off
​
​
[root@kvm1 ~]# virsh console myvm02
Connected to domain myvm02
Escape character is ^]
​
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
​
localhost login: root
Password: 
[root@localhost ~]# hostnamectl set-hostname 8-10
[root@localhost ~]# bash
[root@8-10 ~]# vi test.txt
hello world

关机后查看确定是否关机

[root@kvm1 ~]# virsh shutdown myvm02 
Domain myvm02 is being shutdown
​
[root@kvm1 ~]# virsh list --all

        通过scp命令把磁盘文件复制到kvm2上,因为磁盘较大,需要稍等片刻。不知道磁盘文件的使用virsh dumpxml myvm02找磁盘文件。

[root@kvm1 ~]# scp /kvm/img/vm02.qcow2 192.168.8.20:/kvm/img

把myvm02虚拟机配置文件导出,传到kvm2中

[root@kvm1 ~]# virsh dumpxml myvm02 > /tmp/vm02.xml
[root@kvm1 ~]# scp /tmp/vm02.xml root@192.168.8.20:/etc/libvirt/qemu/

        打开kvm2,从新定义虚拟机,查看myvm02已经存在,开机测试查看 是否有test文件,到此冷迁移完成。

[root@kvm2 ~]# virsh define /etc/libvirt/qemu/vm02.xml 
Domain myvm02 defined from /etc/libvirt/qemu/vm02.xml
​
[root@kvm2 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     myvm02                         shut off
​
[root@kvm2 ~]# virsh start myvm02
Domain myvm02 started
​
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
​
8-10 login: root
Password: 
Last login: Mon Apr 24 17:21:09 on ttyS0
[root@8-10 ~]# cat test.txt 
hello world

热迁移

        热迁移要求较高,磁盘文件需要做nfs共享,虚拟网卡配置为网桥模式方便测试,这里将配置从nfs开始,后面创建池、卷、虚拟机。

打开nfs服务器

[root@nfs ~]# yum -y install nfs-utils rpcbind
#省略安装内容
[root@nfs ~]# mkdir /nfsdir
[root@nfs ~]# vim /etc/exports
/nfsdir *(rw,sync,no_root_squash)
​
[root@nfs ~]# systemctl start nfs rpcbind
[root@nfs ~]# systemctl enable nfs rpcbind

测试nfs

打开另外两台kvm

[root@kvm1 ~]# showmount -e 192.168.8.30
Export list for 192.168.8.30:
/nfsdir *

配置本地地址解析

[root@kvm1 ~]# vim /etc/hosts
192.168.8.10 kvm1
192.168.8.20 kvm2
[root@kvm1 ~]# scp /etc/hosts root@192.168.8.20:/etc/

配置kvm1网络

[root@kvm1 ~]# cd /etc/sysconfig/network-scripts/
[root@kvm1 network-scripts]# cp ifcfg-ens33 ifcfg-br10
[root@kvm1 network-scripts]# vim ifcfg-ens33 
TYPE=Ethernet
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br10
[root@kvm1 network-scripts]# vim ifcfg-br10
DEVICE=br10
TYPE=Bridge
BOOTPROTO=static
NAME=br10
ONBOOT=yes
IPADDR=192.168.8.10
GATEWAY=192.168.8.2
DNS1=8.8.8.8
[root@kvm1 network-scripts]# systemctl restart network

配置kvm2网络

[root@kvm2 ~]# cd /etc/sysconfig/network-scripts/
[root@kvm2 network-scripts]# cp ifcfg-ens33 ifcfg-br10
[root@kvm2 network-scripts]# vim ifcfg-ens33
TYPE=Ethernet
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br10
[root@kvm2 network-scripts]# vim ifcfg-br10
DEVICE=br10
TYPE=Bridge
BOOTPROTO=static
NAME=br10
ONBOOT=yes
IPADDR=192.168.8.20
GATEWAY=192.168.8.2
DNS1=8.8.8.8
[root@kvm2 network-scripts]# systemctl restart network

创建kvm1与kvm2之间互信

kvm1

[root@kvm1 ~]# ssh-keygen -t rsa
#直接按回车
[root@kvm1 ~]# ssh-copy-id 192.168.8.20			#传给对端kvm2

kvm2

[root@kvm2 ~]# ssh-keygen -t rsa
#直接按回车
[root@kvm2 ~]# ssh-copy-id 192.168.8.10			#传给对端kvm1

测试时,使用ssh 加对端ip无交互即可登录对端主机。

        开始创建存储池,两台都需要创建,如果做动态迁移,虚拟机需要在nfs共享目录内。下面创建的池名为nfspool(自己定义)类型是netfs 源主机是nfs服务器ip,源地址是nfs服务器中的共享目录,而目标地址就是kvm主机的存放目录。(这条命令就相当于挂载目录)

[root@kvm1 ~]# mkdir /kvm/nfspool
[root@kvm1 ~]# virsh pool-define-as --name nfspool --type netfs --source-host 192.168.8.30 --source-path /nfsdir --target /kvm/nfspool
Pool nfspool defined

[root@kvm1 ~]# virsh pool-start nfspool
Pool nfspool started

kvm2操作跟上面一样

[root@kvm2 ~]# mkdir /kvm/nfspool
[root@kvm2 ~]# virsh pool-define-as --name nfspool --type netfs --source-host 192.168.8.30 --source-path /nfsdir --target /kvm/nfspool
Pool nfspool defined

[root@kvm2 ~]# virsh pool-start nfspool
Pool nfspool started

        现在池中是没有卷的,先创建一个卷,这里就在kvm1中创建了,因为是挂载上了,创建的卷会在nfs服务器中共享到kvm2中。下面命令表示在nfspool池中创建一个nfs_vm01.qcow2的卷,大小为10G,文件类型为qcow2 。

[root@kvm1 ~]# ls /kvm/nfspool/
[root@kvm1 ~]# virsh vol-create-as nfspool nfs_vm01.qcow2 10G --format qcow2
Vol nfs_vm01.qcow2 created

[root@kvm1 ~]# virsh vol-list nfspool
 Name                 Path                                    
------------------------------------------------------------------------------
 nfs_vm01.qcow2       /kvm/nfspool/nfs_vm01.qcow2   

现在查看kvm2,上面是有磁盘文件的。

[root@kvm2 ~]# ls /kvm/nfspool/
nfs_vm01.qcow2

安装一台虚拟机到共享池,创建的是后就需要等一会了,注意设置时区,root密码等。

[root@kvm1 ~]# virt-install -n vm001 -r 1024 --vcpus 1 -l /kvm/iso/centos.iso --disk /kvm/nfspool/nfs_vm01.qcow2 -w bridge=br10 --nographics -x "console=ttyS0"

        到这里是不是觉得上面的操作很熟悉,没错就是继续NFS的存储池,这里nfs服务器省略了创建LVM卷,生产环境中还是不能省略的。因为我这里nfs目录中没有虚拟机所以需要创建迁移的虚拟机。它的工作原理简单来说,在kvm1共享目录中的虚拟机,也在kvm2共享目录中,因为是挂载的nfs服务,当要维护kvm1的时候需要停止它的服务,这时可以把虚拟机转换kvm2中开启,关闭kvm1的虚拟机,而服务时不会停,后面测试用ping访问。

登录虚拟机,获取地址。

localhost login: root
Password: 
[root@localhost ~]# dhclient
[root@localhost ~]# ip a show ens3
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:40:41:ed brd ff:ff:ff:ff:ff:ff
    inet 192.168.8.132/24 brd 192.168.8.255 scope global dynamic ens3
       valid_lft 1797sec preferred_lft 1797sec

        切换会kvm1,实现迁移。迁移前使用win端ping虚拟机ip,切记添加-t参数一直ping,查看切换的同时会不会有延迟。

[root@kvm1 ~]# virsh migrate vm001 --live --unsafe qemu+ssh://192.168.8.20/system

可以看到下图中有一个请求超时,但马上就好了。

【KVM虚拟化】· 虚拟机的冷迁移和热迁移

查看kvm1中的虚拟机,vm001已经关闭。 

[root@kvm1 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     myvm02                         shut off
 -     vm001                          shut off
 -     vm01                           shut off
 -     vm02                           shut off

查看kvm2中的虚拟机,vm001已经迁移过来了,并且是开启状态。

[root@kvm2 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     myvm02                         running
 4     vm001                          running

错误总结

        下面这个错误表示地址解析不到kvm2,想到了没有给他们两台地址解析,这个文档上面已经添加了。文章来源地址https://www.toymoban.com/news/detail-465359.html

[root@kvm1 ~]# virsh migrate vm001 --live --unsafe qemu+ssh://192.168.8.20/system
error: Unable to resolve address 'kvm2' service '49152': Name or service not known

到了这里,关于【KVM虚拟化】· 虚拟机的冷迁移和热迁移的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • kvm网络虚拟化介绍

    在QEMU中,主要给出了客户机提供了4种不同的网络配置方案: 1、基于网桥(Bridge)的虚拟化网卡模式 2、基于NAT的虚拟网络模式 3、QEMU内置的用户网络模式 4、直接分配网络设置模式 网桥和NAT是基于linux-bridge实现的软件虚拟网络模式,QEMU是QEMU软件虚拟的网络模式,第四种网络模

    2024年02月14日
    浏览(54)
  • 【KVM虚拟化环境部署】

    1、装系统时手动选择安装 2、CentOS 7 最小化安装 安装好CentOS 7后,去设置里面点击处理器,将右边虚拟化引擎勾上 添加一块硬盘 分区并格式化 创建虚拟机,本例使用iso镜像 选择镜像路径

    2024年02月12日
    浏览(44)
  • 什么是KVM虚拟化

    维基百科关于虚拟化的定义是:“In computing,virtualization refers to the act of creating a virtual(rather than actual)version of something,including virtual computer hardware platforms,storage devices,and computer network resources。”(在计算机领域,虚拟化指 创建某事物的虚拟(而非实际)版本,包括虚拟的

    2023年04月08日
    浏览(48)
  • KVM虚拟化ubuntu

    KVM(Kernel-based Virtual Machine)是一种基于Linux内核的虚拟化技术,它将Linux内核作为虚拟机的底层操作系统,利用硬件虚拟化支持创建和管理虚拟机。KVM虚拟化技术被广泛应用于云计算、虚拟化服务器、虚拟化桌面等场景。 KVM虚拟化技术的主要特点包括: 1.硬件虚拟化支持:

    2024年02月10日
    浏览(45)
  • 【KVM虚拟化】· 图形化KVM安装linux

    目录 🍁虚拟化技术 🍂KVM的整体结构 🍂KVM 的功能列表 🍂KVM 工具集合 🍁安装kvm虚拟化功能 🍁创建虚拟机    🦐博客主页:大虾好吃吗的博客    🦐专栏地址:KVM虚拟化专栏 全虚拟化 半虚拟化 硬件辅助的虚拟化 从GUI到Linux内核,包括以下五个组件: virt-manager一个用来

    2024年02月01日
    浏览(49)
  • 【KVM虚拟化】· 命令行KVM安装linux

    目录 🍁基础本环境配置 🍁添加lvm卷 🍁qemu-img创建磁盘文件 🍂创建raw格式 🍂创建虚拟机 🍂转换格式为qcow2 🍁virt-install命令参数 🍁案例操作    🦐博客主页:大虾好吃吗的博客    🦐专栏地址:KVM虚拟化专栏 最小化安装centos系统,勾选虚拟化功能。   修改网卡信息,

    2024年02月04日
    浏览(52)
  • Ubuntu 安装 KVM 虚拟化

    KVM 是 Linux 内核中一个基于 hypervisor 的虚拟化模块,它允许用户在 Linux 操作系统上创建和管理虚拟机。 如果机器的CPU不支持硬件虚拟化扩展,是无法使用KVM(基于内核的虚拟机)直接创建和运行虚拟机的。此时最多只能使用QEMU的完全软件仿真模式来运行虚拟机,但是性能会极度

    2024年04月29日
    浏览(31)
  • 虚拟化技术KVM入门学习

      虚拟化[Virtualization]技术最早出现在 20 世纪 60 年代的 IBM ⼤型机系统,在70年代的 System370 系列中逐渐流⾏起来,这些机器通过⼀种叫虚拟机监控器[Virtual Machine Monitor,VMM]的程序在物理硬件之上⽣成许多可以运⾏独⽴操作系统软件的虚拟机[Virtual Machine]实例。随着近年多核

    2024年02月10日
    浏览(56)
  • VirtualBox 部署 KVM 虚拟化

    KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,它是Linux内核的一部分。KVM通过将Linux内核转换为Hypervisor,允许在同一物理主机上运行多个虚拟机实例,每个实例可以独享一部分系统资源。 KVM的工作原理是将Linux内核扩展为虚拟化管理程序,它直接在硬件上运行,并提

    2024年02月11日
    浏览(46)
  • KVM虚拟化基本操作

    虚拟化软件是可以让一台物理主机建立与执行一至多个虚拟化环境的软件,虚拟化将硬件、操作系统和应用程序一同封装一个可迁移的虚拟机档案文件中。 安装位置分类 目前从Hypervisor(虚拟机管理程序)安装位置分类,虚拟化层面包括安装在硬件层上、安装在宿主操作系统层

    2024年01月25日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包