kvm命令集与优化(代码片段)

author author     2022-12-21     384

关键词:

(一)使用KVM命令集管理虚拟机

1:KVM基本功能管理

(1)查看命令帮助

[[email protected] ~]# virsh -h

virsh [options]... [<command_string>]
virsh [options]... <command> [args...]
.../省略部分内容

2:查看KVM的配置文件存放目录

[[email protected] ~]# ls /etc/libvirt/qemu
CentOS7.4-x86_64.xml  networks

3:查看虚拟机状态

[[email protected] ~]# virsh list --all #//查看所有虚拟机状态关闭或开启
 Id    名称                         状态
----------------------------------------------------
 2     CentOS7.4-x86_64               running

 [[email protected] ~]# virsh list #//查看当前虚拟机状态down掉状态查不到
 Id    名称                         状态
----------------------------------------------------
 2     CentOS7.4-x86_64               running

4:安装多个虚拟机用VNC连接时区分端口号默认从5900开始

技术分享图片

[[email protected] ~]# netstat -ntap | grep kvm #//查看端口号
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      3757/qemu-kvm       
tcp        0      0 0.0.0.0:5901            0.0.0.0:*               LISTEN      4008/qemu-kvm       
tcp        0      0 192.168.179.151:5901    192.168.179.1:51787     ESTABLISHED 4008/qemu-kvm 

5:虚拟机关机与开启

#关闭co01
[[email protected] ~]# virsh shutdown co01
域 co01 被关闭

[[email protected] ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 -     co01                           关闭

#开启co01
[[email protected] ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 5     co01                           running

6:强制关闭电源

[[email protected] ~]# virsh destroy co01
域 co01 被删除 #//这里删除不是真的删除是强制关闭电源

[[email protected] ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 -     co01                           关闭

7:通过配置文件启动虚拟机

[[email protected] ~]# virsh create /etc/libvirt/qemu/co01.xml 
域 co01 被创建(从 /etc/libvirt/qemu/co01.xml)

[[email protected] ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 6     co01                           running

8:挂起虚拟机

[[email protected] ~]# virsh suspend co01
域 co01 被挂起

[[email protected] ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 6     co01                           暂停

9:恢复虚拟机

[[email protected] ~]# virsh resume co01
域 co01 被重新恢复

[[email protected] ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 6     co01                           running

10:配置虚拟机伴随着宿主机开机自启动

[[email protected] ~]# virsh autostart co01
域 co01标记为自动开始

11:导处虚拟机配置

[[email protected] ~]# virsh dumpxml co01 > /etc/libvirt/qemu/co02
[[email protected] ~]# ls /etc/libvirt/qemu/
autostart  CentOS7.4-x86_64.xml  co01.xml  co02  networks

12:虚拟机删除与添加

#先关闭虚拟机
[[email protected] ~]# virsh shutdown co01
域 co01 被关闭

#删除
[[email protected] ~]# virsh undefine co01
域 co01 已经被取消定义

[[email protected] ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     CentOS7.4-x86_64               running

13:通过备份配置文件重新定义虚拟机

[[email protected] ~]# mv /etc/libvirt/qemu/co02 /etc/libvirt/qemu/co01.xml
[[email protected] ~]# virsh define /etc/libvirt/qemu/co01.xml 
定义域 co01(从 /etc/libvirt/qemu/co01.xml)

[[email protected] ~]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 -     co01                           关闭

14:修改虚拟机配置文件

1:直接通过vim命令修改
[[email protected] ~]# vim /etc/libvirt/qemu/co01.xml 
<domain type=‘kvm‘>
  <name>co01</name>
  <uuid>e73c9cd2-29d3-449c-91ef-706c3c018c38</uuid>
  <memory unit=‘KiB‘>2097152</memory>
  <currentMemory unit=‘KiB‘>2097152</currentMemory>
  <vcpu placement=‘static‘>1</vcpu>
  <resource>
    <partition>/machine</partition>
  </resource>
  <os>
    <type arch=‘x86_64‘ machine=‘pc-i440fx-rhel7.0.0‘>hvm</type>
    <boot dev=‘hd‘/>
  </os>

2:通过virsh命令修改
[[email protected] ~]# virsh edit co01
没有更改域 co01 XML 配置。

KVM文件管理

通过文件管理可以直接查看、修改、复制虚拟机内部文件

(1)转换raw格式磁盘文件至qcow2格式

#查看当前磁盘模式
[[email protected] vir]# qemu-img info c02.img 
image: c01.img
file format: raw
virtual size: 30G (32212254720 bytes)
disk size: 1.1G

#关闭虚拟机
[[email protected] vir]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 -     co01                           关闭

#转换文件磁盘格式
[[email protected] vir]# qemu-img convert -f raw -O qcow2 c01.img co01.qcow2
[[email protected] vir]# ls
c01.img  c02.img  co01.qcow2

(2)修改co01配置文件

[[email protected] vir]# virsh edit co01
编辑了域 co01 XML 配置。
 <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type=‘file‘ device=‘disk‘>
      <driver name=‘qemu‘ type=‘qcow2‘/>
      <source file=‘/vir/c02.img‘/>
      <target dev=‘vda‘ bus=‘virtio‘/>
      <address type=‘pci‘ domain=‘0x0000‘ bus=‘0x00‘ slot=‘0x06‘ function=‘0x0‘/>
    </disk>

vir-cat     查看文件按
vir-edit    编辑文件
vir-df      查看虚拟机磁盘信息

(3)虚拟机克隆

#从看看状态
[[email protected] vir]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 -     co01                           关闭

#co01克隆co03
[[email protected] vir]# virt-clone -o co01 -n co03 -f /vir/co02.qcow2
WARNING  当卷已经被全部分配后,需要的卷容量将超过可用池空间。(30720 M 需要的容量 > 12510 M 可用容量)
正在分配 ‘co02.qcow2‘                                                     |  30 GB  00:01:14     

成功克隆 ‘co03‘。
[[email protected] vir]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 -     co01                           关闭
 -     co03                           关闭

#启动虚拟机
[[email protected] vir]# virsh start co03
[[email protected] vir]# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 -     co01                           关闭
 -     co03                           running

(4)虚拟机快照

KVM虚拟机要使用镜像功能,磁盘格式必须为qcow2格式之前把co01磁盘格式转换为了qcow2
1:对co01创建快照

[[email protected] vir]# virsh snapshot-create co01
已生成域快照 1533785921

#查看虚拟机快照版本信息
[[email protected] vir]# virsh snapshot-current co01

#  查看快照信息
[[email protected] vir]# virsh snapshot-list co01
 名称               生成时间              状态
------------------------------------------------------------
 1533785921           2018-08-09 11:38:41 +0800 shutoff

#  恢复虚拟机至1533785921
[[email protected] vir]# virsh snapshot-revert co01 1533785921

#删除快照
[[email protected] vir]# virsh snapshot-list co01
 名称               生成时间              状态
------------------------------------------------------------
 1533785921           2018-08-09 11:38:41 +0800 shutoff
 1533786123           2018-08-09 11:42:03 +0800 shutoff

[[email protected] vir]# virsh snapshot-delete co01 1533785921
已删除域快照 1533785921

[[email protected] vir]# virsh snapshot-list co01
 名称               生成时间              状态
------------------------------------------------------------
 1533786123           2018-08-09 11:42:03 +0800 shutoff

(二)KVM性能优化

1:为什么要调优

性能的损耗是关键,KVM采用全虚拟技术,全虚拟化要有一个软件模拟硬件层,故有一定的损耗,特别是I/O这几个方面

KVM性能优化主要在CPU、内存、I/O方面

2:优化思路及步骤

(1)CPU优化
要考虑CPU的数量问题,所有guestcpu的总数目不要超过物理机的总数目,如果超过,则对性能有很大的影响,建议选择复制主机CPU配置

  • 图形化界面,在linux系统里面打开终端输入virt-manager
    技术分享图片

技术分享图片

技术分享图片

(2)内存优化
1)KSM
内存分配最小单位是page,默认4KB.可以将host机内容相同的内存合并,以节省内存使用。特别是在你虚拟机操作系统都一样的情况下肯定会有很多内容相同的内存知值,开启KSM则会将这些内存合并为一个

通过/sys/kernle/mm/ksm目录下的文件可查看内存页共享的情况下:

[[email protected] ~]# cd /sys/kernel/mm/ksm/
[[email protected] ksm]# ls
full_scans          pages_sharing   run                                 stable_node_dups
max_page_sharing    pages_to_scan   sleep_millisecs
merge_across_nodes  pages_unshared  stable_node_chains
pages_shared        pages_volatile  stable_node_chains_prune_millisecs
[[email protected] ksm]# ll
总用量 0
-r--r--r--. 1 root root 4096 8月   9 12:51 full_scans
-rw-r--r--. 1 root root 4096 8月   9 12:51 max_page_sharing
-rw-r--r--. 1 root root 4096 8月   9 12:51 merge_across_nodes
-r--r--r--. 1 root root 4096 8月   9 12:51 pages_shared
-r--r--r--. 1 root root 4096 8月   9 12:51 pages_sharing
-rw-r--r--. 1 root root 4096 8月   9 12:51 pages_to_scan
-r--r--r--. 1 root root 4096 8月   9 12:51 pages_unshared
-r--r--r--. 1 root root 4096 8月   9 12:51 pages_volatile
-rw-r--r--. 1 root root 4096 8月   9 12:50 run
-rw-r--r--. 1 root root 4096 8月   9 12:51 sleep_millisecs
-r--r--r--. 1 root root 4096 8月   9 12:51 stable_node_chains
-rw-r--r--. 1 root root 4096 8月   9 12:51 stable_node_chains_prune_millisecs
-r--r--r--. 1 root root 4096 8月   9 12:51 stable_node_dups

# pages_shared 文件中记录了KSM共享页面总数
# pages_sharing 文件中记录当前共享页面总数

每个页面的大小为4KB,可计算出共享内存为:4X页面=内存大小(KB)

开启KSM

[[email protected] ksm]# cat run  #查看run显示出来0为不开启,1为开启
0

[[email protected] ksm]# echo 1 > run  #临时开启用重定向,不支持vi编辑器
                                    #可以在/etc/rc。local中添加 echo 1 > /sys/kernel/mm/run
                                    #run让KSM开机自启动
[[email protected] ksm]# cat run 
1

[[email protected] ksm]# cat pages_to_scan  #定期扫描相同页,sleep_millisecs决定多长时间
                                         #pages_to_scan决定每次查看多少页面
100 #默认为100,也大也好,超过2000无效,需要开启两个服务ksmtuned和tuned
    #支持多个页面

KSM会稍微影响系统性能,以效率换空间,如果系统内存很充裕,则无需开启

2)对内存设置限制
如果我们有多个虚拟机,为了防止某个虚拟机无节制的占用内存,导致其他虚拟机无法正常使用,就要对每个虚拟机进行限制

[[email protected] ~]# virsh memtune co01  #查看当前虚拟机co01内存限制,单位为KB
hard_limit     : 无限制                 #强制最大内存(应限制)
soft_limit     : 无限制                 #可用最大内存
swap_hard_limit: 无限制                 #强制最大swap使用大小

#查看virsh memtune语法
[[email protected] ~]# virsh memtune --help

#设置co01强制最大内存100M,在线生效
[[email protected] ~]# virsh memtune co01 --hard-limit 1024000 --live

[[email protected] ~]# virsh memtune co01
hard_limit     : 1024000
soft_limit     : 无限制
swap_hard_limit: 无限制

3)大页后端内存
在逻辑地址像物理地址装换时,CPU保持一个后备翻译缓冲器TLB,用来缓存转换结果,而TLB容量很小,TLB需要保存的缓存项就少,就会减少cachemiss。通过为客户机提供大页后端内存,就减少客户机的消耗的内存并提高TLB命中率。从而提升KVM性能

[[email protected] ~]# cat /proc/meminfo  #查看内存信息,无大页可用
AnonHugePages:    491520 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0

[[email protected] ~]# echo 25000 > /proc/sys/vm/nr_hugepages #指定大页需要的内存页面数(临时生效)
[[email protected] ~]# cat /proc/meminfo | grep HugePage
AnonHugePages:    491520 kB
HugePages_Total:      66
HugePages_Free:       66
HugePages_Rsvd:        0
HugePages_Surp:        0

[[email protected] ~]# sysctl -w vm.nr_hugepages=25000 #指定大页数永久生效
vm.nr_hugepages = 25000

或者在/etc/sysctl.conf中添加vm.nr_hugepages=25000来持久设定大页文件系统需要的内存页面数

主:
    大页文件系统需要的页面数可以有客户机需要的内存除以页面大小来大体估算算
[[email protected] ~]# virsh shutdown co01 #关闭co01虚拟机
域 co01 被关闭
[[email protected] ~]# virsh edit co01
<domain type=‘kvm‘>
  <name>co01</name>
  <uuid>e73c9cd2-29d3-449c-91ef-706c3c018c38</uuid>
  <memory unit=‘KiB‘>2097152</memory>
  <currentMemory unit=‘KiB‘>2097152</currentMemory>
  <memoryBacking><hugepages/></memoryBacking> #添加,使用大页

[[email protected] ~]# mount -t hugetlbfs /dev/hugepages/  #挂载hugetlbfs文件系统
[[email protected] ~]# systemctl restart libvirtd.service #重启libvirtd
[[email protected] ~]# virsh start co01
域 co01 已开始

[[email protected] ~]# cat /proc/meminfo |grep HugePage  #被释放
AnonHugePages:    503808 kB
HugePages_Total:     234
HugePages_Free:      226
HugePages_Rsvd:        0
HugePages_Surp:        0

#开机自启动挂载写入/etc/fstab配置文件中
[[email protected] ~]# vim /etc/fstab 
hugetlbfs       /hugepages      hugetlbfs defaules 0 0

(4)I/O优化
在实际生产过程中,为了避免过渡消耗磁盘资源而对其他虚拟机造成影响,我们希望对每台虚拟机对磁盘资源消耗是可以控制的

对磁盘I/O控制有两种方式:
1)在整体中的权重,范围在100~1000.
2)限制具体I/O

[[email protected] ~]# virsh blkiotune co01
weight         : 1000
device_weight  : 

[[email protected] ~]# virsh blkiotune co01 --weight 500 #设置为500其实这个数值也大越好

[[email protected] ~]# virsh blkiotune co01
weight         : 500
device_weight  : 

(5)系统调优工具
用来监控和收集系统各个组件的数据,并依据数据提供的信息动态调整系统设置,达到动态优化系统的目的。

安装调优工具

[[email protected] ~]# yum install tuned -y
[[email protected] ~]# systemctl start tuned.service
[[email protected] ~]# tuned-adm active               #查看当前优化方案
Current active profile: virtual-guest

查看预先设定好的方案

[[email protected] ~]# tuned-adm list
Available profiles:
- balanced                    - General non-specialized tuned profile
- desktop                     - Optimize for the desktop use-case
- latency-performance         - Optimize for deterministic performance at the cost of increased power consumption
- network-latency             - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance
- network-throughput          - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks
- powersave                   - Optimize for low power consumption
- throughput-performance      - Broadly applicable tuning that provides excellent performance across a variety of common server workloads
- virtual-guest               - Optimize for running inside a virtual guest  
- virtual-host                - Optimize for running KVM guests
Current active profile: virtual-guest

#修改优化方案
[[email protected] ~]# tuned-adm profile [优化方案]

kvm虚拟机管理及性能优化(代码片段)

...、虚拟机的克隆、虚拟机快照以及KVM性能优化。?使用KVM命令集管理虚拟机KVM关机开机命令#virsh-h//查看命令帮助#virshlist--all//查看虚拟机状态#virshshutdownCentOS7.4-x86_64//关闭虚拟机#virshstartCentOS7.4-x86_64//启动虚拟 查看详情

kvm命令--优化篇(代码片段)

...软件来模拟硬件,故有一定的损耗,特别是I/O,因此需要优化。___KVM性能优化主要在CPU、内存、I/O这几方面。当然对于这几方面的优化,也是要分场景的,不同的场景其优化方向也是不同的。2-优化2.1-cpu___考虑CPU的数量问题,所... 查看详情

kvm的安装与基本使用(代码片段)

目录文章目录目录HostOS配置优化安装CentOSGNOME图形界面相关安装包及其作用安装KVMvirsh指令Libvirt/KVM的网络模式1、vSwitch使用Bridge模式2、vSwitch使用NAT模式3、vSwitch使用Routed模式4、vSwitch使用Isolated模式测试虚拟机及网络连通性HostOS... 查看详情

kvm命令集管理虚拟机(代码片段)

使用KVM命令集管理虚拟机查看虚拟机状态[[email protected]~]#virshlist--allId名称状态----------------------------------------------------2c01running虚拟机的关机与开机[[email protected]~]#virshshutdownc01域c01被关闭[[email  查看详情

kvm命令集管理虚拟机(代码片段)

KVM基本功能管理1、查看命令帮助virsh-h2、KVM的配置文件存放目录cd/etc/libvirt/qemu//目录下有.xml的文件3、查看虚拟机状态virshlist--all4、虚拟机关机与开机virshshutdownc1//关机virshstartc1//开机5、强制虚拟机关闭电源virshdestroyc16、导出虚... 查看详情

kvm管理虚拟机命令(代码片段)

KVM基本功能管理virsh-h查看命令帮助kvm的配置存放路径cd/etc/libvirt/qemu下有.xml的文件查看虚拟机的状态virshlist--all虚拟机关机与开启virshshutdownc1//关机virshstartc1//开机强行关闭虚拟virshdestroycc1强行关闭电源状态导出虚拟机配置virshdump... 查看详情

案例:使用kvm命令集管理虚拟机(代码片段)

一、KVM基本功能管理1、查看命令帮助virsh-h或者virsh--help2、查看KVM配置文件存放目录ls/etc/libvirt/qemu3、查看虚拟机状态virshlist--all4、虚拟机关机与开机virshshutdownc7-1//关机virshstartc7-1//开机强制关闭关闭电源系统virshdestroyc7-15、通过... 查看详情

kvm虚拟化技术详解--kvm的优化(代码片段)

目录:(4.1)KVM虚拟机性能优化思路及方案(4.2)利用tuned优化(4.3)配置KSM(4.4)通过配置大页优化guestos(4.5)配置CPU的亲和性(4.6)半虚拟化驱动(4.1)KVM虚拟机性能优化思路及方案通过前面的学习我们已经可以正常的创建虚... 查看详情

kvm虚拟机的日常管理与配置(代码片段)

1.查看KVM虚拟机配置文件及运行状态(1)KVM虚拟机默认配置文件位置:/etc/libvirt/qemu/autostart目录是配置kvm虚拟机开机自启动目录。(2)virsh命令帮助#virsh-help或直接virsh命令和,再执行子命令。如下所示。[[email protected]~]#virsh欢迎使... 查看详情

实操kvm虚拟机的优化历程---按需优化(代码片段)

...拟硬件层,故有一定的损耗,特别是I/O输入输出。KVM性能优化主要在CPU、内存、I/O这几方面,当然在这几方面也是要分场景的,不同场景优化方向也是不同的。二、KVM优化思路及步骤1、CPU优化要考虑CPU的数量问题,所有guestcpu的... 查看详情

kvm虚拟化的优化(代码片段)

...拟硬件层,故有一定的损耗,特别是I/O输入输出。KVM性能优化主要在CPU、内存、I/O这几方面,当然在这几方面也是要分场景的,不同场景优化方向也是不同的。CPU优化要考虑CPU的数量问题,所有guestCPU的总数目不要超过物理机CPU... 查看详情

kvm性能优化(代码片段)

优化思路及步骤CPU优化要考虑CPU的数量问题,所有guestCPU的总数目不要超过物理机CPU的总数目。如果超过,则将对性能带来严重影响,建议选择复制主机CPU配置内存优化1、KSM(相同页)内存分配的最小单位是page(页面),默认... 查看详情

记录kvm虚拟机常用操作管理命令(代码片段)

环境说明centos7中的KVMNAT方式是kvm安装后的默认方式。它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。检查当前的网络设置#virshnet-list--alldefault是宿主机安装虚拟机支持模块的时候自动安装... 查看详情

kvm文件管理及性能优化(代码片段)

KVM文件管理通过文件管理可以直接查看、修改、复制虚拟机的内部文件。例如:系统因为配置问题无法启动时,可以直接修改虚拟机的文件。虚拟机的磁盘文件有raw和qcow2两种格式。KVM默认格式是raw,raw格式性能最好、速度最快... 查看详情

kvm管理命令(代码片段)

上一次主要介绍了KVM虚拟机的安装,这次主要介绍KVM虚拟机的管理。这一次主要是KVM的一些操作命令,比如虚拟机的开启,删除,恢复,挂起以及重新定义虚拟机。相关命令开关机#virshlist//查看虚拟机状态#virshlist--all//查看所有... 查看详情

kvm性能优化(代码片段)

...软件来模拟硬件,故有一定的损耗,特别是I/O,因此需要优化。KVM性能优化主要在CPU、内存、I/O这几方面。当然对于这几方面的优化,也是要分场景的,不同的场景其优化方向也是不同的。二、KVM优化思路及步骤KVM的性能已经很... 查看详情

kvm的管理命令(代码片段)

KVM使用virsh的日常管理命令:1>查看kvm虚拟机配置文件及运行状态kvm虚拟机的配置文件位置:/etc/libvirt/qemu/kvm虚拟机开机自启动目录:/etc/libvirt/qemu/networks/autostart/virsh的帮助信息:[[email protected]~]#virsh-help进入virsh的交互界面... 查看详情

kvm性能优化(代码片段)

1>CPU的优化Inter的cpu运行级别,按权限级别高低Ring3->Ring2->Ring1->Ring0(Ring2和Ring1暂时不使用)Ring3为用户态;Ring0为内核态,Ring3的用户态是没有权限管理硬件的,需要切换到内核态Ring0,这样的切换(系统调用)称为上下... 查看详情