虚拟化与云计算
1、云计算概念
云计算是一个本世纪初才方兴未艾的热门名词,其本身是由google前首席执行官埃里克.斯密特(Eric Schmide)在2006年8月9日的搜索引擎大会(SES San Jose 2006)上首次提出的。在此之后,云计算变得炙手可热,很多公司趁势宣传,号称自己是先进的云计算公司。加之业界一直没有对云计算形成一个统一的定义,各种各样的云变得“乱花渐欲迷人眼”。
1.1 发展历史和现状
最早是60年代麦卡锡(John McCarthy)提出了把云计算能力作为一种像水和电一样的公用事业提供给用户。
20世纪90年代,为了充分利用空闲的CPU资源,通过网络互连搭建平行分布式计算平台,诞生了网格计算。
在网格计算中,将一个大型的计算任务拆分,分配给各个网格终端计算然后组合的思想,与云计算中的Map/Reduce技术不谋而合。
本世纪初,计算机网络的大量普及和web数据中心的建立,为云计算提供了必要的硬件准备。
比较有名的云计算平台,比如Amazon(亚马逊)和Google(公司)提供的服务。
2008年2月1日,IBM宣布将在中国无锡的太湖新城科教产业园为中国的软件公司建立全球第一个云计算中心。
2008年7月29日,雅虎、惠普和英特尔宣布一项涵盖美国、德国和新加坡的联合研究计划,推出云计算研究测试床,推进云计算。
2010年7月,美国国家航天局和包括Rackspace、AMD、Inter、戴尔等支持厂商公共宣布“OpenStack”开放源代码计划
微软在2010年10月也表示支持OpenStack与windows server 2008 R2集成,而Ubuntu已把OpenStack添加到11.04以后版本中。
2011年2月,思科系统正式加入OpenStack。
1.2 概念
维基百科对云计算做如下描述:云计算是一种通过因特网以服务的方式提供动态和可伸缩的虚拟化的资源和计算模式。
美国国家标准与技术研究院(NIST)定义:
云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器、存储、应用软件和服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。
中国云计算网云计算定义:
云计算是分布式计算(Distributed Computing)、并行计算(Parallel Computing)和网格计算(Grid Computing)的发展,或者说是这些科学概念的商业实现。
1.3 云计算模式
云计算的表现形式多种多样,简单的云计算在日常网络应用中随处可见,比如腾讯的qq空间,google的搜索服务,百度云等。
目前,云计算的主要服务形式有:
• SaaS(Software as a Service,软件即服务)
• PaaS(Platform as a Service,平台即服务)
• IaaS(Infrastructure as a Service,基础设施即服务)
1.3.1 基础设施即服务
IaaS即把厂商的由多台服务器组成的“云端”基础设施,作为计量服务提供给客户。
它将内存、I/O设备、存储和计算能力整合成一个虚拟的资源池为整个业界提供所需要的存储资源和虚拟化服务器等服务。
这也是一种托管型硬件方式,用户付费使用厂商的硬件设施。
例如Amazon WEB服务(AWS)、Google的Google Compute Engine、IBM的BlueCloud等均将基础设施作为服务出租。
IaaS的优点是用户低成本获得所需的硬件资源,按需租用相应计算能力、存储容量、网络带宽,省去了硬件运维方面的成本,大大降低了用户在硬件上的开销。
1.3.2 平台即服务
PaaS把开发环境作为一种服务来提供。
这是一种分布式平台服务,厂商提供开发环境、服务器平台、硬件资源等服务给客户,用户在其平台基础上定制开发自己的应用程序并通过其服务器和互联网传递给其他客户。
PaaS能够为企业或个人提供研发的中间件平台,提供应用程序开发、数据库、应用服务器、试验、托管及应用服务。
Google App Engine、Salesforce的force.com平台、八百客的800APP是PaaS的代表产品。
1.3.3 软件即服务
SaaS提供商将应用软件统一部署在自己的服务器上,用户根据需求通过互联网向厂商订购应用软件服务,服务提供商根据客户所定软件的数量、时间的长短等因素收费,并通过浏览器向客户提供软件的模式。
这种服务模式优势是:由服务提供商维护和管理软件,提供软件运行的硬件设施,用户只需要拥有能够接入互联网的终端,即可随时随地使用软件。
这种模式客户不再像传统模式那样花费大量资金在硬件、软件、人员维护上,只需支付一定租赁费用。对于小型企业,SaaS是采用先进技术的最好途径。
Salesforce.com是提供这类服务最著名公司,Google Docs、Google Apps和Zoho Office也属于这类服务。
2、云计算技术
2.1 Map/Reduce
Map/Reduce是Google开发的编程模型,他是一种简化的分布式编程模型和高效的任务调度模型,用于大规模的数据集(大于1TB)的并行运算。
Map/Reduce编程模型适用于很多应用,例如,分布式搜索、分布式排序、机器学习基于统计的机器翻译等。
其中当前最流行的是Apache基金会用Java语言开发的开源的Hadoop。
2.2 资源管理平台
云计算系统的平台管理技术能够使大量的服务器协同工作,方便进行业务部署和开通,快速发现和恢复系统故障,通过自动化、智能化的手段实现大规模系统的可靠运行。
当前比较流行云计算平台,主要有思杰的CloudStack、开源的Eucalyptus、VMware公司的vCloud Director和开源的OpenStack等
2.3 虚拟化
虚拟化是构建云基础架构不可或缺的关键技术之一。云计算的云端系统,其实质就是一个大型的分布式系统。
虚拟化通过在一个物理平台上虚拟出更多的虚拟平台,而其中的每一个虚拟平台则可作为独立的终端加入云端的分布式系统。
比起直接使用物理平台,虚拟化在资源的有效利用、动态调配和高可靠性方面有着巨大的优势。
利用虚拟化,企业不必抛弃现有的基础架构即可构建全新的信息基础架构,从而更加充分地利用原有的IT投资。
可以说,虚拟化是云端系统部署必不可少的基础。
3、虚拟化技术
3.1 概述
虚拟化(Virtualization)技术最早出现在 20 世纪 60 年代的 IBM 大型机系统,在70年代的 System 370 系列中逐渐流行起来
这些机器通过一种叫虚拟机监控器(Virtual Machine Monitor,VMM)的程序在物理硬件之上生成许多可以运行独立操作系统软件的虚拟机实例。
随着近年多核系统、集群、网格甚至云计算的广泛部署,虚拟化技术在商业应用上的优势日益体现,不仅降低了 IT 成本,而且还增强了系统安全性和可靠性,虚拟化的概念也逐渐深入到人们日常的工作与生活中。
虚拟化是一个广义的术语,对于不同的人来说可能意味着不同的东西,这要取决他们所处的环境。
在计算机科学领域中,虚拟化代表着对计算资源的抽象,而不仅仅局限于虚拟机的概念。
例如对物理内存的抽象,产生了虚拟内存技术,使得应用程序认为其自身拥有连续可用的地址空间(Address Space),而实际上,应用程序的代码和数据可能是被分隔成多个碎片页或段),甚至被交换到磁盘、闪存等外部存储器上,即使物理内存不足,应用程序也能顺利执行。
3.2 虚拟化技术分类
虚拟化技术主要分为以下几个大类:
• 平台虚拟化(Platform Virtualization),针对计算机和操作系统的虚拟化。
• 资源虚拟化(Resource Virtualization),针对特定的系统资源的虚拟化,比如内存、存储、网络资源等。
• 应用程序虚拟化(Application Virtualization),包括仿真、模拟、解释技术等。
我们通常所说的虚拟化主要是指平台虚拟化技术
通过使用控制程序(Control Program,也被称为 Virtual Machine Monitor 或Hypervisor),隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境(称为虚拟机)。
虚拟机中运行的操作系统被称为客户机操作系统(Guest OS),运行虚拟机监控器的操作系统被称为主机操作系统(Host OS),当然某些虚拟机监控器可以脱离操作系统直接运行在硬件之上(如 VMWARE 的 ESX 产品)。
运行虚拟机的真实系统我们称之为主机系统。
平台虚拟化技术又可以细分为如下几个子类:
操作系统级虚拟化(Operating System Level Virtualization)
在传统操作系统中,所有用户的进程本质上是在同一个操作系统的实例中运行,因此内核或应用程序的缺陷可能影响到其它进程。
操作系统级虚拟化是一种在服务器操作系统中使用的轻量级的虚拟化技术,内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程,不同实例中的进程完全不了解对方的存在。
比较著名的有 Solaris Container,FreeBSD Jail 和 OpenVZ 等。
比如OPENVZ:这个平台是最便宜的VPS平台,在各个vps商哪里都是价格最低的。OPENVZ本身运行在linux之上,它通过自己的虚拟化技术把一个服务器虚拟化成多个可以分别安装操作系统的实例,这样的每一个实体就是一个VPS,从客户的角度来看这就是一个虚拟的服务器,可以等同看做一台独立的服务器。OPENVZ虚拟化出来的VPS只能安装linux操作系统,不能安装windows系统,比如Centos、Fedora、Gentoo、Debian等。不能安装windows操作系统是openvz的第一个缺点,需要使用windows平台的用户不能使用OPENVZVPS。OPENVZ的第二个缺点是OPENVZ不是完全的虚拟化,每个VPS账户共用母机内核,不能单独修改内核。好在绝大多少用户根本不需要修改内核,所以这个缺点对多数人可以忽略不计。而这一点也正是openvz的优点,这一共用内核特性使得openvz的效率最高,超过KVM、Xen、VMware等平台。在不超售的情况下,openvz是最快速效率最高的VPS平台。
部分虚拟化(Partial Virtualization)
VMM 只模拟部分底层硬件,因此客户机操作系统不做修改是无法在虚拟机中运行的,其它程序可能也需要进行修改。在历史上,部分虚拟化是通往全虚拟化道路上的重要里程碑,最早出现在第一代的分时系统 CTSS 和 IBM M44/44X 实验性的分页系统中。
全虚拟化(Full Virtualization)
全虚拟化是指虚拟机模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等,使得为原始硬件设计的操作系统或其它系统软件完全不做任何修改就可以在虚拟机中运行。操作系统与真实硬件之间的交互可以看成是通过一个预先规定的硬件接口进行的。全虚拟化 VMM 以完整模拟硬件的方式提供全部接口(同时还必须模拟特权指令的执行过程)。举例而言,x86 体系结构中,对于操作系统切换进程页表的操作,真实硬件通过提供一个特权 CR3 寄存器来实现该接口,操作系统只需执行 "mov pgtable,%%cr3"汇编指令即可。全虚拟化 VMM 必须完整地模拟该接口执行的全过程。如果硬件不提供虚拟化的特殊支持,那么这个模拟过程将会十分复杂:一般而言,VMM 必须运行在最高优先级来完全控制主机系统,而 Guest OS 需要降级运行,从而不能执行特权操作。当 Guest OS 执行前面的特权汇编指令时,主机系统产生异常(General Protection Exception),执行控制权重新从 Guest OS 转到 VMM 手中。VMM 事先分配一个变量作为影子 CR3 寄存器给 Guest OS,将 pgtable 代表的客户机物理地址(Guest Physical Address)填入影子 CR3 寄存器,然后 VMM 还需要 pgtable 翻译成主机物理地址(Host Physical Address)并填入物理 CR3 寄存器,最后返回到 Guest OS中。随后 VMM 还将处理复杂的 Guest OS 缺页异常(Page Fault)。比较著名的全虚拟化 VMM 有 Microsoft Virtual PC、VMware Workstation、Sun Virtual Box、Parallels Desktop for Mac 和 QEMU。
超虚拟化(Paravirtualization)
这是一种修改 Guest OS 部分访问特权状态的代码以便直接与 VMM 交互的技术。在超虚拟化虚拟机中,部分硬件接口以软件的形式提供给客户机操作系统,这可以通过 Hypercall(VMM 提供给 Guest OS 的直接调用,与系统调用类似)的方式来提供。例如,Guest OS 把切换页表的代码修改为调用 Hypercall 来直接完成修改影子 CR3 寄存器和翻译地址的工作。由于不需要产生额外的异常和模拟部分硬件执行流程,超虚拟化可以大幅度提高性能,比较著名的 VMM 有 Denali、Xen。
硬件辅助虚拟化(Hardware-Assisted Virtualization)
硬件辅助虚拟化是指借助硬件(主要是主机处理器)的支持来实现高效的全虚拟化。例如有了 Intel-VT 技术的支持,Guest OS 和 VMM 的执行环境自动地完全隔离开来,Guest OS 有自己的""套寄存器",可以直接运行在最高级别。因此在上面的例子中,Guest OS 能够执行修改页表的汇编指令。Intel-VT 和 AMD-V 是目前 x86 体系结构上可用的两种硬件辅助虚拟化技术。
这种分类并不是绝对的,一个优秀的虚拟化软件往往融合了多项技术。例如 VMware Workstation 是一个著名的全虚拟化的 VMM,但是它使用了一种被称为动态二进制翻译的技术把对特权状态的访问转换成对影子状态的操作,从而避免了低效的 Trap-And-Emulate 的处理方式,这与超虚拟化相似,只不过超虚拟化是静态地修改程序代码。对于超虚拟化而言,如果能利用硬件特性,那么虚拟机的管理将会大大简化,同时还能保持较高的性能。
4、KVM介绍
KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。
KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度。
虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。
但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU
从rhel6开始使用 直接把kvm的模块做成了内核的一部分
XEN用在rhel6之前的企业版中 默认内核不支持,需要重新安装带xen功能的内核
KVM 针对运行在 x86 硬件上的、驻留在内核中的虚拟化基础结构。
KVM 是第一个成为原生 Linux 内核(2.6.20)的一部分的 hypervisor,它是由 Avi Kivity 开发和维护的,现在归 Red Hat 所有。
这个 hypervisor 提供 x86 虚拟化,同时拥有到 PowerPC® 和 IA64 的通道。
另外,KVM 最近还添加了对对称多处理(SMP)主机(和来宾)的支持,并且支持企业级特性,比如活动迁移(允许来宾操作系统在物理服务器之间迁移)。
KVM 是作为内核模块实现的,因此 Linux 只要加载该模块就会成为一个hypervisor。
KVM 为支持 hypervisor 指令的硬件平台提供完整的虚拟化(比如 Intel® Virtualization Technology [Intel VT] 或 AMD Virtualization [AMD-V] 产品)。
KVM 还支持准虚拟化来宾操作系统,包括 Linux 和 Windows®。
这种技术由两个组件实现:
第一个是可加载的 KVM 模块,当在 Linux 内核安装该模块之后,它就可以管理虚拟化硬件,并通过 /proc 文件系统公开其功能。
第二个组件用于 PC 平台模拟,它是由修改版 QEMU 提供的。QEMU 作为用户空间进程执行,并且在来宾操作系统请求方面与内核协调。
当新的操作系统在 KVM 上启动时(通过一个称为 kvm 的实用程序),它就成为宿主操作系统的一个进程,因此就可以像其他进程一样调度它。
但与传统的 Linux 进程不一样,来宾操作系统被 hypervisor 标识为处于 "来宾" 模式(独立于内核和用户模式)。
每个来宾操作系统都是通过 /dev/kvm 设备映射的,它们拥有自己的虚拟地址空间,该空间映射到主机内核的物理地址空间。
如前所述,KVM 使用底层硬件的虚拟化支持来提供完整的(原生)虚拟化。I/O 请求通过主机内核映射到在主机上(hypervisor)执行的 QEMU 进程。
KVM 在 Linux 环境中以主机的方式运行,不过只要底层硬件虚拟化支持,它就能够支持大量的来宾操作系统.
5、其他虚拟化产品
5.1 VMWare
VMWare公司创建于1998年,是一家专注于解决虚拟化解决方案的公司。代表产品:
• VMware Workstation
运行于台式机和工作站上的虚拟化软件,也是VMware公司第一个面市的产品(1999年5月)。
• VMware ESXi Server
ESXi服务器(早期是ESX)是一种能够直接在硬件运行的企业级虚拟平台。另外还有Vcenter集中管理,以及vmotion在线迁移。ha等等。
5.2 VirtualBox
Oracle VirtualBox是由德国InnoTek软件公司出品的虚拟机软件,现由甲骨文公司进行开发,是甲骨文公司xVM虚拟化平台技术的一部分。
5.3 Citrix
全球领先的以及最值得信赖的应用交付基础架构解决方案提供商。
思杰交付中心 Citrix Delivery Center作为一种应用交付基础架构系统,可集中管理和交付应用和桌面,从而将IT作为一种服务按需交付。
Citrix XenApp是一种按需应用交付解决方案,可在数据中心集中实现应用管理,将相关成本降低50%,随时随地向用户快速、安全地交付各种Windows应用。
Citrix XenDesktop桌面虚拟化解决方案可作为一项按需服务,随时随地向所有用户交付全面的Windows桌面体验。
关于虚拟化
1、什么是虚拟化
在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。
由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。
一般所指的虚拟化资源包括计算能力和数据存储。
由于目前信息技术领域的很多企业都曾在宣传中将该企业的某种技术称为虚拟化技术,这些技术涵盖的范围可以从Java虚拟机技术到系统管理软件,这就使得准确的界定虚拟技术变得困难。因此各种相关学术论文在谈到虚拟技术时常常提到的便是如前面所提到的那个不严格的定义。
2、为什么用虚拟化
同一台物理机运行多个不同版本应用软件
硬件依赖性较低和便于数据迁移
3、虚拟化技术的优势
1.降低运营成本
服务器虚拟化降低了IT基础设施的运营成本,令系统管理员摆脱了繁重的物理服务器、OS、中间件及兼容性的管理工作,减少人工干预频率,使管理更加强大、便捷。
2.提高应用兼容性
服务器虚拟化提供的封装性和隔离性使大量应用独立运行于各种环境中,管理人员不需频繁根据底层环境调整应用,只需构建一个应用版本并将其发布到虚拟化后的不同类型平台上即可。
3.加速应用部署
采用服务器虚拟化技术只需输入激活配置参数、拷贝虚拟机、启动虚拟机、激活虚拟机即可完成部署,大大缩短了部署时间,免除人工干预,降低了部署成本。
4.提高服务可用性
用户可以方便地备份虚拟机,在进行虚拟机动态迁移后,可以方便的恢复备份,或者在其他物理机上运行备份,大大提高了服务的可用性。
5.提升资源利用率
通过服务器虚拟化的整合,提高了CPU、内存、存储、网络等设备的利用率,同时保证原有服务的可用性,使其安全性及性能不受影响。
6.动态调度资源
在服务器虚拟化技术中,数据中心从传统的单一服务器变成了统一的资源池,用户可以即时地调整虚拟机资源,同时数据中心管理程序和数据中心管理员可以灵活根据虚拟机内部资源使用情况灵活分配调整给虚拟机的资源。
7.降低能源消耗
通过减少运行的物理服务器数量,减少CPU以外各单元的耗电量,达到节能减排的目的。
4、关于KVM
1. KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。
2. 是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。
3. 它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
4. KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。
5. KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)同时KVM还能够使用ksm技术帮助宿主服务器节约内存。
6. 在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心。