云计算与虚拟化
云计算:
定义:云计算是一种按使用量付费的模式,这种模式提供可用的,便捷的,按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用程序,服务),这些资源能够被快速提供,只需要投入很少的管理工作,或与服务供应商进行很少的交互。
云计算之前使用的模式与技术
1.IDC托管
2.IDC租用
3.虚拟主机(卖空间)
vps:虚拟专用主机 openvz(通过超卖技术坑人)xen(不支持)
云计算之前传统数据中心面临的问题
1.资源利用率低
2.资源分配不合理
3.初始成本高
4出差,安装时,费时费人力
云计算是什么
1.云计算是一个概念,不是任何技术(指的是资源使用和交付模式)
2.云计算使用方法必须通过网络来访问
3.云计算的优势,弹性付费,按需付费,快速扩展。
4.云计算不用关系底层基础设施架构(无需关心计算存储网络)
云计算的优势和特点
1.【超大规模】
海量动态资源池,灵活的调配和绑定
2.【无处不在的网络访问】
云计算基于网络访问实现
3.【服务的高可用性和通用性】
(通过集成海量存储和高性能的的计算能力,
提供了较高的服务质量,自动检测失效节点并排除切换,不影响只能个体的运行。
通用性一个云可以支撑多个不同类型的应用同时运行)
4.【快速弹性伸缩】
(随客户的业务规模扩大进行扩张,不影响客户的业务发展)
5.随需应变的自助服务【按需服务】
(通过支付不同的费用获得不同级别的服务,无需了解云计算具体机制)
6【.经济相对廉价】
7【自动化】
(无论是应用,服务,还是软硬件管理,主要通过自动化的方式管理和执行)
8.【高层次的编程模型】
云计算系统主要采用(mapreduce模型)用户通过简单学习,可以编写自己的云计算编程,
在云系统上执行。
9.【完善的运维机制】
(云的另一端,专业团队来帮助保护用户的利益)
10.虚拟化【😀】
云计算的层次和分类
1.【云计算层次】
(一)基础设施服务层
(二)平台服务层
(三)软件服务层
【云计算分类】
1.公有云
2.混合云
3.私有云
4.行业云(tip:又被成为社区云,缺点支持范围小仅能针对某一行业;建设成本高)
实现云计算模式的方式
虚拟化
注释:
云计算不等于虚拟化,两者不能作比较;
云计算是一种资源和使用的交互方式;
虚拟化是一种具体的技术;
云计算需要虚拟化技术实现
二.虚拟化
1.什么是虚拟化?
虚拟化,是用过虚拟化技术将一套硬件虚拟为多台逻辑计算机(一块蛋糕分为几块小的蛋糕)
多台逻辑计算机可以运行不同的操作;并且虚拟机之间互不影响。进而提升物理资源的利用率;
没有虚拟化的时候一套硬件仅能运行一个OS(操作系统)
使用虚拟化可以实现一套硬件运行多个OS;
2.虚拟化使用场景
场景1:一台服务器运行多个版本的PHP(会出现依赖关系)
场景2:机房的迁移,无需关心底层硬件或软件
场景3:开发环境和测试环境,使用虚拟化
场景4:不清楚硬件服务器运行什么(历史遗留)
场景5:业务的快速部署
3.虚拟化厂商
针对个人用户:VMware workstation,Vmware Fusion
针对企业用户:hype - v(微软) VMware Vsphere vcenter (vm基本上都是收费使用)
QEMU-KVM(平时都说出KVM)
基于虚拟化构建云平台:(openstack 或者zstack
【ZStack是下一代开源的云计算IaaS(基础架构即服务)软件。 [1] 它主要面向的是未来的智能数据中心,通过提供的API来管理包括计算、存储和网络在内的数据中心的各种资源。跟OpenStack相比,ZStack具有易用、稳定、灵活、超高性能等特点。[1-2] 】
4.虚拟化的实现原理
1 . 宿主机和虚拟机的区别
HostOS GuestOS
2.vmm【虚拟机的监控器,没有vmm无法实现安装虚拟化】
3.ring0 ~ ring3 ?
4.全虚拟化
5.半虚拟化
6.硬件辅助虚拟化
前言:前面所提到的虚拟化,不是一个硬件上安装多个操作系统,
而是在硬件基础上安装了一个特殊的操作系统(vmm)
用来监控虚拟机,实现虚拟化,一定要vmm
虚拟化中的宿主机,和客户机
3.ring0~ring3的区别
linux -x86来说
操作系统(内核)的代码运行在最高级别ring0上,可以使用特权指令,控制中断,修改页表,访问设备等等
应用程序的代码运行在最低级别ring3上,比如访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候,
cpu的运行级别会发生从ring3到ring0的切换,跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问,完成之后,从ring0返回ring3,这个过程也称作用户态和内核态的切换。
虚拟化就在这里遇到了问题,宿主机工作在ring0的,客户操作系统就不能在ring0了,但是客户操作系统(guest OS)并不知情,
但是在执行什么指令时,并无权限。所以这个时候虚拟机管理程序(VMM)来避免这件事情发生
2.VMM
运行架设在ring0上,一般以驱动程序的形式体现,驱动程序都是工作在ring0上,否则驱动不了设备
此时VMM工作在ring0上,我们的客户操作系统执行在ring1上,那么执行特权指令时,会触发异常(cpu机制
没权限的指令触发异常)然后通过VMM捕获异常,对异常进行二进制翻译以及模拟转换,调取相应的资源,最后返回到客户操作系统内,
客户操作系统接受后认为自己的特权指令工作正常,继续运行。
3.全虚拟化
全虚拟化通过二进制翻译技术,然后客户端始终认为自己运行在ring0上面。
弊端:二进制完全虚拟化是由于纯软件是实现的,所以性能极低。因为一条简单的一条指令可以执行完,
现在却要经过复杂的二进制翻译一个过程
4.半虚拟化
半虚拟化的思想就是让客户操作系统知道是在虚拟机上运行的,工作状态在非ring0,如果客户操作系统执行特权指令或感指令的时候,他认为没有权限执行的,所以通过Hypercall的方式主动告诉VMM,说它要执什么,然后VMM进行调用硬件资源给客户端使用,这种方式是实现的虚拟化就不需要vmm主动捕获异常,翻译模拟的过程了,所以性能耗损非常低(但是需要修改代码进行约束规范才能实现半虚拟化)
【简单说半虚拟化,客户机知道自己是运行在虚拟机上,缺点:需要对客户机操作系统进行修改,所以对不能修改的系统(windows系统)不支持;优点:消耗资源小性能好,】
这是XEN这种半虚拟化架构的优势,这也是为什么XEN只支持虚拟化linux,无法虚拟化windos原因
5.硬件辅助虚拟化
【比前两者都好】
cpu厂商开始支持虚拟化,拿x86来说,inter-VT技术引入新的指令和新的模式,有root,和no-root两种模式,
并且两种模式都支持ring0~ring3这四个级别,vmm可以运行在root模式下,通常情况下,guestOS的核心指令可以直接下达计算机
硬件执行,而且不需要经过VMM,不过当客户操作系统执行特殊的时候系统回切换到vmm.让vmm来处理特殊指令,也就说硬件在这层做了一些区分,这样客户操作系统在全虚拟化下,就不需要此前捕捉异常来模拟实现虚拟化了。而且硬件辅助全虚拟化不需要对客户端操作系统进行修改
使用虚拟化后【资源能达到有效的利用和处理】、
图:左一:虚拟化前
虚拟化后
,将计算,储存,网络全部通过虚拟化将这些资源整合到一起,形成了一个资源池,那么这个资源池它会按需提取相应的资源,进而安装不同的操作,安装不同的应用提供不同的服务。
实际上是将物理资源进行整和和逻辑划分提供一些虚拟资源,为我们上层应用提供的服务,这样能够让我们的硬件资源使用率得到很大的提升,并且也会降低我们的IT成本,同事也能提高我们的效率
6.虚拟化主要厂商和产品
针对个人用户:VMware workstation vmware fusion
针对企业用户:hyper-V vmware Vsphere vcenter QEMU-KVM
虚拟化软件:
qemu 软件纯模拟全虚拟化软件,特别慢!AIX,兼容性好!
xen(半) 性能特别好,需要使用专门修改之后的内核,兼容性差! redhat 5.5 xen
KVM(linux) 全虚拟机,它有硬件支持cpu,基于内核,而且不需要使用专门的内核 centos6 kvm
性能较好,兼容较好
7.KVM虚拟化相关实战
1.qemu
2.KVM
3.qemu.-kvm
1.什么是QEMU
QEMU是主机上的一个VMM,通过动态二进制转换进行来模拟硬件设备,通常VM认为自己是直接与硬件进行交互,但是实际上VM和QEMU模拟出来的设备进行交互的,当VM 需要使用硬件时,QEMU将VM调用硬件的操作,通过二进制翻译成HOSTS的指令,之后交给真正的硬件处理 (软件级二进制模拟虚拟化)
2.什么是KVM
KVM全称Kernel-based virtual Machine内核级虚拟化技术,
使用KVM需要处理器硬件本身支持虚拟化发展,如inter VT和AMD-V技术
KVM包含一个内核模块KVM.ko用来实现虚拟化功能,以及和处理器相关的模块KVM-inter.ko或KVM-amd.ko
(内核模拟虚拟化)
3.QEMU-KVM二者组合和实现原理
8.KVM的管理方式
KVM工作在操作系统内核,用户如果需要管理虚拟机,必须借助管理工具来进行管理,在LINUX系统下提供了QEMU-KVM管理KVM 同时还提供了libvirt,virsh,等管理工具
libvirt 则是目前使用最为广泛的,对KVM虚拟机进行管理的工具和API
libvirt 是一个daemon进程,libvirt主要实现条调用qemu-KVM操作虚拟机
9.KVM虚拟化安装
KVM需要硬件支持,所以需要开启虚拟化支持
1个人电脑直接在bios设置开启虚拟化
2.硬件设备直接在BIOS设置开启CPU虚拟化
2.VM需要找到对应虚拟化开启对应的VT-EPT虚拟化技术(硬件辅助虚拟化)