KVM虚拟化 - cpu内存扩容、磁盘格式、网络桥接、性能优化

目录

1、CPU动态扩容

2、内存扩容

3、磁盘格式比较

4、网络配置

6、性能优化


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
1  修改为
4  # 当前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
1  修改为
4  # 当前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
  2097152
  2097152

# 命令方式

[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  mtu 1500
        inet6 fe80::fc54:ff:fe83:f7a0  prefixlen 64  scopeid 0x20
        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  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
        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  mtu 1500
        inet6 fe80::20c:29ff:fea7:1724  prefixlen 64  scopeid 0x20
        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  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  mtu 1500
        inet6 fe80::fc54:ff:fe83:f7a0  prefixlen 64  scopeid 0x20
        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


  
  
  
  
改成如下配置        

# 重启kvm,使用vnc登录,看到ip地址已经重新获取到了

[root@linux-node1 ~]# ip ad
1: lo:  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:  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)