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

KVM高级功能部署

一、理论
当KVM虚拟机数量的不断增多,会导致个别服务器出现资源过载现象,这时候需要使用KVM虚拟机迁移技术,将KVM虚拟机迁移到负载相对较低的服务器上。

迁移
  静态迁移:
    无共享存储,将虚拟机关机,上传到另一台服务器,手动开启虚拟机。(上传xml配置文件以及qcow2文件)。

    有共享存储,将虚拟机关机,只上传xml配置文件,手动开启虚拟机。(只需上传xml配置文件)。

 动态迁移:
    数据块迁移,无共享存储,创建虚拟机存储池,来生成qcow2文件(必须与源机上的虚拟机qcow2文件名称相同),接着进行迁移,无需手动开启虚拟机,迁移过来就是运行中的。(这种方式需要手动dumpxml出来虚拟机的xml文件)

    动态迁移,有共享存储,直接迁移,无需创建qcow2文件。迁移过来的虚拟机是运行中的。(这种方式需要手动dumpxml出来虚拟机的xml文件)


KSM(kernel samepage merging,内核同页合并)。它允许内核在两个或多个进程之间共享完全相同的内存页。以此来减少内存的占用。
 

二、实践

静态迁移环境
kvm01	192.168.10.101
kvm02	192.168.10.102动态迁移环境
kvm01	192.168.10.101
kvm02	192.168.10.102
nfs	192.168.10.103[root@kvm01 ~]# mkdir -p /data_kvm/store
[root@kvm01 ~]# virt-install -n test01 -r 1024 --vcpus=1 --disk path=/data_kvm/store/test01.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 注:-n 指定虚拟机名字-r 指定内存 单位:MB--vcpus 指定虚拟机的核心数--disk path 指定虚拟机的size=10 指定磁盘大小,单位:GB-w 指定网络,,模式:网络接口--virt-type=kvm 指定虚拟机类型--accelerate 使用虚拟主机的内核为虚拟机加速--autostart 虚拟主机的启动后,虚拟机自动启动。-c 指定系统镜像位置--vnc 开启vnc--vncport 指定vnc监听端口--vnclisten 指定vnc监听地址windows上用vnc连接kvm01主机的ip及5901端口,开始安装。静态迁移
101
[root@kvm01 ~]# virsh dumpxml test01 > test01.xml
[root@kvm01 ~]# ls
公共  模板  视频  图片  文档  下载  音乐  桌面  anaconda-ks.cfg  test01.xml
[root@kvm01 ~]# virsh list --allId   名称     状态
---------------------2    test01   运行[root@kvm01 ~]# virsh shutdown test01
域 'test01' 正在关闭[root@kvm01 ~]# virsh list --allId   名称     状态
----------------------    test01   关闭102
[root@kvm02 ~]# mkdir -p /data_kvm/store101
[root@kvm01 ~]# scp test01.xml 192.168.10.102:/etc/libvirt/qemu/
The authenticity of host '192.168.10.102 (192.168.10.102)' can't be established.
ED25519 key fingerprint is SHA256:1IgAipGRNMnh+y4oUVED3caGGTMKfa2UdT/DdnDw4XI.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.102' (ED25519) to the list of known hosts.Authorized users only. All activities may be monitored and reported.
root@192.168.10.102's password: 
test01.xml                                      100% 8523     1.6MB/s   00:00[root@kvm01 ~]# scp /data_kvm/store/test01.qcow2  192.168.10.102:/data_kvm/store/
Authorized users only. All activities may be monitored and reported.
root@192.168.10.102's password: 
test01.qcow2                                    100%   10GB  57.9MB/s   02:56 102
[root@kvm02 ~]# virsh list --allId   名称     状态
----------------------    test01   关闭[root@kvm02 ~]# virsh define /etc/libvirt/qemu/test01.xml 
从 test01 定义的域 '/etc/libvirt/qemu/test01.xml'[root@kvm02 ~]# virsh list --allId   名称     状态
----------------------    test01   关闭[root@kvm02 ~]# virsh start test01
域 'test01' 已启动迁移完成,101和102的test01是完全相同的,只能在一台机器上跑,除非在不同的局域网。共享存储静态迁移
103 nfs
[root@bogon ~]# mkdir /data
[root@bogon ~]# chmod -R 777 /data/
[root@bogon ~]# vim /etc/exports
/data 192.168.10.0/24(rw,sync,no_root_squash)[root@bogon ~]# systemctl start nfs
[root@bogon ~]# systemctl start rpcbind101、102
[root@kvm01 ~]# mkdir /data_kvm/kgc
[root@kvm01 ~]# mount 192.168.10.103:/data /data_kvm/kgc/
[root@kvm01 ~]# mount
192.168.10.103:/data on /data_kvm/kgc type nfs4 (rw,relatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.10.101,local_lock=none,addr=192.168.10.103)101
[root@kvm01 opt]# cp CentOS-7-x86_64-GenericCloud-2009.qcow2 /data_kvm/kgc/test02.qcow2[root@kvm01 ~]# yum install /usr/bin/virt-customize[root@kvm01 ~]# virt-customize -a /data_kvm/kgc/test02.qcow2 --root-password password:aptech   # 为root用户设置密码,否则无法登录系统。
[   0.0] Examining the guest ...
[  38.9] Setting a random seed
[  39.0] Setting passwords
[  45.0] SELinux relabelling
[  76.5] Finishing off[root@kvm01 ~]# virt-install --name=test02 -r 1024 --vcpus=1 --disk device=disk,bus=virtio,path='/data_kvm/kgc/test02.qcow2',size=10 -w bridge:br0 --virt-type=kvm --boot hd --osinfo detect=on,require=off 
WARNING  Using --osinfo generic, VM performance may suffer. Specify an accurate OS for optimal results.
WARNING  无法连接到图形控制台:没有安装 virt-viewer。请安装 'virt-viewer' 软件包。
WARNING  没有控制台用于启动客户机,默认为 --wait -1开始安装......
创建域......                                                  |    0 B  00:00:00     域仍在运行。安装可能正在进行中。
请等待安装完成。
^C域安装已被中断。
根据用户要求取消安装# 因为该镜像是已安装好的,这里无需安装。但是,必须等“创建域”出来才能取消,否则,停止虚拟机后,虚拟机会直接消失(去查看xml文件也是没有的)。[root@kvm01 ~]# virsh list --allId   名称     状态
---------------------1    test02   运行-    test01   关闭[root@kvm01 ~]# virsh dumpxml test02 > test02.xml[root@kvm01 ~]# scp test02.xml 192.168.10.102:/etc/libvirt/qemu/Authorized users only. All activities may be monitored and reported.
root@192.168.10.102's password: 
test02.xml                                      100% 3988   607.8KB/s   00:00    
[root@kvm01 ~]# virsh destroy test02
域 'test02' 已销毁102
[root@kvm02 ~]# virsh list --allId   名称     状态
---------------------1    test01   运行[root@kvm02 ~]# virsh define /etc/libvirt/qemu/test02.xml 
从 test02 定义的域 '/etc/libvirt/qemu/test02.xml'[root@kvm02 ~]# virsh start test02
域 'test02' 已启动[root@kvm02 ~]# virsh list --allId   名称     状态
---------------------1    test01   运行2    test02   运行# 这里的test02也不能在101上启动,否则会启动失败,因为它们的mac地址一样,ip地址还是同一局域网的,开启后会冲突。共享存储动态迁移
101
[root@kvm01 ~]# virt-clone -o test01 -n test03 -f /data_kvm/kgc/test03.qcow2 
WARNING  设置图形设备端口为自动端口,以避免相互冲突。
正在分配 'test03.qcow2'         3% [-               ]    0 B/s | 385 MB  --:--:-- 正在分配 'test03.qcow2'         7% [=               ] 154 MB/s | 732 MB  00:01:01 正在分配 'test03.qcow2'         9% [=-              ] 181 MB/s | 1.0 GB  00:00:50 正在分配 'test03.qcow2'        12% [=-              ] 194 MB/s | 1.2 GB  00:00:46 正在分配 'test03.qcow2'                                        | 1.2 GB  00:00:04 ... 成功克隆 'test03'。[root@kvm01 qemu]# virsh start test03
域 'test03' 已启动[root@kvm01 qemu]# virsh list --allId   名称     状态
---------------------3    test03   运行-    test01   关闭-    test02   关闭[root@kvm01 kgc]# virsh migrate --live --verbose test04 qemu+ssh://192.168.10.102/system tcp://192.168.10.102 
root@192.168.10.102's password: 
迁移: [100.00 %]注:qemu+ssh://192.168.10.102/system
qemu+ssh 是连接协议,通过ssh通道连接目标主机的qemu虚拟化服务,ssh用于身份验证和命令执行,确保安全访问。
192.168.10.102 目标主机的ip地址。/system  这是libvirt的连接点(url路径部分),表示连接到目标主机的系统级虚拟化服务。
在libvirt中,/system对应系统服务(通常由libvirtd守护进程管理),可操作所有虚拟机。
与之对应的是/session,表示用户会话级服务,权限受限,只能管理当前用户启动的虚拟机。虚拟机迁移需要root权限或等效权限,因此必须连接到系统服务(/system)102  # 迁移过来后,发现虚拟机还是开启状态。
[root@kvm02 ~]# 
[root@kvm02 ~]# virsh list --allId   名称     状态
---------------------1    test01   运行4    test03   运行-    test02   关闭# 发现没有test03的配置文件,因为是基于共享存储的动态迁移。
[root@kvm02 ~]# ls /etc/libvirt/qemu
autostart  networks  test01.xml  test02.xml# 手动生成,生成后就可以随意启动与关机。
[root@kvm02 qemu]# virsh dumpxml test03 > test03.xml
[root@kvm02 qemu]# ls
autostart  networks  test01.xml  test02.xml  test03.xml基于数据块的迁移
101、102
[root@kvm01 ~]# vim /etc/hosts
192.168.10.101 kvm01
192.168.10.102 kvm02101[root@kvm01 ~]# virt-clone -o test01 -n test05 -f /data_kvm/store/test05.qcow2
WARNING  设置图形设备端口为自动端口,以避免相互冲突。
正在分配 'test05.qcow2'         4% [-               ]    0 B/s | 477 MB  --:--:-- 正在分配 'test05.qcow2'         7% [=               ] 135 MB/s | 782 MB  00:01:09 正在分配 'test05.qcow2'         9% [=-              ] 153 MB/s | 1.0 GB  00:01:00 正在分配 'test05.qcow2'        12% [=-              ] 171 MB/s | 1.2 GB  00:00:52 正在分配 'test05.qcow2'                                        | 1.2 GB  00:00:04 ... 成功克隆 'test05'。[root@kvm01 ~]# virsh list --allId   名称     状态
---------------------4    test03   运行-    test01   关闭-    test02   关闭-    test04   关闭[root@kvm01 ~]# virsh pool-list --all名称      状态   自动开始
----------------------------default   活动   是kgc       活动   是opt       活动   是store     活动   是102
[root@kvm02 ~]# virsh pool-list --all名称   状态   自动开始
-------------------------[root@kvm02 /]# qemu-img create -f qcow2 /data_kvm/store/test05.qcow2 10G
Formatting '/data_kvm/store/test05.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16 cache=writeback[root@kvm02 /]# ls /data_kvm/store/
test01.qcow2  test05.qcow2这里可以ll查看test05.qcow2的大小,占用空间较小。101
[root@kvm01 ~]# virsh start test05
域 'test05' 已启动[root@kvm01 ~]# virsh list --allId   名称     状态
---------------------6    test05   运行102
[root@kvm02 /]# virsh list --allId   名称     状态
---------------------1    test01   运行4    test04   运行-    test02   关闭101
[root@kvm01 ~]# virsh migrate test05 qemu+ssh://192.168.10.102/system --live --persistent --undefinesource --copy-storage-all --verbose
root@192.168.10.102's password: 
迁移: [100.00 %]
[root@kvm01 ~]# virsh list --allId   名称     状态
----------------------    test01   关闭-    test02   关闭-    test03   关闭-    test04   关闭102
[root@kvm02 /]# virsh list --allId   名称     状态
---------------------1    test01   运行4    test04   运行5    test05   运行-    test02   关闭此时再查看test05.qcow2的大小,发现变大了许多。
[root@kvm02 /]# ll /data_kvm/store/
总计 11918932
-rw-------. 1 qemu qemu 10739318784  6月16日 14:14 test01.qcow2
-rw-r--r--. 1 qemu qemu  1465712640  6月16日 14:20 test05.qcow2KSM
[root@kvm01 ~]# virt-clone -o test01 -n test06 -f /data_kvm/store/test06.qcow2
成功克隆 'test06'。[root@kvm01 ~]# virt-clone -o test01 -n test07 -f /data_kvm/store/test07.qcow2
成功克隆 'test07'。[root@kvm01 ~]# virt-clone -o test01 -n test08 -f /data_kvm/store/test08.qcow2
成功克隆 'test08'。[root@kvm01 ~]# virsh start test06
域 'test06' 已启动[root@kvm01 ~]# virsh start test07
域 'test07' 已启动[root@kvm01 ~]# virsh start test08
域 'test08' 已启动[root@kvm01 ~]# free -htotal        used        free      shared  buff/cache   available
Mem:           3.3Gi       1.6Gi       245Mi        15Mi       1.7Gi       1.7Gi
Swap:          4.0Gi       269Mi       3.7Gi[root@kvm01 ~]# echo 1 > /sys/kernel/mm/ksm/run[root@kvm01 ~]# reboot#重新开启test6、7、8,观察内存[root@kvm01 ~]# free -htotal        used        free      shared  buff/cache   available
Mem:           3.3Gi       1.4Gi       1.2Gi        13Mi       977Mi       1.9Gi
Swap:          4.0Gi          0B       4.0Gi注:这里内存并没有节省,原来是1.6G,稳定后变为了1.7G,KSM未被启用,这里是假装成功了,成功的效果就是这样,节省一些内存。

相关文章:

  • 死锁、线程总结
  • 批量调用接口(ApiFox + Postman)
  • 【记录】Ubuntu挂载硬盘
  • ArcGIS Pro无插件加载(无偏移)天地图!一次添加长久使用
  • Langchain入门指南:一次讲清基本用法
  • jenkins打包问题jar问题
  • django 调用paramiko 向windows 上传文件
  • linux基础重定向及组合重定向
  • SCADA技术与市场全景解析
  • vue3 - 自定义hook
  • Jenkins 会被完全取代吗?
  • FPGA基础 -- Verilog门级建模之奇偶校验电路
  • 创建postgres数据库失败
  • 【PDF提取表格】批量提取PDF里的内容保存到Excel表格,批量提取PDF文档中的信息到Excel的具体步骤和注意事项
  • [neo4j]neo4j-community-5.26.0-windows的安装
  • 游戏技能编辑器开发完全指南系统架构设计之技能编辑器整体架构
  • MacOS上MySQL的安装以及使用
  • python2.7+flask1.1.4+SQLAlchemy1.3.0+Flask-SQLAlchemy2.1连接mysql稳定方式
  • 二分算法深度解析
  • AI大模型初识(一):AI大模型的底层原理与技术演进
  • 用织梦做的网站怎么管理/关键词排名查询工具有什么作用?
  • 网站建设优化服务如何/在线资源链接
  • 做网络推广选择哪个网站好/百度推广代理商返点
  • wordpress发送到朋友圈美图/seo综合优化公司
  • 专业做企业网站/百度客服在线咨询人工服务
  • 做电商网站的公司/新闻软文范例大全