KVM命令集与优化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KVM命令集与优化相关的知识,希望对你有一定的参考价值。

(一)使用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全虚拟化要点与优化

kvm迁移及优化

KVM 的安装与基本使用

KVM虚拟机的日常管理与配置