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

一,静态迁移

环境描述:

主机名 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是否支持虚拟化:

#安装虚拟化软件:
[[email protected] ~]# yum -y install qemu-kvm qemu-kvm-tools qemu-img libvirt virt-install virt-manager  bridge-utils

各工具包的作用:

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

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

 #启动libvirtd工具:
 [[email protected] ~]# systemctl start libvirtd
[[email protected] ~]# systemctl status libvirtd


kvm02主机操作与上边相同。

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

#创建存放磁盘文件和centos镜像的目录:
[[email protected] ~]# mkdir /kvm-vm
[[email protected] ~]# mkdir /iso
[[email protected] ~]# ls /iso/
CentOS-7-x86_64-DVD-1708.iso    #上传centos镜像

#kvm命令行安装:

[[email protected] ~]# 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.

参数解释:

通过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 #不管是否部署成功,执行完都会退出,如果不加的话,将会一直卡在终端

安装成功后,在命令行输入virt-manager打开kvm图形化管理界面,如下所示:

点击进入安装centos系统。安装完成后,查看虚拟机的一个状态:

[[email protected] ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     web01                          shut off     #安装完成后,默认保持关闭状态

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

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

#启动实例:
[[email protected] ~]# virsh start web01
Domain web01 started

[[email protected] ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 2     web01                          running

配置web01主机的网络配置信息,并测试ping通外网:

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

1)关闭或挂起虚拟机:
[[email protected] ~]# virsh shutdown web01
Domain web01 is being shutdown
[[email protected] ~]# virsh list
 Id    Name                           State
----------------------------------------------------

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

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

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

[[email protected] ~]# virsh define /etc/libvirt/qemu/web01.xml
Domain web01 defined from /etc/libvirt/qemu/web01.xml

#启动虚拟机:
[[email protected] ~]# virsh start web01
Domain web01 started

[[email protected] ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 1     web01                          running

[[email protected] ~]# 

成功完成静迁移。。。

二,动态迁移(热迁移)

动态迁移主要分为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(一定要关)及防火墙;
[[email protected] ~]# vim /etc/selinux/config
SELINUX=disabled
[[email protected] ~]# reboot  #重启生效

[[email protected] ~]# systemctl stop firewalld     

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

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

[[email protected] ~]# yum -y install nfs-utils
[[email protected] ~]# vim /etc/exports
/nfs-share 172.16.1.0/24(rw,sync,no_root_squash)
[[email protected] ~]# mkdir /nfs-share
[[email protected] ~]# systemctl start rpcbind
[[email protected] ~]# systemctl start nfs-server
[[email protected] ~]# systemctl enable nfs-server

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

[[email protected] ~]# showmount -e 172.16.1.10
Export list for 172.16.1.10:
/nfs-share 172.16.1.0/24
[[email protected] ~]# showmount -e 172.16.1.10
Export list for 172.16.1.10:
/nfs-share 172.16.1.0/24

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

[[email protected] ~]# 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
#拷贝给其他主机:
[[email protected] ~]# for i in 10 40; do scp /etc/hosts 172.16.1.$i:/etc/; done
#配置免密登录:
[[email protected] ~]# ssh-keygen -t rsa
[[email protected] ~]# ssh-copy-id kvm02
[[email protected] ~]# ssh kvm02 hostname
kvm02

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

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

kvm02:
[[email protected] ~]# mkdir /kvm-vm
[[email protected] ~]# vim /etc/fstab
172.16.1.10:/nfs-share          /kvm-vm                 nfs     defaults        0 0
[[email protected] ~]# mount -a
[[email protected] ~]# ls /kvm-vm/
web01.qcow2
#创建桥接网络:
[[email protected] ~]# systemctl stop NetworkManager
[[email protected] ~]# virsh iface-bridge ens33 br0
Created bridge br0 with attached device ens33
Bridge interface br0 started

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

kvm提供了迁移工具migrate:
[[email protected] ~]# virsh migrate --live --unsafe --verbose web01 qemu+ssh://172.16.1.40/system
Migration: [100 %]     #迁移成功

参数解释:

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

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

[[email protected] ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 2     web01                          running

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

#登录虚拟机,查看工作状态是否不间断:

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

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

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

[[email protected] ~]# virsh define /etc/libvirt/qemu/web01.xml
Domain web01 defined from /etc/libvirt/qemu/web01.xml

[[email protected] ~]# virsh start web01   #启动虚拟机
Domain web01 started

[[email protected] ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 3     web01                          running    

[[email protected] ~]# 

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

常见错误:

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

原文地址:https://blog.51cto.com/13972012/2481525

时间: 2024-10-17 06:55:54

kvm冷热状态迁移的相关文章

基于本地存储的kvm虚拟机在线迁移

基于本地存储的kvm虚拟机在线迁移 kvm虚拟机迁移分为4种(1)热迁移基于共享存储(2)热迁移基于本地存储(3)冷迁移基于共享存储(4)冷迁移基于本地存储 这里介绍的是热迁移基于本地存储 动态块迁移版本要求qemu版本要求  大于或等于0.12.1 rpm -qa|grep qemu qemu-kvm-0.12.1.2-2.491.el6_8.1.x86_64 qemu-kvm-tools-0.12.1.2-2.491.el6_8.1.x86_64 目标宿主机:10.11.30.52源宿主机:

kvm虚拟机在线迁移

本次实验环境示意图如下图图1所示: 图意解析: 三台VMware虚拟机Original.Destination和Nfsrv,把Original上的KVM虚拟机在线迁移到 Destination上 注:离线迁移本次实验不做演示,只演示基于NFS共享的在线迁移   一NFS服务端配置 1.设置共享目录 [[email protected] ~]# hostname Nfsrv.wjcyf.com [[email protected] ~]# cat /etc/exports /share 192.1

基于NFS共享存储实现KVM虚拟机动态迁移

基于NFS共享存储实现KVM虚拟机动态迁移 一:配置环境 二:安装相关的依赖包 三:实现NFS共享存储 四:KVM机配置相同的步骤 五:安装KVM01安装虚拟机 六:实现迁移  实验初始配置:所有主机关闭防火墙与selinux [[email protected] ~]# iptables -F [[email protected] ~]# systemctl stop firewalld [[email protected] ~]# systemctl disable firewalld [[

KVM虚拟平台——迁移KVM虚拟机

博文大纲:一.KVM虚拟机迁移的方式二.实现KVM虚拟机静态迁移三.实现KVM虚拟机动态迁移 一.KVM虚拟机迁移的方式 KVM平台中的KVM虚拟机迁移分为以下两种: (1)冷迁移(静态迁移) 我们存放虚拟机磁盘的目录都是挂在的一个nfs文件系统的磁盘,进行冷迁移时,只要在目标主机上挂载这个nfs文件系统,就可以看到要迁移的那个虚拟机的磁盘文件,通常以.qcow2或.raw结尾的,然后,只需将虚拟机的.xml配置文件发送到目标服务器上,然后重新定义一下迁移过来的虚拟机即可! (2)热迁移(动态迁

KVM虚拟化笔记(十四)------kvm虚拟机动态迁移

相比kvm虚拟机静态迁移中需要拷贝虚拟机虚拟磁盘文件,kvm虚拟机动态迁移无需拷贝虚拟磁盘文件,但是需要迁移到的虚拟主机之间需要有相同的目录结构虚拟机磁盘文件,本文这部分内容通过nfs来实现,当然也可以采用GFS2集群文件系统来实现,本文以共享存储进行动态迁移 KVM动态迁移目前有两种,一种是基于共享存储的动态迁移,一种是基于基于数据块的动态迁移,需要qemu-kvm-0.12.2以上版本支持,OEL6.3版本是qemu-kvm-0.12.1.2,其它发行版可能有支持 由于资源有限,现在还没有实

TCP状态迁移图浅析(转载)

一.TCP简介        TCP提供一种面向连接的,可靠的字节流服务.面对连接意味着两个使用TCP的应用,在彼此交换数据之前必须先建立一个连接.TCP通过以下方式提供可靠性:     1. 应用数据被分割成TCP认为最适合发送的数据块,由TCP传递给IP的信息单位成为报文段.      2. 当TCP发出一个段后,它就启动一个定时器,等待目的端确认收到这个报文段.如果不能及时收到一个确认,将重发这个报文段.     3. 当TCP收到TCP连接另一端的数据,它将发送一个确认.这个确认不是立即

TCP状态迁移,CLOSE_WAIT &amp; FIN_WAIT2 的问题

TCP状态迁移 大家对netstat -a命令很熟悉,但是,你有没有注意到STATE一栏呢,基本上显示着established,time_wait,close_wait等,这些到底是 什么意思呢,在这篇文章,我将会详细的阐述. 大家很明白TCP初始化连接三次握手吧:发SYN包,然后返回SYN/ACK包,再发ACK包,连接正式建立.但是这里有点出入,当请求者收到SYS /ACK包后,就开始建立连接了,而被请求者第三次握手结束后才建立连接.但是大家明白关闭连接的工作原理吗?关闭连接要四次握手:发FI

kvm虚拟化学习笔记(十四)之kvm虚拟机静态迁移

这里提到的静态迁移同是基于KVM虚拟主机之间的迁移,非异构虚拟化平台的静态迁移. 1.静态迁移就是虚拟机在关机状态下,拷贝虚拟机虚拟磁盘文件与配置文件到目标虚拟主机中,实现的迁移. (1)虚拟主机各自使用本地存储存放虚拟机磁盘文件 本文实现基于本地磁盘存储虚拟机磁盘文件的迁移方式, (2)虚拟主机之间使用共享存储存放虚拟机磁盘文件 该方式只是在目标虚拟主机上重新定义虚拟机就可以了. 2.静态迁移过程如下 (1)确定虚拟机关闭状态 [[email protected] ~]# virsh list

ESXi到KVM之v2v迁移

1.ESXi到KVM之v2v情况说明 (1).配置任务列表: 1)VMwareESXi虚拟平台下linux系统迁移到KVM虚拟平台.2)VMwareESXi虚拟平台下windows系统迁移到KVM虚拟平台. 提示:本文只介绍以上两种迁移过程,KVM到ESXi之v2v可以采用VMwareconvert工具进行迁移. (2).VMwareESXi5.1及虚拟机情况说明 VMwareESXi5.1 IP地址:192.168.233.154 帐号:root/1111111 (3).OEL63_test0