Hyper-V简介

Hyper-V简介

Hyper-V是微软的一款虚拟化产品,是微软第一个采用类似Vmware和Citrix开源Xen一样的基于hypervisor的技术。这也意味着微软会更加直接地与市场先行者VMware展开竞争,但竞争的方式会有所不同。

系统要求

  1. 于x64处理器,能够运行x64版本的Windows Server 2008。
  2. Windows Server 2008 Enterprise或Windows Server 2008 Datacenter。
  3. 硬件辅助虚拟化。这是在现有的处理器,包括一个虚拟化的 微软虚拟化构架选择工具体来说,佛蒙特州英特尔或AMD的虚拟化( AMD公司-五,以前的代号为“ Pacifica ”的 ) 。
  4. CPU必须具备硬件的 数据执行保护( DEP )功能,而且该功能必须启动。
  5. 内存最低限度为2GB。

设计目的

Hyper-V设计的目的是为广泛的用户提供更为熟悉以及成本效益更高的虚拟化基础设施软件,这样可以降低运作成本、提高硬件利用率、优化基础设施并提高服务器的可用性。

虚拟硬盘空间

正式版Hyper-V控制台,版本有一定变化。在微软的Hyper-V虚拟机创建过程中,最大虚拟硬盘可以达到2040GB,当然,即使创建2TB的硬盘,也不会立刻就占用2T的物理空间分配,给虚拟机安装了一个2TB的硬盘,至少可以在虚荣心上相当的满足。

架构特点

Hyper-V采用微内核的架构,兼顾了安全性和性能的要求。Hyper-V底层的Hypervisor运行在最高的特权级别下,微软将其称为ring -1(而Intel则将其称为root mode),而虚拟机的OS内核和驱动运行在ring 0,应用程序运行在ring 3下,这种架构就不需要采用复杂的BT(二进制特权指令翻译)技术,可以进一步提高安全性。

  • 高效率的VMbus架构

由于Hyper-V底层的Hypervisor代码量很小,不包含任何第三方的驱动,非常精简,所以安全性更高。Hyper-V采用基于VMbus的高速内存总线架构,来自虚机的硬件请求(显卡、鼠标、磁盘、网络),可以直接经过VSC,通过VMbus总线发送到根分区的VSP,VSP调用对应的设备驱动,直接访问硬件,中间不需要Hypervisor的帮助。

这种架构效率很高,不再像以前的Virtual Server,每个硬件请求,都需要经过用户模式、内核模式的多次切换转移。更何况Hyper-V现在可以支持Virtual SMP,Windows Server 2008虚机最多可以支持4个虚拟CPU;而Windows Server 2003最多可以支持2个虚拟CPU。每个虚机最多可以使用64GB内存,而且还可以支持X64操作系统。

  • 完美支持Linux系统

和很多朋友的想法不同,Hyper-V可以很好地支持Linux,我们可以安装支持Xen的Linux内核,这样Linux就可以知道自己运行在 Hyper-V之上,还可以安装专门为Linux设计的Integrated Components,里面包含磁盘和网络适配器的VMbus驱动,这样Linux虚机也能获得高性能。下图所示的就是Novell SUSE Linux 10 SP1,其中的网卡驱动,其总线类型就是VMbus。这对于采用Linux系统的企业来说,是一个福音,这样我们就可以把所有的服务器,包括Windows和Linux,全部统一到最新的Windows Server 2008平台下,可以充分利用Windows Server 2008带来的最新高级特性,而且还可以保留原来的Linux关键应用不会受到影响。和之前的Virtual PC、Virtual Server类似,Hyper-V也是微软的一种虚拟化技术解决方案,但在各方面都取得了长足的发展。

从架构上讲Hyper-V只有“硬件-Hyper-V-虚拟机”三层,本身非常小巧,代码简单,且不包含任何第三方驱动,所以安全可靠、执行效率高,能充分利用硬件资源,使虚拟机系统性能更接近真实系统性能。

按照微软的虚拟化产品路线,微软在将2008年第四季度,推出脱离Windows Server 2008 的、独立的虚拟化产品Hyper-V Server。

原Windows虚拟技术Virtual Server构架:

最新微软Hyper-V虚拟技术构架:

改进和变化

除了在构架上进行改进之外,Hyper-V还具有其它一些变化: Hyper-V基于64位系统:微软的新一代虚拟化技术Hyper-V是基于64位系统的,我们知道,32位系统的内存寻址空间只有4GB,在4GB的系统上再进行服务器虚拟化在实际应用中没有太大的实际意义。在支持大容量内存的64位服务器系统中,应用Hyper-V虚拟出多个应用才有较大的现实意义。微软上一代虚拟化产品Virtual Server和Virtual PC则是基于32位系统的。

硬件支持上大大提升:Hyper-V支持4颗虚拟处理器,支持64GB内存,并且支持x64操作系统;而Virtual Server只支持2个虚拟处理器,并且只能支持x86操作系统。并且在Hyper-V中还支持VLAN功能。支持Hyper-V服务器虚拟化需要启用了Intel-VT或AMD-V特性的x64系统。Hyper-V基于微内核Hypervisor架构,是轻量级的。Hyper-V中的设备共享架构,支持在虚拟机中使用两类设备:合成设备和模拟设备。

Hyper-V提供了对许多用户操作系统的支持:Windows Server 2003 SP2、Novell SUSE Linux Enterprise Server 10 SP1、Windows Vista SP1 (x86)和Windows XP SP3 (x86)。在刚刚发布的Hyper-V RC1代码中还增加了对Windows 2000 Server SP4以及Windows 2000 Advanced Server SP4的支持。

 

Hadoop简介

Hadoop的logo:

简介

一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以流的形式访问(streaming access)文件系统中的数据。

hadoop起源

Hadoop 由 Apache Software Foundation 公司于 2005 年秋天作为 Lucene的子 hadoop logo项目 Nutch的一部分正式引入。它受到最先由 Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 的启发。2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。

Hadoop 是最受欢迎的在 Internet 上对搜索关键字进行内容分类的工具,但它也可以解决许多要求极大伸缩性的问题。例如,如果您要 grep 一个 10TB 的巨型文件,会出现什么情况?在传统的系统上,这将需要很长的时间。但是 Hadoop 在设计时就考虑到这些问题,采用并行执行机制,因此能大大提高效率。

诸多优点

Hadoop 是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,能够处理 PB 级数据。此外,Hadoop 依赖于社区服务器,因此它的成本比较低,任何人都可以使用。

Hadoop带有用 Java 语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。

hadoop架构

Hadoop 有许多元素构成。其最底部是 Hadoop Distributed File Syst Hadoop 集群的简化视图em(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS(对于本文)的上一层是 MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。

hadoop架构示意图:

 

  • HDFS

对外部客户机而言,HDFS 就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。但是 HDFS 的架构是基于一组特定的节点构建的(参见图 1),这是由它自身的特点决定的。这些节点包括 NameNode(仅一个),它在 HDFS 内部提供元数据服务;DataNode,它为 HDFS 提供存储块。由于仅存在一个 NameNode,因此这是 HDFS 的一个缺点(单点失败)。

存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)。这与传统的 RAID 架构大不相同。块的大小(通常为 64MB)和复制的块数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作。HDFS 内部的所有通信都基于标准的 TCP/IP 协议。

  • NameNode

NameNode 是一个通常在 HDFS 实例中的单独机器上运行的软件。它负责管理文件系统名称空间和控制外部客户机的访问。NameNode 决定是否将文件映射到 DataNode 上的复制块上。对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。注意,这里需要您了解集群架构。

实际的 I/O 事务并没有经过 NameNode,只有表示 DataNode 和块的文件映射的元数据经过 NameNode。当外部客户机发送请求要求创建文件时,NameNode 会以块标识和该块的第一个副本的 DataNode IP 地址作为响应。这个 NameNode 还会通知其他将要接收该块的副本的 DataNode。

NameNode 在一个称为 FsImage 的文件中存储所有关于文件系统名称空间的信息。这个文件和一个包含所有事务的记录文件(这里是 EditLog)将存储在 NameNode 的本地文件系统上。FsImage 和 EditLog 文件也需要复制副本,以防文件损坏或 NameNode 系统丢失。

  • DataNode

DataNode 也是一个通常在 HDFS 实例中的单独机器上运行的软件。Hadoop 集群包含一个 NameNode 和大量 DataNode。DataNode 通常以机架的形式组织,机架通过一个交换机将所有系统连接起来。Hadoop 的一个假设是:机架内部节点之间的传输速度快于机架间节点的传输速度。

DataNode 响应来自 HDFS 客户机的读写请求。它们还响应创建、删除和复制来自 NameNode 的块的命令。NameNode 依赖来自每个 DataNode 的定期心跳(heartbeat)消息。每条消息都包含一个块报告,NameNode 可以根据这个报告验证块映射和其他文件系统元数据。如果 DataNode 不能发送心跳消息,NameNode 将采取修复措施,重新复制在该节点上丢失的块。

  • 文件操作

可见,HDFS 并不是一个万能的文件系统。它的主要目的是支持以流的形式访问写入的大型文件。如果客户机想将文件写到 HDFS 上,首先需要将该文件缓存到本地的临时存储。如果缓存的数据大于所需的 HDFS 块大小,创建文件的请求将发送给 NameNode。NameNode 将以 DataNode 标识和目标块响应客户机。同时也通知将要保存文件块副本的 DataNode。当客户机开始将临时文件发送给第一个 DataNode 时,将立即通过管道方式将块内容转发给副本 DataNode。客户机也负责创建保存在相同 HDFS 名称空间中的校验和(checksum)文件。在最后的文件块发送之后,NameNode 将文件创建提交到它的持久化元数据存储(在 EditLog 和 FsImage 文件)。

  • Linux 集群

Hadoop 框架可在单一的 Linux 平台上使用(开发和调试时),但是使用存放在机架上的商业服务器才能发挥它的力量。这些机架组成一个 Hadoop 集群。它通过集群拓扑知识决定如何在整个集群中分配作业和文件。Hadoop 假定节点可能失败,因此采用本机方法处理单个计算机甚至所有机架的失败。

集群系统

Google的数据中心使用廉价的Linux PC机组成集群,在上面运行各种应用。即使是分布式开发的新手也可以迅速使用Google的基础设施。核心组件是3个:

  1. GFS(Google File System)。一个分布式文件系统,隐藏下层负载均衡,冗余复制等细节,对上层程序提供一个统一的文件系统API接口。Google根据自己的需求对它进行了特别优化,包括:超大文件的访问,读操作比例远超过写操作,PC机极易发生故障造成节点失效等。GFS把文件分成64MB的块,分布在集群的机器上,使用Linux的文件系统存放。同时每块文件至少有3份以上的冗余。中心是一个Master节点,根据文件索引,找寻文件块。详见Google的工程师发布的GFS论文。
  2. MapReduce。Google发现大多数分布式运算可以抽象为MapReduce操作。Map是把输入Input分解成中间的Key/Value对,Reduce把Key/Value合成最终输出Output。这两个函数由程序员提供给系统,下层设施把Map和Reduce操作分布在集群上运行,并把结果存储在GFS上。
  3. BigTable。一个大型的分布式数据库,这个数据库不是关系式的数据库。像它的名字一样,就是一个巨大的表格,用来存储结构化的数据。

以上三个设施Google均有论文发表。

应用程序

hadoop 的最常见用法之一是 Web 搜索。虽然它不是惟一的软件框架应用程序,但作为一个并行数据处理引擎,它的表现非常突出。Hadoop 最有趣的方面之一是 Map and Reduce 流程,它受到 Google开发的启发。这个流程称为创建索引,它将 Web 爬行器检索到的文本 Web 页面作为输入,并且将这些页面上的单词的频率报告作为结果。然后可以在整个 Web 搜索过程中使用这个结果从已定义的搜索参数中识别内容。

  • MapReduce

最简单的 MapReduce 应用程序至少包含 3 个部分:一个 Map 函数、一个 Reduce 函数和一个 main 函数。main 函数将作业控制和文件输入/输出结合起来。在这点上,Hadoop 提供了大量的接口和抽象类,从而为 Hadoop 应用程序开发人员提供许多工具,可用于调试和性能度量等。

MapReduce 本身就是用于并行处理大数据集的软件框架。MapReduce 的根源是函数性编程中的 map 和 reduce 函数。它由两个可能包含有许多实例(许多 Map 和 Reduce)的操作组成。Map 函数接受一组数据并将其转换为一个键/值对列表,输入域中的每个元素对应一个键/值对。Reduce 函数接受 Map 函数生成的列表,然后根据它们的键(为每个键生成一个键/值对)缩小键/值对列表。

这里提供一个示例,帮助您理解它。假设输入域是 one small step for man, one giant leap for mankind。在这个域上运行 Map 函数将得出以下的键/值对列表:

(one, 1) (small, 1) (step, 1) (for, 1) (man, 1) MapReduce 流程的概念流(one, 1) (giant, 1) (leap, 1) (for, 1) (mankind, 1)

如果对这个键/值对列表应用 Reduce 函数,将得到以下一组键/值对:

(one, 2) (small, 1) (step, 1) (for, 2) (man, 1)(giant, 1) (leap, 1) (mankind, 1)

结果是对输入域中的单词进行计数,这无疑对处理索引十分有用。但是,现在假 显示处理和存储的物理分布的 Hadoop 集群设有两个输入域,第一个是 one small step for man,第二个是 one giant leap for mankind。您可以在每个域上执行 Map 函数和 Reduce 函数,然后将这两个键/值对列表应用到另一个 Reduce 函数,这时得到与前面一样的结果。换句话说,可以在输入域并行使用相同的操作,得到的结果是一样的,但速度更快。这便是 MapReduce 的威力;它的并行功能可在任意数量的系统上使用。图 2 以区段和迭代的形式演示这种思想。

现在回到 Hadoop 上,它是如何实现这个功能的?一个代表客户机在单个主系统上启动的 MapReduce 应用程序称为 JobTracker。类似于 NameNode,它是 Hadoop 集群中惟一负责控制 MapReduce 应用程序的系统。在应用程序提交之后,将提供包含在 HDFS 中的输入和输出目录。JobTracker 使用文件块信息(物理量和位置)确定如何创建其他 TaskTracker 从属任务。MapReduce 应用程序被复制到每个出现输入文件块的节点。将为特定节点上的每个文件块创建一个惟一的从属任务。每个 TaskTracker 将状态和完成信息报告给 JobTracker。图 3 显示一个示例集群中的工作分布。

Hadoop 的这个特点非常重要,因为它并没有将存储移动到某个位置以供处理,而是将处理移动到存储。这通过根据集群中的节点数调节处理,因此支持高效的数据处理。

MapReduce 流程的概念流:

显示处理和存储的物理分布的 Hadoop 集群:

开源实现

Hadoop是项目的总称,起源于作者儿子的一只玩具大象的名字。主要是由HDFS、MapReduce和Hbase组成。

HDFS是Google File System(GFS)的开源实现。

MapReduce是Google MapReduce的开源实现。

HBase是Google BigTable的开源实现。

这个分布式框架很有创造性,而且有极大的扩展性,使得Google在系统吞吐量上有很大的竞争力。因此Apache基金会用Java实现了一个开源版本,支持Fedora、Ubuntu等Linux平台。雅虎和硅谷风险投资公司Benchmark Capital 6月28日联合宣布,他们将联合成立一家名为Hortonworks的新公司,接管被广泛应用的数据分析软件Hadoop的开发工作。

Hadoop实现了HDFS文件系统和MapRecue。用户只要继承MapReduceBase,提供分别实现Map和Reduce的两个类,并注册Job即可自动分布式运行。

HDFS把节点分成两类:NameNode和DataNode。NameNode是唯一的,程序与之通信,然后从DataNode上存取文件。这些操作是透明的,与普通的文件系统API没有区别。

MapReduce则是JobTracker节点为主,分配工作以及负责和用户程序通信。

HDFS和MapReduce实现是完全分离的,并不是没有HDFS就不能MapReduce运算。

Hadoop也跟其他云计算项目有共同点和目标:实现海量数据的计算。而进行海量计算需要一个稳定的,安全的数据容器,才有了Hadoop分布式文件系统(HDFS,Hadoop Distributed File System)。

HDFS通信部分使用org.apache.hadoop.ipc,可以很快使用RPC.Server.start()构造一个节点,具体业务功能还需自己实现。针对HDFS的业务则为数据流的读写,NameNode/DataNode的通信等。

MapReduce主要在org.apache.hadoop.mapred,实现提供的接口类,并完成节点通信(可以不是hadoop通信接口),就能进行MapReduce运算。

目前这个项目还在进行中,还没有到达1.0版本,和Google系统的差距也非常大,但是进步非常快,值得关注。

另外,这是云计算(Cloud Computing)的初级阶段的实现,是通向未来的桥梁。

Hadoop主要子项目

  • Hadoop Common: 在0.20及以前的版本中,包含HDFS、MapReduce和其他项目公共内容,从0.21开始HDFS和MapReduce被分离为独立的子项目,其余内容为Hadoop Common
  • HDFS: Hadoop 分布式文件系统 (Distributed File System) - HDFS (Hadoop Distributed File System)
  • MapReduce:并行计算框架,0.20前使用 org.apache.hadoop.mapred 旧接口,0.20版本开始引入org.apache.hadoop.mapreduce的新API
  • HBase: 类似Google BigTable的分布式NoSQL列数据库。(HBase 和 Avro 已经于2010年5月成为顶级 Apache 项目)
  • Hive:数据仓库工具,由Facebook贡献。
  • Zookeeper:分布式锁设施,提供类似Google Chubby的功能,由Facebook贡献。
  • Avro:新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制。

Hadoop研究

Hadoop是原Yahoo的Doug Cutting根据Google发布的学术论文研究而来。Doug Cutting给这个Project起了个名字,就叫Hadoop。其实Hadoop也是Doug Cutting的孩子的玩具的名字,一个可爱的黄色小象。

现在,Doug Cutting在Cloudera公司。Cloudera的Hadoop是商用版。不同于Apache的开源版。

如果要研究Hadoop的话,在下载Apache的版本是一种不错的选择。

只研究Apache版本的,不足以对Hadoop的理念理解。再对Cloudera版本的研究,会更上一层楼。

现在美国的AsterData,也是Hadoop的一个商用版,AsterData的MPP理念,Applications Within理念等等,

也都是值得研究。

Google的成功已经说明了RDB的下一代就是Nosql(Not Only SQL),比如说GFS,Hadoop等等。

Hadoop作为开源的版本来说,其魅力更是不可估量。

上文中说到Google的学术论文,其中包涵有:

Google File System(大规模分散文件系统)

MapReduce (大规模分散FrameWork)

BigTable(大规模分散数据库)

Chubby(分散锁服务)

这四大InfrastructureSoftware的陈述。

说起Google的GFS和Hadoop,不仅让我想起了,Unix和Linux。

由Unix而来的开源Linux,现在更是家喻户晓了。很多大型公司都启用Linux作为服务器。

相信不久的将来,Hadoop会像Linux一样,席卷全球,惠及全球。

 

OpenStack简介

简介

OpenStack是一个美国国家航空航天局和Rackspace合作研发的云端运算‎软件,以Apache许可证授权,并且是一个自由软件和开放源代码项目。

运用范围

OpenStack是IaaS(基础设施即服务)‎软件,让任何人都可以自行建立和提供云端运算服务。

此外,OpenStack也用作建立防火墙内的“私有云”(Private Cloud),提供机构或企业内各部门共享资源。

厂商支援

美国国家航空航天局的Nebula运算平台。

现时已表示支持OpenStack项目的大型硬件厂商包括:AMD、Intel和戴尔等[1]。

微软在2010年10月表示支持OpenStack与Windows Server 2008 R2的整合。

2011年2月,思科系统正式加入OpenStack项目,重点研制OpenStack的网络服务。

Ubuntu未来在堆栈方面的云网络化方案。

技术资料

以Python编程语言编写

整合Tornado网页服务器、Nebula运算平台

使用Twisted软件框架

遵循Open Virtualization Format、AMQP、SQLAlchemy等标准

虚拟机器软件支援包括:KVM、Xen、VirtualBox 、QEMU、 LXC 等。

项目

Nova运算项目

Swift面向对象数据存贮项目

Glance虚拟机器磁盘映像档(Virtual Machine Image)传送服务

桉树云服务环境Eucalyptus

Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems (Eucalyptus) 是一种开源的软件基础结构,用来通过计算集群或工作站群实现弹性的、实用的云计算。它最初是美国加利福尼亚大学 Santa Barbara 计算机科学学院的一个研究项目,现在已经商业化,发展成为了 Eucalyptus Systems Inc。不过,Eucalyptus 仍然按开源项目那样维护和开发。Eucalyptus Systems 还在基于开源的 Eucalyptus 构建额外的产品;它还提供支持服务。

不管是源代码还是包安装,Eucalyptus 很容易安装在现今大多数 Linux® 发布版上。

它提供了如下这些高级特性:

  • 与 EC2 和 S3 的接口兼容性(SOAP 接口和 REST 接口)。使用这些接口的几乎所有现有工具都将可以与基于 Eucalyptus 的云协作。
  • 支持运行在 Xen hypervisor 或 KVM 之上的 VM 的运行。未来版本还有望支持其他类型的 VM,比如 VMware。
  • 用来进行系统管理和用户结算的云管理工具。
  • 能够将多个分别具有各自私有的内部网络地址的集群配置到一个云内。

 

架构

Eucalyptus 包含五个主要组件,它们能相互协作共同提供所需的云服务。这些组件使用具有 WS-Security 的 SOAP 消息传递安全地相互通信。

Cloud Controller (CLC)

在 Eucalyptus 云内,这是主要的控制器组件,负责管理整个系统。它是所有用户和管理员进入 Eucalyptus 云的主要入口。所有客户机通过基于 SOAP 或 REST 的 API 只与 CLC 通信。由 CLC 负责将请求传递给正确的组件、收集它们并将来自这些组件的响应发送回至该客户机。这是 Eucalyptus 云的对外 “窗口”。

Cluster Controller (CC)

Eucalyptus 内的这个控制器组件负责管理整个虚拟实例网络。请求通过基于 SOAP 或 REST 的接口被送至 CC。CC 维护有关运行在系统内的 Node Controller 的全部信息,并负责控制这些实例的生命周期。它将开启虚拟实例的请求路由到具有可用资源的 Node Controller。

Node Controller (NC)

它控制主机操作系统及相应的 hypervisor(Xen 或最近的 KVM,很快就会支持 VMWare)。必须在托管了实际的虚拟实例(根据来自 CC 的请求实例化)的每个机器上运行 NC 的一个实例。

Walrus (W)

这个控制器组件管理对 Eucalyptus 内的存储服务的访问。请求通过基于 SOAP 或 REST 的接口传递至 Walrus。

Storage Controller (SC)

Eucalyptus 内的这个存储服务实现 Amazon 的 S3 接口。SC 与 Walrus 联合工作,用于存储和访问虚拟机映像、内核映像、RAM 磁盘映像和用户数据。其中,VM 映像可以是公共的,也可以是私有的,并最初以压缩和加密的格式存储。这些映像只有在某个节点需要启动一个新的实例并请求访问此映像时才会被解密。

一个 Eucalyptus 云安装可以聚合和管理来自一个或多个集群的资源。一个集群 是连接到相同 LAN 的一组机器。在一个集群中,可以有一个或多个 NC 实例,每个实例管理虚拟实例的实例化和终止。

在一个单一集群的安装中,如图 3 所示,将至少包含两个机器:一个机器运行 CC、SC 和 CLC;另一个机器运行 NC。这种配置主要适合于试验的目的以及快速配置的目的。通过将所有东西都组合到一个机器内,还可以进一步简化,但这个机器需要非常健壮才能这样做。

一个单集群 Eucalyptus 安装的拓扑:

在多集群安装中,可以将各个组件(CC、SC、 NC 和 CLC)放置在单独的机器上。如果想要用它来执行重大的任务,那么这么做就是一种配置 Eucalyptus 云的理想方式。多集群安装还能通过选择与其上运行的控制器类型相适应的机器来显著提高性能。比如,可以选择一个具有超快 CPU 的机器来运行 CLC。多集群的结果是可用性的提高、负载和资源的跨集群分布。集群的概念类似于 Amazon EC2 内的可用性区域的概念。资源可以跨多个可用性区域分配,这样一来,一个区域内的故障不会影响到整个应用程序。

 

一个多集群 Eucalyptus 安装的拓扑:

在将 Eucalyptus 安装并应用到您的基础设施上之前,需要考虑硬件要求。虽然出于试验目的,可以在一个笔记本电脑上运行全部内容,但是对于一个实际的部署场景,多集群无疑是 一个更好的选择。如下所列的是 Ubuntu 管理员对硬件配置方面的一些指导。这些指导可广泛应用于任何的 Linux 发布版(不只是 Ubuntu)。

 

半虚拟化与全虚拟化差别简述

全虚拟化

Hypervisors 通过一个仿真硬件层为其上的每个 Guest 操作系统(虚拟机)仿真出一个具有常用硬件设备的标准服务器,当一个运行的 Guest 系统试图用特权指令控制硬件时,hypervisor 会将真实的硬件隐藏起来,并仿真一个硬件设备给 Guest 系统,从而使得 Guest系统无需修改代码就可以安全地访问硬件。该技术使得 Guest 系统无法任何修改就可在不支持Intel VT/AMD-V的 CPU 上运行,但该技术的复杂性也降低了系统的性能。

全虚拟化 原理示意图:

半虚拟化

Guest 系统在访问真实硬件时是重用当前系统的驱劢,而丌是通过仿真的硬件实现的。Guest 系统和 hypervisor 交互是通过一个高效、底层的的 API(hypercall API)来实现的,这使得 hypervisor 和 Guest 系统可以共同最优化地使用底层的硬件和 I/O,从而可获得极高的运行性能。

半虚拟化 原理示意图:

 

半虚拟化和全虚拟化的差别

由于采用技术的不同,系统虚拟化不仅仅包括全虚拟化、半虚拟化和硬件辅助虚拟化。完整来看,可以将系统虚拟化分为五大类:

硬件仿真(Emulation)

简介:属于Hosted模式,在物理机的操作系统上创建一个模拟硬件的程序(Hardware VM)来仿真所想要的硬件,并在此程序上跑虚拟机,而且虚拟机内部的客户操作系统(Guest OS)无需修改。知名的产品有Bochs,QEMU和微软的Virtual PC(它还使用少量的全虚拟化技术)

硬件仿真架构图:

· 优点:Guest OS无需修改,而且非常适合用于操作系统开发,也利于进行固件和硬件的协作开发。固件开发人员可以使用目标硬件 VM 在仿真环境中对自己的实际代码进行验证,而不需要等到硬件实际可用的时候。

· 缺点:速度非常慢,有时速度比物理情况慢100倍以上。

· 未来:因为速度的问题,渐趋颓势,但是还应该有一席之地。

全虚拟化(Full Virtulization)

简介:主要是在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户操作系统无需修改就能运行,速度会根据不同的实现而不同,但大致能满足用户的需求。这种方式是业界现今最成熟和最常见的,而且属于 Hosted 模式和 Hypervisor 模式的都有,知名的产品有IBM CP/CMS,VirtualBox,KVM,VMware Workstation和VMware ESX(它在其4.0版,被改名为VMware vSphere)。

全虚拟化架构图:

· 优点:Guest OS无需修改,速度和功能都非常不错,更重要的是使用非常简单,不论是 VMware 的产品,还是Sun(Oracle?)的 VirtualBox。

· 缺点:基于Hosted模式的全虚拟产品性能方面不是特别优异,特别是I/O方面。

· 未来:因为使用这种模式,不仅Guest OS免于修改,而且将通过引入硬件辅助虚拟化技术来提高其性能,我个人判断,在未来全虚拟化还是主流。

半虚拟化(Parairtulization)

· 简介:它与完全虚拟化有一些类似,它也利用Hypervisor来实现对底层硬件的共享访问,但是由于在Hypervisor 上面运行的Guest OS已经集成与半虚拟化有关的代码,使得Guest OS能够非常好地配合Hyperivosr来实现虚拟化。通过这种方法将无需重新编译或捕获特权指令,使其性能非常接近物理机,其最经典的产品就是Xen,而且因为微软的Hyper-V所采用技术和Xen类似,所以也可以把Hyper-V归属于半虚拟化。

半虚拟化架构图:

· 优点:这种模式和全虚拟化相比,架构更精简,而且在整体速度上有一定的优势。

· 缺点:需要对Guest OS进行修改,所以在用户体验方面比较麻烦。

· 未来:我觉得其将来应该和现在的情况比较类似,在公有云(比如Amazon EC2)平台上应该继续占有一席之地,但是很难在其他方面和类似VMware vSphere这样的全虚拟化产品竞争,同时它也将会利用硬件辅助虚拟化技术来提高速度,并简化架构。

硬件辅助虚拟化(Hardware Assisted Virtualization)

简介:Intel/AMD等硬件厂商通过对部分全虚拟化和半虚拟化使用到的软件技术进行硬件化(具体将在下文详述)来提高性能。硬件辅助虚拟化技术常用于优化全虚拟化和半虚拟化产品,而不是独创一派,最出名的例子莫过于VMware Workstation,它虽然属于全虚拟化,但是在它的6.0版本中引入了硬件辅助虚拟化技术,比如Intel的VT-x和AMD的AMD-V。现在市面上的主流全虚拟化和半虚拟化产品都支持硬件辅助虚拟化,包括VirtualBox,KVM,VMware ESX和Xen。

优点:通过引入硬件技术,将使虚拟化技术更接近物理机的速度。

缺点:现有的硬件实现不够优化,还有进一步提高的空间。

未来:因为通过使用硬件技术不仅能提高速度,而且能简化虚拟化技术的架构,所以预见硬件技术将会被大多数虚拟化产品所采用。

操作系统级虚拟化(Operating System Level Virtualization)

简介:这种技术通过对服务器操作系统进行简单地隔离来实现虚拟化,主要用于VPS。主要的技术有Parallels Virtuozzo Containers / OpenVZ,Unix-like系统上的chroot和Solaris上的Zone等。

操作系统级架构图:

· 优点:因为它是对操作系统进行直接的修改,所以实现成本低而且性能不错。

· 缺点:在资源隔离方面表现不佳,而且对Guest OS的型号和版本有限定。

· 未来:不明朗,我觉得除非有革命性技术诞生,否则还应该属于小众,比如VPS。

五大类之间比较

根据个人的经验,我在性能,用户体验和使用场景这三方面对这五大类进行了比较,具体请看下图-系统虚拟化五大类之间的比较:

在我观察看来,今后X86虚拟化技术的发展将会以硬件辅助虚拟化技术为主,同时以全虚拟化和半虚拟化技术为辅。

From:XiYou.LinuxGroup.2010.DuBin

KVM虚拟机

KVM虚拟机简介

kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。

KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己到进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列也是基于软件模拟的Para-Virtualization。

前期准备

1.确定机器有VT

终端输入命令:

(INTEL芯片)

(AMD芯片)

不知道芯片的生产厂商则输入:

如果flags: 里有vmx 或者svm就说明支持VT;如果没有任何的输出,说明你的cpu不支持,将无法成功安装KVM虚拟机。

2.确保BIOS里开启VT:

Intel(R) Virtualization Tech [Enabled]

如有必要,还需在BIOS中开启VT-d

3.确保内核版本较新,支持KVM

用命令uname –r查看内核版本,如果在2.6.20以下的linux版本,需升级内核。

安装KVM

下面就Ubuntu和CentOS下安装使用KVM虚拟机做介绍:

Ubuntu 中用guest登陆,安装KVM的命令为:

kvm安装成功后会有/dev/kvm,如果无需图形管理器,只需要安装前三个即可。

注:kqemu-source这个包在Ubuntu12.04中是没有的,但是不影响使用。

再来查看下KVM是否安装成功,执行:virsh -c qemu:///system list

注:使用该命令一定也要用root权限.

如果输入结果像下面这样的,那么成功了:

Connecting to uri: qemu:///system

Id Name State

注1:CentOS中安装时,先要选择Selinux为enalble,使用命令

#system-config-securitylevel-tui

可查看或修改selinux的状态。

注2: CentOS中用root登陆时则安装命令为:

Yum install kvm kmod-kvm qemu

再装入kvm模块:modprobe kvm-intel (Intel机器) 或者 modprobe kvm-amd (amd机器)

注3:可以用以下命令来检查是否装入kvm模块:

/sbin/lsmod | grep kvm

如果输出关于kvm版本的信息则已装入kvm模块

注4: 安装好后,可使用qemu-kvm命令,输入该命令,如果系统显示未知的命令,可查看/usr/libexec中是否有qemu-kvm可执行文件,如果有,将其拷贝到/bin目录下即可。如果确实按照上面的步骤进行了,却在/bin,/usr/libexec,/usr/bin,/usr/sbin里都找不到qemu-kvm可执行文件,可执行以下命令:

#yum provides “*/qemu-kvm”

注5:安装新内核后,可能有部分软件版本过低,不兼容。比如firefox因版本过低,无法启动。

CentOS下可使用如下命令更新该软件(以firefox为例):

#yum update firefox

在KVM下安装虚拟机

1.用QEMU创建磁盘镜像

sudo qemu-img create –f qcow windows.img 8G

注:在CentOS和新版Qemu中为:qemu-img create –f qcow2 windows.img 8G

2.使用KVM安装Guest VM

光盘安装:

sudo kvm –localtime –cdrom /dev/cdrom -m 512 -boot d win2.img

硬盘安装:

sudo kvm –localtime –m 512 –hda windows.img –cdrom winxp.iso –boot d –clock –rtc –no-acpi

注:官方推荐使用 -no-acpi 参数,原因是 qemu/kvm不太支持,可能造成 cpu 的占用偏高。

注1:CentOS下硬盘安装为 qemu-kvm –localtime –m 512 –hda windows.img –cdrom winxp.iso –boot d –no-acpi 即需要去掉了-clock rtc选项,否则会出现无法初始化时钟。

注2:CentOS quest mouse: export SDL_VIDEO_X11_DGAMOUSE=0可解决VM中无法识别USB鼠标的问题。

注3: 安装win 7时,不能使用-no-acpi选项。

KVM启动Guest

1. sudo kvm –boot c –m 512

–hda windows.img

2. sudo kvm -boot c

-m 512

-hda /home/lm/kvm/winxp.img

-localtime

-net nic,vlan=0,macaddr=52-54-00-12-34-01 -net tap,vlan=0,df=h,ifname=tap0,script=no

-clock rtc

-soundhw es1370

-smp 2

注意:在KVM-87下,请去掉df=h

-m 512 分配512MB的内存

-hda /home/lm/kvm/winxp.img

-localtime 使用本地时间(一定要加这个参数,不然虚拟机时间会有问题)

-net nic,vlan=0,macaddr=52-54-00-12-34-01 -net tap,vlan=0,df=h,ifname=tapo,script=no

使用网络,并连接到一个存在的网络设备tap0,注意mac地址一定要自己编一个,特别是如果你虚拟了多个系统并且要同时运行的话,不然就MAC冲突了,在KVM-87下去掉df=h

-boot d 从光盘启动 (从镜像启动也是用这个。从硬盘启动则为 -boot c )

-smp 2 smp处理器个数为2个,如果你是4核处理器,后面的数字就为4

-clock rtc

使用rtc时钟(如果不开启此选项,WINXP可能会很慢)

 

Xen虚拟化

Xen简介

Xen 是一个开放源代码虚拟机监视器,由剑桥大学开发。它打算在单个计算机上运行多达100个满特征的操作系统。操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。

与其它VMM的比较

Denali使用准虚拟化技术来提高x86电脑上虚拟机的性能。Denali的虚拟机为因特网服务专门支持了最小化的操作系统。系统可以运行上千虚拟机。Xen与Denali不同,因为它试图运行适当数量的完整操作系统,而非大量轻量级操作系统。

VMware为x86提供虚拟机,这些虚拟机可以运行未修改的PC操作系统。所涉及的技术极为复杂,也导致了性能的(有时相当显著)下降。Xen牺牲了完全的二进制兼容,换取相对的简易性和改善的性能。

Xen的准虚拟化

Xen通过一种叫做准虚拟化的技术获得高性能,甚至在某些与传统虚拟技术极度不友好的架构上(x86),Xen也有上佳的表现。与那些传统通过软件模拟实现硬件的虚拟机不同,在Intel VT-X支持下3.0版本之前的Xen需要系统的来宾权限,用来和Xen API进行连接。到目前为止,这种技术已经可以运用在NetBSD, GNU/Linux, FreeBSD和Plan 9系统上。在Brainshare 2005会议上,Novell展示了NetWare与 Xen的连通。与Windows XP连通的技术曾在Xen开发初期进行,但微软的协议未能允许它发布。Sun微系统公司也正在积极地将Solaris移植到Xen平台之上。

Xen的半虚拟化

Xen通过一种叫做半虚拟化的技术获得高效能的表现(较少的效能损失, 典型的情况下大约损失 2%, 在最糟的情况下会有 8% 的效能耗损; 与其它使用完全的虚拟化却造成最高到 20% 损耗的其他解决方案形成一个明显的对比),甚至在某些与传统虚拟技术极度不友好的架构上(x86),Xen也有极佳的表现。与那些传统通过软件模拟实现硬件的虚拟机不同,在3.0版本及在Intel VT-X支援前的Xen需要让客户操作系统(guest operating systems)与Xen API进行连接。到目前为止,这样连结已经可以运用在NetBSD, GNU/Linux, FreeBSD和贝尔实验室的Plan 9系统上。在Brainshare 2005会议上,Novell展示了NetWare与 Xen的连通。与Windows XP连通的技术曾在Xen开发初期进行,但微软的协议未能允许它发布。Sun微系统公司也正积极研究Solaris与Xen的连结,使其能在Xen平台上运作。

Xen的完全虚拟化

Intel对Xen贡献修改以支持其VT-X Vanderpool架构扩展。如果主系统支持Vanderpool或者Pacifica扩展(Intel和AMD对本地支持虚拟化的扩展),这项技术将允许未修改的客作业系统运行在Xen虚拟机中。事实上,那意味著性能的提升,并且你可以在没有进行任何协议不允许的修改的情况下对Windows进行虚拟。

虚拟机的迁移

Xen虚拟机可以在不停止的情况下在局域网内多个物理主机之间实时迁移。在操作过程中,虚拟机在没有停止工作的情况下内存被反复的复制到目标机器。虚拟机在最终目的地开始执行之前,会有一次60-300毫秒秒的非常短暂的暂停以执行最终的同步化,给人无缝迁移的感觉。类似的技术被用来暂停一台正在运行的虚拟机到磁盘,并切换到另外一台,第一台虚拟机在以后可以恢复。

平台支持

Xen目前可以运行在x86系统上,并正在向x86_64、IA64、PPC移植。移植到其他平台从技术上是可行的,未来有可能会实现。

Xen与KVM的比较

Xen也是Linux下的一个虚拟化解决方案,也将很快被编入内核中。Xen的实现方法是,运行支持Xen功能的kernel,这个kernel是工作在Xen的控制之下,叫做Domain0,使用这个 kernel启动机器后,你可以在这个机器上使用qemu软件,虚拟出多个系统。Xen的缺点是,如果你需要更新Xen的版本,你需要重新编译整个内核, 而且,稍有设置不慎,系统就无法启动。

相比较,KVM就简化的多了。它不需要重新编译内核,也不需要对当前kernel做任何修改,它只是几个可以动态加载的.ko模块。它结构更加精简、代码量更小,所以,出错的可能性更小。并且在某些方面,性能比Xen更胜一筹。

不难看出,xen和KVM是linux下两个重要的虚拟化解决方案。xen的工作方式是直接修改kernel,变成一个xen kernel,也就是Domain 0.然后在这个Domain 0的控制下虚拟出多个Domain u的方式,可以看出这种方式其实是在kernel与硬件之间加了一个xen控制层,来实现虚拟化。Virtual machines are created by a software layer called the virtual machine monitor (VMM)。linus对于这种方法看来很抵触。而kvm的实现方法却有所不同,它首先是需要CPU虚拟功能的支持,本身是以模块的形式加入到kernel中,你可以把KVM理解为一个绿色软件。KVM是后起之秀,在目前的功能和应用上还远不及Xen,不过可以预见,不久的将来,以及各大厂商,特别是intel对于虚拟化的重视,虚拟化的实现更多依赖于CPU,KVM的简洁和绿色将会更加成功。

安家点点了!

时间过得真快,大二的生活马上就要结束了,我们小组上届的学长马上就要搬走了,大一的新娃娃都来我们实验室了,顿时倍感压力很大,但是自己在迷茫中也终于找到了,自己将要走的方向!

原来自己一直租用的是虚拟主机,那家服务商很不稳定,偶尔的一次机会,看到了点点,就得这个东东挺好的,关键是稳定,所以就下定决心,搬家到点点。虽然有些限制,但是还好!

感谢点点提供的这个平台,以后我学习和生活上的点点滴滴,将记录于此,我会和点点一起走下去,加油!

From:XiYou.LinuxGroup.2010.DuBin