引言
开始前给大家举个例子:
场景如下:一台服务器只有有8G内存,程序A需要4G内存,程序B需要4G内存,传统架构无法满足这样的场景,那只有依靠虚拟化来解决,通过虚拟化方式,我们可以不仅提供2台4G内存,更可以通过内存气泡、内存复用、内存置换等技术实现超分配!
Part A.虚拟化简介
虚拟化是云计算的基础,基于虚拟化我们可以实现私有云、公有云、桌面云等。
虚拟化是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。一般所指的虚拟化资源包括计算能力和数据存储。
虚拟化架构
几个重要的概念:
A.宿主机:Host ,即物理服务器
B.虚拟机:Guest ,也称客户机、虚机
C.VMM(virtual Machine Monitor):即Hypervisors,它是一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。Hypervisors是一种在虚拟环境中的“元”操作系统。他们可以访问服务器上包括磁盘和内存在内的所有物理设备。Hypervisor不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。当服务器启动并执行Hypervisor时,它会加载所有虚拟机客户端的操作系统同时会分配给每一台虚拟机适量的内存、CPU、网络和磁盘。
Part B.虚拟化的分类
【常规分类】
此外还有混合虚拟化,是指将一个内核级驱动器插入到宿主操作系统内核。这个驱动器作为虚拟硬件管理器来协调虚拟机和宿主操作系统之间的硬件访问。混合虚拟化需要底层硬件支持虚拟化扩展功能。
【基于Guest OS CPU对硬件访问分类】
CPU的运行级别,Ring 0也称为核心态,操作系统需要直接访问硬件和内存,使用特权指令,控制中断、修改页表、访问设备,因此它的代码需要运行在***运行级别。Ring 3也称为用户态,需要访问磁盘、写文件时,则需要调用系统函数,这样的操作称为用户态到核心态。
大家都知道宿主机的操作系统运行级别是Ring 0,虚拟机的操作系统就无法在Ring 0级别运行,但是虚拟机OS不知道这一点,执行的命令与物理机无异,但是没有执行权限是会出错的。所以这时候虚拟机管理程序(VMM)需要避免这件事情发生。 虚机怎么通过 VMM 实现 Guest CPU 对硬件的访问,根据其原理不同有三种实现技术:
1. 全虚拟化
2. 半虚拟化
3. 硬件辅助的虚拟化
主要区别见下图:
A.全虚拟化
一般采用优先级压缩技术(Ring Compression)和二进制代码翻译技术(BinaryTranslation)。优先级压缩技术让VMM和Guest运行在不同的特权级下。对x86架构而言,即VMM运行在***特权级别Ring 0下,guest OS运行在Ring 1下,用户应用运行在Ring 3下。因此,Guest OS的核心指令无法直接下达到计算机系统硬件执行,而是需要经过VMM的捕获和模拟执行(部分难以虚拟化的指令需要通过Binary Translation技术进行转换)。
B.辅助虚拟化
当前主要有Intel的VT-x和AMD的AMD-V这两种技术。其核心思想都是通过引入新的指令和运行模式,使VMM和Guest OS分别运行在不同模式(ROOT模式和非ROOT模式)下,且Guest OS运行在Ring 0下。通常情况下,Guest OS的核心指令可以直接下达到计算机系统硬件执行,而不需要经过VMM。当Guest OS执行到特殊指令的时候,系统会切换到VMM,让VMM来处理特殊指令。
C.全虚拟化
采用Hypercall技术。Guest OS的部分代码被改变,从而使Guest OS会将和特权指令相关的操作都转换为发给VMM的Hypercall(超级调用),由VMM继续进行处理。而Hypercall支持的批处理和异步这两种优化方式,使得通过Hypercall能得到近似于物理机的速度。
【按虚拟化技术分类】
1.服务器虚拟化,计算、存储、网络和IO的虚拟化
2.存储虚拟化,如Serversan,支持虚拟化的存储阵列等
3.网络虚拟化,如vlan、虚拟防火墙、虚拟分布式交换机
4.桌面(应用)虚拟化,即桌面云
其他分类这里不在细说,下面给大家分享下KVM和XEN的一些区别:
【对比KVM和XEN】
Xen作为***秀的半虚拟化引擎,在基于硬件的虚拟化帮助下,现在也完全支持虚拟化MS Windows。被设计成一个独立的内核,它只需要Linux执行 I/O,这样使得它非常的大,并且它有自己的调度程序、内存管理器、计时器和机器初始化程序。
做华为虚拟化的同学应该都知道有个Dom0,这个Dom0是个什么东西呢?这个Domain 0(特权虚拟机)是其他虚拟机的管理者和控制者,可以构建其他更多Domain,并管理虚拟设备。它还能执行管理任务,比如虚拟机的休眠、唤醒和迁移其他虚拟机。此外,还有个Dom u,这个是指除了Dom 0之外的普通虚拟机。
KVM是一个独特的管理程序,其让Linux内核自身变成一个管理程序,通过KVM作为一个内核模块实现,在虚拟环境下Linux内核集成管理程序将其作为一个可加载的模块,可以简化管理以及提升性能。KVM使用标准Linux调度程序、内存管理器和其他服务。将虚拟技术建立在内核上而不是去替换内核。
KVM架构
Xen架构
此外,还有微软的Hyper-V、OpenVz,这里不再跟大家介绍!
Part C.虚拟化的优势
1.降低运营成本
服务器虚拟化降低了IT基础设施的运营成本,运维人员可以从繁重的物理服务器、OS、中间件及兼容性的管理工作解放处理,减少人工干预频率,使管理更加强大、便捷。
2.缩短上线周期
虚拟化中对可以将需要批量预安装机器进行模板化,使用模板创建虚拟机,不仅可以缩短安装周期,也可以减少人工带来的配置失误。从而缩短操作系统安装部署周期,进而缩短业务的上线周期。
3.提高可靠性
通过集群部署、双网卡、双电源以及OS盘的RAID策略都可以为我们提升基础架构的可靠性。通过对集群设置,我们可以实现虚拟机的冷热迁移,故障恢复甚至容错等,从而在架构上实现了高可靠。
4.提高资源利用率
摆脱传统架构单台服务器单个应用,通过虚拟化技术,资源可以以更小的单位提供,可以实现一比多的形式,很大程度提高了物理资源的利用率,同时,可对虚拟机进行隔离,保证了安全性。
5.动态资源调度(DRS)
通过DRS可以实现机房节能环保,降低功耗,在资源闲置时自动迁移并关闭部分资源,资源紧张时可自动开启资源并负载均衡
Part D.几种虚拟化关键技术
一、内存复用
a.内存共享:虚拟机内存只读时,可共享同一内存空间,需要写时,再分配空间。
b.内存气泡:虚拟机之间的内存交换负载,即内存使用低的释放给内存使用较高的虚拟机。
c.内存置换:暂时不用的内存置换到存储中,从而提高内存使用。
二、CPU相关
CPU虚拟化的开启,物理在BIOS里面设置相关Virtual Technology项,如果需要开启虚拟化嵌套,则需要在VMwareworkstation设置相关虚拟化模式,如果是kvm的嵌套则可能需要升级内核。
三、ServerSan
ServerSan通常基于传统的X86服务器,配以SSD做缓存和万兆网卡做传输,同时满足了计算和存储资源,从而实现了计算和存储的融合,大多数的ServerSan都基于开源的Ceph,不仅可以实现高性能,也可以实现数据的多副本,更可以实现存储的高级功能,如快照、链接克隆、精简配置等。
主要特点如下:
1.软件定义,独立于硬件;
2.分布式,不存在单点故障;
3.系统自治,自动进行故障自愈和数据平衡;
4.融合系统,存储和计算部署在相同硬件上;
5.横向扩展,最小部署(至少3台),按需扩容;
6.强一致性,只有所有副本写成功,单次写操作完成,确保从任意副本数据的完整性;