KVM虚拟机热迁移(基于共享存储)

KVM虚拟机热迁移

    • KVM虚拟机冷迁移过程
    • KVM虚拟机热迁移原理
    • 热迁移前提条件
        • 配置`NFS服务器`
        • 重启NFS服务端
        • NFS客户端上测试是否可以连通NFS服务器
        • 2台KVM服务器挂载NFS
      • 最少需要`2`台`KVM服务器`,且环境要一致
      • `KVM1`上创建一台VM,指定磁盘文件为`NFS共享存储路径`
    • 开始热迁移
      • KVM1上创建虚拟机(将磁盘文件放在NFS中)
      • 启动热迁移
      • 查看VM实例是否已经在KVM2上运行
    • 常见问题
      • 不加--usafe参数将无法完成热迁移
      • 两台KVM服务器不加host将无法完成迁移

KVM虚拟机冷迁移过程

冷迁移就是把虚拟机磁盘文件传到KVM2机器上,然后生成该虚拟机的配置文件,启动这个虚拟机
冷迁移到缺点:

  • VM要关机
  • 传磁盘文件慢
  • 总耗时长

KVM虚拟机热迁移原理

KVM虚拟机迁移过程中,迁移VM磁盘文件,这个过程是耗时最长的。
热迁移就是将VM的磁盘文件放在共享存储服务器中,这样就省略了传虚拟机实例磁盘文件的过程,不需要VM关机即可完成热迁移


热迁移前提条件

热迁移前提条件

  • 共享存储、
  • 目的和源端物理机时间一致、
  • 网络配置一致、
  • 源和目的物理机的CPU flags、
  • CPU model一致、
  • Qemu版本一致

最少一台共享存储服务器


配置NFS服务器

https://blog.csdn.net/omaidb/article/details/120926883
image.png

## /data 共享的目录
## 允许访问的网段10.0.0.0/24
## rw 允许读写
## async 数据延迟落盘,async相比sync性能要高一些
## no_root_squash 客户端使用root用户连接NFS时,依然映射为root用户
/data 10.0.0.0/24(rw,async,no_root_squash)

重启NFS服务端

# 重启NFS服务端以使配置生效

# 重启rpcbind服务
systemctl restart rpcbind

# 重启nfs服务
systemctl restart nfs

image.png


NFS客户端上测试是否可以连通NFS服务器

# KVM服务器上安装NFS客户端
yum install -y nfs-utils

# 验证NFS是否可被export和挂载
## -d:仅显示已被NFS客户端加载的目录;
## -e:显示NFS服务器上所有的共享目录。
showmount -e 10.0.0.31

image.png


2台KVM服务器挂载NFS

# 将nfs挂载写入/etc/fstab中持久挂载
## _netdev,防止客户端在网络就绪之前开始挂载文件系统
echo "10.0.0.31:/data /opt defaults,_netdev	0 0" >> /etc/fstab

# 自动挂载/etc/fstab
mount -a

最少需要2KVM服务器,且环境要一致

KVM虚拟机热迁移(基于共享存储)_第1张图片

  • 互相添加hostsssh免密
  • 启动libvirt服务
  • 桥接网卡
  • 安装NFS客户端,KVM服务器挂载共享存储
  • VM磁盘文件存放在共享存储
# 在KVM1上在NFS创建一个测试文件
echo "test1" > /opt/test.txt

# 在KVM2确认是否能查看到这个文件
ls /opt/test.txt
cat /opt/test.txt

KVM1上创建一台VM,指定磁盘文件为NFS共享存储路径

## --virt-type 指定虚拟化类型
## --os-type=linux  指定操作系统类型
## --os-variant   指定操作系统版本
## --name     指定vm实例名称
## --memory   指定内存大小单位MB
### maxmemory=2048 最大可用内存,扩容时不能超过这个数值
## --vcpus    指定cpu核数
### maxvcpus=10  最大使用CPU核数,扩容时不能超过这个数值
## --disk     指定vm实例的磁盘路径
### format=raw,size=10 指定磁盘格式为raw,磁盘大小10GB
## --cdrom    系统安装光盘文件的路径
## network    指定网络类型,默认是NAT模式
## graphics vnc  把图形画面交给vnc的服务端来输出
### listen=0.0.0.0 vnc服务器监听的IP地址
virt-install \
--virt-type kvm \
--os-type=linux \
--os-variant rhel7 \
--name vm名称 \
--memory 512,maxmemory=2048 \
--vcpus 1,maxvcpus=10 \
--disk /opt/centos3.qcow2 \
--boot hd
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--console pty,target_type=serial \
--extra-args 'console=ttyS0,115200n8 serial' \
--noautoconsole

开始热迁移

https://www.qstack.com.cn/archives/368.html


KVM1上创建虚拟机(将磁盘文件放在NFS中)

注意,参数指定的路径kvm用户有读写权限才可以正常创建。

## --virt-type 指定虚拟化类型
## --os-type=linux  指定操作系统类型
## --os-variant   指定操作系统版本
## --name     指定vm实例名称
## --memory   指定内存大小单位MB
### maxmemory=2048 最大可用内存,为共享资源
## --vcpus    指定cpu核数
### maxvcpus=10  最大使用CPU核数,为共享资源
## --disk     指定vm实例的磁盘路径
### format=raw,size=10 指定磁盘格式为raw,磁盘大小10GB
## --cdrom    系统安装光盘文件的路径
## network    指定网络类型,默认是NAT模式
## graphics vnc  把图形画面交给vnc的服务端来输出
### listen=0.0.0.0 vnc服务器监听的IP地址
virt-install \
--virt-type kvm \
--os-type=linux \
--os-variant rhel7 \
--name vm名称 \
--memory 512,maxmemory=2048 \
--vcpus 1,maxvcpus=10 \
--disk /opt/centos3.qcow2 \
--boot hd
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--console pty,target_type=serial \
--extra-args 'console=ttyS0,115200n8 serial' \
--noautoconsole

kvm上查看这台虚拟机是否已创建

# KVM1上查看虚拟机列表
virsh list --all

# KVM2上查看虚拟机列表
virsh list --all
## kvm2的VM列表应该为空

KVM虚拟机热迁移(基于共享存储)_第2张图片


启动热迁移

# 执行热迁移
## --live VM活动时迁移(热迁移)
## --verbose 详细信息
## qemu+ssh 调用libvirt协议(固定写法)
## --unsafe 热迁移默认要求VM实例不能设置缓存,不加该参数无法迁移
virsh migrate --live --verbose 虚拟机名称 qemu+ssh://10.0.0.12/system --unsafe

# 或
virsh migrate --live --verbose 虚拟机名称 qemu+ssh://kvm2/system --unsafe

image.png
VM热迁移过程中,会有短暂的丢包
KVM虚拟机热迁移(基于共享存储)_第3张图片


查看VM实例是否已经在KVM2上运行

# KVM1上查看VM列表
virsh list

image.png

# KVM2上查看VM列表
virsh list

KVM虚拟机热迁移(基于共享存储)_第4张图片


常见问题


不加–usafe参数将无法完成热迁移

# 执行热迁移
## --live VM活动时迁移(热迁移)
## --verbose 详细信息
## qemu+ssh 调用libvirt协议(固定写法)
## --unsafe 热迁移默认要求VM实例不能设置缓存,不加该参数无法迁移
virsh migrate --live --verbose 虚拟机名称 qemu+ssh://10.0.0.12/system

image.png


两台KVM服务器不加host将无法完成迁移

# 执行热迁移
## --live VM活动时迁移(热迁移)
## --verbose 详细信息
## qemu+ssh 调用libvirt协议(固定写法)
## --unsafe 热迁移默认要求VM实例不能设置缓存,不加该参数无法迁移
virsh migrate --live --verbose 虚拟机名称 qemu+ssh://10.0.0.12/system --unsafe

image.png

你可能感兴趣的:(KVM,KVM热迁移,NFS)