Note: 该篇主要内容来自Best Damn Server Virtualization Period Book

    虚拟化技术是近两年来非常热门的技术。之所以他能够从众多的软件和硬件技术中脱颖而出,是因为这项技术能够在维持企业数据中心处理能力的基础上,缩小现有企业数据中心内不断扩大的基础设施规模,减少企业在IT设施上的投入,从而降低企业的成本。然而,虚拟化到底是什么?它是否适用于所有企业?它能如何使企业从中受益?

    虚拟化技术的诞生已经有将近30年的历史。它曾经用于一些大规模的、富有的企业,而如今已经应用于计算机的方方面面,包括硬件、软件、通信等等方面。在许多情况下,这项技术是免费的(感谢那些开源的方案),或者是包含在一些收费的产品中,例如操作系统或存储硬件中。

    由于能够很好地适用于大多数联机的商业应用程序,虚拟化技术越来越广泛地被应用于处理企业的工作量(workload),除了要求非常高的工作量。理解这项技术以及如何在虚拟环境下处理工作量,对每一位希望利用虚拟化技术为企业和客户带来好处的数据中心管理员以及系统架构师而言,是非常关键的。

    本章将介绍服务器、存储和网络虚拟化的核心概念,作为进一步了解Xen的基础。本章也将证明虚拟化技术能为组织带来的潜在利益。

1.虚拟化的定义

    到底什么是虚拟化?这个问题有很多答案。不同的制造商和独立软件供应商都有自己的定义,从而能够将它们的产品归类于能够帮助企业建立虚拟化设施(infrastructure)的工具。只要它们的定义符合下述几个要点,这些定义都不算错误:

  • 在应用软件和硬件之间加入了一层抽象的层。
  • 能够降低IT设施的成本和复杂度。
  • 提供相互独立的计算资源,从而增加稳定性和安全性。
  • 提高服务层次以及服务质量(QoS)。
  • 能够使IT流程与企业目标相一致。
  • 尽可能减少IT设施中的冗余,最大化IT设施的利用率。

    当今最常见的虚拟化形式都聚焦于服务器硬件平台的虚拟化,而这项技术的实现及其实现目标其实对数据中心中关键而昂贵的组件也很有意义,例如存储和网络基础设施。

    那虚拟化究竟要如何定义?为了尽可能地全面,我们可以这样定义:

    通过使用一种或多种例如软硬件分区、分时处理、部分或完全的机器模拟、仿真、服务质量(QoS)等概念和技术,将计算机硬件资源划分成多种运行环境的一种框架或方法。

    就像上世纪60年代末、70年代初IBM VM/370所做的一样,当今的虚拟化技术能够允许在一台计算机上同时运行多个操作系统实例,而却不像以前那么昂贵。每个操作系统实例都共享了同一物理硬件上的一定量的资源,就像图1.1所展示的那样。一个称作虚拟机监视器(Virtual Machine Monitor,VMM)的软件控制着底层CPU、内存、存储和网络资源的使用和许可。

图1.1

2.虚拟化的意义

    从上世纪90年代中期至今,数据中心越来越趋向于分散化(decentralized)的布局,横向地向外扩展应用程序和系统设施。这种趋势通常被称为“服务器蔓生”(server sprawl)。由于越来越多的应用程序和应用环境被部署起来,数据中心中使用的服务器的数量以一个指数级别的比率增长。集中式服务器的购买与维护过于昂贵,以至于许多公司还没有建立这样的计算平台。虽然大体积、大框架的服务器还在使用,中等的、入门级的服务器市场却获得了新生,这不是因为这些服务器被最频繁的使用,而是因为一些其他的原因。了解为什么IT组织青睐于分散化的布局,以及为什么有必要从原有的集中式计算平台转变为分散化的布局,对我们理解虚拟化非常重要。

2.1 分散式VS集中式

    虚拟化是两种布局——集中式和分散式系统的一个修改方案。不必要购买和维护一整套物理计算机以及其每个应用程序必需的外设 ,每个应用程序能够获得自己的运行环境,以及I/0设备、计算力和内存,它们都共享着底层的物理硬件。这提供了分散化布局的好处,比如安全性和稳定性;同时也尽可能利用了一台机器的资源,并带来了更丰厚的IT投资回报。

    随着Windows以及更轻量化的开源系统平台的流行,许多企业希望能够在降低所有权成本(total cost of ownership,TCO)的基础上获得更好的投资回报。低价的软硬件平台的上市为实现这个愿望带来了福音,但这些企业迅速意识到这种愿望已经变成了一个噩梦,因为数据中心横向的扩张需要提供新的服务器实例。

    从积极的角度看,企业能够控制他们的固定资产成本。由于有丰富的硬件商品可供选择,各种应用程序都能获得所需要的物理机器(在一个较低的成本下)。分散化布局有助于对每个应用程序的日常维护,因为在这种布局下,应用程序的修复和升级将不会影响到其他运行的系统。同样地,分散化布局提高了系统的安全性,因为一个故障的系统是与其他系统在网络上相互隔离的。由于IT处理流程在企业中变得越来越完善并作为一种行政机制被建立起来,软件开发生命周期(software development life cycle, SDLC)利用了多层式架构(n-tier)应用程序的分散布局。作为一种软件开发的模型或流程,软件开发生命周期通过定义开发阶段(例如要求集合、软件结构和设计、测试、实施和维护)以及制定各阶段指导开发流程的规范,形成了一个软件产品开发的僵化结构。在多数情况下,各个阶段相互重叠,需要它们拥有自己专门的多层式架构的配置。

    然而,“服务器蔓生”不断加剧,同一个应用程序需要多个拷贝以支持软件开发生命周期中的开发、质量保证、负载测试和最终产品环境。每个应用程序的沙盒测试将带来更多的电力消耗、更小的物理空间额更大的管理需要。这些加在一起,解释了为什么平均一台机器一年最多上万(如果不是上十万)美元的维护成本。除了这些维护的日常开支,分散化布局降低了每台机器的效率,使得每台机器85%到90%的时间被空置。这些低效率表现进一步侵蚀了利用分散化布局来节省潜在成本和劳务的愿望。

    在表1.1中,我们评估了Foo Company三年来建立分散化布局的配置所引致的成本。这个分散化布局的配置由5台双路X86服务器组成,每个物理核心都获得了软件许可(如图1.2)。这些成本包括5台全新的双路服务器,10颗获得使用许可的CPU(每台两颗),以及这些设施、电力和恒温所来带的软成本(soft costs)。存储没有被考虑在内,因为我们假设无论在物理和虚拟的场景下,这些服务器都将被连接到相同空间的外部存储上。因此,存储成本对两者都是相同的。物理成本代表了三年的成本,因为大多数公司的固定资产将在36个月内贬值。我们的成本总共是74950美元。

表1.1

 

图1.2

     相比之下,表中也显示了一个相似配置的、由5个操作系统/应用程序实例构成的集中式布局。这5个实例被托管在一台拥有充足硬件资源的、用于处理多种工作量的双路服务器上,如图1.3所示。不仅实现了80%的服务器硬件资源成本的节省,相同比例的软件成本的节省也得以实现(80%的CPU许可成本的减少),以及相应的基础设施、电力和恒温设备的成本节省。

图1.3

    注意:当建立商业应用以及评估虚拟化所带来的财务影响时,确定不要在一台物理服务器上托管过多数量的虚拟机,从而过度使用这台物理服务器。根据工作量的不同,物理主机可以管理多则20至30台、少则4至5台虚拟机。在创建虚拟机之前要花时间收集有关物理机当前工作量的性能信息,尤其是在高峰期,从而帮助你合理地计划和合理应用虚拟化技术。

    假设当运行物理服务器时,每台服务器将具有平均15%的使用率,将工作量整合到一台集中式的、运用虚拟化技术的物理服务器中显然是合理的。在这个简单的模型中,软、硬成本都被考虑到成本计算当中,这才能显示出真正的总所有成本,而劳务成本被排除在外。这里必须特别注意,图中所表示的支撑设备(Supporting Infrastructure)包括了机架、电缆和网络/存储链接成本。这些常常被忽视。然而,将这些包括在你的成本收益分析中是至关重要的,因为每个光纤信道(Fibre Channel,FC)控制端口的花费多达1500美元,每个网络端口可以多达300美元。就像图中所展示的,在分散化布局的例子中,我们需要10条光纤信道和10个网络连接;相比集中式布局只需要2条光纤信道和2个网络连接。单单端口就将为Foo节省一笔可观的成本。正如表中所示,使用具备虚拟化技术的服务器将节省将近80%的成本。

2.2 真正实际的利益

    虚拟化是系统优化方面的重要部分。它不仅是一项简简单单的、减少和简化你的服务器基础设施的方法,它同样是一种能够改变你对你的数据中心——作为一个整体的看法。图1.4证明了系统优化的模型。你会意识到虚拟化,或者物理整合,是所有其他优化措施的基础,接下来是逻辑整合和之后整个系统和应用程序的合理化。这个过程可以发现那些不需要的或是冗余的、可以删除的应用程序。

 

 图1.4

    在表1.2中,你将发现一个关于虚拟化技术所带来利益的样例列表,这些利益帮助IT组织证明了他们发展虚拟化设施的合理性。虽然每个组织的情况是不同的,你只需要针对你的情况采纳其中的一些要点,来建立一个强有力的虚拟化商业案例(business case)。

表1.2

2.2.1 整合

    三个因素激发了甚至加速了虚拟化技术的接受和应用——整合、可靠性和安全性。在支撑整合的目标是整合和联合工作量或资源。在虚拟化的案例中,工作量被整合到少数能够持续获得计算资源(如CPU、内存和I/O设备)的物理平台上。在现代的数据中心中,许多工作量远没有充分利用他们所在的硬件资源,导致了设施的浪费以及较低的回报。通过整合,虚拟化使你能够以一种有策略的方式整合实例或运行系统并处理它们之上的工作量,并将他们放置在一个拥有充分可用资源、能够满足资源需求的共享硬件之上。这将带来更高的利用率。人们经常认为服务器不应该接近充分能力级别运行。然而,相反的想法是正确的。为了最大化投资收益,服务器应该在不影响其他工作量的运行或依赖它们的性能的商业流程的前提下,尽可能地接近充分能力运行。通过对那些工作量的合理计划和理解,虚拟化将在减少所需的物理平台数目的基础上帮助服务器增加利用率。

    整合虚拟化的另一个好处在于遗留系统(legacy system)的迁移。服务器硬件已经发展到了经常与遗留操作系统和软件不兼容的级别。越来越新的处理器技术、支持芯片组以及紧随其后的高速总线经常使遗留系统不能正常运行,甚至不完全重新编译就无法运行。虚拟化通过提供通用的、广泛兼容的、遗留系统可以运行之上的平台,来帮助降低遗留系统迁移的难度,简化遗留系统迁移的过程。这增加了一些机会,以最小的影响使应用程序从旧的、不支持的、风险较大的平台向更新的和支持的硬件转移。

    过去,操作系统被限定在特定的硬件平台中。这束缚了许多组织,迫使他们必须在硬件上大量投资以维持关键的商业应用程序。由于硬件的商品化,尽管许多通用的操作系统能够运行在非常多的服务器架构上,最流行的架构还是x86架构。你可以在x86架构上运行Windows、Unix和任意一种Linux发布版本。建立在x86之上的虚拟化技术,反过来可以运行不同的环境。多种操作系统——包括之前提到的——可以被整合到相同的物理硬件中,从而进一步减少获取和维护设施的成本。

    最后,资源整合可以有助于开发和测试环境的合理化。相比新项目和产品发布的开始所带来的无法控制的基础设施蔓延,或对现有应用程序的维护,虚拟化使你能够将这些工作量中的许多部分整合到相比之下非常小少的物理服务器上去。考虑到开发和测试所带来的负载对资源的要求从本质上来说没有投产的要求那么高,通过虚拟化来整合那些环境将比原有的投产过程节省更多的成本。

2.2.2 可靠性

    很早以前,可靠性就已经成为了许多IT组织要求和关心的问题。它与系统的可用性、应用程序正常运行时间以及创收能力有直接的关系。企业愿意并经常大量投资到他们的服务器基础设施,以确保他们关键的面向企业的(line-of-business)应用程序保持在线,以及他们的商业运行不会被阻断。通过投资购买额外的软硬件来应对软件错误,基础设施需要被加强以能够应对故障和由于中断而导致的、意外的不正常运行时间。尽管如此,这样做被证明非常昂贵。

    虚拟化技术对此十分敏感,并通过提供运行虚拟机之间的高度隔离来解决这方面的问题。一台虚拟机或分区上的一个系统错误,不会影响同个硬件平台上运行的其他分区。这种隔离通过使虚拟机无法意识到所分配资源之外的情况(从而不被影响),逻辑上从最底层保护和加强了虚拟机的可靠性。这个抽象的层是虚拟化中的关键组件。它使每一个分区好像运行在一个专门的硬件之上。

    这种隔离不会阻碍计算力的灵活性,因为它们在一个完全的物理环境下。分区能够被重新分配资源来为其他需要的功能服务。想象一下一台服务器托管着一个C/S的应用程序,而这个应用程序只在每个工作周的早上8点到下午5点使用;另一个应用程序在晚上执行批处理流程来结清企业一天运营的账目;又有一个应用程序在周末负责数据维护的工作。在一个完全物理硬件的环境下,它们将以三台专门的服务器的形式存在。这三台服务器的计算资源在它们各自的运行时间内是高度利用的,而在非运行时间内却被闲置。这解释了许多计算力浪费和对高价投资的不充分利用。虚拟化通过使一个逻辑或物理分区,在需要的时候能够被重新分配资源,以实现所需的功能,从而解决这个问题。在工作日内,这台服务器将在白天托管那个C/S应用程序,而在晚上运行批处理。在周末,它将被重新分配资源来完成数据维护工作,只需要在下周一早上回到托管C/S应用程序就可以。这种灵活性使IT组织能够交替地使用同一台服务器来运行核心商业流程,方法上与在物理平台上运行别无二致,但是这在降低了成本的同时保证了高可靠性。

    另一个增加成本的方面则是部署待机的或故障备援的服务器,以在计划和非计划的运行中断时间内能够维持系统的可用性。尽管这些设备能够负担特定的工作量,但它们在没有运行中断的时间里都是闲置的,甚至在某些情况下根本就没有用过。它们经常被当做昂贵的垃圾,为企业提供很少的价值,却需要花很多钱。虚拟化通过提供及时的或按需提供的、所需的额外分区来帮助解决这个问题。例如,一个被建立(安装了操作系统或应用程序)和配置的分区可以被设置成一个不活动的(关机或中止)状态,准备着在发生故障的时候被激活。当需要的时候,这些分区将变成活动状态,而企业则不用担心硬件的获取、安装或配置。另一个例子是一个主动/被动(active/passive)服务器集群。在这些集群中,故障备援的节点必须保证活动状态并在线,而不是非活动状态。然而,拥有这些节点的平台必须是专门为这个集群服务。这导致很多组织在多种故障备援节点上做大量的投资,而这些节点却在它们所在的数据中心内被闲置,等待某次运行中断时被使用。利用服务器虚拟化,这些节点可以被整合到较少数目的硬件平台上,因为托管备援节点的分区被布置在较少几台物理主机上。

2.2.3 安全性

    能够提供应用程序故障隔离的技术同样也可以提供安全故障隔离。如果一个特定的分区被破坏,它将被从其他的分区中隔离出来,使这种破坏不能够扩展至其他分区。有一种方案的实施能够进一步隔离被破坏的分区和操作系统实例,即通过移除它们赖以存在的特定资源——减少CPU运行周期,切断网络和I/O设备使用,或同时终止系统。若是这些遭到破坏的实例直接运行在物理主机上,这种任务是很难,甚至是不可能完成的。

    当通过虚拟化整合了工作量,安全配置可以针对特定的分区进行,而不是针对整一个物理服务器进行。与此相关的一个例子就是超级用户账户。被整合在一个运行在物理服务器上的操作系统上的应用程序,将共享各种安全设置——尤其是根用户或管理员对所有设置的权限是相同的。然而,当相同的工作量被整合到虚拟分区上时,每个分区将被配置不同的证书,从而通过符合联邦或工业界规定的管理权限来保持系统用户权限的相互隔离。

    简而言之,虚拟化明显是一个与任何公司(无论大小)相关的科技进步。想象一下你的经理叫进办公室并开始解释他或她对成本控制、数据中心规模缩减、产品周期缩短以及公司要求在更少成本下做更多事情的担心。你不需要尝试太多次去解释虚拟化将如何帮助解决所有这些担心的问题。当发现你一直知道这个答案的时候,你的IT经理将会花费时间去学习虚拟化——这个能够满足商业需求,又能在IT运行和基础设施管理和使用上带来很高价值的灵丹妙药。