文章目录
- 虚拟化技术
- 什么是虚拟化
- 服务器虚拟化
- cpu的虚拟化
- 内存虚拟化管理
- 硬盘的虚拟化
- 网络虚拟化
- IO虚拟化
- Intel虚拟化技术
- 主流的虚拟化技术
- 虚拟化技术对比
- Xen
- KVM
- Hyper-V
- VMware ESX/ESXi
- 虚拟化服务平台
- Libvirt
- 基于KVM的虚拟化服务平台
虚拟化技术
什么是虚拟化
虚拟化是云计算的基础。简单来说,虚拟化就是在一台物理服务器上,运行多台“虚拟服务器”。这种虚拟服务器,也叫虚拟机(VM,Virtual Machine)。从表面来看,这些虚拟机都是独立的服务器,但实际上,它们共享物理服务器的CPU、内存、硬件、网卡等资源。
物理机,通常称为“宿主机(Host)”。虚拟机,则称为“客户机(Guest)”。
谁来完成物理资源虚拟化的工作呢?就是大名鼎鼎的 Hypervisor 。
Hypervisor,汉译过来是“超级监督者”,也叫做VMM(Virtual Machine Monitor,虚拟机监视器)。它不是一款具体的软件,而是一类软件的统称。像VMware、KVM、Xen、Virtual Box,都属于Hypervisor。
Hypervisor分为两大类:
- Type-1(Baremetal Hypervisor, 全虚拟化:Full-Virtualization),hypervisor直接运行在物理机之上。虚拟机运行在hypervisor之上。不需要对客户机操作系统或者应用程序进行修改(客户机操作系统或者应用程序像往常一样运行,意识不到虚拟环境的存在)。
- Type-2(Hosted Hypervisor,半虚拟化:Para-Virtualization),物理机上安装正常的操作系统(例如Linux或Windows),然后在正常操作系统上安装hypervisor,生成和管理虚拟机。半虚拟化需要对运行在虚拟机上的客户机操作系统进行修改(这些客户机操作系统会意识到它们运行在虚拟环境里)并提供相近的性能。
服务器虚拟化
SaaS: Software-as-a-Service(软件即服务)
PaaS: Platform-as-a-Service(平台即服务)
IaaS: Infrastructure-as-a-Service(基础设施即服务)
服务器的虚拟化是IaaS层的虚拟化。
cpu的虚拟化
MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。
硬件级物理cup虚拟化技术
- 英特尔硬件虚拟化技术interl-VT
- AMD硬件虚拟化技术AMD-V
内存虚拟化管理
硬件级内存虚拟化,硬件级物理内存映射到虚拟机
- 英特尔硬件虚拟化技术EPT,Extended Page Table
- AMD硬件虚拟化技术NTP,Nested Page Table
硬盘的虚拟化
虚拟机如何使用硬盘的空间:虚拟机在物理硬盘上划分一个文件来使用,此文件也是靠宿主机通过文件系统将磁盘分区后,并创建文件系统后,分给虚拟机一个文件的大小的空间。在宿主机上表现的就是一个文件,而在虚拟机上表现的就是一块硬盘。所以还需要用软件的方式模拟一个适配器,将此文件,模拟成硬盘。
网络虚拟化
用软件的方式给每个虚拟机虚拟一块网卡和MAC地址,当通信时使用同一块物理网卡,网卡通讯有排队方式,在同一台物理网卡上,排队执行任务。(将物理网卡设为混杂模式;无论是不是发向本机物理网卡的内容都给与接收);此时将物理网卡也虚拟化一个MAC地址,把物理网卡当作交换机来使用。
IO虚拟化
I/O全虚拟化技术
通过VMM模拟I/O设备(磁盘和网卡等)实现虚拟化。
Guest OS所能看到就是一组统一的I/O设备。VMM截获Guest OS对I/O设备的访问请求,然后通过软件模拟真实的硬件。这种方式对Guest而言非常透明,无需考虑底层硬件的情况。
I/O半虚拟化技术
通过前端(Front-End)/后端(Back-End)模拟实现虚拟化。
Guest OS中的驱动程序为前端,VMM提供的与Guest通信的驱动程序为后端。前端驱动将Guest OS的请求通过与VMM间的特殊通信机制发送给VMM的后端驱动,后端驱动在处理完请求后再发送给物理驱动。
I/O透传技术
设备透传就是向一个特定客户操作系统提供一种设备隔离,对于性能而言,使用设备透传可以获得近乎本机的性能。对于某些网络应用程序(或那些拥有高磁盘 I/O 的应用程序)来说,这种技术简直是完美的。这些网络应用程序没有采用虚拟化,原因是穿过管理程序(达到管理程序中的驱动程序或从管理程序到用户空间模拟)会导致竞争和性能降低。但是,当这些设备不能被共享时,也可以将它们分配到特定的客户机中。例如,如果一个系统包含多个视频适配器,则那些适配器可以被传递到特定的客户域中。
Intel虚拟化技术
Intel虚拟化技术其实可以大致分为三类:
- 第一类是处理器相关的,称为VT-x,是实现处理器虚拟化的硬件扩展,这也是硬件虚拟化的基础;
- 第二类是芯片组相关的,成为VT-d,是从芯片组的层面为虚拟化提供必要支持,通过它,可以实现诸如直接分配物理设备给客户机的功能;
- 第三类是输入输出设备相关的,主要目的是通过定义新的输入输出协议,使新一代的输入输出设备可以更好地支持虚拟化环境下的工作,比如Intel网卡自有的VMDq技术和PCI组织定义的单根设备虚拟化协议(SR-IOV)。
主流的虚拟化技术
主流的技术框架有计有开源的Xen、KVM,微软的Hyper-V、VMware的ESX/ESXi等。
虚拟化技术对比
虚拟化技术 | KVM | Xen | Hyper-v | VMware ESX/ESXi |
---|---|---|---|---|
领导厂家 | 红帽 | 思杰(Citrix) | 微软 | VMware |
虚拟化种类 | 全虚拟化 | 全/半虚拟化 | 全/半虚拟化 | 全虚拟化 |
是否开源 | 是 | 是 | 否 | 否 |
CPU与内存虚拟化 | KVM内核实现 | Xen内核实现 | Hyper-V内核实现 | ESXi内核实现 |
磁盘/网络IO虚拟化 | QEMU实现 | 由Domain0(主机上启动的第一个管理VM)实现 | 根分区 | 虚拟化内核实现 |
虚拟化调度与管理 | Linux进程管理 | 由Domain0(主机上启动的第一个管理VM)实现 | Hyper-V内核 +根分区 | 虚拟化内核实现 |
硬件要求 | 广泛 | 广泛 | 1.CPU支持AMD-V或Intel-VT;2.CPU支持64位运算;3.CPU支持DEP技术 | 很少,只支持主流服务器厂家 |
Windows 支持度 | 一般 | 良好 | 良好,win8以上最好 | 良好 |
Linux支持度 | 最好 | 良好 | 良好,内核已内置显卡驱动 | 良好,内核已内置显卡驱动 |
Vmware或Hyper-v虚拟windows系统,不管是虚拟化软件本身,还是其中的子系统,都要支付许可费用。
Xen或KVM虚拟windows,其中的子系统要支付许可费用
Xen
Xen是由剑桥大学计算机实验室开发的一个开源项目,是一个开源的可直接运行于硬件层之上的虚拟化软件,它属于type-I型虚拟化系统。
Xen早期是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。
Xen仅对CPU和Memory直接接管,而其它IO硬件驱动则由其上运行的第一个虚拟机来提供支持,它能够在计算机硬件上并发的运行多个客户操作系统(Guest OS)。支持x86、x86-64、安腾( Itanium)、Power PC和ARM多种处理器,因此Xen可以在大量的计算设备上运行,目前Xen支持Linux、NetBSD、FreeBSD、Solaris、 Windows和其他常用的操作系统作为客户操作系统在其管理程序上运行。
在Xen环境中,主要有两个组成部分。一个是虚拟机监控器(VMM),也叫hypervisor。Hypervisor层在硬件与虚拟机之间,是必须最先载入到硬件的第一层。Hypervisor载入后,就可以部署虚拟机了。在Xen中,虚拟机叫做“domain”。在这些虚拟机中,其中一个扮演着很重要的角色,就是domain0,具有很高的特权。通常,在任何虚拟机之前安装的操作系统才有这种特权。
Domain0要负责一些专门的工作。由于hypervisor中不包含任何与硬件对话的驱动,也没有与管理员对话的接口,这些驱动就由domain0来提供了。通过domain0,管理员可以利用一些Xen工具来创建其它虚拟机(Xen术语叫domainU)。这些domainU也叫无特权domain。这是因为在基于i386的CPU架构中,它们绝不会享有最高优先级,只有domain0才可以。
在domain0中,还会载入一个xend进程。这个进程会管理所有其它虚拟机,并提供这些虚拟机控制台的访问。在创建虚拟机时,管理员使用配置程序与domain0直接对话。
KVM
KVM是Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM已成为学术界的主流VMM之一。
KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。
KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。
KVM基本结构
- KVM驱动,现在已经是linux kernel的一个模块了。其主要负责虚拟机的创建,虚拟内存的分配,VCPU寄存器的读写以及VCPU的运行。
- QEMU,用于模拟虚拟机的用户空间组件,提供I/O设备模型,访问外设的途径。
Hyper-V
Hyper-V 是微软提出的一种系统管理程序虚拟化技术,采用微内核的架构,兼顾了安全性和性能的要求。Hyper-V 底层的 Hypervisor 运行在最高的特权级别下,微软将其称为 ring -1(而 Intel 则将其称为 root mode),而虚机的 OS 内核和驱动运行在 ring 0,应用程序运行在 ring 3 下,这种架构就不需要采用复杂的 BT(二进制特权指令翻译)技术,可以进一步提高安全性。从架构上讲 Hyper-V 只有“硬件-Hyper-V-虚拟机”三层,本身非常小巧,代码简单,且不包含任何第三方驱动,所以安全可靠、执行效率高,能充分利用硬件资源,使虚拟机系统性能更接近真实系统性能。
Hyper-V 支持按分区隔离。分区是虚拟机监控程序支持的逻辑隔离单元,其中将会运行操作系统。Microsoft 虚拟机监控程序必须至少具有一个运行 Windows 的父分区或根分区,用于运行 64 位版本的 Windows Server 2008 操作系统。虚拟化管理堆栈在父分区中运行,并且可以直接访问硬件设备。随后,根分区会创建子分区用于承载来宾操作系统。根分区使用虚拟化调用应用程序编程接口 (API) 来创建子分区。
分区对物理处理器没有访问权限,也不能处理处理器中断。相反,它们具有处理器的虚拟视图,并运行于每个来宾分区专用的虚拟内存地址区域。虚拟机监控程序负责处理处理器中断,并将其重定向到相应的分区。Hyper-V 还可以通过输入输出内存管理单元 (IOMMU) 利用硬件加速来加快各个来宾虚拟地址空间相互之间的地址转换。IOMMU 独立于 CPU 使用的内存管理硬件运行,并用于将物理内存地址重新映射到子分区使用的地址。从系统的结构图,我们可以看出来 Hyper-V 与 Xen 的架构很相似。
Hyper-V 具有基于类型 1 的虚拟机监控程序体系结构。 虚拟机监控程序虚拟化处理器和内存,并为根分区中的虚拟化堆栈提供机制,用于管理 (虚拟机) 子分区,并向虚拟机公开 I/O 设备等服务。
根分区拥有并有权直接访问物理 I/O 设备。 根分区中的虚拟化堆栈为虚拟机、管理 API 和虚拟化 I/O 设备提供内存管理器。 它还实现模拟设备,例如集成设备电子 (IDE) 磁盘控制器和 PS/2 输入设备端口,并支持特定于 Hyper-V 的合成设备以提高性能和降低开销。
VMware ESX/ESXi
VMWare (Virtual Machine ware)是一个“虚拟PC”软件公司。VMware ESXi本身可以看做一个操作系统,采用Linux内核,安装方式为裸金属方式,可直接安装在物理服务器上,不需安装其他操作系统,它是专为运行虚拟机、最大限度降低配置要求和简化部署而设计,提供接近本机性能的祼机体系结构、各种旨在提高整合率的功能(例如取消内存复制),以及用于在共享存储上管理虚拟机文件的群集文件系统。VMware ESXi 和 VMware ESX 为灵活的动态虚拟基础架构提供了关键基础。
在生产环境VMWare ESX用的比较多,VMWare ESXi在生产环境用的比较少
虚拟化服务平台
KVM这样的Hypervisor软件,实际上是提供了一种虚拟化能力,模拟CPU的运行,更为底层。但是它的用户交互并不良好,不方便使用。于是,为了更好地管理虚拟机,就需要OpenStack这样的云管理平台。云管理平台有点像个商店,负责管理商品(计算资源、存储资源、网络资源等),卖给用户,但它本身不制造商品(不具备虚拟化能力),它的商品,来自于KVM。当然,如果不用KVM,也可以用Xen等其它hypervisor。
Libvirt
Libvirt是用于管理虚拟化平台的开源的API,后台程序和管理工具。它可以用于管理KVM、Xen、VMware ESX,QEMU和其他虚拟化技术。这些API在云计算的解决方案中广泛使用。
libvirt是提供了一个方便的方式来管理虚拟机和其他虚拟化功能的软件的集合,如存储和网络接口管理。这些软件包括一个API库,一个守护进程(Libvirtd),和一个命令行实用程序(virsh)。
libvirt的首要目标是能够管理多个不同的虚拟化供应商/虚拟机管理程序提供一个单一的方式。例如,命令“virsh列表等等都可以用于任何支持现有的虚拟机管理程序列表(KVM、Xen、VMware ESX,等)不需要学习管理程序特定的工具!
支持的虚拟化平台
- LXC : lightweight Linux container system
- OpenVZ :lightweight Linux container system
- Kernel-based Virtual Machine/QEMU (KVM) : open-source hypervisor for Linux and SmartOS
- Xen : Bare-Metal hypervisor
- User-mode Linux (UML) :paravirtualized kernel
- VirtualBox : hypervisor by Oracle (formerly by Sun) for Windows, Linux, Mac OS X, and Solaris
- VMware ESX and GSX : hypervisors for Intel hardware
- VMware Workstation and Player : hypervisors for Windows and Linux
- Hyper-V : hypervisor for Windows by Microsoft
- PowerVM : hypervisor by IBM for AIX, Linux and IBM i
- Parallels Workstation : hypervisor for Mac by Parallels IP Holdings GmbH
- Bhyve : hypervisor for FreeBSD 10+
基于KVM的虚拟化服务平台
虚拟机的组成
- 内核虚拟化模块(KVM)
- 系统设备仿真(QEMU)
- 虚拟机管理程序(LIBVIRT)
- 虚拟机配置声明文件(一个XML,位置: /etc/libvirt/qemu)
- 虚拟机硬盘(一个磁盘镜像文件,位置: /var/lib/libvirt/images)
必备软件
- qemu-kvm: 为kvm提供底层仿真支持
- libvirt-daemon: libvirtd守护进程,管理虚拟机
- libvirt-client: libvirt客户端软件,提供客户端管理命令(virsh命令)
- libvirt-daemon-driver-qemu: libvirtd连接qemu的驱动程序
可选功能
- virt-install: 系统安装工具
- virt-manager: 图形管理工具
- virt-v2v: 虚拟机迁移工具
- vrit-p2v: 物理机迁移工具
virsh命令工具介绍
提供管理各虚拟机的命令接口:支持交互模式;格式:
virsh <控制指令> [虚拟机名称] [参数]
virsh list --all # 列出所有虚拟机
virsh nodeindo # 查看KVM节点(真机)服务器信息
virsh net-list # 列出虚拟网络
virsh dominfo <虚拟机名称> # 查看指定虚拟机信息
virsh autostart <虚拟机名称> # 设置虚拟机为开机自启
virsh autostart --disable <虚拟机名称> # 关闭虚拟机开机自启
virsh start|reboot|shutdown <虚拟机名称> # 运行/重启/关闭
virsh destroy <虚拟机名称> # 强制关闭虚拟机