1. 程式人生 > >KVM命令集與優化

KVM命令集與優化

優化方案 rgs save cpu 客戶機 連接 tun format mini

(一)使用KVM命令集管理虛擬機

1:KVM基本功能管理

(1)查看命令幫助

[root@localhost ~]# virsh -h

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

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

[root@localhost ~]# ls /etc/libvirt/qemu
CentOS7.4-x86_64.xml  networks

3:查看虛擬機狀態

[root@localhost ~]# virsh list --all #//查看所有虛擬機狀態關閉或開啟
 Id    名稱                         狀態
----------------------------------------------------
 2     CentOS7.4-x86_64               running

 [root@localhost ~]# virsh list #//查看當前虛擬機狀態down掉狀態查不到
 Id    名稱                         狀態
----------------------------------------------------
 2     CentOS7.4-x86_64               running

4:安裝多個虛擬機用VNC連接時區分端口號默認從5900開始

技術分享圖片

[root@localhost ~]# 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
[root@localhost ~]# virsh shutdown co01
域 co01 被關閉

[root@localhost ~]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 -     co01                           關閉

#開啟co01
[root@localhost ~]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 5     co01                           running

6:強制關閉電源

[root@localhost ~]# virsh destroy co01
域 co01 被刪除 #//這裏刪除不是真的刪除是強制關閉電源

[root@localhost ~]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 -     co01                           關閉

7:通過配置文件啟動虛擬機

[root@localhost ~]# virsh create /etc/libvirt/qemu/co01.xml 
域 co01 被創建(從 /etc/libvirt/qemu/co01.xml)

[root@localhost ~]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 6     co01                           running

8:掛起虛擬機

[root@localhost ~]# virsh suspend co01
域 co01 被掛起

[root@localhost ~]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 6     co01                           暫停

9:恢復虛擬機

[root@localhost ~]# virsh resume co01
域 co01 被重新恢復

[root@localhost ~]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 6     co01                           running

10:配置虛擬機伴隨著宿主機開機自啟動

[root@localhost ~]# virsh autostart co01
域 co01標記為自動開始

11:導處虛擬機配置

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

12:虛擬機刪除與添加

#先關閉虛擬機
[root@localhost ~]# virsh shutdown co01
域 co01 被關閉

#刪除
[root@localhost ~]# virsh undefine co01
域 co01 已經被取消定義

[root@localhost ~]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 2     CentOS7.4-x86_64               running

13:通過備份配置文件重新定義虛擬機

[root@localhost ~]# mv /etc/libvirt/qemu/co02 /etc/libvirt/qemu/co01.xml
[root@localhost ~]# virsh define /etc/libvirt/qemu/co01.xml 
定義域 co01(從 /etc/libvirt/qemu/co01.xml)

[root@localhost ~]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 -     co01                           關閉

14:修改虛擬機配置文件

1:直接通過vim命令修改
[root@localhost ~]# 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命令修改
[root@localhost ~]# virsh edit co01
沒有更改域 co01 XML 配置。

KVM文件管理

通過文件管理可以直接查看、修改、復制虛擬機內部文件

(1)轉換raw格式磁盤文件至qcow2格式

#查看當前磁盤模式
[root@localhost vir]# qemu-img info c02.img 
image: c01.img
file format: raw
virtual size: 30G (32212254720 bytes)
disk size: 1.1G

#關閉虛擬機
[root@localhost vir]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 -     co01                           關閉

#轉換文件磁盤格式
[root@localhost vir]# qemu-img convert -f raw -O qcow2 c01.img co01.qcow2
[root@localhost vir]# ls
c01.img  c02.img  co01.qcow2

(2)修改co01配置文件

[root@localhost 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)虛擬機克隆

#從看看狀態
[root@localhost vir]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 -     co01                           關閉

#co01克隆co03
[root@localhost vir]# virt-clone -o co01 -n co03 -f /vir/co02.qcow2
WARNING  當卷已經被全部分配後,需要的卷容量將超過可用池空間。(30720 M 需要的容量 > 12510 M 可用容量)
正在分配 ‘co02.qcow2‘                                                     |  30 GB  00:01:14     

成功克隆 ‘co03‘。
[root@localhost vir]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 -     co01                           關閉
 -     co03                           關閉

#啟動虛擬機
[root@localhost vir]# virsh start co03
[root@localhost vir]# virsh list --all
 Id    名稱                         狀態
----------------------------------------------------
 2     CentOS7.4-x86_64               running
 -     co01                           關閉
 -     co03                           running

(4)虛擬機快照

KVM虛擬機要使用鏡像功能,磁盤格式必須為qcow2格式之前把co01磁盤格式轉換為了qcow2
1:對co01創建快照

[root@localhost vir]# virsh snapshot-create co01
已生成域快照 1533785921

#查看虛擬機快照版本信息
[root@localhost vir]# virsh snapshot-current co01

#  查看快照信息
[root@localhost vir]# virsh snapshot-list co01
 名稱               生成時間              狀態
------------------------------------------------------------
 1533785921           2018-08-09 11:38:41 +0800 shutoff

#  恢復虛擬機至1533785921
[root@localhost vir]# virsh snapshot-revert co01 1533785921

#刪除快照
[root@localhost vir]# virsh snapshot-list co01
 名稱               生成時間              狀態
------------------------------------------------------------
 1533785921           2018-08-09 11:38:41 +0800 shutoff
 1533786123           2018-08-09 11:42:03 +0800 shutoff

[root@localhost vir]# virsh snapshot-delete co01 1533785921
已刪除域快照 1533785921

[root@localhost 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目錄下的文件可查看內存頁共享的情況下:

[root@localhost ~]# cd /sys/kernel/mm/ksm/
[root@localhost 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
[root@localhost 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

[root@localhost ksm]# cat run  #查看run顯示出來0為不開啟,1為開啟
0

[root@localhost ksm]# echo 1 > run  #臨時開啟用重定向,不支持vi編輯器
                                    #可以在/etc/rc。local中添加 echo 1 > /sys/kernel/mm/run
                                    #run讓KSM開機自啟動
[root@localhost ksm]# cat run 
1

[root@localhost ksm]# cat pages_to_scan  #定期掃描相同頁,sleep_millisecs決定多長時間
                                         #pages_to_scan決定每次查看多少頁面
100 #默認為100,也大也好,超過2000無效,需要開啟兩個服務ksmtuned和tuned
    #支持多個頁面

KSM會稍微影響系統性能,以效率換空間,如果系統內存很充裕,則無需開啟

2)對內存設置限制
如果我們有多個虛擬機,為了防止某個虛擬機無節制的占用內存,導致其他虛擬機無法正常使用,就要對每個虛擬機進行限制

[root@localhost ~]# virsh memtune co01  #查看當前虛擬機co01內存限制,單位為KB
hard_limit     : 無限制                 #強制最大內存(應限制)
soft_limit     : 無限制                 #可用最大內存
swap_hard_limit: 無限制                 #強制最大swap使用大小

#查看virsh memtune語法
[root@localhost ~]# virsh memtune --help

#設置co01強制最大內存100M,在線生效
[root@localhost ~]# virsh memtune co01 --hard-limit 1024000 --live

[root@localhost ~]# virsh memtune co01
hard_limit     : 1024000
soft_limit     : 無限制
swap_hard_limit: 無限制

3)大頁後端內存
在邏輯地址像物理地址裝換時,CPU保持一個後備翻譯緩沖器TLB,用來緩存轉換結果,而TLB容量很小,TLB需要保存的緩存項就少,就會減少cachemiss。通過為客戶機提供大頁後端內存,就減少客戶機的消耗的內存並提高TLB命中率。從而提升KVM性能

[root@localhost ~]# cat /proc/meminfo  #查看內存信息,無大頁可用
AnonHugePages:    491520 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0

[root@localhost ~]# echo 25000 > /proc/sys/vm/nr_hugepages #指定大頁需要的內存頁面數(臨時生效)
[root@localhost ~]# cat /proc/meminfo | grep HugePage
AnonHugePages:    491520 kB
HugePages_Total:      66
HugePages_Free:       66
HugePages_Rsvd:        0
HugePages_Surp:        0

[root@localhost ~]# sysctl -w vm.nr_hugepages=25000 #指定大頁數永久生效
vm.nr_hugepages = 25000

或者在/etc/sysctl.conf中添加vm.nr_hugepages=25000來持久設定大頁文件系統需要的內存頁面數

主:
    大頁文件系統需要的頁面數可以有客戶機需要的內存除以頁面大小來大體估算算
[root@localhost ~]# virsh shutdown co01 #關閉co01虛擬機
域 co01 被關閉
[root@localhost ~]# 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> #添加,使用大頁

[root@localhost ~]# mount -t hugetlbfs /dev/hugepages/  #掛載hugetlbfs文件系統
[root@localhost ~]# systemctl restart libvirtd.service #重啟libvirtd
[root@localhost ~]# virsh start co01
域 co01 已開始

[root@localhost ~]# cat /proc/meminfo |grep HugePage  #被釋放
AnonHugePages:    503808 kB
HugePages_Total:     234
HugePages_Free:      226
HugePages_Rsvd:        0
HugePages_Surp:        0

#開機自啟動掛載寫入/etc/fstab配置文件中
[root@localhost ~]# vim /etc/fstab 
hugetlbfs       /hugepages      hugetlbfs defaules 0 0

(4)I/O優化
在實際生產過程中,為了避免過渡消耗磁盤資源而對其他虛擬機造成影響,我們希望對每臺虛擬機對磁盤資源消耗是可以控制的

對磁盤I/O控制有兩種方式:
1)在整體中的權重,範圍在100~1000.
2)限制具體I/O

[root@localhost ~]# virsh blkiotune co01
weight         : 1000
device_weight  : 

[root@localhost ~]# virsh blkiotune co01 --weight 500 #設置為500其實這個數值也大越好

[root@localhost ~]# virsh blkiotune co01
weight         : 500
device_weight  : 

(5)系統調優工具
用來監控和收集系統各個組件的數據,並依據數據提供的信息動態調整系統設置,達到動態優化系統的目的。

安裝調優工具

[root@localhost ~]# yum install tuned -y
[root@localhost ~]# systemctl start tuned.service
[root@localhost ~]# tuned-adm active               #查看當前優化方案
Current active profile: virtual-guest

查看預先設定好的方案

[root@localhost ~]# 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

#修改優化方案
[root@localhost ~]# tuned-adm profile [優化方案]

KVM命令集與優化