柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!
全部博文(1669)
分类: 云计算
2012-07-17 10:48:35
分布式系统也就是 Internet 使用云作为一种抽象是十分普遍的,但在过去的几年中,这个抽象已经扩展,并入了高度虚拟化的可伸缩基础设施,这些基础设施可以很容易地被作为一个(本地的或远程的)服务提供。本文将不对云架构的定义和其优点做深入的介绍,您可以参考 参考资料 部分中给出的相关阅读。
本文将从云架构的核心抽象开始讨论(从 Infrastructure as a Service [IaaS]),然后是构建块,最后是高度集成的解决方案。
尽管不是必需的,但虚拟化为构建可动态伸缩的架构提供了一些独特的优势。除可伸缩性外,为了负载均衡,虚拟化还能够在物理服务器间迁移虚拟机(VM)。图 1 中所示的这个虚拟化组件是由一个名为hypervisor(有时也叫作 虚拟机监视器[VMM])的软件层提供的。这个层提供了同时在一个单一物理机器上执行多个操作系统(及其应用程序)的能力。在这个 hypervisor 上有一个名为 virtual machine 的对象,这个对象封装了操作系统、应用程序及配置。另外,如果需要,还可以在这个 hypervisor 中提供设备仿真或是作为一个 VM 提供设备仿真。最后,考虑到虚拟化的新的动态特性及它所提供的功能,还会需要新的管理模式。这种管理最好在各层内完成,本地管理在服务器上完成,还有更高级别的基础设施管理,以便提供虚拟环境的全面管理。
如果将图 1 中的那些节点在一个具有共享存储的物理网络上繁殖它们,在整个基础设施上编排管理,然后用缓存和过滤提供入向连接(无论是私有的还是公共的设置)的前端负载均衡,那么您就有了一个可以叫作云 的虑拟基础设施了。图 2 显示了这个新结构。有了根据其各自的负载实现的跨节点 VM 均衡(甚至是动态均衡的),睡眠状态的机器可以关掉,除非还需要额外的计算能力(以提供更好的电源效率)。
定义了云的基础架构后,就可以开始探究如何应用开源技术来构建一个动态的云基础设施了。
Linux 领域经历着以虚拟化、管理和大规模云软件包集成的虚拟基础设施为中心的开发浪潮。在这里,我们先来看一下在单个节点级别的开源,然后再研究此基础设施。
hypervisor 是云在节点级别的基础。尽管虚拟化不是必需的,但它在提供可伸缩的和功耗合理的架构方面的能力是勿庸置疑的。目前有很多开源虚拟化解决方案,其中有两个解决方案很关键,它们可以将 Linux 操作系统转化为 hypervisor,这两个解决方案分别为 Linux Kernel Virtual Machine (KVM) 和 Lguest。KVM 是 hypervisor 的正式解决方案,被部署到生产环境中。Lguest 是一个只能运行 Linux VM 的以 Linux 为中心的解决方案,但将它集成到内核就可以得到更广泛的应用。
除了将 Linux 转换为 hypervisor 外,还有其他一些以 VM 为中心的解决方案。User-Mode Linux (UML) 则是另一种方式,它能修改 guest Linux 内核使其运行在另一个 Linux 操作系统上(无 hypervisor 扩展)。因为大多数用户都希望运行一个未被修改的内核,所以完整的虚拟化解决方案(比如 KVM)更受欢迎。
UML 方法也很受欢迎,但它需要虚拟硬件(比如控制台、虚拟硬盘和网络)。
hypervisor 提供了与多个操作系统共享 CPU 的途径(CPU 虚拟化),但是为了提供完整的虚拟化,整个环境都必须针对这些 VM 进行虚拟化。机器 — 或平台 — 仿真可以以几种方式实现,其中有一种流行的开源包可支持许多 hypervisor,被称作 QEMU。QEMU 是一个完全的仿真器和 hypervisor。但是 KVM 只将 QEMU 用于设备仿真,作为用户空间内的一个单独过程(参见 图 1)。QEMU 的一个有趣特性是因它提供了磁盘仿真(通过 QCOW 格式),QEMU 还提供了其他一些高级特性,比如快照和实时 VM 迁移。
自内核 2.6.25 后,KVM 使用 virtio 作为一种优化 I/O 虚拟化性能的手段。为此,它将准虚拟化了的(paravirtualized)驱动程序引入到 hypervisor,进而将性能提高到了接近原生的级别。虽然这只有在操作系统可针对此目的修改时才有效,但是它还是可以用在 Linux hypervisor 场景中的 Linux guest 内。
如今,virtio 和 QEMU 可协同工作以便在用户空间内的 Linux guest 和 QEMU 仿真器之间优化仿真设备事务。
由于 VM 合并到了物理服务器上,因此对平台的联网需求十分迫切。但我们不需要把所有 VM 的联网都强加到这个平台的物理层上,本地通信可自行被虚拟化。为了优化 VM 间的网络通信,引入了虚拟交换。vSwitch 和物理交换一样,只是被虚拟化进了这个平台(参见图 3)。在这个图中,与 VM 相连的虚拟接口(VIF)通过虚拟交换与物理接口(PIF)进行通信。
开源也可以解决这个问题,借助的是一个很有趣的解决方案,称为 Open vSwitch。除了为虚拟环境提供虚拟交换外,vSwitch 还能集成物理平台及提供企业级特性,比如虚拟本地局域网络(VLAN)、基于优先级 Quality of Service (QoS)、中继和对硬件加速的支持(比如单根 I/O 虚拟化 [IOV] 网络适配器)。Open vSwitch 现在可用的是 2.6.15 内核,并支持一系列基于 Linux 的虚拟化解决方案(Xen、KVM、VirtualBox)和管理标准(Remote Switched Port Analyzer [RSPAN]、NetFlow 等)。
由于 VM 是操作系统、根文件系统和配置的聚合,因此空间已经很成熟,完全适于工具开发。但是为了充分发挥 VM 和工具的潜力,必须有一种方式来组合它们。目前的这种方式称为 Open Virtualization Format(OVF),它是一种 VM 结构,灵活、高效且可移植。OVF 在一个 XML 包装程序内包含了一个虚拟磁盘映像,这个包装程序定义了该 VM 的配置,包括网络配置、处理器和内存要求以及多种可扩展的元数据来进一步定义此映像和其平台要求。OVF 提供的关键功能是可移植性,可以以一种 hypervisor 不可知的方式分发 VM。
目前,有很多实用工具可用来管理 VM 映像(VMI)以及将这些映像转变为其他格式,或从其他格式转变回来。VMware 的 ovftool 就是这样一种很有用的工具,可用于 VMI 转化(比如,从 VMware Virtual Disk Development Kit [VMDK] 格式转变为 OVF)。对于 VMI,这些工具显得非常有用,但是如果有一个物理服务器,要将它转变为 VMI,该如何做呢?对此,您可以使用一个很有用的工具,称为 Clonezilla。虽然该工具最早是作为灾难恢复的磁盘克隆工具开发的,但它可以被用来将一个物理服务器实例转化成一个 VM,以便于部署在一个虚拟基础设施内。随着 OVF 格式的大量采用,有很多其他的转换和管理工具或者已经存在(比如构建于 libvirt 之上的实用工具)或正在开发之中。
本文从两个角度探索了管理。本节讨论平台管理;稍后的一个章节会谈及较高级别的基础设施管理。
Red Hat 引入了 libvirt 库作为管理平台虚拟化(hypervisor 和 VM)的一个 API。libvirt 的一个吸引人之处是它支持多种 hypervisor 解决方案(KVM 和 Xen 就是其中两个)并提供对多种语言(比如 C、Python 和 Ruby)的 API 绑定。它提供的是管理的 “最后阶段”,直接与平台 hypervisor 交互并将 API 扩展到更大的基础架构管理解决方案。借助 libvirt,启动和停止 VM 非常简单,而且它还为更先进的操作(比如在平台间迁移 VM)提供了 API。使用 libvirt 还能使用它的 shell(构建于 libvirt 之上),称为 virsh。
了解了虚拟节点级别的开源解决方案后,接下来看看支持这种基础设施的其他一些开源解决方案。本文共讨论了三类。前两类是基础设施级别技术,可补充之前我们讨论的解决方案。第三类包含一些集成的解决方案,可将所有这些综合起来以简化部署。
构建一个可伸缩的平衡 Web 架构取决于跨服务器(实现后端功能)平衡 Web 流量的能力。目前已有很多负载平衡解决方案,但最近 Yahoo! 也开源了一个解决方案,名为 Traffic Server。Traffic Server 非常有意思,因为它在一个包内封装了面向云基础设施的大量功能,包括会话管理、身份验证、过滤、负载均衡和路由。Yahoo! 最初是从 Inktomi 购买到此产品的,但是现在已经对其进行扩展并将此产品引入到了开源领域。
较大规模的基础设施管理(管理很多 hypervisor 以及更多 VM)可以通过几种方式实行。其中最常用的两个解决方案均构建自同一个平台(libvirt)。oVirt 包是一个开放的 VM 管理工具,可管理少至几个 VM,多至数千个运行在数百个主机上的 VM。oVirt 包由 Red Hat 开发,是一个基于 Web 的管理控制台,除了进行传统管理外,还支持集群和负载均衡自动化。oVirt 工具用 Python 语言编写。VirtManager 基于的也是 libvirt,并且也是由 Red Hat 开发,它是具有 GTK+ UI 的应用程序(而不像 oVirt 那样是基于 Web 的)。VirtManager 带来了更为丰富的图形显示(比如显示当前性能和资源使用情况),而且还包含了一个 VNC 客户查看器,可作为对远端 VM 的一个完整的图形控制台。
Puppet 是另外一种开源包,为数据中心基础设施(一个云)量身设计。虽然它不是仅为了虚拟基础设施而设计,但它却可以通过抽象对等操作系统的细节而简化大型基础设施的管理。它是通过 Puppet 语言的使用实现这个目的的。Puppet 非常适合于自动化管理许多服务器上的任务,如今已被广泛使用。
如下所列的这些开源包采取了一种更为全面的方式,它们均在一个包内集成了所有必需功能(包括虚拟化、管理、接口和安全性)。如果将它们添加到服务器和存储网络上,这些包均能提供灵活的云计算和存储基础设施(IaaS)。有关这些平台的详细信息,请参见参考资料。
最为流行的用来构建云计算基础设施的开源包之一是 Eucalyptus(全称是 Elastic Utility Computing Architecture for Linking Your Programs to Useful Systems)。它的独特之处是其接口与 Amazon Elastic Compute Cloud(Amazon EC2 — Amazon 的云计算接口)兼容。此外,Eucalyptus 还包含了 Walrus,它是一个云存储应用程序,与 Amazon Simple Storage Service (Amazon S3 — Amazon 的云存储接口)兼容。
对于 hypervisor,Eucalyptus 支持 KVM/Linux 和 Xen,对于集群管理,它包括了 Rocks 群集分发。
OpenNebula 是另一种有趣的开源应用程序(在 Apache 许可下),在 Universidad Complutense de Madrid 开发。除了支持私有云结构之外,OpenNebula 还支持混合云的概念。混合云允许私有云基础设施与公共云基础设施(比如 Amazon)的集成以提供更高级别的伸缩。
OpenNebula 支持 Xen、KVM/Linux 和 VMware,并且依赖于 libvirt 等元素来进行管理和内省。
Nimbus 是一种以科学计算为中心的 IaaS 解决方案。使用 Nimbus,你可以借用远程资源(比如由 Amazon EC2 提供的远端资源)并能对它们进行本地管理(配置、部署 VM、监视等)。Nimbus 由 Workspace Service project(Globus.org 的一部分)演变而来。由于依赖于 Amazon EC2,因此 Nimbus 支持 Xen 和 KVM/Linux。
Citrix 已经将 Xen 集成到一个 IaaS 平台,Xen 被用作 hypervisor,而同时又并入了其他的开源技术,比如 Open vSwitch。Xen 解决方案的优势之一是其着重于来自 Kensho 项目的基于标准的管理(包括 OVF、 Distributed Management Task Force [DTMF]、Common Information Model [CIM] 和 Virtualization Management Initiative [VMAN])。Xen 管理栈支持 SLA 保障,以及具体的退款标准。
最后一个是 OpenQRM,属于一种数据中心管理平台。OpenQRM 提供了单一一个控制台来管理整个虚拟化了的数据中心,在架构上它允许插入以便集成第三方工具。OpenQRM 集成了对高可用性(通过冗余)的支持,并支持各种各样的 hypervisor,包括 KVM/Linux、Xen、VMware 和 Linux VServer。
对开源技术在云和虚拟化领域中的引导作用的介绍足以占据相当大的篇幅,本文只对当今流行、常见的一些解决方案作了简短介绍。不管您是想要根据您自己的需要逐步构建一个云,还是想要一个开箱即用的综合解决方案,开源技术都能让您如愿以偿。有关这些解决方案以及其他解决方案的细节,请参阅接下来的 参考资料 部分。
学习
获得产品和技术
讨论
M. Tim Jones 是一名嵌入固件架构师,他是 Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming、AI Application Programming 和 BSD Sockets Programming from a Multi-language Perspective 等书的作者。他的工程背景非常广泛,从同步宇宙飞船的内核开发到嵌入式系统架构设计,再到网络协议的开发。Tim 是位于科罗拉多州 Longmont 的 Emulex Corp. 的一名高级架构师。