KVM热迁移实验
摘要:本文详细记录了KVM热迁移实验的完整操作流程。实验基于三台虚拟机(KVM1、KVM2、NFS)搭建环境,通过克隆方式创建节点,配置统一的hosts文件和网络设置。使用NFS作为共享存储,在KVM1和KVM2上分别挂载共享目录。在KVM1上创建虚拟机并安装到共享存储,最后演示了虚拟机从KVM1到KVM2的热迁移过程。实验涵盖了从环境搭建、网络配置、存储共享到最终迁移验证的全套步骤,并提供了详细的命令行操作和界面截图。
拓扑图

KVM1做完KVM单机实验后,还原快照,然后通过KVM1克隆出KVM2,NFS

通过KVM1克隆KVM2



选择完整克隆


同理完整克隆一台NFS
将三台虚拟机开机,先开KVM1,然后依次开机

KVM2修改主机名
bash
[root@KVM1 ~]# hostnamectl set-hostname KVM2
[root@KVM1 ~]# bash
[root@KVM2 ~]#
KVM2修改IP地址为192.168.108.102
bash
[root@KVM2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
PROXY_METHOD=nonee
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens160
#UUID=3b58adc4-7bfb-4ce7-bdc5-7893a708ebb3 #UUID这行删掉
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.108.102 #修改IP地址为192.168.108.102
PREFIX=24
GATEWAY=192.168.108.2
[root@KVM2 ~]# nmcli connection reload ens160
[root@KVM2 ~]# ifconfig ens160 #验证IP地址修改为了192.168.108.102
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.108.102 netmask 255.255.255.0 broadcast 192.168.108.255
inet6 fe80::20c:29ff:fe65:cdbe prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:65:cd:be txqueuelen 1000 (Ethernet)
RX packets 145 bytes 29672 (28.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 154 bytes 15502 (15.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
NFS修改主机名
bash
[root@KVM1 ~]# hostnamectl set-hostname NFS
[root@KVM1 ~]# bash
[root@NFS ~]#
NFS修改IP地址为192.168.108.100
bash
[root@NFS ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens160
#UUID=3b58adc4-7bfb-4ce7-bdc5-7893a708ebb3 #删除这行
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.108.100 #IP改为100
PREFIX=24
GATEWAY=192.168.108.2
[root@NFS network-scripts]# nmcli connection reload ens160
[root@NFS network-scripts]# ifconfig ens160
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.108.100 netmask 255.255.255.0 broadcast 192.168.108.255
inet6 fe80::20c:29ff:fe95:ee3f prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:95:ee:3f txqueuelen 1000 (Ethernet)
RX packets 332 bytes 89769 (87.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 275 bytes 46318 (45.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
KVM1,KVM2,NFS三节点都配置相同的hosts文件
bash
# KVM1操作:
[root@KVM1 ~]# cat >> /etc/hosts << EOF
192.168.108.100 NFS
192.168.108.101 KVM1
192.168.108.102 KVM2
EOF
#将KVM1改好的hosts文件复制到KVM2节点
[root@KVM1 ~]# scp /etc/hosts root@KVM2:/etc/hosts
#将KVM1改好的hosts文件复制到NFS节点
[root@KVM1 ~]# scp /etc/hosts root@NFS:/etc/hosts
创建共享存储NFS:

bash
# NFS操作:
[root@NFS ~]# mkdir /nfs #用于共享的目录
[root@NFS ~]# vim /etc/exports
/nfs *(rw,no_root_squash,no_subtree_check)
#第一列:/nfs共享出去的目录
#第二列:*代表允许所有网段访问
#rw: 挂载此目录的客户端对该共享目录具有读写权限
#sync:资料同步写入内存和磁盘
#no_root_squash:客户机用root访问该共享文件夹时,不映射root用户,root_squash:客户机用root访问该共享文件夹时,将root用户映射成匿名用户
#no_subtree_check:不检查父目录权限
[root@NFS ~]# systemctl restart nfs-server.service #重启NFS服务
[root@NFS ~]#
[root@NFS ~]# showmount -e localhost #本地测试NFS共享成功了没
Export list for localhost:
/nfs *
[root@NFS ~]# systemctl stop firewalld.service #停止防火墙服务
# 在KVM1、KVM2分别测试下能否访问NFS的共享目录
[root@KVM1 ~]# showmount -e 192.168.108.100
Export list for 192.168.108.100:
/nfs *
KVM1,KVM2分别创建/NFS目录用于挂载NFS的/nfs目录
bash
[root@KVM1 ~]# mkdir /NFS
[root@KVM2 ~]# mkdir /NFS
操作KVM1,将KVM2添加进来
KVM1上操作:



右击Details两个KVM改名字

最终修改结果如下

KVM1,KVM2添加共享存储NFS,先点KVM1操作


点击左下角+,添加新存储

TYpe: ntefs
Target Path: /NFS KVM1 KVM2挂载目录
Host Name: NFS服务器地址
Source Path: /nfs NFS共享目录

KVM2同样的操作

上传CentOS镜像,到KVM1,KVM1使用共享存储创建虚拟机

镜像上传好后,点击KVM1,创建虚拟机


选择刚才上传的镜像


选择安装到共享存储NFS






正常安装虚拟机,虚拟机正常装完,重启时会自动弹出光盘

接下来先正常安装虚拟机,直到安装完成
开始迁移
KVM1和KVM2关闭防火墙
bash
KVM1:
[root@KVM1 ~]# systemctl stop firewalld.service
KVM2:
[root@KVM2 ~]# systemctl stop firewalld.service


虚拟机从KVM1跑到KVM2
