首页 > 其他分享 >kvm冷热状态迁移

kvm冷热状态迁移

时间:2023-04-25 21:45:25浏览次数:49  
标签:冷热 kvm kvm01 kvm02 web01 迁移 root 虚拟机

kvm冷热状态迁移

 精选 原创

wx5b9c94b17c62a2020-03-24 22:40:36博主文章分类:kvm

文章标签kvm冷热状态迁移文章分类虚拟化云计算阅读数4847

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 的设置是相同的.

一,静态迁移

环境描述:

主机名IP地址操作系统
kvm01 172.16.1.30 centos7
kvm02 172.16.1.40 centos7

1,准备工作
1)在kvm01和kvm02主机上安装kvm

环境要求:
1、如果是物理服务器,需要在BIOS中打开虚拟化功能(Virtualization Technology),一般的服务器默认是打开这个功能的。
2、如果是用VMware Workstation做实验,建立的虚拟机的CPU要勾选虚拟化功能,这样虚拟机才会支持KVM虚拟化

#验证cpu是否支持虚拟化:
kvm冷热状态迁移_kvm冷热状态迁移

#安装虚拟化软件:
[root@kvm01 ~]# yum -y install qemu-kvm qemu-kvm-tools qemu-img libvirt virt-install virt-manager  bridge-utils
  • 1.
  • 2.
 

各工具包的作用:

qemu-kvm  //KVM核心模块
qemu-kvm-tools //KVM调试工具,可选择性安装
qemu-img  //创建,转换和修改镜像,能处理被qemu支持的所有镜像格式
libvirt //管理虚拟机的工具包
virt-install  //libvirt库构建新虚拟机的命令行工具
virt-manager //图形化界面管理虚拟机
 bridge-utils //配置linux以太网桥
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
 

#如果是最小化安装,则还需要安装GNOME桌面环境 yum -y groupinstall “GNOME 桌面” .

 #启动libvirtd工具:
 [root@kvm01 ~]# systemctl start libvirtd
[root@kvm01 ~]# systemctl status libvirtd
  • 1.
  • 2.
  • 3.
 

kvm冷热状态迁移_kvm冷热状态迁移_02
kvm02主机操作与上边相同。

2)创建一个虚拟机(那就创建kvm01主机上)

#创建存放磁盘文件和centos镜像的目录:
[root@kvm01 ~]# mkdir /kvm-vm
[root@kvm01 ~]# mkdir /iso
[root@kvm01 ~]# ls /iso/
CentOS-7-x86_64-DVD-1708.iso    #上传centos镜像
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
 

#kvm命令行安装:

[root@kvm01 ~]# virt-install --os-type=linux --os-variant centos7.0 --name web01 --ram 1024 --vcpus 1 --disk /kvm-vm/web01.qcow2,format=qcow2,size=10 --location /iso/CentOS-7-x86_64-DVD-1708.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

Starting install...
Retrieving file .treeinfo...                                                       |  354 B  00:00:00     
Retrieving file vmlinuz...                                                         | 5.6 MB  00:00:00     
Retrieving file initrd.img...                                                      |  46 MB  00:00:00     
Allocating 'web01.qcow2'                                                           |  10 GB  00:00:00     
Domain installation still in progress. You can reconnect to 
the console to complete the installation process.
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
 

参数解释:

通过virt-install命令创建新虚拟机并进行安装
 --os-type= linux  #系统类型为linux
 --os-variant=  #指定操作系统版本	
 --name  #指定虚拟机名称
 --ram   #以MB为单位为客户端事件分配的内存
 --vcpus  #配置虚拟机的虚拟CPU(vcpu)数量
 --disk   #指定虚拟机的存储位置,磁盘文件的格式及大小(单位GB)
 --location  #选择安装源
 --network   #配置客户网络接口
 --graphics	#配置虚拟机显示设置(vnc)
 listen=0.0.0.0  #表示所有网段都可以连接该虚拟机
 --noautoconsole #不管是否部署成功,执行完都会退出,如果不加的话,将会一直卡在终端
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
 

安装成功后,在命令行输入virt-manager打开kvm图形化管理界面,如下所示:
kvm冷热状态迁移_kvm冷热状态迁移_03
点击进入安装centos系统。安装完成后,查看虚拟机的一个状态:

[root@kvm01 ~]# virsh list --all
 Id    Name                           State
---------------------------------------------------- 
 -     web01                          shut off     #安装完成后,默认保持关闭状态
  • 1.
  • 2.
  • 3.
  • 4.
 

配置kvm虚拟机为桥接网络(使其能够访问外网):

#关闭宿主机的网络控制台:
[root@kvm01 ~]# systemctl stop NetworkManager
#在宿主机上创建br0(桥接网卡):
[root@kvm01 ~]# virsh iface-bridge ens33 br0
Created bridge br0 with attached device ens33
Bridge interface br0 started
#修改实例的配置文件:
[root@kvm01 ~]# virsh edit web01 
     69     <interface type='bridge'>    #修改网卡类型为桥接
     70       <mac address='52:54:00:dc:0f:d0'/>
     71       <source bridge='br0'/>   #指定桥接网卡

#启动实例:
[root@kvm01 ~]# virsh start web01 
Domain web01 started

[root@kvm01 ~]# virsh list 
 Id    Name                           State
----------------------------------------------------
 2     web01                          running
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
 

配置web01主机的网络配置信息,并测试ping通外网:
kvm冷热状态迁移_kvm冷热状态迁移_04

2,静态迁移
静态迁移主要分为两个步骤:
1)拷贝镜像文件和虚拟机配置文件
2)重新定义此虚拟机

1)关闭或挂起虚拟机:
[root@kvm01 ~]# virsh shutdown web01 
Domain web01 is being shutdown
[root@kvm01 ~]# virsh list 
 Id    Name                           State
----------------------------------------------------
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
 

2)拷贝镜像文件和配置文件至kvm02主机:
#在拷贝之前先准备好kvm02主机上的环境,省得待会再去修改配置文件对应的参数(麻烦)。

[root@kvm02 ~]# mkdir /kvm-vm   //创建对应的镜像文件目录
[root@kvm02 ~]# systemctl stop NetworkManager  
[root@kvm02 ~]# virsh iface-bridge ens33 br0   //创建桥接网卡
Created bridge br0 with attached device ens33
Bridge interface br0 started
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
 
#拷贝:
[root@kvm01 ~]# scp /kvm-vm/web01.qcow2 172.16.1.40:/kvm-vm/
[root@kvm01 ~]# scp /etc/libvirt/qemu/web01.xml  172.16.1.40:/etc/libvirt/qemu/
  • 1.
  • 2.
  • 3.
 

3)在kvm02主机上定义该虚拟机:

[root@kvm02 ~]# virsh define /etc/libvirt/qemu/web01.xml 
Domain web01 defined from /etc/libvirt/qemu/web01.xml

#启动虚拟机:
[root@kvm02 ~]# virsh start web01 
Domain web01 started

[root@kvm02 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     web01                          running

[root@kvm02 ~]# 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
 

成功完成静迁移。。。

二,动态迁移(热迁移)

动态迁移主要分为5个步骤:
1,创建共享存储
2,两台机器挂载共享存储(手动挂载;使用资源池)
3,启动动态迁移
4,创建迁移后的虚拟机配置文件
5,重新定义虚拟机

环境描述:

主机名IP地址操作系统
nfs 172.16.1. 10 centos7
kvm01 172.16.1.30 centos7
kvm02 172.16.1.40 centos7
1)第一步,关闭所有主机的selinux(一定要关)及防火墙;
[root@kvm01 ~]# vim /etc/selinux/config
SELINUX=disabled
[root@kvm01 ~]# reboot  #重启生效

[root@kvm01 ~]# systemctl stop firewalld     
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
 

注意:不要使用setenforce 0(临时关闭),否则迁移时还会报错。

2)部署nfs(在nfs服务器上)

[root@nfs ~]# yum -y install nfs-utils
[root@nfs ~]# vim /etc/exports
/nfs-share 172.16.1.0/24(rw,sync,no_root_squash)
[root@nfs ~]# mkdir /nfs-share
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl start nfs-server
[root@nfs ~]# systemctl enable nfs-server
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
 

#kvm01和kvm02测试是否能够进行远程挂载

[root@kvm01 ~]# showmount -e 172.16.1.10
Export list for 172.16.1.10:
/nfs-share 172.16.1.0/24
[root@kvm02 ~]# showmount -e 172.16.1.10
Export list for 172.16.1.10:
/nfs-share 172.16.1.0/24
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
 

3)设置主机名,/etc/hosts 互相解析,以及两台kvm主机配置免密登录

[root@kvm01 ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.1.10 nfs
172.16.1.30 kvm01
172.16.1.40 kvm02
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
 
#拷贝给其他主机:
[root@kvm01 ~]# for i in 10 40; do scp /etc/hosts 172.16.1.$i:/etc/; done
  • 1.
  • 2.
 
#配置免密登录:
[root@kvm01 ~]# ssh-keygen -t rsa
[root@kvm01 ~]# ssh-copy-id kvm02
[root@kvm01 ~]# ssh kvm02 hostname
kvm02
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
 

4)两个kvm主机进行挂载共享存储:

#需要将kvm01上的镜像文件,拷贝至nfs的共享目录中:
[root@kvm01 ~]# scp /kvm-vm/web01.qcow2  nfs:/nfs-share
[root@nfs ~]# ls /nfs-share/
web01.qcow2
  • 1.
  • 2.
  • 3.
  • 4.
 
kvm01:  
[root@kvm01 ~]# vim /etc/fstab    
//添加以下内容:
172.16.1.10:/nfs-share          /kvm-vm                 nfs     defaults        0 0
[root@kvm01 ~]# mount -a     //重新加载
[root@kvm01 ~]# ls /kvm-vm/
web01.qcow2

kvm02:
[root@kvm02 ~]# mkdir /kvm-vm
[root@kvm02 ~]# vim /etc/fstab
172.16.1.10:/nfs-share          /kvm-vm                 nfs     defaults        0 0
[root@kvm02 ~]# mount -a
[root@kvm02 ~]# ls /kvm-vm/
web01.qcow2
#创建桥接网络:
[root@kvm02 ~]# systemctl stop NetworkManager
[root@kvm02 ~]# virsh iface-bridge ens33 br0 
Created bridge br0 with attached device ens33
Bridge interface br0 started
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
 

4)进行动态迁移:
#在动态迁移之前,模拟web01虚拟机正常工作中:
kvm冷热状态迁移_kvm冷热状态迁移_05

kvm提供了迁移工具migrate:
[root@kvm01 ~]# virsh migrate --live --unsafe --verbose web01 qemu+ssh://172.16.1.40/system
Migration: [100 %]     #迁移成功
  • 1.
  • 2.
  • 3.
 

参数解释:

–live #热迁移
–unsafe #即使不安全也要强制迁移
–verbose #显示迁移过程
web01则表示当前的域名(虚拟机),后边则指向目标主机的地址。

#迁移成功后,在kvm02主机上查看虚拟机状态:

[root@kvm02 ~]# virsh list 
 Id    Name                           State
----------------------------------------------------
 2     web01                          running
  • 1.
  • 2.
  • 3.
  • 4.
 

可以看到虚拟机的状态为运行状态。

#登录虚拟机,查看工作状态是否不间断:
kvm冷热状态迁移_kvm冷热状态迁移_06

可以看到通过热迁移,虚拟机会一直保持工作,并不会丢失数据,并且QEMU/KVM 会关闭源宿主机上的客户机,再将剩余的数据量传输到目的主机上。至此,迁移目标已经实现了。

在生产环境中,接下来我们可以选择一个合适的时间来重新定义虚拟机:

#将虚拟机的配置文件拷贝至新机上(或自己创建配置文件):
[root@kvm01 ~]# scp /etc/libvirt/qemu/web01.xml kvm02:/etc/libvirt/qemu/
web01.xml                                                               100% 4047     4.0KB/s   00:00   
[root@kvm02 ~]# ls /etc/libvirt/qemu  #在web02上查看
networks  web01.xml
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
 
#重新定义虚拟机:
[root@kvm02 ~]# virsh shutdown web01 
Domain web01 is being shutdown

[root@kvm02 ~]# virsh define /etc/libvirt/qemu/web01.xml 
Domain web01 defined from /etc/libvirt/qemu/web01.xml

[root@kvm02 ~]# virsh start web01   #启动虚拟机
Domain web01 started

[root@kvm02 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 3     web01                          running    

[root@kvm02 ~]# 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
 

至此,热迁移工作结束。。

常见错误:

1、迁移时遇到的错误描述:
# virsh migrate centos --live qemu+ssh://192.168.30.132/system
error: unable to connect to server at 'KVM-2:49152': No route to host    
原因:你的免密登录没有成功
解决方法:重新做免密登录即可
2、迁移时的存储错误:
# virsh migrate centos --live qemu+ssh://192.168.30.132/system
 error: Failed to open file '/mnt/CentOS6.8.qcow2': Input/output error
  原因:存储没有挂载成功
  解决方法:mount -o remount /dev/sdb /mnt
3、迁移时FQDN错误:
# virsh migrate centos --live qemu+ssh://192.168.30.132/system
 error: internal error hostname on destination resolved to localhost, but migration requires an FQDN
  原因:两台宿主机无法解析主机名
  解决方法:重新配置主机名和ip的解析
4、迁移时语法错误:
# virsh migrate centos --live qemu+ssh://192.168.30.132:/system
error: internal error Unable to parse URI qemu+ssh://192.168.30.132:/system
  原因:qemu+ssh语法写错了
  解决方法:正确的应该是:virsh migrate centos --live qemu+ssh://192.168.30.132/system

标签:冷热,kvm,kvm01,kvm02,web01,迁移,root,虚拟机
From: https://www.cnblogs.com/cheyunhua/p/17354006.html

相关文章

  • sqlplus工具迁移数据经验
        需要紧急把测试服务器数据迁移到pc机用于演示,但pc机无网络又没有客户端工具,只能使用sqlplus,且导出得文件又是sql文件,失去工具支持导入共过程遇到很多问题,如乱码问题,sql文件中特殊字符,日志存放和查看,导出文件不能写入,安装过程目录写入权限等大小问题。希望通过这篇博客把......
  • ceph-san跨存储迁移指导文档
    CEPH-SAN存储后端迁移指导文档确认需要进行虚拟机的UUID和宿主机节点当前宿主机节点为FZHZ4-TSTACK-COM05确认该宿主机节点是否对接FCSAN对接SAN后需要满足以下条件才可进行跨存储迁移1).HBA卡要插线,确认有端口速率2).在SAN存储上添加映射关系3).SAN交换机zone要划分正取可......
  • 无感平滑迁移:海量高并发数据库如何进行国产化改造?
    首先,讲一下数据库国产化的大背景。一、数据库国产化的背景国家战略方面的,随着外部形势的日益复杂,核心技术急需实现自主可控、安全可靠、高效开放;另一个要求是业务方面的,当业务高速发展后各种问题会接踵而至,单机数据库达到瓶颈,业务拆分、垂直拆分、水平拆分等,都需要花费大量的研发时......
  • 热迁移虚拟机报rpc超时
    问题背景:南网生产V区,热迁移虚拟机偶发性失败。问题现象:热迁移虚拟机有时候能成功,有时候直接报错。影响范围:影响热迁移功能问题排查过程:现场反馈源节点7需要做停机整改,所以需要将源节点7上的虚拟机热迁移走。现在迁移成功两台,然后再迁移就报错了。看到nova-compute报错第一时间想到......
  • 虚拟机热迁移一直处于迁移中的状态-v4-20210308_124243
    虚拟机热迁移一直处于迁移中的状态企业云平台产品中心共享知识库Exportedon03/08/2021TableofContents问题现象:对虚拟机进行热迁移操作,Dashboard和云服务自助平台上一直处于迁移中的状态问题原因:虚拟机存在频繁的数据读写操作,导致虚拟机迁移的速度追不上数据读写的速度,每次迁......
  • 迁移学习(MEnsA)《MEnsA: Mix-up Ensemble Average for Unsupervised Multi Target Doma
    论文信息论文标题:MEnsA:Mix-upEnsembleAverageforUnsupervisedMultiTargetDomainAdaptationon3DPointClouds论文作者:AshishSinha,JonghyunChoi论文来源:2023 CVPR论文地址:download 论文代码:download视屏讲解:click1前言单目标域和多目标域2介绍单......
  • 将CVS版本库迁移到Git
    cvs项目全路径:ls/home/cvsroot/crmCVSROOT myCRM19----------------------------------------------------------------------------------------------------------#安装两个工具yum install git-cvsyum install cvsps #创建一个目录存放,并进入目录mkdir/home/aa......
  • 数据迁移测试经验
    博主写的很好:https://mp.weixin.qq.com/s/zcprBpXLjAnYAqmi-9Nd4g  兴兵乐儿”微信公众号(兴业数字金融)作者:汪立文、黄丹,兴业数金 测试服务中心 以下为作者观点: 数据迁移,是在保证新旧系统业务连续性的前提下,将数据从旧数据库迁移到新数据库的过程,测试前通过迁移策......
  • 利用Velero对K8S备份还原与集群迁移实战
    一、简介Velero是一款云原生时代的灾难恢复和迁移工具,采用Go语言编写,并在github上进行了开源,利用velero用户可以安全的备份、恢复和迁移Kubernetes集群资源和持久卷。开源地址:https://github.com/vmware-tanzu/velero官方文档:https://velero.io/docs/v1.11/1.1支......
  • 简单粗暴的oracle数据库跨平台迁移
    源端:windows平台,oracle版本:11.2.0.4目标端:linux平台,oracle版本:11.2.0.4,数据文件路径:/data/orcl测试环境下,数据量不大,有足够的停机窗口时间由于rman跨平台迁移不支持11g版本,正好测试一下最原始、最简单粗暴的迁移方式思路:直接复制数据文件、日志文件1、确认linux平台数据库版本、实......