虚拟化技术案例818.docx
《虚拟化技术案例818.docx》由会员分享,可在线阅读,更多相关《虚拟化技术案例818.docx(24页珍藏版)》请在冰豆网上搜索。
虚拟化技术案例818
虚拟化技术
案例一、KVM日常管理
一、实验目的
(1)掌握通过VIRSH对虚拟机进行日常管理的方式。
(2)掌握VNC的使用方式。
(3)理解虚拟机进行CPU扩容,内存扩容及优化的概念。
二、实验原理
可以使用多种方式创建虚拟机,例如qemu,virt-manager等。
本例使用virt-install创建Ubuntu14.04虚拟机demo。
以demo虚拟机为例,通过virsh工具进行CPU扩容,内存扩容,网络桥接,内存优化,磁盘I/O优化测试等,通过这些方式,让读者掌握KVM虚拟机的日常管理操作。
三、实验环境
宿主机操作系统:
Ubuntu14.04版本,4.2.0-27-generic内核,QEMU2.0.0版本,IP地址192.168.70.204。
虚拟机操作系统:
Ubuntu14.04版本。
四、实验内容及步骤
1、VIRSH创建和管理虚拟机
(1)在宿主机上,创建虚拟磁盘,-f指定格式,代码如下所示:
root@xjy-pc:
/home/kvm#qemu-imgcreate-fraw/home/kvm/ubuntu.raw10G
Formatting'/home/kvm/ubuntu.raw',fmt=rawsize=10737418240
(2)使用virt-install(读者也可以通过其他方式创建虚拟机),通过步骤一中创建的虚拟磁盘,创建一台Ubuntu虚拟机,命名为demo,指定VNC端口号。
如下所示:
root@xjy-pc:
/home/kvm#virt-install--namedemo--virt-typekvm--ram1024--cdrom/home/kvm/iso/ubuntu-14.04-desktop-amd64.iso--disk/home/kvm/ubuntu.raw--networknetwork=default--graphicsvnc,listen=0.0.0.0--noautoconsole
Startinginstall...
Creatingdomain...|0B00:
00
Domaininstallationstillinprogress.Youcanreconnecttotheconsoletocompletetheinstallationprocess.
(3)在另外一台Windows操作系统中,打开一个VNC客户端,输入服务器IP地址和VNC端口号(这里是192.168.70.204:
5900),连接建立的KVM虚拟机,如图1所示。
图1VNC连接KVM虚拟机
(4)将步骤二中的Ubuntu虚拟机逐步进行安装,图2为安装过程界面,安装完成后,图3所示为Ubuntu虚拟机启动后界面。
图2Ubuntu14.04的安装界面
图3Ubuntu14.04虚拟机
(5)可以使用virshlist查看已经启动的虚拟机,如果未启动,使用命令“virshstartdemo”进行启动,代码如下所示:
root@xjy-pc:
/etc/libvirt/qemu#virshlist--all
IdNameState
----------------------------------------------------
-demoshutoff
root@xjy-pc:
/etc/libvirt/qemu#virshstartdemo
Domaindemostarted
root@xjy-pc:
/etc/libvirt/qemu#virshlist--all
IdNameState
----------------------------------------------------
12demorunning
(6)可以使用“virshshutdowndemo”关闭demo虚拟机,使用“virshdestroydemo”强制关闭demo虚拟机电源。
如下所示:
root@xjy-pc:
/etc/libvirt/qemu#virshlist--all
IdNameState
----------------------------------------------------
12demorunning
root@xjy-pc:
/etc/libvirt/qemu#virshdestroydemo
Domaindemodestroyed
root@xjy-pc:
/etc/libvirt/qemu#virshlist--all
IdNameState
----------------------------------------------------
-demoshutoff
(7)KVM虚拟机配置文件默认位置为:
/etc/libvirt/qemu/,可以通过配置文件定义并启动虚拟机,命令为:
virshcreate/etc/libvirt/qemu/demo.xml。
(8)通过virsh将内存中运行的虚拟机导出至虚拟机配置文件,命令为:
#virshdumpxmldemo>/etc/libvirt/qemu/demo2.xml,如图4所示。
图4将虚拟机导出xml文件
(9)通过“virsheditdemo”可以编辑KVM虚拟机配置文件,virshedit将调用vi命令编辑/etc/libvirt/qemu/demo.xml配置文件。
也可以直接通过vi命令进行编辑,修改,保存。
2、CPU扩容
(1)使用“virshedit”编辑虚拟机,为了实现CPU的热添加,就需要更改CPU的最大值,当然热添加值不能超过最大值。
修改demo虚拟机的vcpu的配置当前为1,自动扩容,最大为4,代码如下:
root@xjy-pc:
/etc/libvirt/qemu#virsheditdemo
demo
7ed0d5dd-d283-5390-9575-c1458db792fd
1048576
1048576
4
hvm
……
(2)关闭虚拟机demo,再次启动,并使用“virshsetvcpus”命令将demo热修改为2个cpu。
root@xjy-pc:
/etc/libvirt/qemu#virshshutdowndemo
Domaindemoisbeingshutdown
root@xjy-pc:
/etc/libvirt/qemu#virshstartdemo
Domaindemostarted
root@xjy-pc:
/etc/libvirt/qemu#virshsetvcpusdemo2--live
(3)通过VNC登录KVM虚拟机,使用命令“grepprocessor/proc/cpuinfo|wc-l”查看是否扩容成功,如果结果为2,说明扩容成功。
3、内存扩容
(1)内存的设置拥有一个气球(balloon)机制,可以增大也可以减少,但要设置一个最大值,默认并没有最大值,可以在安装时指定。
(2)使用virshedit编辑demo虚拟机的配置文件,标签表示最大内存。
将图5中标签内容设置为4194304(4G),如图6所示。
标签内容表示当前内存为1048576(1G)。
图5demo虚拟机配置文件
图6修改demo虚拟机配置文件
(3)配置文件修改后,关闭虚拟机demo,再次启动。
如下所示:
root@xjy-pc:
/etc/libvirt/qemu#virshshutdowndemo
Domaindemoisbeingshutdown
root@xjy-pc:
/etc/libvirt/qemu#virshstartdemo
Domaindemostarted
(4)demo虚拟机内存修改之前使用“virshqemu-monitor-command”命令查看demo的当前内存。
代码如下,“balloon:
actual=1024”表示当前的内存为1024M,即1G。
root@xjy-pc:
/etc/libvirt/qemu#virshqemu-monitor-commanddemo--hmp--cmdinfoballoon
balloon:
actual=1024
(5)将demo内存热修改为2097M,即2G。
修改完毕后再次查看当前内存,代码如下:
root@xjy-pc:
/etc/libvirt/qemu#virshqemu-monitor-commanddemo--hmp--cmdballoon2097
root@xjy-pc:
/etc/libvirt/qemu#virshqemu-monitor-commanddemo--hmp--cmdinfoballoon
balloon:
actual=2097
(6)可以看出内存已经热修改为2G。
4、网络管理
(1)在默认情况KVM的网络是NAT模式,但是在生产情况,用的多的都是网桥模式。
(2)首先在宿主机上添加一个网桥br0,并查看网桥信息。
使用命令“brctl”。
代码如下:
root@xjy-pc:
~#brctladdbrbr0
root@xjy-pc:
~#brctlshow
bridgenamebridgeidSTPenabledinterfaces
br08000.000000000000no
virbr08000.fe540048bd84yesvnet0
(3)网桥br0添加完毕后,查看br0的ip地址,代码如下:
root@xjy-pc:
~#ifconfigbr0
br0Linkencap:
EthernetHWaddr26:
f4:
b6:
0d:
7a:
7f
BROADCASTMULTICASTMTU:
1500Metric:
1
RXpackets:
0errors:
0dropped:
0overruns:
0frame:
0
TXpackets:
0errors:
0dropped:
0overruns:
0carrier:
0
collisions:
0txqueuelen:
0
RXbytes:
0(0.0B)TXbytes:
0(0.0B)
(4)接下来使用桥接模式把eth0加入网桥br0,让eth0成为br0的一个端口。
同时将eth0接口ip删除,给br0设置ip为192.168.70.205,24位子网掩码。
同时添加路由网关为192.168.70.2,并关闭防火墙,代码如下:
(这个步骤会导致宿主机的网络断掉,之后重新通过bridge建立网络连接,所以建立bridge这个步骤不要通过SSH连接远程配置。
)
root@xjy-pc:
~#brctladdifbr0eth0&&ipaddrdeldeveth0192.168.70.204/24&&ifconfigbr0192.168.70.205/24up&&routeadddefaultgw192.168.70.2&&iptables-F
(5)再次查看网桥br0的ip地址,代码如下:
root@xjy-pc:
~#ifconfigbr0
br0Linkencap:
EthernetHWaddr00:
25:
90:
76:
67:
b5
inetaddr:
192.168.70.205Bcast:
192.168.70.255Mask:
255.255.255.0
inet6addr:
fe80:
:
225:
90ff:
fe76:
67b5/64Scope:
Link
UPBROADCASTRUNNINGMULTICASTMTU:
1500Metric:
1
RXpackets:
528errors:
0dropped:
0overruns:
0frame:
0
TXpackets:
104errors:
0dropped:
0overruns:
0carrier:
0
collisions:
0txqueuelen:
0
RXbytes:
76041(76.0KB)TXbytes:
15118(15.1KB)
(6)使用virshedit命令编辑虚拟机的网络配置,修改为使用br0网桥模式。
图7demo虚拟机未修改前网络配置
图8demo虚拟机修改后网络配置
(7)将demo虚拟机关闭后重新启动,代码如下:
root@xjy-pc:
/etc/libvirt/qemu#virshshutdowndemo
Domaindemoisbeingshutdown
root@xjy-pc:
/etc/libvirt/qemu#virshstartdemo
Domaindemostarted
(8)使用VNC连接demo虚拟机,在demo虚拟机中配置其静态IP地址为192.168.70.203后重启网卡。
代码如下:
root@demo-pc:
~#ifconfigeth0
eth0Linkencap:
EthernetHWaddr51:
54:
00:
48:
bd:
84
inetaddr:
192.168.70.203Bcast:
192.168.70.255Mask:
255.255.255.0
inet6addr:
fe80:
:
225:
90ff:
fe76:
67b5/64Scope:
Link
UPBROADCASTRUNNINGMULTICASTMTU:
1500Metric:
1
RXpackets:
208452errors:
0dropped:
219overruns:
0frame:
0
TXpackets:
702108errors:
0dropped:
0overruns:
0carrier:
0
collisions:
0txqueuelen:
1000
RXbytes:
66675114(66.6MB)TXbytes:
1010891428(1.0GB)
Interrupt:
20Memory:
f7a00000-f7a20000
root@demo-pc:
~#/etc/init.d/networkingrestart
(9)在KVM服务器上使用ping命令测试与demo虚拟机的连通性,代码如下:
root@xjy-pc:
~#ping192.168.70.203-c5
PING192.168.70.203(192.168.70.203)56(84)bytesofdata.
64bytesfrom192.168.70.203:
icmp_seq=1ttl=64time=0.265ms
64bytesfrom192.168.70.203:
icmp_seq=2ttl=64time=0.329ms
64bytesfrom192.168.70.203:
icmp_seq=3ttl=64time=0.225ms
64bytesfrom192.168.70.203:
icmp_seq=4ttl=64time=0.314ms
64bytesfrom192.168.70.203:
icmp_seq=5ttl=64time=0.303ms
---192.168.70.203pingstatistics---
5packetstransmitted,5received,0%packetloss,time3999ms
rttmin/avg/max/mdev=0.225/0.287/0.329/0.039ms
(10)在demo虚拟机中使用ping命令测试与KVM服务器的连通性,代码如下:
root@demo-pc:
~#ping192.168.70.205-c5
PING192.168.70.205(192.168.70.205)56(84)bytesofdata.
64bytesfrom192.168.70.205:
icmp_seq=1ttl=64time=0.181ms
64bytesfrom192.168.70.205:
icmp_seq=2ttl=64time=0.207ms
64bytesfrom192.168.70.205:
icmp_seq=3ttl=64time=0.329ms
64bytesfrom192.168.70.205:
icmp_seq=4ttl=64time=0.388ms
64bytesfrom192.168.70.205:
icmp_seq=5ttl=64time=0.248ms
---192.168.70.205pingstatistics---
5packetstransmitted,5received,0%packetloss,time3999ms
rttmin/avg/max/mdev=0.181/0.288/0.388/0.064ms
(11)至此,虚拟机通过桥接模式和宿主机连通,和外界网络也保持了通畅。
5、内存优化
内存优化项通常包括EPT技术、透明大页和KSM技术几种。
EPT技术:
(1)EPT技术也叫扩展页表,这是Intel开创的硬件辅助内存虚拟化技术。
内存的使用,是一个逻辑地址跟物理地址转换的过程。
虚拟机内部有逻辑地址转换成物理地址的过程,然后虚拟机又要和宿主机内存进行逻辑到物理的转换过程,整个寻址过程有两次地址转换,效率非常低。
而EPT技术,能将两次地址转换变成了一次,提高效率。
这项技术基本上现在的服务器CPU都支持,只要在BIOS打开了Intel的VT设置,那么EPT也一起打开了。
(2)使用图9中命令查看CPU是否支持EPT特性,使用图10中命令查看是否已开启EPT和VPID,Y表示已经加载了EPT和VPID,如果没加载可以通过命令“Modprobekvm_intelept=0,vpid=0”加载。
如图9和10所示:
图9查看cpu是否支持EPT特性
图10查看是否开启EPT特性
透明大页:
(1)透明大页,也叫透明巨型页(TransparentHugePage,THP),它允许所有的空余内存被用作缓存以提高性能,使用大页可以显著提高CPU的命中率,所以如果GuestOS使用大内存或者内存负载比较重的情况下,通过配置透明大页可以显著提高性能。
这个设置在Ubuntu14.04中是默认开启的,不需要手动去操作。
(2)Ubuntu14.04支持透明大页,默认开启,如图11所示:
图11透明大页默认开启
(3)图11中的参数说明:
never:
关闭。
always:
尽量使用透明大页,扫描内存,有512个4k页面可以整合,就整合成一个2M的页面,需要使用swap的时候,内存被分割为4k大小。
madvise:
避免改变内存占用。
(4)默认情况下,大页的数目为0,通过下面两种方式可以查看到,代码如下:
root@xjy-pc:
~#cat/proc/sys/vm/nr_hugepages
0
root@xjy-pc:
~#cat/proc/meminfo|grepHugePage
AnonHugePages:
376832kB
HugePages_Total:
0
HugePages_Free:
0
HugePages_Rsvd:
0
HugePages_Surp:
0
(5)设置大页的数量为2000后,再次查看大页数目,此时系统有2000个可用大页,代码如下:
root@xjy-pc:
~#echo2000>/proc/sys/vm/nr_hugepages
root@xjy-pc:
~#cat/proc/sys/vm/nr_hugepages
2000
(6)修改大页数量后查看虚拟机运行状态,发现即使虚拟机在运行,透明大页也没有被使用。
root@xjy-pc:
~#virshlist--all
IdNameState
----------------------------------------------------
2demorunning
root@xjy-pc:
~#cat/proc/meminfo|grepHugePage
AnonHugePages:
374784kB
HugePages_Total:
2000
HugePages_Free:
2000
HugePages_Rsvd:
0
HugePages_Surp:
0
(7)使用命令“virshshutdowndemo”将demo虚拟机关闭,然后修改demo虚拟机配置,添加使用大页的内容,(图12中可以看到demo虚拟机的内存为1G),在图12标签下面添加标签。
如图12和13所示。
图12demo虚拟机配置文件修改前
图13demo虚拟机配置文件修改后
(8)挂载大页,然后重新启动libvirtd-bin。
root@xjy-pc:
/dev#mount-thugetlbfshutetlbfs/dev/hugepages
root@xjy-pc:
/dev#mount|tail-l
……
hutetlbfson/dev/hugepagestypehugetlbfs(rw)
root@xjy-pc:
/dev#/etc/init.d/libvirt-binrestart
*Restartinglibvirtmanagementdaemon/usr/sbin/libvirtd
...done.
(9)使用“virshstartdemo”重新开启虚拟机后查看结果。
从以下代码可以看出,共消耗了520个大页,每个大页默认大小为2M,正好是demo所有的内存。
root@xjy-pc:
/dev#cat/proc/meminfo|grep-iHugePage
AnonHugePages:
34816kB
HugePages_Total:
2000
HugePages_Free:
1480
HugePages_Rsvd:
0