一 、虚拟化概论
VMM(Virtual Machine Monitor,虚拟机监控器)它包括规划、部署、管理和优化虚拟基础结构等端到端功能,传统的VMM建立在操作系统之上,但是操作系统本身除了作为VMM的承载之外并没有其他作用,所以,为了更加节约资源,去掉了操作系统由VMM来直接取代。就是我们看到了VMM hypervisor
Hypervisor——一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine monitor ),即虚拟机监视器。
Hypervisors是一种在虚拟环境中的“元”操作系统。他们可以访问服务器上包括磁盘和内存在内的所有物理设备。Hypervisors不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。当服务器启动并执行Hypervisor时,它会加载所有虚拟机客户端的操作系统同时会分配给每一台虚拟机适量的内存,CPU,网络和磁盘。
主流的hypervisor:VMware的ESXi、微软的Hyper-V或者思杰的XenServer。
CPU虚拟化:
硬件虚拟化(HVM)是在半虚拟化发展后提出的一种解决虚拟化性能的方法,主要就是在cpu上增加了一个RING,然后实现guestVM工作在ring0上的方法。
两大CPU厂商各自提出了自己的方法,INTEL提出了VT-X,而AMD公司使用的是CPU的AMD-V技术。
内存虚拟化:
通过在VMM上添加MMU模块,实现将guestvm的线性地址(内存)通过VMM的MMU来进行转换成实际地址,并返回给guestvm,并且在TLB上添加标签的方式避免不同guestvm之间的地址冲突。
MMU
INTER:EPT
AMD:NPT
虚拟化实现的种类:
hosted:
先说下Hypervisor或叫做Virtual Machine Monitor(VMM),它是管理虚拟机VM的软件平台。在主机虚拟化中,Hypervisor就是跑在基础操作系统上的应用软件,与OS-Level中VE的主要区别在于:
Hypervisor构建出一整套虚拟硬件平台(CPU/Memory/Storage/Adapter),上面需要你再去安装新的操作系统和需要的应用软件,这样底层和上层的OS就可以完全无关化,诸如Windows上跑Linux一点儿问题没有;
VE则可以理解为盗用了底层基础操作系统的资源去欺骗装在VE上的应用程序,每新创建出一个VE,其操作系统都是已经安装好了的,和底层操作系统完全一样,所以VE比较VM(包括主机虚拟化和后面的裸金属虚拟化)运行在更高的层次上,相对消耗资源也少很多。
主机虚拟化中VM的应用程序调用硬件资源时需要经过:VM内核->Hypervisor->主机内核,导致性能是三种虚拟化技术中最差的。主机虚拟化技术代表是VMware Server(GSX)、Workstation和Microsoft Virtual PC、Virtual Server等。
bare-metal
裸金属虚拟化中Hypervisor直接管理调用硬件资源,不需要底层操作系统,也可以理解为Hypervisor被做成了一个很薄的操作系统。这种方案的性能处于主机虚拟化与操作系统虚拟化之间。代表是VMware ESX Server、Citrix XenServer和Microsoft Hyper-V。
os-level
在操作系统中模拟出一个个跑应用程序的容器,所有虚拟机共享内核空间,性能最好,耗费资源最少,一个CPU号称可最多模拟500个VPS(Virtual Private Server)或VE(Virtual Environment)。缺点是操作系统唯一,如底层操作系统跑的Windows,VPS/VE就都得跑Windows。代表是Parallels公司(以前叫SWsoft)的Virtuozzo(商用产品)和OpenVZ(开源项目)。
library
application
参考文件:http://group.vsharing.com/Article.aspx?aid=1148290
IO虚拟化:
完全虚拟化
半虚拟化
IO透传技术
1、xen虚拟机的一般工作方式:
xen宿主机负责管理物理硬件的cpu,中断、内存,并且自身仅仅是一个内核并不能直接被用户操作,需要一个dom0这样的虚拟机,dom0完成远程登录管理xen和管理其他虚拟机的功能,并且其他虚拟机的调用cpu、内存、中断是通过xen来完成的,而调用硬盘,io则是通过dom0来完成的。
2、qumu
一款高性能的跨物理硬件的开源模拟器软件,这里说跨物理硬件是指模拟器如果是x86平台的,虚拟机可以搭建在x86平台,也可以是64位平台,并且可以按照aix等其他类型的操作系统。如果平台相同可以通过kqemu软件来进行加速。而kvm也是一个qemu的加速器软件。
3、kvm
这样kvm实际上就是接替qemu的一个虚拟化软件,其实就是linux自身的一个模块,当linux加载这个模块后,linux就变成了”VMM”,实现了虚拟机管理器的功能,在此的用户空间创建guestos,此时的guestos就是“VMM”的一个进程,可以随意的kill掉。所以kvm是完全硬件化的虚拟管理器。
二、XEN
1、 redhat5.0版本默认是可以通过加载内核进行安装xen的,实际操作就是通过grub.conf修改加载的内核模块来完成,而到了6.0版本redhat收购了kvm后,就不再支持xen了,而是提供了kvm的支持。只有在linux2.6.37之后的内核版本才正式支持了xen的功能,而到了3.0内核版本支持了完全功能。
XEN支持32位和64位的CPU,而KVM只支持64位CPU并且要求CPU支持虚拟化技术。
2、管理工具和接口
每一个应用程序都有管理接口或者管理工具用于管理程序,XEN的主要管理的库包括libxc(控制台),libxenguest(管理虚拟机),xinstore(管理虚拟机元数据的存储),这些库通过libxenlight来管理,在这个之上通过xl,xend,xapi三种管理接口进行管理。
各个版本支持的管理工具(仅仅支持xen):
XEN4.0:xm/xend
XEN4.1:xl,xm/xend,xm和xl两者同一时间只能有一个在运行。
XEN4.2:xl
注意:红帽自己研发的管理工具支持了多个平台的虚拟化解决方案,virsh,它需要在被管理节点上启动一个libvirtd的服务进程。这个进程需要libvirt这个程序。但是由于红帽6.4以后不再支持xen所以需要自行编译安装。
所以实现xen功能的几个基本步骤是:
1、下载linux3.0以上内核,并编译安装,并添加一下选项。
2、下载安装libvirt1.0以上版本。
3、安装kernel-xen3.0以上版本。
三、XEN安装
1、环境介绍:
操作系统:centos6.7mini版
安装参照文件:https://wiki.xen.org/wiki/Xen_Project_Software_Overview#Host_and_Guest_Install
2、安装
[root@localhost ~]# yum install centos-release-xen
[root@localhost ~]# yum install xen
======================================================================================================================
软件包 架构 版本 仓库 大小
======================================================================================================================
正在安装:
linux-firmware noarch 20170213-71.git6d3bc888.1.el6 centos-virt-xen 49
replacing kernel-firmware.noarch 2.6.32-573.el6
xen x86_64 4.6.3-14.el6 centos-virt-xen 112 k
为依赖而
SDL x86_64 1.2.14-7.el6_7.1 base 193 k
atk x86_64 1.30.0-1.el6 base 195 k
avahi-libs x86_64 0.6.25-17.el6 base 55 k
cairo x86_64 1.8.8-6.el6_6 base 309 k
cups-libs x86_64 1:1.4.2-77.el6 base 322 k
fontconfig x86_64 2.8.0-5.el6 base 186
freetype x86_64 2.3.11-17.el6 base 361 k
gdk-pixbuf2 x86_64 2.24.1-6.el6_7 base 501 k
glusterfs x86_64 3.7.9-12.el6 base 422 k
glusterfs-api x86_64 3.7.9-12.el6 base 58 k
glusterfs-client-xlators x86_64 3.7.9-12.el6 base 1.1 M
glusterfs-libs x86_64 3.7.9-12.el6 base 313 k
gnutls x86_64 2.12.23-21.el6 base 389 k
gtk2 x86_64 2.24.23-9.el6 base 3.2 M
hicolor-icon-theme noarch 0.11-1.1.el6 base 40 k
jasper-libs x86_64 1.900.1-21.el6_9 updates 138 k
kernel x86_64 4.9.25-27.el6 centos-virt-xen 41 M
libX11 x86_64 1.6.4-3.el6 base 587 k
libX11-common noarch 1.6.4-3.el6 base 171 k
libau x86_64 1.0.6-4.el6 base 24 k
libXcomposite x86_64 0.4.3-4.el6 base 20 k
libXcursor x86_64 1.1.14-2.1.el6 base 28 k
libXdamage x86_64 1.1.3-4.el6 base 18 k
libXext x86_64 1.3.3-1.el6 base 35 k
libXfixes x86_64 5.0.3-1.el6 base 17 k
libXft x86_64 2.3.2-1.el6 base 55 k
libXi x86_64 1.7.8-1.el6 base 38 k
libXinerama x86_64 1.1.3-2.1.el6 base 13 k
libXrandr x86_64 1.5.1-1.el6 base 25 k
libXrender x86_64 0.9.10-1.el6 base 24 k
libXxf86vm x86_64 1.1.3-2.1.el6 base 16 k
libjpeg-turbo x86_64 1.2.1-3.el6_5 base 174 k
libpng x86_64 2:1.2.49-2.el6_7 base 182 k
libthai x86_64 0.1.12-3.el6 base 183 k
libtiff x86_64 3.9.4-21.el6_8 base 346 k
libusb1 x86_64 1.0.9-0.7.rc1.el6 base 80 k
libxcb x86_64 1.12-4.el6 base 180 k
libxslt x86_64 1.1.26-2.el6_3.1 base 452 k
mesa-dri-drivers x86_64 11.0.7-4.el6 base 4.1 M
mesa-dri-filesystem x86_64 11.0.7-4.el6 base 17 k
mesa-dri1-drivers x86_64 7.11-8.el6 base 3.8 M
mesa-libGL x86_64 11.0.7-4.el6 base 142 k
mesa-private-llvm x86_64 3.6.2-1.el6 base 6.5 M
pango x86_64 1.28.1-11.el6 base 351 k
pciutils x86_64 3.1.10-4.el6 base 85 k
perl x86_64 4:5.10.1-144.el6 base 10 M
perl-Module-Pluggable x86_64 1:3.90-144.el6 base 41 k
perl-Pod-Escapes x86_64 1:1.04-144.el6 base 33 k
perl-Pod-Simple x86_64 1:3.13-144.el6 base 213 k
perl-libs x86_64 4:5.10.1-144.el6 base 579 k
perl-version x86_64 3:0.77-144.el6 base 52 k
pixman x86_64 0.32.8-1.el6 base 243 k
python-lxml x86_64 2.2.3-1.1.el6 base 2.0 M
qemu-img x86_64 2:0.12.1.2-2.503.el6_9.3 updates 846 k
usbredir x86_64 0.5.1-3.el6 base 41 k
xen-hypervisor x86_64 4.6.3-14.el6 centos-virt-xen 932 k
xen-libs x86_64 4.6.3-14.el6 centos-virt-xen 534 k
xen-licenses x86_64 4.6.3-14.el6 centos-virt-xen 87 k
xen-runtime x86_64 4.6.3-14.el6 centos-virt-xen 16 M
yajl x86_64 1.0.7-3.el6 base 27 k
为依赖而更新:
libdrm x86_64 2.4.65-2.el6 base 136 k
3、查看当前xen中有几个虚拟机
[root@localhost ~]# xl list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1024 24 r----- 28.8
4、基于图形化界面安装虚拟机(guestos),需要先安装libvirt软件包。
[root@localhost ~]# yum install libvirt
[root@localhost ~]# service libvirtd start
Starting libvirtd daemon: [ OK ]
创建桥设备,用于实现虚拟机和宿主机之间的网络连接方式:
[root@localhost ~]# virsh iface-bridge eth0 xenbr0 //xenbr0名称随意
删除定义的桥设备。使用iface-undefine参数,这个删除完毕需要重启,并且重启后设置的物理网卡会“消失”,需要创建相关的ifcfg-ethx文件,才可以。
查看桥设备,(virbr0是libvirt虚拟出来的)
[root@localhost ~]# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.525400a6a9bb yes virbr0-nic
[root@localhost ~]#
5、ssh登录xen服务器,然后通过virt-manager开启xen的图形化管理界面。
yum install virt-manager
故障点分析:
1、出现一下情况,需要安装 yum -y install xorg-x11-xauth
[root@localhost ~]# virt-manager
Unable to initialize GTK: could not open display
2、出现一下情况的时候,需要创建一个文件/var/lib/dbus/machine-id 并通过dbus-uuidgen生成一个随机码,并放到/var/lib/dbus/machine-id
[root@localhost ~]# virt-manager
process 4326: D-Bus library appears to be incorrectly set up; failed to read machine uuid: UUID file '/var/lib/dbus/machine-id' should contain a hex string of length 32, not length 0, with no other text
See the manual page for dbus-uuidgen to correct this issue.
D-Bus not built with -rdynamic so unable to print a backtrace
已放弃
3、图形界面出现乱码的解决方法:
[root@localhost ~]# yum install dejavu-lgc-sans-fonts
如果按照的版本是virt-manager-0.9.0-34先卸载0.9.0-34版本,然后按照0.9.0-31版本。即可解决问题。
[root@localhost ~]# yum localinstall virt-manager-0.9.0-31.el6.x86_64.rpm
[root@localhost ~]# vi /etc/sysconfig/i18n
英文:
LANG="en_US.UTF-8"
中文:
LANG="zh_CN.UTF-8"
即时生效
source /etc/sysconfig/i18n
4、启动图形界面后无法连接到xen虚拟机,并提示一下错误。
解决办法,安装qemu相关软件包。
[root@localhost ~]# yum install qemu\*
四、命令行模式配置虚拟机
xen可以通过xm或者xl命令行进行配置,我这里xen4.6自带的是xl我就使用它了,xm已经被合并了。
xl配置虚拟机有一个配置模板,就是/etc/xen/*example*的文件。
通过命令行方式登录虚拟机:
[root@localhost xen]# xl console test
六、实时迁移
要实现实时迁移,通常是对于高可用情况说的,就是两个服务器共享一个文件存储,其中一个故障,服务会自动转移到另个一服务器上。
安装虚拟机文档:http://blog.csdn.net/jincm13/article/details/8362509
第二部分 KVM
一、KVM简介
简称kernel-based VM,必须运行在64位系统系统上。KVM是一个混合类型的VMM,它能够以模拟方式支持硬件的完全虚拟化,也能够通过guestos中安装驱动程序进而支持部分硬件的半虚拟化。(对于网络设备和块设备来说,半虚拟化能够提高设备性能)REDHAT和IBM连同linux社区开了了一种独立于VMM的半虚拟化驱动程序标准virtio,根据这个标准开发的半虚拟化程序可兼容的运行于多种不同的VMM上,提高了VMM之间的互操作性。
virtio驱动已经集成在linux2.6以上的内核版本中。
常见的虚拟化模型:
type1:hosted(运行在操作系统之上)
type2:bare-metal(直接运行在硬件基础上)
常见虚拟化技术:
完全虚拟化
半虚拟化para:通用半虚拟化技术是virtio。
混合虚拟化
KVM自身是完全虚拟化的,CPU是HVM(硬件虚拟化),但是使用了virtio的kvm实质上是混合技术的KVM。
过量使用CPU:单个虚拟机使用CPU数量建议不要超过真实物理机cpu个数,而虚拟机总数的CPU使用量可以超过。
支持安装的虚拟机(guest)
linux 、windows、openbsd、FreeBSD、solaris。
二、安装KVM(要实现安装虚拟机的功能,就要安装其他软件了比如qemu。)
1、安装模块,需要CPU硬件支持虚拟化。
kvm模块
kvm-intel 或者kvm-amd
查看CPU虚拟化:
[root@localhost ~]# grep -E "svm|vmx" /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid
安装kvm模块、kvm-intel模块
[root@localhost ~]# modprobe kvm kvm-intel
kvm虚拟出来的设备,用于API(接口)。
[root@localhost ~]# ll /dev/|grep kvm
crw-rw----. 1 root root 10, 232 5月 31 19:56 kvm
实时迁移要求:
guestos映像文件放在共享存储上,比如iscsi、nfs
目标物理主机的kvm要能够兼容源物理主机的kvm及其准备迁移的guestos。(也就是建议两台物理机型号相同)
在两台主机上,共享存储必须挂载在同一个位置,并且挂载的目录名必须相同。
两台物理主机的cpu必须具有相同的特性
虚拟机没有使用透传I/O
物理机要求时间同步
两台物理主机必须使用一致的网络配置,并且所有网桥和网络配置一致
kvm型号相同,兼容
KVM管理工具
1、libvirtd包括:
virtinst软件包,类似于XEM的xl命令行工具,包括virt-install、virt-clone、virt-convert、virt-image。
virtual machine manager
virsh
virsh的本地和远程管理模式:
2、qemu工具
处理器仿真
设备仿真(显卡,网卡,硬盘)
关联仿真设备到真实设备的通用设备
调试器
仿真主机的描述(pc、power、mac)
与仿真器交互的用户接口
2、安装KVM实现虚拟化
qemu-kvm、virtinst、libvirt、libguestfs(这些文件可以通过安装包组的方式简化依赖关系,具体包组是virtualization、virtualization client、virtualization platform)
[root@localhost ~]# yum groupinstall virtualization
[root@localhost ~]# yum groupinstall "virtualization client"
[root@localhost ~]# yum groupinstall virtualization-platform
将qemu-kvm创建软连接到/bin目录中。
[root@localhost ~]# ln -sv /usr/libexec/qemu-kvm /bin/
创建桥设备,用于虚拟机和物理机通信
[root@localhost ~]# virsh iface-bridge eth0 br0
通过图形化界面安装操作系统
[root@localhost ~]# virt-manager
virsh的几个常见命令:
创建虚拟机,事先准备好xml格式的配置文件,可以dump其它已经运行的虚拟机
create:创建并启动
define:创建不启动
删除虚拟机的步骤:
destroy之后undefine,最后删除相关的文件。
所有虚拟机创建完毕后,都在/etc/libvirt/qemu下生成相关的xml文件
[root@localhost ~]# ll /etc/libvirt/qemu
总用量 12
drwxr-xr-x. 2 root root 4096 6月 1 16:36 autostart
drwx------. 3 root root 4096 6月 1 14:51 networks
-rw-------. 1 root root 3191 6月 1 16:45 ttt.xml
[root@localhost ~]#
改变在线状态(动态)的虚拟机内存空间大小,在当前版本测试中修改内存大小后系统崩溃
[root@localhost ~]# virsh setmem ttt 2048 --live
查看虚拟机cpu格式,并修改。测试时不可用
[root@localhost ~]# virsh vcucount ttt
maximum config 1
maximum live 1
current config 1
current live 1
创建虚拟磁盘,并挂载到虚拟机上,卸载用detach-disk
[root@localhost ~]# qemu-img create -f raw /root/ttt.img 512M
Formatting '/root/ttt.img', fmt=raw size=536870912
[root@localhost ~]# virsh attach-disk ttt /root/ttt.img vdb
查看虚拟机状态相关命令 virt help domain
查看CPU状态信息,cpu-stats
本文转自 blackstome 51CTO博客,原文链接:http://blog.51cto.com/137783/1968813,如需转载请自行联系原作者