目錄
1、CPU動態擴容
1.1、靜態cpu擴容(需重啓)
# 直接修改vm虛擬機cpu參數
[root@linux-node1 qemu]# vim /etc/libvirt/qemu/CentOS-7.1-x86_64.xml
[root@linux-node1 qemu]# virsh edit CentOS-7.1-x86_64
<vcpu placement='static'>1</vcpu> 修改爲
<vcpu placement='auto' current='1'>4</vcpu> # 當前cpu爲1,最大可配置爲4
# 重啓vm
[root@linux-node1 ~]# virsh destroy CentOS-7.1-x86_64
[root@linux-node1 ~]# virsh start CentOS-7.1-x86_64
[root@linux-node1 ~]# virsh dominfo CentOS-7.1-x86_64
CPU: 2
1.2、動態cpu擴容(熱擴容)
# 注意:
# 動態擴容不得超過配置文件cpu最大數量
# 動態擴容只針對centos7生效,6不行
# 只能動態增加,不支持減少
# 直接修改vm虛擬機cpu參數
[root@linux-node1 qemu]# virsh edit CentOS-7.1-x86_64
<vcpu placement='static'>1</vcpu> 修改爲
<vcpu placement='auto' current='1'>4</vcpu> # 當前cpu爲1,最大可配置爲4
# 直接使用setvcpus參數
[root@linux-node1 ~]# virsh setvcpus CentOS-7.1-x86_64 2 --live
[root@linux-node1 ~]# 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、內存擴容
# 通過修改配置文件方式設置最大內存
root@test-kvm ~]# virsh dumpxml centos7 | grep -i memo
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
# 命令方式
[root@linux-node1 ~]# 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網絡設備,這是虛擬啓動後生成的。
[root@linux-node1 ~]# 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獲取的地址來源於下面
[root@linux-node1 ~]# 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
[root@linux-node1 ~]# 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也橋接到這個網絡設備橋上
[root@linux-node1 ~]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.5254002430ec yes virbr0-nic
vnet0
[root@linux-node1 ~]# brctl addbr br0
[root@linux-node1 ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000000000000 no
virbr0 8000.5254002430ec yes virbr0-nic
vnet0
# 下面操作過程中會斷網。我們可以寫成腳本形式執行
[root@linux-node1 ~]# cd /tools
[root@linux-node1 ~]# vim edit-net.sh
[root@linux-node1 ~]# 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
[root@linux-node1 ~]# sh edit-net.sh &
# 可以看到eth0上就沒有ip地址了,同時eth0橋接到了br0上了
[root@linux-node1 ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29a71724 no eth0
virbr0 8000.5254002430ec yes virbr0-nic
vnet0
[root@linux-node1 ~]# 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這裏原先配置如下
[root@linux-node1 ~]# 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地址已經重新獲取到了
[root@linux-node1 ~]# 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