当前位置: 首页 > ops >正文

KVM高级功能部署

一、案例前置知识点

1、KVM 虚拟机迁移

        KVM 虚拟机迁移,是将某一虚拟机上的环境和软件完全复制到另一台物理机上继续运行。KVM 虚拟机迁移可以优化系统负载、重新规划 KVM 虚拟机布局并简化 KVM 虚拟机的管理维护工作。
KVM 虚拟机迁移的主要应用场景如下所示:
        当一台 KVM 宿主机的负载比较高时,可将源 KVM 宿主机上的部分虚拟机迁移到负载较低的 KVM 宿主机中,以保证服务质量。
        通过 KVM 虚拟机迁移将多台负载较低的 KVM 宿主机上的 KVM 虚拟机集中迁移到某一台 KVM 宿主机上,从而达到节约资源的目的。
        在升级 KVM 宿主机硬件设备时,可以将 KVM 宿主机上运行的 KVM 虚拟机迁移到其他 KVM 宿主机上,以解决对硬件的依赖,从而实现业务不中断情况下对物理硬件设备的升级。
跨地域迁移,实现 KVM 虚拟机的远程迁移。
        根据迁移方式的不同,可将迁移分为静态迁移(static magration)和动态迁移(live migration)。二者的区别是:静态迁移时会有一段时间虚拟机中的服务是不可用的,而动态迁移则没有明显的服务暂停时间。

迁移类型关键操作适用存储场景迁移特点
静态迁移关闭虚拟机,拷贝磁盘文件(本地存储时需拷贝,共享存储时无需拷贝,仅拷贝配置文件 )和配置文件到目标主机,恢复启动本地存储、共享存储需停机,依存储位置调整操作
动态迁移保证应用正常服务时迁移,分两种方式:基于共享存储的动态迁移,迁移中虚拟机先在源主机运行,传输内存页,监控修改,评估速度后关闭源主机完成迁移;基于数据块的动态迁移,用于本地存储虚拟机在线迁移,无需共享存储,仅需以太网连接基于共享存储的动态迁移适用于共享存储场景;基于数据块的动态迁移适用于本地存储场景基于共享存储的动态迁移停机时间极短,应用连接不断,但内存使用量大且修改频繁时无法使用;基于数据块的动态迁移降低迁移难度,迁移环境简单

二、案例部署

1、案例拓扑

2、创建存储池

systemctl stop firewalld
setenforce 0
mkdir -p /data_kvm/storevirt-install -n aaa -r 1024 --vcpus=1 --disk path=/data_kvm/store/aaa.qcow2,size=10 -w bridge:br0 --virt-type=kvm --accelerate --autostart -c /opt/CentOS-7-x86_64-Minimal-1810.iso --vnc --vncport=5901 --vnclisten=0.0.0.0# virt-install:是 Linux 下用于创建 KVM 等虚拟化类型虚拟机的命令行工具,用于发起虚拟机创建流程
virt-install \-n aaa \  # -n 指定虚拟机的名称(Name),这里虚拟机名为 "aaa"-r 1024 \  # -r 指定虚拟机的内存大小,单位是 MB,这里分配 1024MB(即 1GB)内存--vcpus=1 \  # 指定虚拟机的虚拟 CPU 核心数(vCPUs),这里设置为 1 个虚拟 CPU 核心--disk path=/data_kvm/store/aaa.qcow2,size=10 \  # 配置虚拟机磁盘存储,path 指定磁盘镜像文件路径,size 指定磁盘大小(单位是 GB),这里是创建一个路径为 /data_kvm/store/aaa.qcow2、大小 10GB 的 QCOW2 格式磁盘镜像-w bridge:br0 \  # -w 配置虚拟机网络,这里指定使用桥接网络(bridge),桥接的物理网桥设备是 br0,让虚拟机可通过桥接方式连入物理网络--virt-type=kvm \  # 指定虚拟化类型为 KVM(基于内核的虚拟机,是 Linux 常用的全虚拟化方案)--accelerate \  # 启用硬件加速(通常配合 KVM 等虚拟化类型,利用 CPU 虚拟化扩展提升性能,如 Intel VT-x、AMD-V 等)--autostart \  # 设置虚拟机随宿主机系统启动而自动启动(宿主机开机后,该虚拟机自动开机运行)-c /opt/CentOS-7-x86_64-Minimal-1810.iso \  # -c 指定安装介质(CD-ROM 镜像等),这里指定 CentOS 7 最小化安装镜像的路径,用于从该镜像引导安装系统--vnc \  # 启用 VNC 远程显示功能,方便通过 VNC 客户端连接虚拟机图形界面进行安装等操作--vncport=5901 \  # 指定 VNC 服务监听的端口号为 5901,VNC 客户端连接时需使用对应端口--vnclisten=0.0.0.0 \  # 指定 VNC 服务监听的地址为 0.0.0.0,即监听宿主机所有网络接口,允许从任意远程主机通过 VNC 连接(需注意安全,可结合防火墙等限制)
参数说明
-n指定虚拟机的名字
-r指定内存大小
--vcpu指定虚拟 CPU 个数
--disk指定磁盘文件放置位置及大小
-w制定所使用的网桥
--autostart设置虚拟机在宿主机开机时启动
-c指定镜像文件
--vncport通过 vnc viewer 连接的端口
--vnclisten通过 vnc
--accelerate当安装 qemu 客户机时,如果支持可用 kvm 或 kqemu 内核加速能力,KVM 加速器

3、母机安装VNC

三、静态迁移

1、关闭虚拟机

virsh list --all
virsh shutdown aaa

2、导出虚拟机 test01 的 xml 配置文件

virsh dumpxml aaa > aaa.xml

3、拷贝配置文件和磁盘文件到目标宿主机 kvm02 上

3.1、在kvm02上创建目录

mkdir -p /data_kvm/store

3.2、拷贝文件到kvm02上

scp aaa.xml 192.168.10.102:/etc/libvirt/qemu/
scp /data_kvm/store/aaa.qcow2 192.168.10.102:/data_kvm/store/

4、查看迁移文件

ls -l /etc/libvirt/qemu/
ls -l /data_kvm/store/

5、定义并启动虚拟机

virsh define /etc/libvirt/qemu/aaa.xml
virsh start aaa

四、动态迁移

1、配置NFS共享存储

# 停止 firewalld 防火墙服务,关闭防火墙可减少网络访问限制(生产环境需谨慎,可考虑开放特定端口替代)
systemctl stop firewalld  # 将 SELinux 设为宽容模式(临时关闭强制管控,便于服务配置,生产环境建议配置规则而非直接关闭)
setenforce 0              # 用 dnf 包管理器自动安装 NFS 工具集(无需交互,-y 自动确认),用于搭建 NFS 共享
dnf -y install nfs-utils  # 在根目录创建 /data 目录,作为 NFS 共享的存储路径
mkdir /data               # 递归设置 /data 目录权限为 777,所有用户可读写执行(生产环境需细化权限,避免过度开放)
chmod -R 777 /data        # 将共享配置写入 /etc/exports 文件:允许 192.168.10.0/24 网段主机读写(rw)、同步写入(sync)、不转换 root 身份(no_root_squash,方便管理但有风险)
echo "/data 192.168.10.0/24(rw,sync,no_root_squash)" >> /etc/exports  # 启动 NFS 服务,使共享配置生效
systemctl start nfs       # 启动 rpcbind 服务,NFS 依赖它完成远程过程调用(RPC)通信
systemctl start rpcbind   # 查看 rpcbind 服务的端口监听情况(确认服务是否正常启动,检查 111 端口等)
netstat -anpt | grep rpcbind  

2、挂载共享目录

mkdir -p /data_kvm/kgc
mount 192.168.10.103:/data /data_kvm/kgc/

3、通过现有的磁盘文件生成虚拟机

3.1、拷贝qcow2格式磁盘文件

cp CentOS-7-x86_64-GenericCloud-2009.qcow2 /data_kvm/kgc/bbb.qcow2

3.2、部署虚拟机

# 使用dnf包管理器安装libguestfs-tools和guestfs-tools工具集
# 这些工具用于虚拟机镜像的离线管理和定制
dnf -y install libguestfs-tools guestfs-tools# 使用virt-customize工具修改指定路径的虚拟机镜像
# -a参数指定要操作的镜像文件
# --root-password参数设置root用户密码,格式为password:明文密码
virt-customize -a /data_kvm/kgc/bbb.qcow2 --root-password password:aptech1!# 使用virt-install命令创建并安装KVM虚拟机
# --name: 指定虚拟机名称为bbb
# -r: 为虚拟机分配1024MB内存
# --vcpus: 设置虚拟机使用1个CPU核心
# --disk: 配置虚拟机磁盘,使用virtio总线,指定镜像路径和大小
# -w: 配置网络,连接到br0网桥
# --virt-type: 指定虚拟化类型为KVM
# --boot: 设置从硬盘启动
# --osinfo: 自动检测操作系统信息
virt-install --name=bbb -r 1024 --vcpus=1 --disk device=disk,bus=virtio,path='/data_kvm/kgc/bbb.qcow2',size=10 -w bridge:br0 --virt-type=kvm --boot hd --osinfo detect=on,require=off

3.3、查看虚拟机状态

4、迁移

# 使用virsh migrate命令执行KVM虚拟机实时迁移
# --live: 启用实时迁移(在线迁移),迁移过程中虚拟机保持运行状态
# --verbose: 显示详细的迁移进度信息,便于监控和排错
# bbb: 指定要迁移的虚拟机名称
# qemu+ssh://192.168.10.102/system: 目标主机的libvirt连接URI
#       使用SSH协议进行安全连接,访问目标主机的系统级hypervisor
# tcp://192.168.10.102: 迁移数据传输使用的网络连接地址
#       虚拟机磁盘和内存数据将通过此TCP连接传输到目标主机
virsh migrate --live --verbose bbb qemu+ssh://192.168.10.102/system tcp://192.168.10.102

5、生成配置文件

virsh dumpxml bbb > /etc/libvirt/qemu/bbb.xml
virsh define /etc/libvirt/qemu/bbb.xml

五、基于数据块的动态迁移

1、克隆出一个测试数据

virsh shutdown bbb
virt-clone -o bbb -n BBB -f /data_kvm/store/BBB.qcow2

2、创建接收数据的空白磁盘

# 使用qemu-img工具创建一个新的磁盘镜像文件
# create: qemu-img的子命令,用于创建新的磁盘镜像
# -f qcow2: 指定镜像文件格式为qcow2(QEMU Copy On Write 2)
#            qcow2是KVM虚拟机推荐的磁盘格式,支持快照、压缩和稀疏文件等特性
# /data_kvm/store/AAA.qcow2: 指定创建的镜像文件路径和名称
# 10G: 设置镜像的最大容量为10GB(实际占用空间会根据写入数据量动态增长)
qemu-img create -f qcow2 /data_kvm/store/AAA.qcow2 10G

3、迁移

virsh start BBB# 使用virsh migrate命令执行KVM虚拟机实时迁移
# BBB: 指定要迁移的虚拟机名称
# qemu+ssh://192.168.10.101/system: 目标主机的libvirt连接URI(SSH传输协议)
# --live: 启用实时迁移(在线迁移),迁移过程中虚拟机保持运行
# --persistent: 迁移完成后,在目标主机上创建持久化配置(重启后仍可使用)
# --undefinesource: 迁移完成后,删除源主机上的虚拟机定义(XML配置)
# --copy-storage-all: 自动复制虚拟机使用的所有存储(磁盘镜像等)到目标主机
# --verbose: 显示详细的迁移进度信息,便于监控和排错
virsh migrate BBB qemu+ssh://192.168.10.101/system --live --persistent --undefinesource --copy-storage-all --verbose

http://www.xdnf.cn/news/14804.html

相关文章:

  • Go应用容器化完全指南:构建最小化安全镜像的终极实践
  • 【MySQL\Oracle\PostgreSQL】迁移到openGauss数据出现的问题解决方案
  • Python入门Day2
  • Python字符与ASCII转换方法
  • Qt 事件
  • Python从入门到精通——第一章 Python简介
  • 从 TCP/IP 协议栈角度深入分析网络文件系统 (NFS)
  • join性能问题,distinct和group by性能,备库自增主键问题
  • 孪生素数猜想 - 张益唐的核心贡献和陶哲轩的改进
  • vue-37(模拟依赖项进行隔离测试)
  • 互联网大厂Java面试实录:Spring Boot与微服务在电商场景中的应用
  • 经典灰狼算法+编码器+双向长短期记忆神经网络,GWO-Transformer-BiLSTM多变量回归预测,作者:机器学习之心!
  • List中的对象进行排序处理
  • Go基础(Gin)
  • Python 机器学习核心入门与实战进阶 Day 1 - 分类 vs 回归
  • 扣子空间PPT生产力升级:AI智能生成与多模态创作新时代
  • 【Linux仓库】进程优先级及进程调度【进程·肆】
  • Linux之Socket编程Tcp
  • Spring Cloud(微服务部署与监控)
  • Superman
  • Rust Web 全栈开发(一):构建 TCP Server
  • 新版本没有docker-desktop-data分发 | docker desktop 镜像迁移
  • MYSQL基础内容
  • Django 安装使用教程
  • OpenHarmony 5.0监听导航栏和状态栏是否显示
  • OpenCV CUDA模块设备层-----高效地计算两个uint 类型值的平均值函数vavg2()
  • android核心技术摘要
  • gin框架 中间件 是在判断路由存在前执行还是存在后执行的研究
  • 机器学习:集成学习方法之随机森林(Random Forest)
  • 【Unity】MiniGame编辑器小游戏(九)打砖块【Breakout】