牛人就不要看了~
1.1 引言
先举个例子,一台物理主机有16G内存,用户A的程序只需要2G内存,用户B的程序只需要4G内存,如果没有用虚拟化技术,他们的解决方案如下:
两用户程序放到同一台物理机器上,各自配置运行环境。资源都能满足了。问题是,程序的运行环境一个是Linux,一个是windows呢?如何防止用户A的程序不会窃取用户B数据呢?
再买一台2G的物理主机,这样就解决了上面两个问题,呵呵。问题是,好浪费啊!如果再有个需要1G内存的用户来了,就买个1G的物理主机?如果老板有的是钱,没问题~
有个更加省钱的方法:采用虚拟化的技术,在那台物理主机上生成两个操作系统出来,一个4G内存,一个2G内存,操作系统的类型任选,虚拟化能够提供资源隔离的功能。这样就完美解决了上述的问题。对普通人来讲,可能VMware虚拟计算机是最了解的吧。
1.2 虚拟化是什么?
虚拟化是云计算技术的基础。
百度百科上说:是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
维基百科上说:In computing, virtualization refers to the act of creating a virtual (rather than actual) version of something, including virtual computer hardware platforms, operating systems, storage devices, and computer network resources.
因为虚拟化本质不是对硬件的改变,而是用软件的方法抽象,虚拟出的IT资源与底层硬件相隔离,所以虚拟化技术能够实现IT资源的自动化分配、调度、共享、迁移、监控。这种特性对于大型网站运维来说非常有用,谁不想啥事都是自动化的?人总是比较容易马虎出错。另外,有些业务是IO密集型,有些业务是计算密集型,需求各有不同,虚拟化可以让IT资源按需分配。虚拟IT资源与硬件无关,所以当需要更多的资源的时候,只需要增加一些物理计算机即可,小型机与普通机器可以混合使用。
服务器虚拟化主要有以下四方面的功能:
1.3 虚拟化的好处
lip_image002[4]
效率:将原本一台服务器的资源分配给了数台虚拟化的服务器,有效的利用了闲置资源,确保企业应用程序发挥出最高的可用性和性能。
隔离:虽然虚拟机可以共享一台计算机的物理资源,但它们彼此之间仍然是完全隔离的,就像它们是不同的物理计算机一样。因此,在可用性和安全性方面,虚拟环境中运行的应用程序之所以远优于在传统的非虚拟化系统中运行的应用程序,隔离就是一个重要的原因。
可靠:虚拟服务器是独立于硬件进行工作的,通过改进灾难恢复解决方案提高了业务连续性,当一台服务器出现故障时可在最短时间内恢复且不影响整个集群的运作,在整个数据中心实现高可用性。
成本:降低了部署成本,只需要更少的服务器就可以实现需要更多服务器才能做到的事情,也间接降低了安全等其他方面的成本。
兼容:所有的虚拟服务器都与正常的x86系统相兼容,他改进了桌面管理的方式,可部署多套不同的系统,将因兼容性造成问题的可能性降至最低。
便于管理:,提高了服务器/管理员比率,一个管理员可以轻松的管理比以前更多的服务器而不会造成更大的负担。
通过实现 IT 基础架构的虚拟化,可以降低 IT 成本,同时提高现有资产的效率、利用率和灵活性。在全世界,各种规模的公司都享受着服务器的虚拟化带来的好处。数千家组织都在采用服务器虚拟化解决方案。
1.4 虚拟化程度分类
网上盗个图
lip_image003[4]
1.4.1 全虚拟化(Full Virtulization)
简介:全虚拟化中,VMM以纯软件的形式翻译执行虚拟机执行的指令,该过程不需要Guest OS感知,使客户操作系统无需修改就能运行,速度会根据不同的实现而不同,但大致能满足用户的需求。这种方式是业界现今最成熟和最常见的,而且属于 Hosted 模式和 Hypervisor 模式的都有,知名的产品有VirtualBox,KVM,VMware Workstation和VMware ESX(它在其4.0版,被改名为VMware vSphere),Xen(也支持全虚拟化)。
优点:Guest OS无需修改,速度和功能都非常不错,使用非常简单。
缺点:基于Hosted模式的全虚拟产品性能方面不是特别优异,特别是I/O方面。
1.4.2 半虚拟化或者叫准虚拟化(Para-virtualization)
它与完全虚拟化有一些类似,它也利用Hypervisor来实现对底层硬件的共享访问,但是由于在Hypervisor 上面运行的Guest OS已经集成与半虚拟化有关的代码,使得Guest OS能够非常好地配合Hypervisor来实现虚拟化。通过这种方法将无需重新编译或捕获特权指令,其最经典的产品就是Xen,而且因为微软的Hyper-V所采用技术和Xen类似,所以也可以把Hyper-V归属于半虚拟化。
这种虚拟技术以Xen为代表,其特点是修改操作系统的内核,加入一个Xen Hypervisor层。它允许安装在同一硬件设备上的多个系统可以同时启动,由Xen Hypervisor来进行资源调配。在这种虚拟环境下,依然需要模拟硬件设备,安装Guest操作系统,并且还需要修改操作系统的内核。Xen相对于传统的Virtual MachineMonitor,性能稍有提高,但并不十分显著。为了进一步提高性能,Intel和AMD分别开发了VT和Pacifica虚拟技术,将虚拟指令加入到了 CPU中。使用了CPU支持的硬件虚拟技术,将不再需要修改操作系统内核,而是由CPU指令集进行相应的转换操作。
优点:这种模式和全虚拟化相比,架构更精简,而且在整体速度上有一定的优势。
缺点:需要对Guest OS进行修改,所以在用户体验方面比较麻烦。
在完全虚拟化模式中,hypervisor必须模拟设备硬件,它是在会话的最低级别进行模拟的(例如:网络驱动程序,磁盘,显卡等等).尽管在该抽象中模拟很干净,但它同时也是最低效,最复杂的.在半虚拟化中,来宾操作系统和hypervisor能够共同合作,让模拟更加高效.缺点是操作系统知道它被虚拟化,并且需要修改才能工作.
1.4.3 硬件辅助虚拟化(Hardware Assisted Virtualization)
Intel/AMD等硬件厂商通过对部分全虚拟化和半虚拟化使用到的软件技术进行硬件化(具体将在下文详述)来提高性能。硬件辅助虚拟化技术常用于优化全虚拟化和半虚拟化产品,而不是独创一派,最出名的例子莫过于VMware Workstation,它虽然属于全虚拟化,但是在它的6.0版本中引入了硬件辅助虚拟化技术,比如Intel的VT-x和AMD的AMD-V。现在市面上的主流全虚拟化和半虚拟化产品都支持硬件辅助虚拟化,包括VirtualBox,KVM,VMware ESX和Xen。
优点:通过引入硬件技术,将使虚拟化技术更接近物理机的速度。
1.4.4 操作系统级虚拟化(Operating System Level Virtualization)
这种技术通过对服务器操作系统进行简单地隔离来实现虚拟化,主要用于VPS,以SWsoft的Virtuozzo/OpenVZ和Sun基于Solaris平台的Container技术为代表,其中Virtuozzo是商业解决方案,而OpenVZ是以Virtuozzo为基础的开源项目。他们的特点是一个单一的节点运行着唯一的操作系统实例。通过在这个系统上加装虚拟化平台,可以将系统划分成多个独立隔离的容器,每个容器是一个虚拟的操作系统,被称为虚拟环境(即VE,VirtualEnvironment),也被称为虚拟专用服务器(即VPS,Virtual Private Server)。如下图所示:
ip_image004[3]
在操作系统虚拟化技术中,每个节点上只有唯一的系统内核,不虚拟任何硬件设备。此外,多个虚拟环境以模板的方式共享一个文件系统,性能得以大幅度提升。在生产环境中,一台服务器可根据环境需要,运行一个VE/VPS,或者运行上百个VE/VPS。所以,操作系统虚拟化技术是面向生产环境、商业运行环境的技术。
优点:因为它是对操作系统进行直接的修改,所以实现成本低而且性能不错。
缺点:在资源隔离方面表现不佳,而且对Guest OS的型号和版本有限定。
1.4.5 硬件分区技术
硬件分区技术如下图所示:硬件资源被划分成数个分区,每个分区享有独立的CPU、内存,并安装独立的操作系统。在一台服务器上,存在有多个系统实例,同时启动了多个操作系统。这种分区方法的主要缺点是缺乏很好的灵活性,不能对资源做出有效调配。随着技术的进步,现在对于资源划分的颗粒已经远远提升,例如在 IBM AIX系统上,对CPU资源的划分颗粒可以达到0.1个CPU。这种分区方式,在目前的金融领域,比如在银行信息中心得到了广泛采用。
但是这种方式对互联网来说,成本高,不易统一管理。
ip_image005[3]
1.4.6 容器虚拟化Docker
Docker技术主要利用了Linux下的LXC技术来实现的,LXC主要是利用Linux的内核特性:命名空间和cgroups子系统。LXC在资源管理方面依赖与Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架,可以为特定的进程组限定可以使用的资源。LXC在隔离控制方面依赖于Linux内核的namespace特性,namespace感觉像C++的namespace,就是在内核中可以拥有不同namespace的相同的进程id,联想下C++,C++里面不同namespace下的名字可以一样。Docker相比与上面的那些虚拟化的主要区别在于Docker提供的是运行环境,上面的那些提供的是操作系统,所以Docker适用于Paas而上面的适合Iaas。效率上,Docker比操作系统虚拟化要快。部署上,Docker可以快速部署。
1.5 Hypervisor位置
Hypervisor安装在宿主操作系统上,Hypervisor安装在宿主操作系统上,通过宿主操作系统使用硬件,如VirtualBox、VMWare Workstation等。在Host系统上,加装了Virtual MachineMonitor,虚拟层作为应用级别的软件而存在,不涉及操作系统内核。虚拟层会给每个虚拟机模拟一套独立的硬件设备,包含CPU、内存、主板、显卡、网卡等硬件资源,在其上安装所谓的Guest操作系统。最终用户的应用程序,运行在Guest操作系统中。如下图所示。
ip_image006[3]
这种虚拟机运行的方式有一定的优点,比如能在一个节点上安装多个不同类型的操作系统;但缺点也非常明显,虚拟硬件设备要消耗资源,大量代码需要被翻译执行,造成了性能的损耗,使其更合适用于实验室等特殊环境。
安装在硬件层上:由Hypervisor直接管理硬件,如VMWare ESX、微软、KVM、XEN等
lip_image007[4]
安装在内核上:Hypervisor安装在宿主操作系统内核上,客户操作系统调用宿主操作系统内核。
lip_image008[4]
1.6 虚拟机架构
目前分为两种,寄居架构(Hosted Architecture)和裸金属架构 (“Bare Metal” Architecture),如图所示。
寄居架构就是在操作系统之上安装和运行虚拟化程序,依赖于主机操作系统对设备的支持和物理资源的管理;
裸金属架构就是直接在硬件上面安装虚拟化软件,再在其上安装操作系统和应用,依赖虚拟层内核和服务器控制台进行管理。
优点
缺点
举例
寄居架构
简单,便于实现
安装和运行应用程序依赖于主机操作系统对设备的支持,性能有损耗。
GSX Server, VMware Server, Workstation,KVM(linux内核)
裸金属架构
虚拟机不依赖于操作系统,可以支持多种操作系统,多种应用,更加灵活
虚拟层内核开发难度较大
VMWare ESX Server,Xen,KVM
ip_image009[3]
裸金属架构
ip_image010[3]
寄居架构
1.7 KVM
Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为的主流VMM之一。
虚拟化性能在很多方面可以达到非虚拟化原声环境的95%以上的性能。RHEL 6.X系统中的一个KVM支持160个虚拟核心和2T的内存,宿主机可以支持4096个CPU核心和多大64T内存。
KVM主要有两个组成部分:KVM模块和QEMU。
Kvm仅仅是一个linux内核的模块,当在linux中安装了kvm后,linux会变成了hypervisor,即VMM,进行CPU和内存的虚拟管理,主要功能是初始化CPU硬件,打开虚拟化模式,然后将虚拟客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持,为了软件的简介和性能,KVM仅支持硬件虚拟化。
而运行在用户空间的QEMU工具,实现虚拟机的创建管理,monitor管理各个IO设备。QEMu本身并不是KVM的一部分,自身就是一个著名的虚拟机软件,与KVM不同,QEMU是纯软件的实现,性能低下,QEMU的代码中有整套的虚拟机实现,包括处理器虚拟化、内存虚拟化、设备虚拟化,KVM对QEMU进行了修改,QEMU会通过KVM系统调用进入内核,由KVM模块负责将虚拟机置于处理器的特殊模式运行。从QEMU的角度看,QEMU使用了KVM模块的虚拟化功能,为自己提供硬件虚拟化的加速,极大的提高了虚拟机的性能。除此之外,一系列虚拟机的技术都是由QEMU自己实现的。
lip_image012[4]
1.8 XEN
XEN是一个开放的源代码虚拟机软件,有剑桥大学研发。Xen主要支持半虚拟化(Para-virtualization)和全虚拟化(Full-virtualization)。半虚拟化主要是透过修改 Linux 核心来达成的虚拟技术.
Xen 的半虚拟化技术主要是用在相同版本的 Linux 上面,也就是说,如果你想要使用半虚拟化的方式启动多个虚拟机器, 那么那些虚拟机器全部都必须是相同的系统,甚至要求相同版本与相同核心的 Linux distribution 。
如果你想要安装不同版本的 Linux 或者是其他的 OS (例如 Windows XP) 时,就得要使用全虚拟化技术了。 但是全虚拟化技术是有其限制的,当硬体满足下列需求之一时,全虚拟化技术才能够动作:
你的硬体支援 Intel 的 VT 技术 (Virtualization Technology, Intel-VT);
你的硬体支援 AMD 的 SVM 技术 (Secure Virtual Machine, AMD-SVM or, AMD-V)。
既然我有多个虚拟机器,每个虚拟机器都有自己的任务队列, 也就是有多个任务队列同时存在。如果所有的作业系统都能够完整的控制硬体的话, 那麽硬体到底该接受谁的指令来运作?那个系统的指令会先被执行?这是很重要的问题, 因为如果这边搞不定,那么只能呵呵呵了。
为了解决这个问题,Xen用了以下架构。
ip_image014[3]
Xen架构分为两层,底层为Xen Hypervisor,又称虚拟机监控程序(Virtual Machien Monitor简称VMM),VMM工作原有linux系统内核位置,替代了linux系统内核,用于虚拟CPU、Memeory等;高层为Xen虚拟机,Xen的虚拟机称为Domain,为了辅助Xen管理Domain, Xen存在一个特权Domain叫Dom0(Domain 0,Xend是其中的一个重要进程).他拥有真实的设备驱动,能够直接访问物理硬件,可以通过一些管理工具管理Xen的虚拟机们,他还能为其他Domain提供一些虚拟资源服务,特别是其他Domain对I/O的访问。普通Domain叫做DomU(Domain U). 半虚拟化中Domain的内核都经过了修改。
XEN虚拟化分类
(1)完全虚拟化:DomU中的各个硬件都是由VMM和Dom0虚拟和模拟实现;
(2)半虚拟化: DomU中的CPU、Memory有VMM模拟实现,IO等设备分为前端(Front)和后端(Back),前端工作在DomU中,而后端工作在Dom0中;
ip_image013[3]
DomU中的网卡eth0与Dom0中的viif#中的设备对应,不再由Dom0模拟,这大大提升了IO性能 |