虚拟化原理与虚拟化技术设计实现详解

1、虚拟化概念

虚拟化的目标是提供一种机制,用来在共享的操作系统和硬件资源池上运行多个应用,而无须相互依赖或相互感知。每个应用都认为自己拥有硬件资源,但并不一定意识到这样的硬件是一个从更大的硬件资源池所抽象出来的子集。这些应用程序在其进程、磁盘和文件系统使用、用户管理以及网络连接之间存在隔离。

有了虚拟化技术之后,数据中心或服务器集群中的服务器数量急剧减少,少量服务器即可完成相同的工作,可以同时运行多个应用。由此产生的好处显而易见:电力、空间的节省,运营成本、企业总成本的降低以及业务的弹性扩展。

虚拟化要解决计算、存储、网络等3个方面的问题。

通俗地说,虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构之间的壁垒。虚拟化的对象是各种各样的资源,即将应用程序及其下层组件从支持它们的硬件中抽象出来,将网络的控制管理与数据平面的转发与交换进行有效分离并提供支持资源的逻辑化视图。

虚拟化是一种过程,即将原本运行在真实环境上的计算机系统或组件运行在虚拟出来的环境中,并且不受资源的实现、地理位置、物理包装和底层资源的物理配置的限制。它是一个为了简化管理和优化资源的解决方案,经过虚拟化以后所有的资源都透明地运行在各种各样的物理平台上。资源的管理都将按逻辑方式进行,完全实现资源的自动化分配,用户可以在虚拟环境中实现其在真实环境中的部分或者全部功能。

虚拟化指各种实体有效地共享硬件资源,如一台服务器可以虚拟化成多台虚拟机共享硬件资源。例如,一种网络设备可以有很多虚拟局域网(Virtual Local Area Network,VLAN),多个网络共享一个端口。所有共享的内容均称为“虚拟化”,如输入/输出(Input/Output,I/O)虚拟化。一个机房中的所有电缆,如电源线、网络线和音频线只有一根线即可。一根线插入,所有设备联通称为“cable虚拟化”,即共享硬件资源。

虚拟化技术通过对硬件和软件的划分或整合,部分或完全地对物理机器进行模拟或仿真,将计算资源合并或切分成一个或多个运行环境。虚拟化技术的绝妙之处在于经过虚拟化后的逻辑资源对用户隐藏了不必要的细节,终端用户在信息化应用中感觉不到物理设备的差异、物理距离的远近及物理数量的多少,按照自己正常习惯操作执行需要的信息资源调用和交互即可。

CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统。在每一个操作系统中都可以运行多个程序,并且应用程序都可以在相互独立的空间内运行而互不影响。例如,当前只有一台计算机。通过虚拟技术在用户看来却是多台,每台都有其各自的CPU、内存和硬盘等物理资源。

虚拟化技术与多任务及超线程技术完全不同,多任务指在一个操作系统中多个程序同时并行运行。在虚拟化技术中可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的CPU或者是虚拟主机上。而超线程技术只是单CPU模拟双CPU来平衡程序运行性能,这两种模拟的CPU不能分离,只能协同工作。

2、虚拟化类型

虚拟化的最初发展阶段主要由软件在支持其发展演进。同时运行多个操作系统(表现为每个或每组应用都运行在一个独立的系统之上)并要求这些操作系统必须能够相互协作,或者引入一个中介(虚拟化层)来实现硬件共享,否则这些操作系统或其上运行的应用程序都会同时访问硬件资源并造成混乱。虚拟化提供了一种解决方案,使得硬件和操作系统之间实现分离,并增加一个虚拟化层作为它们之间的桥梁。

为了深入理解这些方法,可以从宏观层面看一下典型的 x86 架构。该架构定义了4种特权级别来实现与硬件(CPU和内存)之间的交互,级别越低,优先级越高,也就运行在更接近硬件的位置。一般来说,应用程序运行在特权级别 3 上,设备驱动使用特权级别1和2,而操作系统则需要特权级别0,这样才能与硬件进行直接交互。

1. 全虚拟化

全虚拟化(Full Virtualization)技术中的操作系统位于更高层级,而虚拟化层则位于Layer 0并与硬件进行交互,因而操作系统发布给硬件的指令首先由虚拟化层进行翻译,然后再发送给硬件。

这种方法不但不需要开发或修改客户操作系统中的代码,而且现有应用及客户操作系统不需要进行任何更改就能运行在虚拟化层之上,因而全虚拟化技术实现了硬件和操作系统的解耦。常见的全虚拟化技术有VMware的ESXi以及Linux的KVM/QEMU。

2. 半虚拟化

虽然全虚拟化技术相对独立,但是数据从操作系统到虚拟化层再到硬件的转换过程中不可避免地会产生一定的开销。对于某些应用来说,这种时延可能就是导致其效率低下的关键因素,而某些应用则可能需要与硬件进行直接通信。为了解决这些需求,操作系统可以利用Hypervcall技术与底层硬件进行直接交互以执行特定的功能调用,同时继续通过虚拟化层实现其他功能,这种虚拟化技术就是半虚拟化(Paravirtualization)技术。

“Para”一词源自希腊语,意为“旁边”。半虚拟化技术中的虚拟化层与客户操作系统运行在同一特权级别(layer 0),允许操作系统访问硬件以执行一些时延敏感型功能。

对于半虚拟化技术来说,运行在硬件上的所有客户操作系统都需要相互感知以共享这些硬件资源。由于半虚拟化技术中的客户操作系统需要与其他客户操作系统以及虚拟化层进行交互,因而该环境中的开发重心位于客户操作系统侧,常见的半虚拟化技术是XenServer。

3. 硬件辅助虚拟化

前面曾经提到,x86硬件为了追上虚拟化的步伐,将虚拟化能力加入硬件本身,使得硬件能够提供更高的性能和吞吐量。硬件辅助虚拟化(Hardware-Assisted Virtualization)技术就是利用在硬件中内置虚拟化支持的技术,操作系统和虚拟化层可以利用硬件辅助功能的调用来提供并实现虚拟化。

很多操作系统和虚拟化厂商都利用这种功能来提供更高的性能和容量。全虚拟化技术的缺点是操作系统无法直接访问硬件,这个问题如今已经被硬件辅助虚拟化所解决。

因此,硬件辅助虚拟化与全虚拟化的结合是首选的部署技术。

4. 操作系统级虚拟化

操作系统级虚拟化(OS-Level Virtualization)技术与前面的几种虚拟化技术稍有不同。在这种情况下,并不是在每个独立的客户操作系统上安装应用并运行在相同的硬件之上,而是不同应用直接运行在了单个公共的操作系统之上。

在这种技术中,操作系统被修改,使得这些应用拥有自己的工作空间和资源。它确保了应用程序资源使用的分离,使得它们看起来像是仍然在独立服务器上运行一样。常见的操作系统级虚拟化技术主要包括Linux容器与Docker。

5. 虚拟化与仿真

仿真技术和虚拟化有时可以互换使用,但这两者之间存在着显著而又微妙的差异。

仿真技术中的特殊软件(模拟器)充当运行在其中的应用程序的翻译,负责模拟运行应用程序的硬件。模拟器可以模拟的硬件(CPU、内存、磁盘、I/O)不会受底层操作系统的分配影响。

使用模拟器的目的通常是让基于某种类型的操作系统(或CPU)的应用程序可以运行在其他操作系统(或CPU)上,模拟器不要求在其中运行模拟操作系统,而是从应用程序中调用相应的功能,并将它们转换成正在运行的操作系统可用的功能。来回转换不但会给性能带来一定消耗,而且还会受模拟器代码所定义的指令集的限制。

此外,由于模拟器作为基础操作系统上的一个应用程序来运行,因此它依赖操作系统的资源共享及分配功能,模拟器并不会提供任何额外的机制以保证可用性或诸如存储或I/O这样的资源分离。

相比之下,虚拟化的基本功能就包含分离和隔离机制。无论使用哪种技术来实现虚拟化,应用或客户操作系统都可以独立工作并共享底层硬件,且不会相互影响。

仿真通常用于在较新或不同的操作系统或平台上,运行一个为其他操作系统或平台开发的应用程序。例如,可以使用模拟器在Linux操作系统上运行为MS-DOS编译的旧应用程序。虚拟化有一个非常不同的目标——旨在共享不同应用程序或不同操作系统之间的硬件资源。

3、虚拟化专业术语

1. 虚拟机

虚拟化技术为操作系统或应用程序提供了一种可以在其中运行的独离的虚拟硬件环境,这种硬件环境通常被称为虚拟机,有时也宽泛地称为虚拟容器、虚拟环境或简称为容器(因为其提供了一种“自包含”环境)。

如果牵涉到这些术语的严格定义,那么虚拟机与容器还是有一些细微差别的,虽然两者均提供虚拟化环境,但实现方式有所区别,这一点可能会对达到的隔离级别及性能产生一定的影响。

2. 宿主操作系统(Host Operating System)

宿主操作系统是直接运行在硬件上的操作系统,必须支持虚拟化,而且需要正确设置以顺利安装应用程序。

宿主操作系统对整个硬件资源具有可视性,并且可以将这些资源分配给虚拟机。由于虚拟机是在宿主操作系统上创建的,因此宿主操作系统的功能(如可寻址内存范围或可以支持的I/O设备)会对虚拟机的功能产生限制。

3. 虚拟机管理器(VMM或Hypervisor)

最初人们用VMM(Virtual Machine Manager,虚拟机管理器)来描述该功能,但是20世纪70年代早期,IBM工程师创造了Hypervisor(虚拟机管理程序)一词,因为虚拟化管理软件运行在被IBM称为Supervisor的操作系统之上。

可以利用Hypervisor来完成虚拟机的创建、虚拟机资源的分配、虚拟机参数的修改以及虚拟机的删除等操作。
Hypervisor主要分为两类,其类型名称并没有太多关于它们之间区别的信息,只是简单地称为Type-1 Hypervisor和Type-2 Hypervisor。

  • Type-2 Hypervisor

该类Hypervisor作为一款普通的软件应用运行在宿主操作系统之上。宿主操作系统可以是任何支持虚拟化功能的传统操作系统。Hypervisor 作为这个操作系统上的应用程序,与其他应用程序和进程一起运行,其被分配给特定硬件资源。

在Type-2虚拟化环境中,主机的作用非常小,仅仅为Hypervisor的运行提供一个平台。此外,由主机提供与设备、内存、磁盘及其他外围设备通信的接口。一般来说,宿主操作系统不会运行任何资源重消耗型应用,宿主操作系统应该是一个非常轻量级的层级,在实现操作系统基本功能的同时,主要为客户(即虚拟机)预留大量必需的资源。

  • Type-1 Hypervisor

该类Hypervisor基于其底层主机仅扮演一个非常轻量级且基本的角色。Type-1 Hypervisor将宿主操作系统的角色融入到Hypervisor代码中,此时Hypervisor直接运行在硬件上,不需要底层操作系统。该类Hypervisor还需要完成其他功能,因为它需要与物理设备进行通信并对其进行管理,同时将所需设备驱动程序加入到Hypervisor代码中。因而这类Hypervisor的代码显得较为复杂,开发时间也较长。但是与Type-2 Hypervisor相比,Type-1 Hypervisor的通信开销较少。
由于Type-1 Hypervisor直接运行在硬件上,因此也将该实现方式称为裸机实现方式。

  • Type-1与Type-2 Hypervisor对比

下图列出了两类Hypervisor的主要信息,并提供了一些商用产品案例。Type-1 Hypervisor是一种“自包含”架构,由于其直接与硬件交互,因此拥有较好地灵活性和安全性。

此外,Type-1 Hypervisor代码纯粹是为Hypervisor开发的功能,因此得到了更好的优化。由于Type-1 Hypervisor不存在通过主机OS与硬件通信所产生的开销和依存关系,因此其性能一般要高于Type-2 Hypervisor。

另一方面,Type-2 Hypervisor的开发过程更加简单、快速且更加灵活,这是因为它不需要为特定硬件进行开发或测试,正因为如此,才使得Type-2 Hypervisor成为x86架构的第一款可用Hypervisor,而Type-1 Hypervisor(最初的设想是用在大型机上)则需要针对x86平台进行较长时间的开发才能投放市场。

Type-2 Hypervisor支持多种硬件,不存在硬件依赖性。与硬件设备之间的所有处理均在宿主操作系统范围之外完成。只要宿主操作系统实现Hypervisor代码的兼容和验证,底层硬件的组件或驱动就可以与硬件协同工作,且无须关注Hypervisor。 

4. 客户操作系统(Guest Operating System)。

操作系统通常运行在专用服务器上。在虚拟化环境中,虚拟化层负责将硬件抽象出来,并允许多个独立运行的操作系统共享这些硬件资源。虚拟化术语将运行在虚拟化层所提供的抽象硬件上的操作系统实例称为客户操作系统(Guest Operating System)。

Hypervisor承载虚拟机时,虚拟机不会从宿主操作系统继承任何软件组件,所创建的基础虚拟机看起来与普通服务器几乎完全相同,与传统服务器一样,虚拟机也需要一个操作系统来启动并管理设备,并在其中运行应用程序。

运行在虚拟机上的操作系统被称为客户操作系统,虽然客户操作系统可以是任意类型的操作系统,但是必须与Hypervisor提供的硬件资源相兼容。

例如,基于RISC(Reduced Instruction Set Computer,精简指令集计算机)架构的操作系统天生就无法运行在由CISC(Complex Instruction Set Computer,复杂指令集计算机)CPU资源来提供Intel x86架构的Hypervisor之上。

与运行在真实硬件系统上相似,客户操作系统无须进行任何修改,即可运行在虚拟机之上并查看虚拟机的状态,因而客户操作系统并不需要了解真实的物理资源,也不关心其他Hypervisor实例上的虚拟机。

客户操作系统内的用户可以运行任何该操作系统支持的应用。当应用(或客户操作系统本身)想要访问磁盘、内存或CPU资源时,Hypervisor就会充当一个中介,将请求映射到由宿主操作系统管理的资源之上。这些请求的响应通过宿主操作系统上的Hypervisor传递回来,到达发起请求的客户操作系统,并打上一个标记,这时客户操作系统就可以与那些硬件实体进行直接对话了。

5. 容器化(Containerization)

为了更好地区分基于容器的虚拟化与基于虚拟机的虚拟化,有时也使用术语容器化(而不是虚拟化)来指代基于容器的虚拟化。

6. 租户(Tenant)

从字典的定义来看,租户指的是在有限时间内使用某基础设施的用户。对于服务器部署架构场景来说,租户指的是正在使用服务器的硬件/软件资源的客户。

从服务器所有权的共享角度来看,虚拟化功能带来了两类客户部署架构,即单租户架构和多租户架构。如果是无虚拟化的独立场景,那么只有一个租户拥有并控制整台服务器,该租户可以灵活地修改该服务器的硬件以及运行在服务器上的软件,因为该租户是唯一的所有者。该租户所做的任何变更都不会影响其他服务器上的其他用户,此时就称为单租户(Single-Tenancy)。

有了虚拟化技术之后,就可以在很多租户之间共享服务器。这些租户共享服务器的硬件和软件资源,某个租户对共享资源所做的任何变更都会对其他租户产生影响。因此,未经其他租户的同意,任何租户都不能自由修改系统,此时就称为多租户(Multi-Tenancy.)。

打个比方,这里说的单租户系统就像独栋住宅的租户一样,独栋住宅租户的任何动静都不会影响其邻居,而且租户可以在家中自由地做出各种改变。

相比之下,多租户系统就类似于多层共享公寓中的租户,其中某个租户的行为可能会对共享公寓基础设施及资源的邻居造成影响。

这两种租户模型之间的对比情况如下图所示:

虽然多租户继承了虚拟化的好处,但是却降低了租户之间的隔离等级,因而与单租户架构相比,多租户架构降低了安全等级,而且存在更多的漏洞。这些优缺点成为人们是否采用虚拟化机制的关键决策因素。

由于多租户架构存在前面讨论过的诸多好处,因而业界普遍倾向于采用多租户和虚拟化机制。但有时多租户架构的缺点也可能成为关键决策因素(通常出于监管要求),决定了采用单租户部署架构还是多租户部署架构。目前不断进步的虚拟化技术正逐步减少或消除上述缺点。 

4、常见Hypervisor

1. KVM/QEMU

KVM和QEMU可能是Linux中流行且常用的Hypervisor。由于KVM和QEMU都是开源的免费软件,因此它们通常都是Linux主机上的虚拟机的默认选择。QEMU是Quick Emulator的缩写,是一款开源的虚拟机模拟器。QEMU与KVM(Kernel-based Virtual Machine,基于内核的虚拟机)结合使用,也可以用作Hypervisor。

KVM是Linux内核提供的虚拟化架构,可以让QEMU使用硬件辅助的虚拟化技术。KVM/QEMU允许客户操作系统直接访问虚拟化硬件并获得几乎与直接访问硬件相同的性能(如果该客户操作系统运行在物理机之上)。

2. ESXi

ESXi(据传是Elastic Sky X-integrated的首字母缩写)是VMware的旗舰级Hypervisor产品,是一款直接运行在裸机上的Type-1 Hypervisor,目前ESXi是业界主要且部署较为广泛的Hypervisor。ESXi是一款商业产品,VMWare围绕ESXi架构(如vMotion和vCenter)提供了大量支持和实用工具,这些工具是ESXi大获成功的重要基础。

ESXi使用被称为VMkernel的小型内核,该内核能够满足虚拟机的管理以及与硬件之间的交互需求。VMware提供了vSphere、vCenter等管理工具在ESXi上部署、监控和管理虚拟机。

3. Hyper-V

Hyper-V是Microsoft提供的Windows Server虚拟化解决方案。Hyper-V使用术语分区(而不是虚拟机)来表示隔离环境,并使用父分区或根分区来管理其他分区(称为子分区)。

虽然Hyper-V是Windows Server中的一个可安装组件,但Hypervisor却直接运行在裸机上,因此它被归类为Type-1 Hypervisor。

下图描述了Hyper-V的体系架构:

4. XEN

XEN是一款开源虚拟化软件,属于Type-1 Hypervisor。XEN采用了与Hyper-V类似的父分区概念,XEN使用被称为Dom0(Domain 0,域0)的虚拟机,Dom0负责管理系统上的其他虚拟机,这些虚拟机被称为DomU(Domain U,域N)。

XEN采用半虚拟化技术,客户虚拟机要求将硬件资源按需发送给Dom0。由于客户操作系统需要与Dom0进行交互,因此客户操作系统必须支持特殊的设备驱动程序。

XEN中的Dom0不但要运行虚拟化的应用程序,而且还能直接访问硬件并管理硬件上的设备驱动程序。

下图显示了XEN的体系结构:

5、虚拟机与容器

虚拟机提供了一个非常孤立且自包含的环境。虽然硬件辅助虚拟化和全虚拟化技术让虚拟机的实现非常高效,但模拟虚拟硬件所需的开销会带来一定程度的性能和资源代价。不过,有时并不真正需要虚拟机级别的隔离机制,为了降低基于Hypervisor的虚拟化实现导致的性能劣化,也可以接受相对较低的隔离级别,此时就可以采用更为简单的虚拟化技术,即基于容器的虚拟化技术。

基于容器的虚拟化采用的是操作系统级虚拟化技术,可以为操作系统内的应用程序提供一种封闭、受限且隔离的环境,该环境被称为容器,应用程序可以在容器中独立运行。与虚拟机相比,通过容器方式实现的虚拟化有一些差异。与虚拟机不同,容器可以在没有任何客户操作系统的情况下独立运行应用程序。

基于容器的虚拟化技术源于UNIX / Linux内核,该虚拟化能力是为应用程序提供内核级隔离能力的直接结果。由于存在如此紧密的关系,因此有时也将容器称为LXC(Linux Container,Linux容器),即使并非所有的容器都是LXC。

LXC是Linux Container的缩写形式,是一组与应用程序进行编程交互的函数和协议(也称为API[Application Programmable Interface,应用编程接口])。LXC API为Linux内核的容器特性提供了一个接口。人们使用该缩写形式时通常指的是Linux中实现的所有容器,而并非是其最初的含义。有时,人们为了将其与基于Hypervisor的虚拟机虚拟化方式进行区分(LXC与虚拟机),也将其宽泛地称为基于容器的虚拟化。

LXC容器提供的也是一种隔离环境,但LXC容器无法实现“容器”一词的另一面,即可移植性,这就是Docker的用武之地。

简而言之,Docker就是一种打包容器并实现容器可移植性的技术。

6、虚拟化技术应用领域

虚拟化技术应用领域主要有以下三个方面:

  • 服务器虚拟化;
  • 网络虚拟化;
  • 网络功能虚拟化(NFV);

1. 服务器虚拟化

从下图可以看出,原先由多台物理服务器提供的电子邮件、数据库、管理以及Web服务,都可以虚拟化到少量物理服务器上。

不过仍然需要考虑物理方面的冗余性,因为在同一台物理服务器上使用虚拟化方式实现主用和备用服务器并不是一个很好的设计和部署方式。

目前服务器虚拟化已经是一种相当成熟的技术,它被证明是一种非常成功且高效的联合和管理资源的方式。业界已经开发了大量软件工具,用于快速便捷地部署虚拟化服务器,也使得管理人员能够管理和监控其性能并优化其利用率。

2. 网络虚拟化

网络虚拟化概念常常会与NFV相混淆。事实上,网络虚拟化早于NFV,而且与NFV毫无关联。

在不同的上下文环境中,“虚拟”一词也与服务器虚拟化中的意思有所不同。网络虚拟化是一种将一个物理网络逻辑拆分为多个逻辑网络的方法,这些不同的逻辑网络共享底层基础设施,但是这种共享对于最终用户来说并不可见,人们通过协议和技术,使得这些逻辑网络看起来完全独立,分别运行在专有的基础设施之上。逻辑网络(或常常称为虚拟网络)可以在网络之间提供独立性、私密性以及网络级的隔离性。

最初的网络虚拟化案例可能算是VLAN(Virtual LAN,虚拟局域网),从图可以看出,VLAN为园区网或办公网提供了将网络分割成多个虚拟网段的方法,这些虚拟网段相互之间共享交换能力与数据路径。

其他的虚拟网络技术还有L3VPN(Layer 3 VPN,三层虚拟专用网)、虚拟可扩展局域网(Virtual Extensible LAN,VXLAN)以及ATM SVC/PVC(Switch and Permanent Virtual Circuit,交换虚拟电路/永久虚拟电路)等,这些技术当中都有“虚拟”一词,因为这些技术都提供了一种在物理网络之上叠加实现虚拟网络的方式。

对于ISP(Internet Service Provider,Internet服务提供商)来说,它们可以在共享的基础设施上通过叠加多个网络来提供多种服务,而无须为这些服务都专门部署分离的物理网络。网络虚拟化技术使得人们可以同时享受多种服务,如宽带上网、视频流、VoIP,这些服务都是在相同的物理网络之上通过逻辑分离的虚拟网络提供的,主要好处是可以显著降低基础设施的部署、管理以及维护成本。

对于企业来说,网络虚拟化可以让企业以更加经济和高效的方式来实现内部网段、小型办公室、远程办公员工的互连,只要通过ISP提供的互联网或VPN服务即可。

目前典型的 ISP 会在其网络基础设施之上运行多个相互隔离的叠加网络,如下图所示。 

在这样的多个虚拟网络之上实现流量(主要是数据流量)传输,物理网络基础架构必须提供足够大的带宽,并需要设计在拥塞或故障时不同服务的优先级别。这使得QoS(Quality of Service,服务质量)、路由协议、流量工程等技术得到发展。

网络虚拟化极大地影响了网络协议和网络的发展,而NFV则以另外一种方式影响着网络协议和网络的发展。

3. 网络功能虚拟化

NFV(Network Functions Virtualization,网络功能虚拟化)是服务器虚拟化概念的一种延展,即基于服务器虚拟化技术去执行特殊的网络功能。

虚拟化的巨大成功吸引网络运营商考虑部署NFV,最终推动设备厂商和制造商摆脱“一个设备就是一个运行自定义功能的硬件”的束缚,并且可以使得他们的网络运维系统也运行在虚拟化环境之上。最初提出NFV的白皮书,直接引入服务器虚拟化带来的成功,并建议对网络功能进行同样的处理,以达到类似的目的。

传统网络设备上的软件都是专有或定制的,硬件的组成则包括了从低端到中端的处理引擎、磁盘存储以及供数据I/O(Input/Output,输入/输出)使用的大量物理接口。这些设备同样使用了专用CPU处理和转发网络流量,用专门的内存实现寻址,如TCAM(Ternary Content Addressable Memory,三态内容寻址存储器)。

处理数据包的CPU都是高度定制化的,实现转发、分类、队列、访问控制等网络功能,传统网络设备一般都通过专用的ASIC(Application Specific Integrated Circuit,专用集成电路)来实现。

COTS硬件并没有用于数据包处理和转发的专用CPU去实现高吞吐,也没有专门的内存去实现快速寻址,同样没有特别的软件和操作系统去实现网络功能。有了NFV,部署在虚拟化环境之上的操作系统就可以运行在COTS硬件之上——在一台服务器上运行多个操作系统实例,计算、存储和网络接口资源都可以共享。

为了弥补转发CPU和快速缓存的内存的不足,一些特殊的新型软件被开发出来,在使用通用CPU的同时实现了高性能。这些技术,如Intel的DPDK(Distributed Packet Development Kit,分布式数据包开发套件)、Cisco的VPP(Vector Packet Processing,矢量数据包处理)。

大规模使用虚拟化技术的服务器集群出现之后,带来了一项全新的架构设计,这些架构旨在实现容错。这些服务器相对便宜,运行在上面的应用程序需要24小时持续可用。基于软件的管理和部署工具可以对虚拟服务器实现动态部署、移除或迁移。容错架构可以实现故障的预测和管理,并对这些故障(如对受影响的服务进行重置、迁移或重连)进行规避。

相比之下,传统意义上使用物理设备的网络实现高可用性时,都是通过叠加物理设备或超配来实现冗余,并额外配置冗余数据链路来确保正常运行。使用NFV技术之后,网络的设计及架构就可以采用与IT虚拟化相同的方式来实现上述容错功能。

由于网络功能虚拟化遵循相对成熟的服务器虚拟化技术,因此完全可以利用为此开发的大量工具,可用于NFV部署工作的常见服务器虚拟化工具包括OpenStack、VMware vSphere以及Kubernetes等。

4. 虚拟化与NFV关系

NFV是在网络中部署服务器虚拟化技术的结果,从ETSI NFV架构可以知道,NFVI模块拥有虚拟化层,它是通过Hypervisor(如果使用VNF作为虚拟机)或LXC/Docker(如果使用容器来部署VNF)来实现的。

服务器虚拟化的发展演进直接影响了VNF的部署和实现方式。例如,人们正探索利用微服务和容器来进一步优化NFV的部署效率,因为容器的重新加载和删除时间非常短。从长远角度来看,这种优化选项可能会证明在NFV中使用容器(而不是虚拟机)是一个很合理的发展趋势。

同样,由于NFV的使用,某些增强型功能也逐渐引入到虚拟化当中,如VNF互连使用的工具就与虚拟化原来互连虚拟机或容器的工具相同。这些都进一步推动业界开发出更高效的虚拟交换机以及更优化的内核级和NIC(Network Interface Card,网络接口卡)级分组处理技术,如Intel的DPDK(Data Plane Development Kit,数据平面开发套件)。

7、虚拟机资源分配原理

使用虚拟化的目的是共享硬件资源(如内存、CPU、接口和磁盘空间),使其发挥最大效能。Hypervisor则可以将共享这些资源所造成的影响降至最低。

最近几年,共享机制取得了突破性进展。

1. CPU和内存分配

创建虚拟机时,Hypervisor会将预定义的内存和CPU分配给虚拟机,分配给虚拟机的CPU资源会被客户操作系统视为专用物理CPU。由于有些客户操作系统对于支持的CPU套接字有限制,因此较新版本的Hypervisor会根据CPU套接字的颗粒度及内核数量来提供CPU资源。

可分配的CPU性能基于宿主操作系统级别的可用CPU资源,例如,如果宿主服务器使用的是Intel Xeon E5-2680v2 CPU,该CPU具有10个内核/槽,并且是双线程,那么Hypervisor最多可以将20个虚拟CPU提供给虚拟机。这样的分配不会将任何CPU(或CPU内核)与虚拟机相绑定,与此相反,Hypervisor允许将一定比例的CPU循环分配给虚拟机。

虚拟机的CPU请求被Hypervisor截获后,就在可用CPU内核上调度该请求,并将响应传递给客户操作系统。硬件辅助虚拟化技术对于在虚拟机上共享CPU资源来说起到关键性的作用。

为虚拟机分配内存也要使用共享技术。通过共享技术将内存分配给Hypervisor时,同样会让客户操作系统认为是在使用物理内存资源。类似内存页和磁盘交换空间等技术会被用于虚拟机操作系统,分配的全部可用内存都由其独占使用。

2. I/O设备分配

串行及其他I/O设备在虚拟机之间实现共享,是通过在同一时间内只将它们分配给一个虚拟机来实现的。这样一来,Hypervisor就可以基于特定的触发条件来切换资源分配。

例如在ESXi中,如果将键盘分配给虚拟机的控制台,ESXi截取到Ctrl+Alt组合键之后,就会将键盘从控制台中分离出来并连接到其他虚拟机上。

3. 磁盘空间分配

初次创建虚拟机时,Hypervisor会被告知分配给客户操作系统的磁盘空间大小。根据所使用的置备方法类型,可以在宿主操作系统上创建一个或一组文件。可以使用两种常用的磁盘空间置备方法:厚置备(Thick Provision)和精简置备(Thin Provision)。

1)厚置备

采用厚置备方式为虚拟机分配磁盘空间时,均会在宿主操作系统上将分配给客户的所有磁盘空间进行预分配和预留,这是通过创建一个特定大小的文件(或多个文件的组合)来完成的。该方法的缺点是,如果客户没有充分利用分配给它的磁盘空间,那么从宿主操作系统的视角来看,就会认为该空间已被使用,而不再用于其他目的。该方法的优点也非常明显,为客户置备的磁盘空间大小总是精确的。

采用厚置备方式时,既可以擦除预分配给虚拟机的空间信息(称为快速归零厚置备,eager-zeroed thick provisioning),也可以选择直到客户真正需要空间去存储数据时再开始置备(称为延迟归零厚置备,lazy-zeroed thick provisioning)。

最初为虚拟机分配磁盘空间的时候,快速归零厚置备需要更多时间,这是因为该方式会擦除整个分配的空间。另一方面,如果需要实现数据恢复,那么延迟归零厚置备可以更好地恢复到原始磁盘内容。

2)精简置备

该置备方法可以节省磁盘空间,并通过仅预分配给客户操作系统所需的资源来防止资源浪费。该方法欺骗了客户操作系统,在宿主操作系统之上创建和预留的实际文件大小可能相对来说小得多,但客户操作系统却误认为分配了能实现全部能力的资源。当客户开始在预分配空间中进行“填充”时,Hypervisor就会对分配的资源进行扩展,使得资源可以随需匹配实际置备。

这种优化磁盘空间的置备方法有轻微风险,如果客户操作系统的磁盘空间被过量分配,且所有客户操作系统均试图同时扩展资源,那么宿主操作系统就无法适应该情况,最终耗尽全部空间。

因配置虚拟机而创建的文件以某种受支持的格式进行打包,其中包含客户操作系统的全部文件系统。客户操作系统一旦无法感知磁盘被虚拟化,就会认为该磁盘是独立的,仅为自身提供资源。

用于打包虚拟机磁盘空间的一些常用文件格式如下:

  • VMDK(Virtual Machine Disk,虚拟机磁盘):这是一种流行的虚拟机磁盘空间打包格式。该格式最早由VMware开发,目前已成为一种开放格式。
  • VDI(Virtual Disk Image,虚拟磁盘镜像):该格式主要由Oracle的VirtualBox Hypervisor所使用。
  • VHD(Virtual Hard Disk,虚拟硬盘):该格式最初是为Microsoft的Hyper-V(而不是其前身Connectix Virtual-PC)开发的,目前属于开放格式,任何厂商都可以选择支持该格式。
  • QCOW2(QEMU Copy-On-Write Version 2,QEMU写时复制版本2):该格式是QEMU/KVM Hypervisor的原生支持格式,是一种开源的磁盘镜像格式。QCOW2采用COW(Copy-On-Write,写时复制)方式,在任何基础镜像产生变量时,将其写入一个独立空间,而不改变原有空间分配。

8、虚拟机网络通信原理

虚拟机在创建之后处于隔离状态,需要利用网络连接机制将虚拟机的数据传输到外部网络(运行这些虚拟机的物理服务器之外),或者让运行在同一服务器上的不同虚拟机之间可以实现数据通信。

物理机的NIC(Network Interface Card,网络接口卡)可以实现该需求。与其他资源(如在虚拟机之间共享的CPU和内存资源)类似,虚拟机也要共享物理NIC 以实现更高更优化的利用率。

很多技术都能实现该共享机制,其中的一种常见技术就是由Hypervisor创建vNIC(virtual NIC,虚拟NIC)实例,并以NIC方式呈现给客户操作系统。不过,该实现方式中的Hypervisor(在Type 1情况下)或宿主操作系统(在Type 2情况下)需要将多个vNIC映射给一个或多个物理NIC,这一点与硬件交换设备在常规网络中执行的功能角色一致。对于虚拟化环境来说,则由 vSwitch(Virtual-Switch,虚拟机交换机)来实现vNIC到物理NIC的连接。

对于基于Linux的Hypervisor来说,如果虚拟机的宿主是单台主机,而且虚拟机之间不需要实现冗余,那么Linux网桥应用就能满足这些需求。可以为这类网桥定义vNIC以及连接在vBridge(虚拟网桥)上的物理NIC。

Linux虚拟网桥的虚拟/物理以太网成员:

linux-host:~$ brctl show sample_bridge
bridge name            bridge id           STP enabled    interfaces
sample_bridge       8000.72466e3815f3         no             eth2
                                                            veth100
                                                            veth200
linux-host:~$

VLAN100和VLAN200(分别属于VM1和VM2)不但可以相互传输数据,而且还可以将数据传输到外部接口(通过 eth2),实现方式是让它们成为名为sample_bridge的虚拟网桥的成员,如下图所示。

与此类似,作为Type 1 Hypervisor的ESXi在Hypervisor中也内嵌了一款vSwitch,可以通过类似的方式使用它,将虚拟机上以虚拟方式创建的NIC映射到物理网络端口,从而实现与外部网络的连接,如图所示。

对于一组独立的vNIC与物理NIC映射来说,可以定义一个额外的虚拟网桥或vSwitch。

虽然基本的Linux网桥可以为单台主机上的少量虚拟机提供连接服务,但是如果要支持多服务器虚拟化部署环境(属于常见场景)或需要虚拟机冗余的场景,那么就需要使用更加复杂的交换机。

如果出于负载均衡、冗余性或物理距离等目的,虚拟机需要从一台物理主机迁移到另一台物理主机(或者在同一台主机内),那么该虚拟机所连接的新虚拟端口以及交换机可能需要复制原虚拟端口的配置信息(如VLAN、QoS以及其他功能特性)。

此外,为了确保连续性和管理简易性,多服务器环境可能还需要部署集中式控制器,以管理交换机的策略及配置。这些需求导致人们为Linux环境开发了 OVS(Open vSwitch,开放式虚拟交换机),OVS是一种具备大量功能特性的开源交换机,如支持主机之间的虚拟机迁移、支持SDN(Software-Defined Networking,软件定义网络)控制器实现集中式管理的OpenFlow协议以及优化交换性能等。 

对于基于ESXi的Hypervisor来说,上述需求都是由被称为DVS(Distributed vSwitch,分布式虚拟交换机)的ESXi标准交换机来完成的,DVS不但提供了配置管理和故障排查功能,而且还可以监控部署在多台分布式物理主机上的所有虚拟机,如图所示。

其他网络供应商也开发了一些vSwitch解决方案来满足各种Hypervisor的需求,如Cisco Nexus 1000v、HP 5900v和NEC PF1000。

下表列出了一些常见Hypervisor的可用vSwitch,虽然列表信息并不完整,但是可以为大家提供一些常见的可用选项视图。 

常见Hypervisor的可用虚拟交换机:

需要说明的是,也可以将物理接口直接分配给虚拟机,此时vSwitch执行的是1:1映射,对于某些Hypervisor(如KVM)来说,可以将物理交换机直接传递给虚拟机,称为以太网直通(Ethernet Pass-Through)。

下图显示了直通方式与共享vSwitch方式的对比情况,直通方式对物理资源的利用率不是最优的,因为它无法共享。

使用直通方式和vSwitch方式的网络连接:

如果将主机的物理接口直接映射并专用于该主机上运行的虚拟机,使得虚拟机能够直接非共享访问该网络接口,那么就称为以太网直通。 

但是,如果需要专用并保证带宽或者对吞吐量性能敏感(如承载数据路径流量的接口),那么就可以使用直通方式。 

9、虚拟机打包原理

磁盘映像格式主要用于存储已部署的虚拟机文件,表示正在运行的系统的磁盘空间。但是,有时也将其用于打包虚拟机,从而实现虚拟机的跨主机传送,因为这些文件包含了客户操作系统的全部文件系统以及在其中运行的所有应用程序。

目前业界提供了很多实用工具,可以将虚拟机文件从一种格式转换为另一种格式。因此,如果新主机使用了不同的Hypervisor,那么一般都可以利用这些工具转换成该Hypervisor所支持的格式。

另一种分发虚拟机的方式是将虚拟机的源镜像打包成ISO(International Organization for Standardization,国际标准化组织)文件格式。ISO文件系统格式最初是为光盘制定的,已经使用了很多年。ISO文件包含了整个光盘的镜像,所有的常见操作系统都支持多种工具,可以将ISO文件安装为虚拟磁盘,进而模拟成真实光盘。利用这个思路就可以打包和传输虚拟机镜像,此时的ISO镜像将包含完整的操作系统(客户虚拟机操作系统)并创建成可启动介质。

下图显示的ISO文件内容可以看出,该ISO文件包含了基本的引导信息以及相应的文件结构,以表示其所携带的镜像磁盘。

由于该ISO文件是单个文件,因此可以将该ISO文件从一台主机移植到另一台主机并进行安装。常见做法是让新创建的空白VM磁盘(可能创建为VMDK文件)从充当可引导安装驱动器的ISO镜像进行安装和引导,并在虚拟机的磁盘镜像(如VMVK File)上创建所需的文件结构,虚拟镜像文件有各种用途,而ISO文件则提供了一种移植机制。

虽然这些格式可以轻松地将虚拟机镜像从一台主机移植到另一台主机,但它们并不是移植虚拟机的最佳格式,因为这些格式都不包含需要在新位置分配给虚拟机的资源的类型信息。当利用VMDK等格式复制、共享或迁移客户操作系统时,就得单独传达该虚拟机所需要和期望部署的资源信息。

ISO格式也有相同的缺陷,因而利用ISO文件打包源文件以创建虚拟机时,得到的文件也不包含虚拟机所需资源的任何信息数据,这些信息都需要通过其他方式单独传达。

对于虚拟机的传输和共享操作来说,更适合的打包方法是将整个环境和资源需求细节都与虚拟机镜像打包在一起。虽然使用的仍然是前面描述的格式,但此时需要增加必需的附加信息并进行重新打包。

常见的可用格式如下:

1. OVF

OVF(Open Virtualization Format,开放虚拟化格式)是一种专门打包虚拟机镜像的开放格式,不依赖于任何特定Hypervisor。OVF弥补了VMDK、VHD以及QCOW2等运行时格式的不足,与这些格式不同,OVF包含了资源参数的信息,这些信息都是虚拟机所希望分配的资源参数。

OVF通常是一组文件,其中的.OVF文件包含的是部署信息,同时还有一个单独的镜像文件。OVF通常还包含一个具有所有文件MD5密钥的清单文件(.MF)。将这些OVF文件打包到一起(作为tar文件)之后,就称为OVA(Open Virtualization Appliance,开放虚拟化设备)。

利用Linux tar命令查看OVA文件内容的一种简单方法:

linux-host:~$ tar –tvf ubuntu32.ova
-rw------- someone/someone 13532 2018-11-12 09:54
Ubuntu-32bit-VM01.ovf
-rw------- someone/someone 1687790080 2018-11-12 10:01
Ubuntu-32bit-VM01-disk1.vmdk
-rw------- someone/someone 45909504 2018-11-12 10:05
Ubuntu-32bit-VM01-disk2.vmdk
-rw------- someone/someone   227 2018-11-12 10:05
Ubuntu-32bit-VM01.mf

2. Vagrant

Vagrant是一种基于标准模板设置和移植虚拟机环境的新方法。Vagrant将包含虚拟机的Vagrant Box(Box就是虚拟机模板)用作VMDK文件,同时还需要一个说明虚拟机设置方式的配置文件。Vagrant包装器可以利用该Box文件及其内容在不同的环境中快速创建虚拟机并将完成相应的使用设置。

在不用的主机之间移植Vagrant Box也非常简单,可以利用一组简单的命令来增加、删除或建立一个新的Vagrant环境。

10、虚拟化技术设计与实现思路

1. 虚拟化评估和设计流程

我们首先通过下图了解虚拟化评估和设计流程:

1)确定虚拟化范围

根据各单位业务与技术需求定义自己实行虚拟化的环境,或将各地的服务器集中到一个地方并定义虚拟化的目标,以及实施日程表和相关负责人。

需要与各部门讨论,了解各业务部门或各单位IT生产环境所面临的问题及需求,从而确定虚拟化环境并使用Word或方案记录。 

2)建立应用程序与服务清单

建立应用程序的与服务的兼容性和可用性需求,如处理器架构、处理器数量、内存需求、存储空间的需求及其他特殊硬件的配备,确认需要高可用性的应用程序及服务。

了解各业务部门或公司 IT 生产环境中正在运行的应用程序及服务,如结构化查询语言(Structured Query Language,SQL)或互联网信息服务(Internet Information Service,IIS)、管理域(Administrative Domain,AD)及动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)等,以确定是否需要虚拟化及是否需要高可用性等,并建立清单。

初步确认现有的硬件,如CPU数量等并建立备案,以备后期是否可以再利用。

3)确定资源需求

收集及分析相关统计资料,包括性能的历史资料、规格与需求和负载测试等。

工具及方法如下:

  1. 通过性能计数器来确定一段时间内的CPU等使用情况。
  2. 通过多媒体存取协议(Multimedia Access Protocol,MAP)工具测评硬件功能产生可供评估与规划的建议。
  3. 可通过可编程序阵列逻辑(Programmable Array Logic,PAL)工具分析WINDOWS系统的性能记录。

4)选择备份方法

确定备份的对象,如是针对个别的应用程序备份和虚拟机备份,还是备份物理主机,以及是存储还是应用程序备份的先后顺序。

备份确定要考虑到性能、停机时间、存储空间、恢复的难易程度与及其操作复杂度;同时要考虑资料损失的程序及备份间隔。

工具及方法如下:

  1. 通过Windows Server BackUp。
  2. 一些第三方备份专业工具,如Symantec\EMC等。
  3. Hyper-V管理控制台。

5)选择高可用性的方法

依据应用程序的特点来确定使用系统内置的网络负载平衡(Network Load Balancing,NLB)或故障转移群集,如网站和终端服务较适合采用NLB方式;数据库适合采用故障转移群集。

根据架构设计确定是在同一物理主机内进行NLB或是故障转移群集,还是在不同的物理主机。

工具及方法如下:

  1. 同一主机或不同主机的高可用性创建方法。
  2. 明确同一主机创建高可用性的意义。
  3. 明确网络与存储的高可用性。

6)总结应用程序的需求

确定虚拟机的硬件要求,然后决定应用程序安装在哪台虚拟机中?不同的应用应用程序能否在同一虚拟机中执行? 如何备份? 以及是否需要高可用性?

工具及方法如下:

  1. 结合物理主机硬件资源及网络架构来分析不同的应用程序对性能等的需求。
  2. 明确有关联的应用程序是否放在同一虚拟机上或同一台物理主机上?讨论如停业维护(MOSS)类的应用放置。
  3. 物理机到虚拟机(Physical Machine to Virtual Machine,P2V)进行现有的系统及应用的迁移。

7)选择物理主机的配置

在充分利用现有硬件设备的基础上考虑成本、性能、可用性、稳定性与管理性来确定是否需要采购新的硬件设备。

工具及方法如下:

  1. 结合步骤3来进行,使用如MAP工具来评测等。
  2. 可考虑资源池及应用程序放置虚拟机,以及虚拟机放置主机的问题。
  3. 硬件满足虚拟化辅助的条件(检测工具如SecurAble)。

8)确定物理主机的位置

考虑成本、管理性、安全性、性能与可用性确定主机放置在IDC机房、自建机房或租赁等。

工具及方法如下:

  1. 明确IDC机房选择需要参考的要点。
  2. 明确电力、恒温恒湿、边界网关协议(Border Gateway Protocol,BGP)、机柜、响应服务和可发展性。
  3. 明确自建机房要注意的事项。

9)对应虚拟机到物理主机

依据虚拟机中运行的操作系统及应用程序的工作负载来放置在对应的物理主机上。

需要了解物理主机的资源利用目标和硬件容量,避免将同是耗用系统资源的虚拟机放置在同一物理主机上。

工具及方法如下:

  1. 明确SCVMM 2008 R2的智能放置。
  2. 和步骤6结合了解动态资源调整等。
  3. 明确操作系统或应用的关联性。

10)确定物理主机备份方法

确认备份的对象是针对单台虚拟机中的操作系统或应用程序,还是针对物理主机备份整台虚拟机。

工具及方法如下:

  1. Windows Server Backup。
  2. Hyper-V自带功能(讨论快照能否作为备份)。
  3. 第三方专业的备份工具及存储设备。
  4. 用户数据处理和重复数据删除技术等。
  5. 结合存储架构明确一些厂商的备份机制。

11)设计高可用性

在步骤 5 的基础上确定是在虚拟机进行 NLB 或故障转移群集,还是在 Hyper-V 主机之间建立故障转移群集。或主机之间及虚拟机之间同时建立。

工具及方法如下:

  1. Hyper-V主机的故障转移群集。
  2. 动态迁移工作机制。
  3. 网络冗余,包括多网卡、光纤交换机或主机总线适配器(HBA)卡。

12)设计存储基础架构

明确使用直接附加存储(Direct Attached Storage,DAS)还是NAS或SAN等。

明确虚拟机使用动态磁盘还是固定大小的磁盘空间、虚拟机直接存取物理主机硬盘、存储空间及本身的备份机制选择(RAID5等)。

工具及方法如下:

  1. DAS、NAS和SAN。
  2. 光纤通道(Fibre Channel,FC)SAN、互联网小型计算机系统接口(Internet Small Computer System Interface,ISCSI)SAN,以及Windows 2008。
  3. 典型厂商提供的方案(如NetAppt等)。

13)设计网络基础架构

Hyper-V提供虚拟机的3种类型选择,以及VLAN功能,即隔离区(Demilitarized Zone,DMZ)、Intranet和Internet。

工具及方法如下:

  1. 明确选择Hyper-V的3种虚拟机网络类型。
  2. 考虑NLB及故障转移群集设计时的网络。

14)确认所有方法可行

验证以上步骤中的确定符合企业需求,确认应用程序需求及物理主机基础架构设计。

工具及方法如下:

  1. 讨论及求证。
  2. 做好文档记录和拓扑设计等。
  3. 确定职责、人员和时间等。

2. 虚拟化构建方法

数据中心的虚拟化建设应围绕虚拟化服务的生命周期,从服务的策略、服务的设计、服务的供应到服务的运维4个方面。

另一方面,虚拟化数据中心建设应该包括两个要点,一是应以业务要求为出发点,以服务为导向,建立按需提供满足服务水平要求的高可用性、高扩展性、高灵活度和管理简化的虚拟化技术架构;二是应该以如何规划、管理和运行有效的高质量的虚拟化体系为目标,建立虚拟化服务的管理和运维机制。

虚拟化构建方法如图所示:

整个虚拟化建设分为虚拟化服务策略制定、虚拟化服务设计、虚拟化服务迁移和虚拟化服务运维4个阶段,从虚拟化的业务目标策略驱动、组织协同、自动的虚拟化管理流程、虚拟化软件、虚拟化基础设施和人员技能6个层面同步展开。 

1)制定虚拟化服务策略

(1)了解虚拟化服务策略发现

  • 根据业务发展对IT的要求制定满足业务和IT发展要求的虚拟化发展策略目标。
  • 梳理现有IT运维管理流程。
  • 梳理现有基础架构和软硬件环境确定可进行虚拟化的潜在资产和对象。

(2)分析虚拟化服务策略

  • 对虚拟化可实现的业务和IT发展策略目标的适用性进行分析评估,确定虚拟化服务的策略目标。
  • 映射虚拟化的服务策略目标,对与虚拟化相关的各组织,以及业务单元的组织协同能力和现状进行分析,确定部门协同的成熟度并进行差距分析。
  • 映射虚拟化的服务策略目标,对当前运维和资源管理流程进行评估。
  • 映射虚拟化的服务策略目标,对当前的软硬件环境和基础设施进行评估,确定虚拟化对软硬件环境和基础设施的需求并进行成本和投资回报分析。
  • 映射虚拟化的服务策略目标,对岗位职能配置和人员的技能进行差距分析。

根据以上分析结果确定虚拟化服务的整体策略目标、策略远景、实现规划及演进路线。

2)虚拟化服务设计

(1)根据确定的虚拟化服务规划策略进行虚拟化服务详细设计,主要设计内容如下。

  • 满足业务等级协议(Service Level Agreement,SLA)虚拟化服务目录和参考架构。
  • 制定与虚拟化相关的各组织业务单元的组织协同和运行策略。
  • 根据运维和资源管理流程分析结果并参照虚拟化最佳实践设计、优化虚拟化运维管理和资源管理流程。
  • 根据软硬件环境和基础设施评估分析结果确定技术选型方案并针对确定的技术选型方案进行详细的技术架构设计。
  • 制定支撑虚拟化运维管理和服务交付的人员职业发展计划,以及不同角色岗位和职能人员的培训和技能培养计划。

(2)根据虚拟化服务详细设计建立测试环境进行原型测试

  • 确定可虚拟化试点的业务范围和IT范围。
  • 根据虚拟化技术架构、运行管理架构、组织架构和服务交付和管理架构的详细设计进行测试,并根据测试中发现的问题完善和优化详细设计方案。
  • 对支撑虚拟化运维管理和服务交付的人员进行与其职能相对应的培训。

3)虚拟化服务的迁移

(1)将经过测试的虚拟化技术架构发布到生产环境。

(2)根据虚拟化规划策略实现业务备选对象的P2V迁移。

(3)按照服务水平协议,参照虚拟化服务目录和参考架构,面向客户交付和管理虚拟化服务。

4)虚拟化服务的运行和维护

(1)建立虚拟化服务和资源管理的日常运行操作制度和流程,完善各种虚拟化运行手册和知识库。

(2)基于整个IT运维管理框架对虚拟化技术架构进行运行监控管理的统一集成、安全管理的统一集成,以及虚拟化资源的申请、供给及回收利用的整个生命周期管理。

(3)基于运维管理流程的统一运行维护管理。

3. 虚拟化技术的实现原理

虚拟化技术所涉及的专业领域和应用范围非常广泛,不同的应用原理也不同,当前虚拟化技术的实现原理主要有以下3个方面。

1)拆分

物理设备和链路或端口可以被拆分为多个逻辑单位,通过对逻辑单位内资源进行调用和处理网络虚拟化可以提高网络安全性和资源利用率,进而提升网络设计和和业务提供的灵活性。如某台计算机性能较高且工作负荷小,资源没有得到充分利用,利用拆分虚拟技术可以将这台计算机拆分为逻辑上的多台计算机同时供多个用户使用。

这样可以使此服务器的硬件资源得到充分的利用,如图所示。

2)聚合

资源聚合技术可以将多种物理设备、链路或端口等聚合为一个逻辑单位,并针对这个逻辑单位操作。这种方式可进一步扩展网元/链路的容量与功能,并提升网络可靠性、可用性和管理性。针对端口或链路的虚拟化技术有链路聚合(LAG)和VLAN等,针对网元的虚拟化技术大致可分为同类网元聚合与异类网元聚合两种。

相同类型的网元(如交换机和路由器等)聚合在一起属于同类网元聚合范畴,在紧耦合方式下同类聚合的网元之间共享控制平面和管理平面,数据平面则分布于各物理网元上。从而实现容量和功能扩展,典型技术实现包括设备集群等;在松耦合方式下同类聚合的网元之间存在主备关系,通常为特定目的而聚合,如基于虚路由器冗余协议(Virtual Router Redundancy Protocol,VRRP)的可靠性提升等。

异类网元聚合情况下不同类型网元(通常是路由器与交换机)之间存在从属关系,通过共享控制平面和管理平面提高网元覆盖范围。进而优化网络管理,典型的技术实现方式如Cisco。
当前有大量性能一般的计算机,但在气象预报和地质分析等领域数据计算往往需要性能极高的计算机。此时可应用虚拟聚合技术将大量性能一般的计算机聚合为一台计算机,以满足客户对整体性能的要求,如图所示。 

3)迁移

(1)将一台逻辑服务器中的闲置的一部分资源动态地加入到另一台逻辑服务器中提高其性能。

(2)通过网络将本地资源供远程计算机使用,如Windows下的共享目录,以及Linux下的NFS等和远程桌面等,如图所示。 

4)虚拟连接

虚拟连接技术通过增加报文开销的方式在需要数据传输的两端建立通道,该技术是在网际协议(Internet Protocol,IP)网络上开展广域互联业务的基础。典型的虚拟连接技术包括通用路由封装(Generic Routing Encapsulation,GRE)、二层隧道协议(Layer 2 Tunneling Protocol,L2TP)、标签交换路径(Label Switching Path,LSP)和伪线(Pseudo-Wire,PW)等隧道技术,在提升链路利用率、扩展性和业务安全性等方面具有重要意义。

虽然IP网络虚拟化技术千变万化,但目前所有主流IP网络虚拟化实现都是在上述3类虚拟化方式基础上的优化组合。以目前应用最广泛的3层多协议标签交换(Multiprotocol Label Switching,MPLS)VPN为例,一个典型的MPLS VPN组网由若干VPN路由转发实例(VPN Routing&Forwarding Instance,VRF)及其之间的LSP组成。

通常情况下,如果广域网络上的所有路由器都支持 MPLS,互联网服务提供商(Internet Service Provider,ISP)隧道的形成不存在任何问题。

当部分路由器不支持MPLS协议无法形成端到端LSP路径时,就需要利用GRE隧道代替LSP,这就是MPLS VPN over GRE的技术实现。

4. 虚拟化实现模式

虚拟化可以通过多种方法来证实它不是一个单独的实体,而是一组模式和技术的集合,如图所示。

这些技术提供了支持资源的逻辑表示所需的功能,以及通过标准接口将其呈现给这些资源的用户所需的功能,这些模式本身都是前面介绍过的各种不同虚拟形式的重复出现。

下面是在实现虚拟化时常常使用的一些模式和技术。

1)单一资源的多个逻辑表示

这种模式是虚拟化最广泛使用的模式之一,它只包含一种物理资源,但是向用户呈现的逻辑表示却仿佛包含多种资源一样。用户与这个虚拟资源交互时仿佛自己是唯一的用户,而不会考虑正在与其他用户一起共享资源,虚拟机就是这种模式的一个例子。

硬件物理分区和逻辑分区(如IBM System p、System z 和 System i 服务器)或软件产品(如 VMware、Microsoft Virtual Server 和 Xen)都实现了服务器的虚拟化。数据库视图的使用将数据与用户隔离开来,这样可以基于用户的角色和身份验证对资源进行访问,即使在所有用户同时访问相同的数据库时也不会出现任何问题。 

另外,网格使用虚拟化技术来管理网络上的数据,并在逻辑上将其作为一个系统呈现给用户。

下图所示的两个图形说明了服务器和信息的虚拟化:

2)多个资源的单一逻辑表示

这种模式包含多种组合资源,以便将这些资源表示为提供单一接口的单个逻辑表示形式,如图所示。 

在利用多个功能不太强大的资源来创建功能强大且丰富的虚拟资源时,这是一种非常有用的模式,存储虚拟化就是这种模式的一个例子。IBM 的 SAN Volume Controller 可以将多个存储卷组合在一起,将其呈现为一种大型的单一存储设备,用户并不知道自己的数据被分散到了多个磁盘中。

在服务器方面集群技术可以提供这样的服务,即用户只与一个系统(头节点)交互,而集群事实上可以包含很多处理器或节点。实际上,这就是从 IT 技术设施的角度看到的网格可以实现的功能。多种资源集都通过一个简化的用户界面呈现出来,如上图所示。

例如,用户使用的门户或应用程序使用的标准接口。从计算角度来看网格在接受任务请求,对任务负载进行调度和管理并在提供资源和返回结果的同时提供任务负载虚拟化的能力。

3)在多个资源之间提供单一逻辑表示 

这种模式包括一个以多个可用资源之一的形式表示的虚拟资源,虚拟资源会根据指定的条件来选择一个物理资源实现,如资源的利用、响应时间或临近程度,如图所示。

尽管这种模式与上一种模式非常类似,但是它们之间有一些细微的差别。

首先,每个物理资源都是一个完整的副本,它们不会在逻辑表示层上聚集在一起;其次,每个物理资源都可以提供逻辑表示所需要的所有功能,而不是像前一种模式那样只能提供部分功能(例如,前一种模式是文件的一部分,这种模式是文件的一个完全副本)。

这种模式的一个常见例子是使用应用程序容器来均衡任务负载,在将请求或事务提交给应用程序或服务时用户并不关心到底是几个容器中执行的哪一个应用程序的副本为请求或事务提供服务,而只是希望请求或事务得到处理。

一个具体的例子是IBM的WebSphere Application Server Extended Deployment;另外一个例子是文件虚拟化,其中为了满足冗余或性能的需要,可能为数据维护提供多个副本。当用户访问文件时,文件系统(如通用并行文件系统(GPFS))就会定位这些文件众多副本中的一个,但是用户并不知道正在使用的文件副本的具体位置。

4)单个资源的单一逻辑表示

这是用来表示单个资源的一种简单模式,就仿佛它是其他资源一样,如图所示。

启用 Web 的企业后台应用程序就是一个常见的例子,在这种情况下我们不修改后台的应用程序。而是创建一个前端来表示Web界面,它会映射到应用程序接口中。

这种模式允许通过对后台应用程序进行最少的修改(或根本不加任何修改)来重用一些基本的功能,也可以根据无法修改的组件使用相同的模式构建服务。

5)复合或分层虚拟化

这种模式是刚才介绍的一种或多种模式的组合,它使用物理资源来提供丰富的功能集。信息虚拟化是这种模式一个很好的例子,它提供了底层所需要的功能。这些功能用于管理资源,包含有关如何处理和使用信息的元数据,以及对信息进行处理操作的全局命名和引用。

IBM的WebSphere Information Server 就是这样一个例子,它提供了一些利用到异构资源和统一元数据的广泛连接来集成、丰富和传递信息所需的功能。有些体系架构或框架,如Open Grid Services Architecture(OGSA)或者Grid Computing Components实际上都是虚拟化的组合或虚拟化的不同层次。这个框架中的每一层都是更低一层的抽象,它为上层提供了一个定义好的接口。

随着在这个架构中的层次(或框架堆栈)的上升,底层提供的资源都组合成为更复杂的功能。例如,任务负载虚拟化和信息虚拟化就为已经虚拟化过的基础设施(系统、存储和网络)提供了更高级的虚拟化。

5. 创建虚拟化解决方案

虚拟化解决方案的创建者一般由服务提供商或者服务集成商提供,虚拟化的解决方案一般由虚拟镜像或者虚拟组件组成。这里我们来阐述一个虚拟化解决方案中的虚拟镜像和虚拟组件的创建过程。

1)创建虚拟镜像

(1)虚拟机的定义

虚拟机通过虚拟化软件来模拟具有完整硬件功能且运行在一个隔离环境中的逻辑计算机系统。

(2)虚拟镜像的定义

虚拟镜像是虚拟机的存储实体,它通常是一个或者多个文件。其中包括虚拟机的配置信息和磁盘数据,还有可能包含内存数据。

(3)虚拟镜像的分类

虚拟镜像有两种类型,一是在虚拟机停机状态下创建镜像;二是在虚拟机运行过程中通过快照生成镜像。

虚拟镜像的分类和创建过程如图所示:

创建虚拟机一般通过图形化的虚拟化管理平台中提供的功能来完成,通常需要设置虚拟机的CPU个数、内存大小和硬盘等相关硬件参数。设定虚拟机的基本参数配置后就可以选择在该虚拟机上运行的操作系统,我们通过创建一台该虚拟机上运行的操作系统实例完成虚拟机的安装。

最后关停虚拟机就是保存虚拟机的相关配置及状态,用于启动或恢复虚拟机的状态。

虚拟机的创建、安装和关停过程如图所示。

2)创建虚拟组件

用户创建虚拟镜像之后不能直接使用,因为用户使用镜像的目的是为了能将自己的应用、服务和解决方案运行在虚拟化平台中。由于虚拟镜像只是已经包含操作系统,而没有安装客户需要的一些基础的底层支持的中间件,因此这样的情况下用户使用会感觉不方便。

虚拟组件可以满足上面提出的一系列问题,该组件是将服务器虚拟化技术与计算机部件技术的结合的产物。计算机部件是具有特点、功能和有限配置能力的计算设备,如计算机硬件、硬盘和内存等。

虚拟组件是一个包括预安装和预配置的操作系统,并且中间件和应用的最小化的虚拟机。与虚拟镜像相比,虚拟组件包含的内容更丰富。当然内容多了之后,可能适应性就会有相应降低。虚拟组件包含中间件及用户的应用程序,一般来说虚拟镜像不包含此类内容。

虚拟镜像与虚拟组件之间的区别:

从图中可看出虚拟组件相比虚拟镜像更容易让用户使用,只需通过简单的配置即可完成应用程序的访问,而不需要再部署相应的应用程序。

虚拟化组件的一个常用的应用场景是软件的发布过程,传统的软件发布过程与采用虚拟化组件的过程的比较,如下图所示。 

从图中可以看出使用虚拟化组件可以降低软件的安装过程及配置过程,工作效率得到很大提升。目前已有很多虚拟组件已经在商业中使用,所以这是未来的一大趋势。

一般来说虚拟组件的创建过程如下图所示:

具体分如下几步。

(1)调用需求

设计人员需要针对不同的应用场景进行调研,需要分析出每个模块的形态及其之间的关系。并且还要确定虚拟组件的形态,如IBM的应用服务器可以根据配置形成多种形态。

(2)编制功能

编写配置脚本,并且测试编写的配置脚本是否符合预期的要求。测试的过程一般是先单元测试,最后完成集成测试。

(3)打包制作 

打包制作一般就是在创建虚拟镜像的基础上完成中间件及应用程序组件的安装,并且安装相应的配置脚本及元数据,使得当用户启动虚拟化组件时能够响应用户的配置并按照配置脚本所要求的规则执行。

3)部署虚拟化组件

虚拟化组件一般由不同厂商开发并提供,因此它们之间必定会有差异。如果没有统一的标准来规范,那么无疑会阻碍虚拟化组件之间的调用。

开放虚拟化格式(Open Virtualization Format,OVF)的提出无疑是场及时雨,分布式管理任务组(Distributed Management Task Force,DMTF)非盈利标准化组织制订了OVF为虚拟组件的包装及分发提供了开放、安全、可移植、高效和可扩展的描述格式。

OVF定义了如下3种类型关键格式。

  1. 虚拟组件模板。
  2. 解决方案模板的OVF描述文件(如下图所示),和虚拟组件的发布格式包。
  3. 虚拟组件的部署配置文件。

一个可能的解决方案由 3 个不同的虚拟组件进行相互协作完成,目前有很多工具可以自动完成多个虚拟组件的打包,并且能将这些虚拟组件导入到多种虚拟化管理平台上。例如,VMware公司的Vmware Studio及思杰(Citrix)公司的Kensho。

OVF 描述文件中记录了每个虚拟组件的内部的硬件及软件信息,前者如CUP、RAM、硬盘和虚拟硬盘等信息;后者包括一些软件的配置信息、中间件和应用程序等信息。

虚拟组件最终都以OVF包的形式发布,该包的扩展文件名为“.ova”,该包内包含的文件及其内容如下图所示。 

4)管理虚拟镜像

通过如上流程可以将虚拟镜像发布到仓库中供用户下载,仓库中一般存储很多镜像文件。通常来说这些镜像文件都会比较大,一般为1 GB~10几GB。如何管理这些虚拟镜像也是需要考虑的内容,一般来说管理虚拟镜像的3个主要的功能如下。

  1. 可以快速检索想要的镜像文件,如通过关键字匹配或者是按功能分类检索。
  2. 尽可能降低镜像占用的硬盘空间。
  3. 能够对镜像进行版本控制。

目前较成熟的做法是将镜像文件与镜像文件的元数据信息分开存储,在存储的过程中将一个镜像文件切成多个小的文件片。然后将这些文件片单独存储,这样可以提高仓库的存储使用率;同时,文件切片技术还对版本管理起到控制作用。

由于在版本管理过程中可能只有文件的部分切片发生过变更,因此只需要将这些发生过变化的保存成新的版本即可。这样就能提高磁盘的利用率,不用将原来磁盘中已有的文件再次存储或冗余存储。

文件分片管理和具体的过程,如图所示。 

5)迁移到虚拟化环境

在云计算普及之前,数据中心的绝大多数服务都部署在物理服务器中。随着虚拟化技术的提出,服务部署在虚拟机环境中。

在物理服务器中部署服务会由于随着物理设备的老化导致性能逐渐下降,因此服务的稳定性和可靠性都会受影响。这时部署在物理服务器中的服务在迁移时会面临很大风险,一方面是开发人员的流动性;另一方面是系统的兼容性,在原有模式上进行系统迁移时风险很大是因为服务对物理环境的依赖性造成的。 

随着虚拟化技术的成熟与发展,虚拟化的辅助技术P2V将服务器虚拟化技术迅速推广。顾名思义,P2V就是物理到虚拟环境,即将操作系统、应用程序和数据从物理计算机的运行环境迁移到虚拟环境中。

P2V的过程示例,如图所示。

至此,虚拟化的相关技术实现过程就结束完毕了。

通过虚拟化技术提高了资源的利用率,以及系统的整体性能,虚拟化技术的运用将会加速云计算的推广和应用,也会给新型创业型中小企业带来商机。

猜你喜欢

转载自blog.csdn.net/qq_35029061/article/details/128702151