对分布式系统也就是 Internet 使用云作为一种抽象是十分普遍的,但在过去的几年中,这个抽象已经扩展,并入了高度虚拟化的可伸缩基础架构,这些基础架构可以很容易地被作为一个(本地的或远程的,或者本地和远程资源的组合)服务提供。本文将不对云架构的定义及其优点做深入的介绍,供您参考阅读。
云计算剖析
本文将从云架构的核心抽象开始讨论(从基础架构即服务 [IaaS]),然后是构建块,***是高度集成的解决方案。
尽管不是必需的,但虚拟化为构建可动态伸缩的架构提供了一些独特的优势。除资源共享和可伸缩性外,为了负载均衡,虚拟化还能够在物理服务器间迁移虚拟机 (VM)。图 1 中所示的这个虚拟化组件是由一个名为虚拟管理程序(有时也叫作虚拟机监视器 [VMM])的软件层提供的。这个层提供了同时在一个单一物理机器上执行多个操作系统(及其应用程序)的能力。每个操作系统被视为一个逻辑机器并由虚拟管理程序映射到物理机器。在这个虚拟管理程序上有一个名为 virtual machine 的对象,这个对象封装了操作系统、应用程序及配置。另外,如果需要,还可以在这个虚拟管理程序中提供设备仿真或是作为一个 VM 提供设备仿真。***,考虑到虚拟化的新动态特性及它所提供的新功能,还会需要新的管理模式。这种管理***在各层内完成,本地管理在服务器上完成,还有更高级别的基础架构管理,以便提供虚拟环境的全面协调管理。
图 1. 云中一个节点的核心元素
如果将 图 1 中的那些节点在一个具有共享存储的物理网络上繁殖它们,在整个基础架构上编排管理,然后用缓存和过滤提供入向连接(无论是私有的还是公共的设置)的前端负载均衡,那么您就有了一个可以叫作云 的虑拟基础架构了。图 2 显示了这个新结构。有了根据其各自的负载实现的跨节点 VM 均衡(甚至是动态均衡的),睡眠状态的服务器可以关掉,除非还需要额外的计算能力(以提供更好的电源效率)。
图 2. 云计算基础架构
定义了云的基本架构后,就可以开始探究如何应用开源技术来构建一个动态的云基础架构了。#p#
核心开源技术
Linux 领域经历着以虚拟化、管理和大规模云软件包集成的虚拟基础架构为中心的开发浪潮。在这里,我们先来看一下在单个节点级别上的开源,然后再研究此基础架构。
虚拟管理程序
虚拟管理程序是云在节点级别的基础。尽管虚拟化不是必需的,但它在提供可伸缩的和功耗合理的架构方面的能力是勿庸置疑的。目前有很多开源虚拟化解决方案,其中有两个解决方案很关键,它们可以将 Linux 操作系统转化为虚拟管理程序,这两个解决方案分别为 Linux Kernel Virtual Machine (KVM) 和 Lguest。KVM 是虚拟管理程序的正式解决方案,被部署到生产环境中。Lguest 是一个只能运行 Linux VM 的以 Linux 为中心的解决方案,但将它集成到内核就可以得到更广泛的应用。由于其性能优势,Xen 虚拟管理程序也被广泛用于公共和私有 IaaS 解决方案中。
除了将 Linux 转换为虚拟管理程序外,还有其他一些以 guest VM 为中心的解决方案。User-Mode Linux (UML) 则是另一种方式,它能修改 guest Linux 内核使其运行在另一个 Linux 操作系统上(无虚拟管理程序扩展)。因为许多用户都希望运行一个未被修改的内核,所以完整的虚拟化解决方案(比如 KVM)更受欢迎。
UML 方法也很受欢迎,但它需要虚拟硬件(比如控制台、虚拟硬盘和网络)。
设备仿真
虚拟管理程序提供了与多个操作系统共享 CPU 的途径(CPU 虚拟化),但是为了提供完整的虚拟化,整个环境都必须针对这些 VM 进行虚拟化。机器(或平台)仿真可以以几种方式实现,其中有一种流行的开源包可支持许多虚拟管理程序,被称作 QEMU。QEMU 是一个完全的仿真器和虚拟管理程序。但是 KVM 只将 QEMU 用于设备仿真,作为用户空间内的一个单独过程(参见 图 1)。QEMU 的一个有趣特性是因它提供了磁盘仿真(通过 QCOW 格式),QEMU 还提供了其他一些高级特性,比如快照和实时 VM 迁移。
自内核 2.6.25 后,KVM 使用 virtio 作为一种优化 I/O 虚拟化性能的手段。为此,它将准虚拟化了的 (paravirtualized) 驱动程序引入到虚拟管理程序,进而将性能提高到了接近原生的级别。虽然这只有在操作系统可针对此目的修改时才有效,但是它还是可以用在 Linux 虚拟管理程序场景中的 Linux guest 内。
如今,virtio 和 QEMU 可协同工作以便在用户空间内的 Linux guest 和 QEMU 仿真器之间优化仿真设备事务。
虚拟网络
由于 VM 合并到了物理服务器上,因此对平台的联网需求十分迫切。但我们不需要把所有 VM 的联网都强加到这个平台的物理层上,本地通信可自行被虚拟化。为了优化 VM 间的网络通信,引入了虚拟交换。vSwitch 和物理交换一样,只是被虚拟化进了这个平台(参见 图 3)。在这个图中,与 VM 相连的虚拟接口 (VIF) 通过虚拟交换与物理接口 (PIF) 进行通信。
图 3. 具有虚拟和物理接口的 Open vSwitch 高级视图
开源也可以解决这个问题,借助的是一个很有趣的解决方案,称为 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 是操作系统、根文件系统和配置的聚合,因此空间已经很成熟,完全适于工具开发。但是为了充分发挥 VM 和工具的潜力,必须有一种方式来组合它们。目前的这种方式称为 Open Virtualization Format (OVF),它是一种 VM 结构,灵活、高效且可移植。OVF 在一个 XML 包装程序内包含了一个虚拟磁盘映像,这个包装程序定义了该 VM 的配置,包括网络配置、处理器和内存要求以及多种可扩展的元数据来进一步定义此映像及其平台要求。OVF 提供的关键功能是可移植性,可以以一种虚拟管理程序不可知的方式分发 VM。
目前,有很多实用工具可用来管理 VM 映像 (VMI) 以及将这些映像转变为其他格式,或从其他格式转变回来。VMware 的 ovftool 就是这样一种很有用的工具,可用于 VMI 转化(比如,从 VMware Virtual Disk Development Kit [VMDK] 格式转变为 OVF)。对于 VMI,这些工具显得非常有用,但是如果有一个物理服务器,要将它转变为 VMI,该如何做呢?对此,您可以使用一个很有用的工具,称为 Clonezilla。虽然该工具最早是作为灾难恢复的磁盘克隆工具开发的,但它可以被用来将一个物理服务器实例转化成一个 VM,以便于部署在一个虚拟基础架构内。随着 OVF 格式的大量采用,有很多其他的转换和管理工具或者已经存在(比如构建于 libvirt 之上的实用工具)或正在开发之中。
本地管理
本文从两个角度探索了管理。本节讨论平台管理;稍后的一个章节会谈及较高级别的基础架构管理。
Red Hat 引入了 libvirt 库作为管理平台虚拟化(虚拟管理程序和 VM)的一个 API。libvirt 的一个吸引人之处是它支持多种虚拟管理程序解决方案(KVM 和 Xen 就是其中两个)并提供对多种语言(比如 C、Python 和 Ruby)的 API 绑定。它提供的是管理的 “***阶段”,直接与平台虚拟管理程序交互并将 API 扩展到更大的基础架构管理解决方案。借助 libvirt,启动和停止 VM 非常简单,而且它还为更先进的操作(比如在平台间迁移 VM)提供了 API。使用 libvirt 还能使用它的 shell(构建于 libvirt 之上),称为 virsh。
#p#
基础架构开源技术
了解了虚拟节点级别的开源解决方案后,接下来看看支持这种基础架构的其他一些开源解决方案。本文共讨论了三类。前两类是基础架构级别技术,可补充之前我们讨论的解决方案。第三类包含一些集成的解决方案,可将所有这些综合起来以简化部署。
I/O 技术
构建一个可伸缩的平衡 Web 架构取决于跨服务器(实现后端功能)平衡 Web 流量的能力。目前已有很多负载平衡解决方案,但最近 Yahoo! 也开源了一个解决方案,名为 Traffic Server。Traffic Server 非常有意思,因为它在一个包内封装了面向云基础架构的大量功能,包括会话管理、身份验证、过滤、负载均衡和路由。Yahoo! 最初是从 Inktomi 购买到此产品的,但是现在已经对其进行扩展并将此产品引入到了开源领域。
基础架构管理
较大规模的基础架构管理(管理很多虚拟管理程序以及更多 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 非常适合于自动化管理许多服务器上的任务,如今已被广泛使用。
#p#
集成的IaaS 解决方案
如下所列的这些开源包采取了一种更为全面的方式,它们均在一个包内集成了所有必需功能(包括虚拟化、管理、接口和安全性)。如果将它们添加到服务器和存储网络上,这些包均能提供灵活的云计算和存储基础架构 (IaaS)。有关这些平台的详细信息,请参见 参考资料。
Eucalyptus
最为流行的用来构建云计算基础架构的开源包之一是 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 的云存储接口)兼容。
对于虚拟管理程序,Eucalyptus 支持 KVM/Linux 和 Xen,对于集群管理,包括了 Rocks 集群分发。
OpenNebula
OpenNebula 是另一种有趣的开源应用程序(在 Apache 许可下),在 Universidad Complutense de Madrid 开发。除了支持私有云结构之外,OpenNebula 还支持混合云的概念。混合云允许私有云基础架构与公共云基础架构(比如 Amazon)的集成以提供更高级别的伸缩。
OpenNebula 支持 Xen、KVM/Linux 和 VMware,并且依赖于 libvirt 等元素来进行管理和内省。
Nimbus
Nimbus 是一种以科学计算为中心的 IaaS 解决方案。使用 Nimbus,您可以借用远程资源(比如由 Amazon EC2 提供的远端资源)并能对它们进行本地管理(配置、部署 VM 和监视等)。Nimbus 由 Workspace Service project(Globus.org 的一部分)演变而来。由于依赖于 Amazon EC2,因此 Nimbus 支持 Xen 和 KVM/Linux。
Xen 云平台
Citrix 已经将 Xen 集成到一个 IaaS 平台,Xen 被用作 虚拟管理程序,而同时又并入了其他的开源功能,比如 Open vSwitch。Xen 解决方案的优势之一是其着重于来自 Kensho 项目的基于标准的管理(包括 OVF、Distributed Management Task Force [DTMF]、Common Information Model [CIM] 和 Virtualization Management Initiative [VMAN])。Xen 管理栈支持 SLA 保障,以及具体的退款标准。
OpenQRM
倒数第二个解决方案是 OpenQRM,这是一种数据中心管理平台。OpenQRM 提供了单个控制台来管理整个虚拟化的数据中心,在架构上它允许插入以便集成第三方工具。OpenQRM 集成了对高可用性(通过冗余)的支持,并支持各种各样的虚拟管理程序,包括 KVM/Linux、Xen、VMware 和 Linux VServer。
OpenStack
目前,领先的 IaaS 解决方案称为 OpenStack。OpenStack 于 2010 年 7 月发布,并且迅速成为标准开源 IaaS 解决方案。OpenStack 是两种云计划的组合,即 RackSpace Hosting (Cloud Files) 和 NASA 的 Nebula platform。OpenStack 是用 Python 语言开发的,并且在 Apache 许可下的开发活动很活跃。
图 4 展示了 OpenStack 作为一种模块化架构来管理一组计算和存储服务器。可通过三个主要组件来定义 OpenStack:Nova(表示计算端)、Swift(表示对象存储)和 Glance(实现映像服务)。OpenStack 支持各种各样的虚拟管理程序,包括 KVM、Linux Containers (LXC)、QEMU、UML、Xen 和 XenServer。OpenStack 现在促进了云基础架构的开放标准,并且因此其采用率也在迅速增加。
图 4. OpenStack 模块化架构
#p#
嵌套的虚拟管理程序
虚拟化和开源中最有趣的发展之一就是能够在一个虚拟管理程序上托管另一个虚拟管理程序(使用称为嵌套 的概念)。想想 图 1 中的内容,典型的使用模型是:对于 guest 虚拟机,将虚拟管理程序作为物理平台的抽象。通过嵌套,除了 guest 虚拟管理程序(参见图 4),host 虚拟管理程序为整个虚拟机提供了基本级别的抽象(一种典型用例)。
图 5. 嵌套虚拟管理程序作为一种有用的抽象
虽然嵌套可能看似是一种很奇怪的使用模型,但可考虑将其应用到云计算中。云通常需要多个虚拟机才能满足其虚拟管理程序选择的需求。但是如果该虚拟管理程序支持嵌套,那么用户不仅可以提供其虚拟机,而且还能提供所选的 guest 虚拟管理程序。这也为用户提供了额外的抽象,为云添加了可移植性(能够轻松地在云提供商之间切换)。
目前 KVM 虚拟管理程序已支持嵌套的虚拟化。查看 参考资料 内容,了解如何在 AMD 服务器上演示该功能。
结束语
对开源技术在云和虚拟化领域中的引导作用的介绍足以占据相当大的篇幅,本文只对当今流行、常见的一些解决方案作了简短介绍。不管您是想要根据您自己的需要逐步构建一个云,还是想要一个开箱即用的综合解决方案,开源技术都能让您如愿以偿。有关这些解决方案以及其他解决方案的细节,请参阅接下来的 参考资料 部分。