天天看點

KVM虛拟化 - cpu記憶體擴容、磁盤格式、網絡橋接、性能優化

目錄

1、CPU動态擴容

2、記憶體擴容

3、磁盤格式比較

4、網絡配置

6、性能優化

1、CPU動态擴容

1.1、靜态cpu擴容(需重新開機)

# 直接修改vm虛拟機cpu參數

[[email protected] qemu]# vim  /etc/libvirt/qemu/CentOS-7.1-x86_64.xml 
[[email protected] qemu]# virsh edit CentOS-7.1-x86_64
<vcpu placement='static'>1</vcpu>  修改為
<vcpu placement='auto' current='1'>4</vcpu>  # 目前cpu為1,最大可配置為4
           

# 重新開機vm

[[email protected] ~]# virsh destroy CentOS-7.1-x86_64 
[[email protected] ~]# virsh start CentOS-7.1-x86_64
[[email protected] ~]# virsh dominfo CentOS-7.1-x86_64           
CPU:          2
           

1.2、動态cpu擴容(熱擴容)

# 注意:

# 動态擴容不得超過配置檔案cpu最大數量

# 動态擴容隻針對centos7生效,6不行

# 隻能動态增加,不支援減少       

# 直接修改vm虛拟機cpu參數

[[email protected] qemu]# virsh edit CentOS-7.1-x86_64
<vcpu placement='static'>1</vcpu>  修改為
<vcpu placement='auto' current='1'>4</vcpu>  # 目前cpu為1,最大可配置為4
           

# 直接使用setvcpus參數

[[email protected] ~]# virsh setvcpus CentOS-7.1-x86_64 2 --live
[[email protected] ~]# virsh dominfo CentOS-7.1-x86_64          
Id:             4
名稱:       CentOS-7.1-x86_64
UUID:           2e66d4f3-96b4-43ad-9da1-b5007f110c23
OS 類型:    hvm
狀态:       running
CPU:          2
CPU 時間:   70.0s
最大記憶體: 1048576 KiB
使用的記憶體: 1048576 KiB
持久:       是
自動啟動: 啟用
管理的儲存: 否
安全性模式: none
安全性 DOI: 0
           

2、記憶體擴容

# 通過修改配置檔案方式設定最大記憶體

[email protected] ~]# virsh dumpxml centos7 | grep -i memo
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
           

# 指令方式

[[email protected] ~]# virsh setmem CentOS-7.1-x86_64 1748288
           

3、磁盤格式比較

1. raw

raw格式是最簡單,什麼都沒有,是以叫raw格式。連頭檔案都沒有,就是一個直接給虛拟機進行讀寫的檔案。raw不支援動态增長空間,必須一開始就指定空間大小。是以相當的耗費磁盤空間。但是對于支援稀疏檔案的檔案系統(如ext4)而言,這方面并不突出。ext4下預設建立的檔案就是稀疏檔案,是以不要做什麼額外的工作。用

du -sh 檔案名

可以檢視檔案的實際大小。也就是說,不管磁盤空間有多大,運作下面的指令沒有任何問題:

qemu-img create -f raw test.img 10000G

raw鏡像格式是虛拟機種I/O性能最好的一種格式,大家在使用時都會和raw進行參照,性能越接近raw的越好。但是raw沒有任何其他功能。對于稀疏檔案的出現,像qcow這一類的運作時配置設定空間的鏡像就沒有任何優勢了。

2. cow

cow格式和raw一樣簡單,也是建立時配置設定所有空間,但cow有一個bitmap表記錄目前哪些扇區被使用,是以cow可以使用增量鏡像,也就是說可以對其做外部快照。但cow也沒有其他功能,其特點就是簡單。

3. qcow

qcow在cow的基礎上增加了動态增加檔案大小的功能,并且支援加密,壓縮。qcow通過2級索引表來管理整個鏡像的空間配置設定,其中第二級的索引用了記憶體cache技術,需要查找動作,這方面導緻性能的損失。qcow現在基本不用,一方面其優化和功能沒有qcow2好,另一方面,讀寫性能又沒有cow和raw好。

4. qcow2

qcow2是集各種技術為一體的超級鏡像格式,支援内部快照,加密,壓縮等一系列功能,通路性能也在不斷提高。但qcow2的問題就是過于臃腫,把什麼功能都集于一身。鏡像小的原因是鏡像檔案隻儲存改變的部分,原來的檔案被鎖住了。

qcow2格式,類似虛拟機的瘦模式,雖然劃分10GB,但是不是立即占完的,用多少占多少  

4、網絡配置

# 啟動kvm虛拟機,會多出一個vnet0網絡裝置,這是虛拟啟動後生成的。

[[email protected] ~]# ifconfig
vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::fc54:ff:fe83:f7a0  prefixlen 64  scopeid 0x20<link>
        ether fe:54:00:83:f7:a0  txqueuelen 500  (Ethernet)
        RX packets 464  bytes 49210 (48.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1356  bytes 104195 (101.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
           

# 預設kvm虛拟機流量橋接到virbr0上,然後經過主控端的iptables的nat,再經過eth0出去,這就有網絡瓶頸了,而且依靠iptables,如果你把iptables關閉無法上網了。同時ip位址是位址池中配置設定的内網位址。

# kvm擷取的位址來源于下面

[[email protected] ~]# ps aux | grep dns
nobody     1343  0.0  0.0  15544   964 ?        S    Feb06   0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root       1344  0.0  0.0  15516   300 ?        S    Feb06   0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root       7701  0.0  0.0 112648   968 pts/0    S+   00:36   0:00 grep --colour=auto dns
[[email protected] ~]# cat /var/lib/libvirt/dnsmasq/default.conf
##WARNING:  THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
##OVERWRITTEN AND LOST.  Changes to this configuration should be made using:
##    virsh net-edit default
## or other application using the libvirt API.
##
## dnsmasq conf file created by libvirt
strict-order
pid-file=/var/run/libvirt/network/default.pid
except-interface=lo
bind-dynamic
interface=virbr0
dhcp-range=192.168.122.2,192.168.122.254
dhcp-no-override
dhcp-lease-max=253
dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile
addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts
           

# 生産中,網絡這塊改動如下:

一般是添加一個網絡裝置橋

把主控端的網卡橋接到這上面

删除原先主控端的IP位址

把主控端的位址配置到這個網絡裝置橋上

最後修改kvm配置檔案,讓kvm也橋接到這個網絡裝置橋上

[[email protected] ~]# brctl show
bridge name bridge id       STP enabled interfaces
virbr0      8000.5254002430ec   yes     virbr0-nic
                            vnet0
[[email protected] ~]# brctl addbr br0
[[email protected] ~]# brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.000000000000   no     
virbr0      8000.5254002430ec   yes     virbr0-nic
                            vnet0
           

# 下面操作過程中會斷網。我們可以寫成腳本形式執行 

[[email protected] ~]# cd /tools
[[email protected] ~]# vim edit-net.sh
[[email protected] ~]# cat edit-net.sh
brctl  addif  br0  eth0
ip addr del dev eth0 192.168.145.133/24
ifconfig  br0   192.168.145.133/24 up
route add default gw 192.168.145.2
[[email protected] ~]# sh edit-net.sh &
           

# 可以看到eth0上就沒有ip位址了,同時eth0橋接到了br0上了

[[email protected] ~]# brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.000c29a71724   no      eth0
virbr0      8000.5254002430ec   yes     virbr0-nic
                            vnet0
           
[[email protected] ~]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.145.133  netmask 255.255.255.0  broadcast 192.168.145.255
        inet6 fe80::20c:29ff:fea7:1724  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:a7:17:24  txqueuelen 0  (Ethernet)
        RX packets 38  bytes 2676 (2.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 35  bytes 3654 (3.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fea7:1724  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:a7:17:24  txqueuelen 1000  (Ethernet)
        RX packets 293183  bytes 327693627 (312.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 89134  bytes 18395706 (17.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:24:30:ec  txqueuelen 0  (Ethernet)
        RX packets 46059  bytes 4057533 (3.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 84485  bytes 315875854 (301.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::fc54:ff:fe83:f7a0  prefixlen 64  scopeid 0x20<link>
        ether fe:54:00:83:f7:a0  txqueuelen 500  (Ethernet)
        RX packets 12  bytes 1162 (1.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 737  bytes 38921 (38.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
           

# 把kvm也橋接到br0上

# interface這裡原先配置如下

[[email protected] ~]# virsh edit CentOS-7.1-x86_64

<interface type='network'>
  <mac address='52:54:00:83:f7:a0'/>
  <source network='default'/>
  <model type='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
改成如下配置
<interface type='bridge'>
  <mac address='52:54:00:83:f7:a0'/>
  <source bridge='br0'/>
  <model type='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
           

# 重新開機kvm,使用vnc登入,看到ip位址已經重新擷取到了

[[email protected] ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:83:f7:a0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.145.134/24 brd 192.168.145.255 scope global dynamic eth0
       valid_lft 1643sec preferred_lft 1643sec
    inet6 fe80::5054:ff:fe83:f7a0/64 scope link
       valid_lft forever preferred_lft forever
           

6、性能優化

https://blog.51cto.com/13871362/2350104

KVM

繼續閱讀