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

KVM高级部署

KVM虚拟机迁移

迁移的应用场景
  • 宿主机负载比较高时,可迁移走部分虚拟机
  • 迁移虚拟机集合于一台,节约资源
  • 升级宿主机硬件时,可先迁移走在进行升级
  • 可实现跨地域的远程迁移

迁移的类型

  • 静态迁移
  • 动态迁移
    • 基于共享存储的动态迁移
    • 基于数据块的动态迁移

virt-install 安装命令各选项的具体作用如下所示:

  • -n:指定虚拟机的名字。
  • -r:指定内存大小。
  • --vcpu:指定虚拟 CPU 个数。
  • --disk:指定磁盘文件放置位置及大小。
  • -w:制定所使用的网桥。
  • --autostart:设置虚拟机在宿主机开机时启动。
  • -c:指定镜像文件。
  • --vncport:通过 vnc viewer连接的端口。
  • --vnclisten:通过 vnc viewer 连接的 IP。

内核同页合并

KSM(Kernel SamePage Merging)被称为内核同页合并。KSM 允许内核在两个或多个进程之间共享完全相同的内存页。KSM 让内核扫描正在运行中的程序并比较它们的内存,如果发现它们的内存区域或内存页是完全相同的,就将相同的内存合并为一个单一的内存页,并将其标识为“写时复制(copy-on-write)”,这样可以起到节省系统内存使用量的作   用。如果有进程试图去修改被合并且被标识为“写时复制”的内存页,就为该进程复制出一个新的内存页供其使用。

  • 相同内存页合并为单一内存页,并表示为“写时复制”
  • KSM开启后,CPU使用量会有一定的提高
  • 不同的虚拟机的相同类型操作系统或应用,有助于实现KSM
  • 使用KSM要保证有足够的交换分区

案例环境

资源列表

操作系统

IP

主要软件

主机名

Centos7

192.168.10.51

Qemu-kvm、libvirt

kvm01

Centos7

192.168.10.52

Qemu-kvm、libvirt、qemu-kvm-ev

kvm02

Centos7

192.168.10.57

nfs-utils

kvmnfs

win10

192.168.10.58

VNC

 在win10安装VNC方便管理

其中,“5901”是执行 virt-install安装命令时分配给对应虚拟机的端口,可以自己定义,通常都是以5901 开始逐个递增。

静态迁移

部署KVM(在kvm01和kvm02)

#可以参考上一篇文章

创建虚拟机的存储目录

mkdir -p /data/{store,iso}
#把CentOS-7-x86_64-DVD-2207-02.iso上传至/data/iso

可以通过文本方式创建test01 虚拟机了。具体操作命令如下所示。

virt-install \
--name test01 \
--ram 1024 \
--vcpus 1 \
--disk path=/data/store/test01.qcow2,size=10 \
--network bridge=br0 \
--virt-type kvm \
--accelerate \
--autostart \
--cdrom /data/iso/CentOS-7-x86_64-DVD-2207-02.iso \
--graphics vnc,port=5901,listen=0.0.0.0

忽略报错信息

WARNING  未检测到操作系统,虚拟机性能可能会受到影响。使用 --os-variant 选项指定操作系统以获得最佳性能。
WARNING  无法连接到图形控制台:没有安装 virt-viewer。请安装 'virt-viewer' 软件包。
WARNING  没有控制台用于启动客户机,默认为 --wait -1开始安装......
正在分配 'test01.qcow2'                                                                             |  10 GB  00:00:00     
ERROR    unsupported format character '奠(0xffffffe7) at index 47
域安装失败,您可以运行下列命令重启您的域:
'virsh start virsh --connect qemu:///system start test01'
否则请重新开始安装。

打开VNC进行连接

提取磁盘和配置文件

#查看虚拟机 test01 当前状态
virsh list --all#关闭虚拟机
virsh shutdown test01#导出虚拟机的xml文件为test01.xml
virsh dumpxml test01 > test01.xml#定位虚拟机 test01 的磁盘文件
virsh domblklist test01#拷贝配置文件和磁盘文件到目标宿主机kvm02 上
scp test01.xml 192.168.10.52:/etc/libvirt/qemu/
scp /data/store/test01.qcow2 192.168.10.52:/data/store/ 

配置和启动目标虚拟机

#查看被迁移过来的配置文件和磁盘文件
ls /etc/libvirt/qemu |grep test01
ls /data/store/ |grep test01
[root@kvm01 ~]# ls /etc/libvirt/qemu |grep test01
test01.xml
[root@kvm01 ~]# ls /data/store/ |grep test01
test01.qcow2#重新定义虚拟机
virsh define /etc/libvirt/qemu/test01.xml #查看虚拟机状态
[root@kvm02 ~]# virsh list --allId    名称                         状态
-----------------------------------------------------     test01                         关闭#取消定义的虚拟机
virsh undefine test01 --remove-all-storage

启动虚拟机test01

virsh start test01
[root@kvm02 ~]# virsh list --allId    名称                         状态
----------------------------------------------------1     test01                         running

基于共享存储的动态迁移

配置NFS共享存储

在所有节点安装NFS 服务

yum -y install nfs-utils

配置共享目录(在KVMnfs节点)

mkdir /data
chmod 777 /data
echo '/data 192.168.10.0/24(rw,sync,no_root_squash)' >> /etc/exportssystemctl start nfssystemctl start rpcbindsystemctl enable nfssystemctl enable rpcbind

启动并查看NFS服务

systemctl enable nfs 
systemctl enable rpcbind
systemctl start nfs
systemctl start rpcbind
showmount -e localhost

挂载NFS目录(在kvm01和kvm02操作)

先创建本地数据目录,之后再分别挂载 NFS 目录, 并设置开机自动挂载。

#查看NFS共享目录
showmount -e 192.168.10.53
mkdir /data/kgc
mount -t nfs 192.168.10.53:/data /data/store/
mount | grep 192.168.10.53
#把磁盘文件传输到共享目录
scp /data/store/test01.qcow2 root@192.168.10.53:/data/

 设置永久挂载

echo '192.168.10.53:/data     /data/kgc       nfs     defaults        0 0' >> /etc/fstab

取消定义test01(在kvm02操作)

virsh undefine test01 --remove-all-storage

进入虚拟机中配置一个静态IP

在kvmnfs执行ping命令来检查是否会中断

[root@kvmnfs ~]# ping 192.168.10.20
PING 192.168.10.20 (192.168.10.20) 56(84) bytes of data.
64 bytes from 192.168.10.20: icmp_seq=1 ttl=64 time=1.26 ms
64 bytes from 192.168.10.20: icmp_seq=2 ttl=64 time=0.910 ms
64 bytes from 192.168.10.20: icmp_seq=3 ttl=64 time=0.874 ms

在kvm01上执行迁移命令


virsh migrate --live --verbose test01 qemu+ssh://192.168.10.52/system tcp://192.168.10.52 --unsafe[root@kvm01 ~]# virsh migrate --live --verbose test01 qemu+ssh://192.168.10.52/system tcp://192.168.10.52 --unsafe
root@192.168.10.52's password: 
迁移: [100 %]

查询迁移之后的虚拟机状态

[root@kvm01 ~]# virsh list --allId    名称                         状态
-----------------------------------------------------     test01                         关闭-     test02                         关闭[root@kvm02 ~]# virsh list --allId    名称                         状态
----------------------------------------------------3     test02                         running-     test01                         关闭

 生成配置文件

virsh dumpxml test01 > /etc/libvirt/qemu/test01.xml
[root@kvm02 ~]# ll /etc/libvirt/qemu
总用量 8-rw------- 1 root root 3524 5月  31 16:00 test01.xml
-rw------- 1 root root 3842 5月  31 17:13 test02.xml#定义test02的配置文件virsh define /etc/libvirt/qemu/test01.xml

相关文章:

  • leetcode刷题记录38-16. 最接近的三数之和
  • PostgreSQL 如何使用generate_series()函数
  • 短剧app系统开发(对接广告联盟)源码搭建
  • 一文搞定自动化测试
  • Java面试八股之静态变量和实例变量的区别有哪些
  • 绿洲生态【OAS】爱护环境--保护地球
  • 二叉树构建
  • 【CS.PL】Lua 编程之道: 控制结构 - 进度24%
  • 浏览器f12控制台怎么获取vue实例,并且修改data数据
  • C语言学习系列:笔记列表
  • 信号处理中的相位
  • ESP32s3与Lsm6ds3通信---i2c【开源】
  • 单目物体测距
  • Linux 性能优化基础
  • 2024050901-重学 Java 设计模式《实战访问者模式》
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • Android组件 - 收藏集 - 掘金
  • CSS 专业技巧
  • JAVA 学习IO流
  • Linux链接文件
  • mysql innodb 索引使用指南
  • nodejs调试方法
  • scala基础语法(二)
  • 从输入URL到页面加载发生了什么
  • 简单易用的leetcode开发测试工具(npm)
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • UI设计初学者应该如何入门?
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • #include
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (33)STM32——485实验笔记
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转载)利用webkit抓取动态网页和链接
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ./configure、make、make install 命令
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET 的程序集加载上下文
  • .net 简单实现MD5
  • .NET简谈设计模式之(单件模式)
  • @AliasFor注解
  • @RequestBody与@RequestParam:Spring MVC中的参数接收差异解析
  • @selector(..)警告提示
  • [5] CUDA线程调用与存储器架构
  • [AI StoryDiffusion] 创造神奇故事,AI漫画大乱斗!
  • [AX]AX2012 AIF(四):文档服务应用实例
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [bzoj1912]异象石(set)