KVM热迁移完整实操实验:NFS共享存储环境搭建与跨主机迁移全过程

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