开发者学堂课程【高校精品课-中国传媒大学 -云计算技术:虚拟化服务(服务器虚拟化、存储虚拟化)】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/8/detail/1259
虚拟化服务(服务器虚拟化、存储虚拟化)
内容介绍:
一、虚拟化的特点
二、服务器虚拟化概念
三、服务器虚拟化-底层实现
四、服务器虚拟化-虚拟机迁移
五、服务器虚拟化-隔离技术
六、服务器虚拟化-案例分析
一、虚拟化的特点
1、讲云计算概述的时候,讲过云计算的特点。下面讲虚拟化的特点,有分区、隔离、封装、独立。
虚拟化分区是把虚拟化层能够给多个虚拟机划分服务器资源的能力,每个虚拟机都可以单独运行一个操作系统。同时运行的操作系统可以是相同的,也能是不同的。在一台服务器上运行多个应用程序,每个操作系统能看到的是虚拟化层给他自己的虚拟硬件,比如 CPU、内存。每个虚拟化层觉得自己运行在专用的服务器上,所以就实现了分区。分区可以解决两方面的问题,一方面是划分资源的配额,防止虚拟化超配额使用资源。每个分区都是给一定的资源配额,不会过量,也不会过少,根
据需要分配。每个虚拟机会单独安装操作系统,彼此互不影响。
2、隔离
在讲虚拟化概述的时候讲虚拟化前和虚拟化后,
虚拟化前是左边,虚拟化后是右边,起到了隔离的特征。主要通过分区建立多个虚拟机,采用逻辑隔离的措施,能够防止相互影响。假如一个服务器崩溃或者故障,不会影响到同一服务器上的其他虚拟机,在使用自己的笔记本时,可能会遇到操作系统故障,应用程序崩溃等,这会让整个机器或一台服务器崩溃,在它之上的所有应用程序都会受到影响。但是安装了虚拟机之后,一个虚拟机的崩溃或者是故障,不会影响到同一个服务器上的其他的虚拟机。一个虚拟机当中的病毒,和其他虚拟
机相隔离,所以一个虚拟机上的病毒,也是不会影响到其它虚拟机上的病毒。
3、封装
比如说硬件配置、内存状态、磁盘状态、cpu 状态等,封装就是把它们储存在独立的物理硬件的一小组文件中。容器也是虚拟化的一个例子,容器类似于集装箱可以到处搬,因为它有封装的特征,这样只需要复制几个文件就可以随时随地复制、保
存或者移动虚拟机。
4、独立
虚拟机相对硬件独立,在虚拟机迁移会体现的非常明显。虚拟机迁移的时候,只需要把虚拟机的一些设备文件或配置文件,或者是磁盘文件复制到另外一台主机上运
行就可以了,不需要关心底层硬件类型是否兼容,这是相对硬件独立的特征。
二、服务器虚拟化概念
1、概念
将一个或多个物理服务器虚拟成多个逻辑上的服务器,集中管理,能跨越物理平台
不受限制。
2、服务器虚拟化发展史
1964年, IBM 开始尝试在大型机上实现虚拟化。
1972年,IBM 推出运行在大型机上的虚拟机。
1999年,VMware 推出了 X86架构的虚拟化产品。X86 架构是计算机语言的指令集,是英特尔公司首先发布的。X86 架构是微处理器执行的语言的指令集。
2002年,Xen被开源,VMware 是闭源的。
2006年,KVM 诞生。
2007年,惠普发布了针对惠普 UX 的 Integrated 虚拟机。
2008年,微软在WINDOWS server 20082 当中加入了 hypervisor, hypervisor 是硬件的虚拟化技术。英特尔公司也推出了它的硬件虚拟化技术
2008年,limits 容器 LXC 推出。
2010年,KVM虚拟化机制。
2011年,IBM、惠普和英特尔成立开放虚拟化测试联盟,加速KVM推广。
2013年,Docker 推出。
这是整个服务器虚拟化的发展史,主要是 CPU 内存、IO 的虚拟化。
3、服务器虚拟化技术有两个方向
一种是把一个物理的服务器虚拟成若干个独立的逻辑服务器,比如分区。本课程主
要关注这种虚拟化技术。
第二种是把若干分散的物理服务器虚拟为一个大的逻辑服务器,比如网格技术。
4、服务器虚拟化分类
(1)根据虚拟化层实现方式的不同分为寄居虚拟化和裸机虚拟化两种。
根据解决X86体系缺陷的不同方法,分为全虚拟化、半虚拟化和硬件虚拟化三类。
第一种分类,根据虚拟化层实现的方式不同,寄居虚拟化和裸机虚拟化。
①寄居虚拟化
寄居虚拟化的虚拟化层称为虚拟机监控器,也可以称为虚拟机的模拟器(VMM)。VMM 安装在已有的主机操作系统上,最底层是物理机,是宿主操作系统,VMM 是安装在宿主机的操作系统上。通过宿主操作系统来管理和访问各类资源(如文件和各类IO设备)。
②裸机虚拟化
直接把 VMM 安装在服务器硬件设备上,没有宿主机操作系统。
本质上 VMM 也可以认为是一个操作系统,一般称为 Hypervisor,这个操作系统是轻量级的操作系统。
Hypervisor 实现从虚拟资源到物理资源的映射。直接安装在裸机上的虚拟化。
③通过下图比较看它们的优缺点,操作系统虚拟化和混合虚拟化就不再仔细讲解。
寄居虚拟化优点:简单、易于实现。因为有宿主操作系统。缺点:安装和运行应用程序依赖于主机操作系统对设备的支持。管理开销较大,性能损耗大。
裸金属虚拟化优点:虚拟机不依赖于操作系统,支持多种操作系统,多种应用。但是 Hypervisor 层是一个轻量级的操作系统,所以虚拟层内核开发难度大,这就是
它的缺点。
寄居虚拟化有厂商 VMware workstation 和 Virtualbox,裸金属的虚拟化是 VMware ESXServer 和 Citrix XenServer。操作系统虚拟化是 Virtuozoo、
Docker、LXC,Redhat KVM、华为 FusionSphere 使用的都是混合虚拟化。
(2)还有一种分类方式是为了解决X86体积缺陷的方法分为全虚拟化,半虚拟化和硬件虚拟化。
①全虚拟化
在X86就架构里面,CPU 被分成四个环,分别是 Ring0、Ring1、Ring2、Ring3,
其中 Ring0 的权限最高,一般运行的是特权指令,操作和管理关键资源的指令。
比如开启摄像头这样的指令就是特权指令,只有在 Ring0 级别上才能运行的指令。Ring1 和 Ring2 上运行的指令很少。还有一种除了特权指令之外,主机操作系统发出的指令还有普通指令。普通指令在普通的权限级别上就能运行,在 Ring3 级别上就能运行。但是在虚拟化环境中,有一种特殊指令(特权指令)也被称为敏感指令,在虚拟化当中有两种机制,这就是全虚拟化方案,用软件实现的虚拟化。
②两种机制
a、一种是特权解除,看下图
只有 host OS 在 Ring0 级别上,就是宿主机操作系统才能执行这个特权指令,VMM 和 Guest OS 应用都是运行在 Ring3 级别上的。在 Guest OS 中,执行系统内核的特权指令的时候,客户机的操作系统或者是称为虚拟机的操作系统,执行特权指令(敏感指令),一般都会触发异常。在触发了异常之后,这些异常就会被 VMM 捕获,再去找 Host OS,Host OS 再去找硬件执行。客户机的操作系统执行敏感指令之后,这些敏感指令会被 VMM 捕获,再由 VMM 将这些特权指令进行虚拟化成为指针对虚拟 CPU 起作用的虚拟特权指令。
缺点是会存在一部分特权指令运行在 Ring1 的用户态上,而这些运行在 Ring1 上的特权指令并不会触发异常然后再被 VMM 捕获。
b、所以出现了另外一种机制:陷入模拟(二进制翻译),就是 VMM 会对 GuestOS 中所有的二进制代码进行扫描,一旦发现 GuestOS 执行的二进制代码中包含有运行在用户态上的特权指令二进制代码时,就会将这些二进制代码翻译成虚拟特权指令二进制代码强制的触发异常。这就是陷入模拟,首先会对 GuestOS 当中所以的二进制代码进行扫描,发现异常,会把这些翻译成为特权指令的二进制代
码触发异常,这就是二进制翻译。
一般就这两种机制,特权解除和陷入模拟。VMware 使用二进制翻译的全虚拟化方
案已经成为全虚拟化事实上的标准。
③优点是不修改虚拟机操作系统,虚拟机的可移植性和兼容性较强,支持广泛的操作系统;缺点是运行时需要翻译 Guest OS 二进制代码,性能损耗较大,并且引入了新的复杂性,导致虚拟机监视器(VMM)开发难度较大。
④半虚拟化
a、Hypervisor 只模拟部分底层硬件,因此客户机操作系统不做修改是无法在虚拟机中运行的。半虚拟化通过修改客户机的操作系统内核,把不可虚拟化的指令替换为直接与虚拟化层交互的超级调用(hypercalls)。
b、优点是通过虚拟机系统和 hypervisor 的交互,可改善性能和效率;缺点是只支持修改开源的操作系统,如果 Guest OS 是 WINDOWS 系统,windows 系统是闭源的,所以不能实现半虚拟化,只能修改开源操作系统,比如 Linux。此外,被修改过的虚拟机操作系统 Guest OS 可移植性较差。开源的 Xen 项目是半虚拟化的一个例子,它使用一个经过修改的 Linux 内核来虚拟化处理器。
c、开源的 Xen 就是半虚拟化的例子,它使用一个经过修改的 Linux内核来虚拟化处理器。需要修改客户机的操作内核,其实修改的就是特权指令。因为 X86 系统有虚拟化漏洞,所以半虚拟化直接去 Guest OS 上把特权指令修改,让他不能访问 Ring0 级别的 CPU。
⑤硬件辅助虚拟化
WINDOWS 硬件辅助虚拟化叫 hypervisor,英特尔的硬件辅助虚拟化叫 VT-x,英特尔是生产处理器的公司,在处理器内部形成了新的 CPU 执行状态,一种是根模式(Root Mode),还有一种是非根模式(Non-Root Mode)。看下图
Guest OS 运行在非根模式 Ring0 的核心态中,这表明 Guest OS 能够直接执行特权指令,而不再需要特权解除和陷入模拟机制。为什么有根模式和非根模式?Guest OS 一旦运行的是敏感指令,这个时候就会切换到根模式,由一个叫 VMCS 部件监控;当这个敏感指令执行完之后,再切换到非根模式执行普通的指令,这是英特尔的 VT-x硬件辅助虚拟化。
(3)下图是由 X86 结构的缺陷形成的三种虚拟化技术,
全虚拟化和半虚拟化一般都是软件虚拟化,用软件来实现。
全虚拟化特点:VMM 向虚拟机模拟出和真实硬件完全相同的硬件环境;半虚拟化特点:VMM 需要修改 Guest OS 的特权指令;硬件虚拟化的 VMM 需要硬件的协
助才能完成对硬件资源的虚拟。
全虚拟化的优点不用修改 Guest OS 内核;半虚拟化性能高,能达到与原始系统相近的性能;虚拟化硬件也不需要修改 Guest OS 内核。全虚拟化缺点:虚拟化平台
给处理器带来的开销;半虚拟化必须修改 Guest OS;硬件虚拟化需要硬件支持。
全虚拟化代表产品有 VMware 和 Virtual PC;半虚拟化是 Xen 和 Denali;硬件虚拟
化是 intel-VT 和 AMD-V。
三、服务器虚拟化-底层实现
底层实现有 CPU 虚拟化、内存虚拟化、IO 设备虚拟化,这是服务器的虚拟化。
1、CPU 虚拟化
CPU 虚拟化技术是把物理的 CPU 抽象成虚拟的 CPU。
一个物理的 CPU 只能运行一个虚拟的 CPU 指令,每个客户的操作系统是可以使用一个或多个虚拟 CPU 的,在各个操作系统之间,虚拟 CPU 运行是互相隔离,互不影响的。CPU 虚拟化有两个关键问题,虚拟 CPU 的正确运行是要保证虚拟机指令正确运行,现有的实现技术包括模拟执行和监控执行。监控 Guest OS 是否执行了敏感指令,如果执行了就要模拟执行。另外一个问题是调度问题,调度问题是指 VMM 决定当前哪个虚拟 CPU 在物理 CPU 上运行,要保证隔离性、公平性和性能。
2、内存虚拟化
内存虚拟化是把物理内存统一管理,包装成多个虚拟的物理内存提供给若干虚拟机使用,每个虚拟机拥有各自独立的内存空间。
虚拟内存管理包括三种地址,物理地址就是物理机的地址,Host Machine的地址;虚拟地址是虚拟机上的地址,客户端看到的地址;它们两个中间有一个机器地址,
保证公平和性能。
3、IO 设备虚拟化
IO 设备虚拟化技术把真实的设备统一管理起来,这几个虚拟化都是一样,内存是把物理内存统一管理,IO 设备是把真实的设备统一管理起来,包装成多个虚拟设备给若干个虚拟机使用,响应每个虚拟机的设备访问请求和 IO 请求。由 VMM 进行管
理,IO 虚拟化也是由全虚拟化、半虚拟化和软件虚拟化三种思路。
目前主流的 IO 设备虚拟化都是通过软件的方式来实现的,就是通过软件模拟来实现。
四、服务器虚拟化-虚拟机迁移
1、虚拟机有一个特点是封装,封装便于虚拟机迁移。虚拟机迁移是将虚拟机实例从源宿主机迁移到目标宿主机,并且在目标宿主机上能够将虚拟机运行状态恢复到其在迁移之前相同的状态,以便能够继续完成应用程序的任务。从虚拟机迁移的源与目的地角度可分为物理机到虚拟机的迁移(P2V)、虚拟机到虚拟机的迁移(V2V)、虚拟机到物理机的迁移(V2P)。
2、实时迁移(LiveMigration)就是保持虚拟机运行的同时,把他从一个计算机迁移到另一个计算机,并且在目的计算机恢复运行的技术。有两种情况下会用到实时迁移,一种是云计算中心的物理服务器负载经常处于动态变化中,当一台物理服务器负载过大时,若此刻不可能提供额外的物理服务器,管理员可以将其上面的虚拟机迁移到其他服务器,达到负载平衡。还有一种情况是云计算中心的物理服务器有时候需要定期进行升级维护,当升级维护服务器时,管理员可以将其上面的虚拟机
迁移到其他服务器等升级维护完成之后,再把虚拟机迁移回来。
3、下图是虚拟机迁移的示意图,
虚拟机迁移的时候,它的状态和资源都是需要迁移的,需要把源宿主机迁移到目标宿主机,比如说磁盘、内存、CPU 状态、IO 的设备等都是需要传送过去的。而且内存的迁移难度是最高的,因为内存里面数据量比较大,而且信息非常重要;磁盘的迁移是最简单的,一般是通过共享的方式,不是真正的方式来迁移。
4、虚拟机到虚拟机的迁移
迁移有六个步骤,
第一步预迁移(Pre-Migration),把源计算机称为主机a(host a),目的计算机记为主机b(host b),预迁移是主机a打算迁移其上的一个虚拟机 VM,首先要选
择一个目的计算机作为迁移的对象,选好之后进入第二步,预订资源。
预订资源(Reservation)是主机a向主机b发起迁移请求,确定b是否有这个资源,如果有就预订这些资源;如果没有继续在主机a当中运行,可以选择其它计算机作为目的计算机。
第三步,预复制(InterativePre-Copy)。这个阶段 VM 仍然运行,主机a上的虚拟机仍然是运行的,主机a是以迭代的方式把 VM 的内存页复制到主机b上。在第一轮的迭代当中,所有的页都要从a传送到b;在第二轮之后,只复制前一轮传送当中被修改过的页面。
第四步,停机复制(Stop-and-Copy)。停止主机a上的 VM,把它的网络连接到b,这个时候 CPU 状态和前一轮当中修改过页都会在这个步骤被传送过去。最后,主机a和主机b就会有一样的 VM 印象。
第五步,提交(Commitment)。主机b会通知主机a已经成功收到了 VM 印象,主机a会对消息进行确认,确认之后就可以销毁或者是抛弃上面的 VM。
第六步,启动(Activation)。起动迁移到b上的 VM,这是迁移的六个步骤。
5、迁移的内容
(1)内存的迁移(最困难的部分)
①内存迁移分为三个阶段,第一阶段是 push 阶段。刚才讲解的六个步骤,适用于各个迁移。push 阶段在 VM 运行的同时,把它的内存页面通过网络复制到目的机器上,被修改的页是需要重传的。push 阶段是刚才讲的六个步骤中的预复制阶段,要把内存页通过网络复制到目的页,第一轮迭代,把所有的页从a传到b,之后的迭代只需要复制前一轮中迭代中被修改的页面,所以是预复制。
②第二阶段是 Stop-and-Copy 阶段,这个阶段停止工作,把剩下的页面复制到目的计算机上,然后在目的机上启动新的 VM,对应的是步骤四,停机复制。步骤一到步骤六是整个虚拟机的迁移步骤,内存的迁移可以对应步骤三、步骤四。
③第三阶段,pull 阶段。pull 阶段是新的虚拟机运行过程当中,如果访问到未被复制的页面,会发现页错误,会从原来的 VM 处把页复制过来。这个时候机器a上面的 VM 还是在工作着,所以才能把原来的 VM 把页复制过来。实际上,迁移内存没有必要同时包含上述三个阶段,目前大部分的迁移策略只包含其中一个或者两个阶段。
(2)迁移方案
①迁移方案有 Stop-and-Copy,静态迁移,需要 VM 停止工作,就是把机器a的 VM 暂停,然后把内存页复制给目的计算机,最后启动新的 VM。这种方法简单且总的迁移时间较短,但是停机时间是无法接受的。停机时间和 VM 物理内存大小是成正比的,如果 VM 内存很大,则它总的迁移时间会很长,所以这并不是一个特别理想的方案。
②第二种迁移方案是 Stop-and-Copy 和 pull 两种方案相结合。首先是在 Stop-and-Copy 阶段把关键的、必要的复制到目的机器上,然后在目的机器上启动 VM,目的机器的页只有在需要的时候才复制过去。这种方案总的停机时间很短,Stop-and-Copy 阶段只是把关键的、必要的复制过去,大部分内存里面的东西还是没有复制过去,所以停机时间较短,但是总的迁移时间很长。因为剩下的页需要在使用的时候复制过去,而且在 pull 阶段复制会造成性能下降,因为有很多页都要在 pull 阶段复制,这样就会造成性能下降。
③第三种迁移方案是 push 和 Stop-and-Copy 阶段结合,就是第一阶段和第二阶段相结合。Xen 采用的就是这种方案,首先采用预复制的方法,把内存页以迭代的方式复制到目的计算机上,第一轮复制所有的页,第二轮只复制在第一轮迭代当中修改过的页;第三轮只复制在第二轮当中修改过的页。迭代到一定次数,预复制阶段会结束,就会进入到 Stop-and-Copy 阶段,这个时候在停机,把剩下的没有复制过去的全复制过去,平衡了停机时间和总的迁移时间的矛盾,是一种理想的实时迁移内存的方法。但是需要有一种算法能够测定工作集,测算在 push 阶段什么时候迭代停止,需要有一种算法针对改动频繁的页,需要有一种算法能够测定工作集,以免反复重传,这种方法可能会占用大量的网络带宽,对其他服务造成影响,这是几种迁移方法的比较。
(3)网络资源的迁移
网络也是比较重要的一部分,VM 的所有网络设备、TCP 的连接状态和 IP 地址等都是需要一起迁移的。在局域网内,可以通过发送 ARP 的重定向包,将 VM 的 IP 地址与目的机器的 MAC 地址相绑定,之后的所有包就可以发送到目的机器上。
(4)存储设备的迁移
迁移存储设备的最大障碍在于需要占用大量时间和网络带宽,通常的解决办法是以
共享的方式共享数据和文件系统,而非真正迁移。
目前大多数集群使用 NAS(Network Attached Storage,网络连接存储)作为存储设
备共享数据。
NAS实际上是一个带有瘦服务器的存储设备,其作用类似于一个专用的文件服务
器。
在局域网环境下,NAS已经完全可以实现异构平台之间,如NT、UNIX等的数据级
共享。
基于以上的考虑,Xen并没有实现存储设备的迁移,实时迁移的对象必须共享文件
系统。
五、服务器虚拟化-隔离技术
1、虚拟机隔离是指虚拟机之间在没有授权许可的情况下,互相之间不可通信、不可联系的一种技术。可以从软件角度、硬件角度、网络角度来说明。软件角度是互相隔离的虚拟机之间保持独立,如同一个完整的计算机;硬件角度是被隔离的虚拟机相当于一台物理机,有自己的CPU、内存、硬盘、IO等,它与宿主机之间保持互相独立的状态;网络角度是被隔离的虚拟机如同物理机一样,既可以对外提供网络服务,也一样可以从外界接受网络服务。
2、虚拟机隔离机制
√网络隔离
√构建虚拟机安全文件防护网
√基于访问控制的逻辑隔离机制
√通过硬件虚拟,让每个虚拟机无法突破虚拟机管理器给出的资源限制
√硬件提供的内存和保护机制
√进程地址空间的保护机制、IP地址隔离
3、内存隔离
(1)MMU 是 Memory Management Unit(内存管理单元),是 CPU 用来管理虚拟存储器、物理存储器的一个控制线路。MMU 的功能有四个,管理虚拟存储器的控制路线,管理物理存储器的控制路线,负责将虚拟地址映射为物理地址,提供硬件机制的内存访问授权。
(2)内存虚拟化的时候讲了虚拟内存管理有三种地址,虚拟地址、物理地址、机器地址。内存隔离里面的机器内存就是刚才说的物理地址,虚拟内存就是虚拟地址。中间是伪物理内存,
实际的地址是机器地址,虚拟机上的用户看到的是虚拟地址,中间是伪物理内存把虚拟内存和机器内存联系起来,使得用户看到的地址都可以是从零开始的,但实际上,机器内存上并不是这样的地址,这是它们之间的映射关系。虚拟内存映射给伪物理内存,伪物理内存映射给机器内存。
(3)VMM 使用分段和分页机制对自身物理内存进行保护,X86 结构提供了支持分段机制的虚拟内存,这能够提供另一种形式的特权级分离。每个段包含基址、段限、属性位,基址和虚拟地址相加形成线性地址;段限决定了这个段中所能访问的线性空间的长度;属性位则标记了该段是否可读写、可执行,是代码段还是数据段等。
4、网络隔离
(1)网络隔离的目标是确保把有害的攻击隔离,在可信网络之外和保证可信网络内部信息不外泄的前提下,完成网问数据的安全交换。网络隔离的关键是在于系统对通信数据的控制,主要通过不可路由的协议来完成网问的数据交换。安全要素主要包括机密性、完整性、可用性、可控性、抗抵性,这些安全要素需要安全机制来实现,比如访问控、身份认证、加密签名。
(2)通过不可路由的协议,彻底阻断了网络间的直接 TCP/IP 连接,能够对通信的双方内容、过程进行多种的安全保护机制,通过这种方式保障网间的数据交换安全、可控,杜绝了由于操作系统和网络协议自身漏洞带来的安全风险。网络隔离实现原理通过专用通信设备、专有安全协议、加密验证机制、应用层数据提取和鉴别认证技术来实现不同安全级别网络之间的数据交换,从而实现彻底的网络隔离。
六、服务器虚拟化-案例分析
1、VMware 公司推出了面向云计算的一系列产品和解决方案。
VMware 提供了云的基础架构及管理、云应用平台、终端用户计算等,这些层次上的解决方案,主要给企业级组织机构的服务器虚拟化技术,使用它的服务器虚拟化技术可以实现传统的数据中心到云计算环境的转变。他的两种迁移工具较为主流,一个是虚拟机迁移工具(VMotion),还有一个是存储迁移工具(VMware Storage VMotion)。
2、VMotion
VMotion是VMware用于在数据中心的服务器之间进行虚拟机迁移的技术。虚拟机
迁移过程中主要采用三项技术:
①将虚拟机状信息压缩存储在共享存储器的文件中
②将虚拟机的动态内存和执行状态通过高速网络在源ESX服务器和目标ESX服务器之间快速传输
③虚拟化网络以确保在迁移后虚拟机的网络身份和连接能保备
3、VMware Storage VMotion
VMvere Storago VMotion用于实时迁移虚拟机磁盘文件,以便满足对虚拟机磁盘文件的升级、维护和备份。原理是存储之间的转移,核心技术是磁盘快照、REDO
记录、父/子磁盘关系、快照整合这些技术。
本节课主要讲了服务器虚拟化的概念、服务器虚拟化的底层实现、虚拟机迁移、隔
离技术、案例分析。