KVM虚拟机的冷热迁移
首先了解在KVM(Kernel-based Virtual Machine)环境中,冷热迁移是指将虚拟机从一台主机迁移到另一台主机的过程,根据虚拟机是否需要停机,迁移分为热迁移和冷迁移:
冷迁移(Cold Migration)
- 定义:冷迁移指在虚拟机关机的状态下进行迁移,即将虚拟机停止运行后,将其数据迁移到另一台物理主机,然后在新主机上启动。
- 优点:实现方式较为简单,资源占用低,适合在不要求高可用性的场景中使用。
- 应用场景:适用于需要较长时间的迁移、主机硬件维护或计划停机等情况下。
- 技术原理:在虚拟机完全停止后,将虚拟机的配置文件和存储卷复制到目标主机,然后在目标主机上重启虚拟机。
热迁移(Live Migration)
- 定义:热迁移指在不关闭虚拟机的情况下,将其从一台物理主机转移到另一台物理主机上。这意味着虚拟机在迁移过程中几乎不影响运行。
- 优点:实现了虚拟机在不停机状态下的转移,适合需要高可用性和持续运行的业务场景。
- 应用场景:当需要进行主机维护或负载均衡时,可以通过热迁移将虚拟机转移到其他主机,避免中断服务。
- 技术原理:KVM 使用内存预拷贝(pre-copy)机制,在迁移前将虚拟机内存状态复制到目标主机。迁移时,首先复制内存的静态部分,随后实时同步内存的变化部分,直到两边内存状态完全一致。
实验环境:
主机 | IP |
---|---|
server | 10.0.0.200 |
Ubuntu02 | 10.0.0.201 |
配置SSH免密和设置hosts解析
请在两台主机上分别执行
ssh key-gen
ssh-copy-id root@10.0.0.200
1、 冷迁移案例之无依赖环境迁移
环境查看
如若虚拟机还在运行中,请先关闭虚拟机在进行冷迁移动作
virsh destroy xxxxx
查看要迁移的虚拟机对应的磁盘文件路径,(这里我们迁移ubuntu20.04)
拷贝虚拟机的配置文件和磁盘到目标节点
在Ubuntu02主机上导入虚拟机并启动
可以使用用Xmanager打开窗口看的更清楚点
发现迁移前后,IP地址不变
2、热迁移
部署NFS服务器 源KVM虚拟机上操作
apt -y install nfs-kernel-server
编辑配置文件
[root@server ~]# vim /etc/exports
/data/isos *(rw,sync,no_root_squash)
#其中,* 表示允许所有客户端访问该共享。您可以根据需求更改为特定的 IP 地址或 IP 范围。选项说明:#rw:读写权限。
#sync:同步写入。
#no_root_squash表示当前客户机以root身份访问时赋予本地root权限
#(默认是root_squash,将作为nfsnobody用户对待),若不加no_root_squash,可能会导致被降权,而无法进行读写(rw)。
更新配置及重启服务
exportfs -a
systemctl restart nfs-kernel-server.service
配置NFS服务 在目标虚拟机上操作
apt install nfs-common -y
在客户端上创建一个挂载点,并将服务器的NFS共享目录挂载到该挂载点
mount -t nfs 10.0.0.200:/data/isos /data/isos
也可以设置开机自动挂载(可选)
10.0.0.200:/data/isos /data/isos nfs defaults 0 0
热迁移时保证是不可以影响服务,这边是按照正在运行中的虚拟机进行迁移
为了模拟服务过程,这里采用长ping的方式进行测试
命令行进行迁移
virsh migrate --live ubuntu20.04-test --unsafe qemu+ssh://ubuntu02/system
#可选
--persistent 表示同时虚拟机的迁移配置文件。
--undefinesource 表示迁移时删除源虚拟机。
跟踪日志发现迁移过程
tail -f /var/log/libvirt/qemu/ubuntu20.04-test.log
迁移完成后,虚拟机并未停止中断服务,并已经运行在Ubuntu02虚拟机上
观察长ping的服务,发现就中断了一下,这个是不影响服务的
至此热迁移已完成
也可以在virt-manager
上进行操作 建议使用
也可以反向再迁移回去到server服务器上去。