## 什么是系统虚拟化
系统虚拟化是将底层物理设备与上层操作系统、软件分离的一种去耦合技术,在一台物理机器上逻辑的划分出多台机器。虚拟化的目标是实现IT资源利用效率和灵活性的最大化
![1.1](http://oxysobnip.bkt.clouddn.com/1.1.png)
多个系统融合在一台服务器上——资源利用率高 资源利用率高
应用系统不再依赖特定的硬件——系统维护灵活
## 虚拟化基础架构
![1.2](http://oxysobnip.bkt.clouddn.com/1.2.png)
## 虚拟化
在一台物理主机上虚拟出多个虚拟计算机(虚拟机,Virtual Machine,VM),其上能同时运行多个独立的操作系统,这些客户操作系统(Guest OS)通过虚拟机管理器(Virtual Machine Monitor,VMM,也称作Hypervisor)访问实际的物理资源。
![1.3](http://oxysobnip.bkt.clouddn.com/1.3.png)
## 为什么需要使用虚拟化
公司服务器越来越多
– 充分利用是个问题
– 统一运维管理是个问题
* 浪费时间
* 操作繁琐
* 机器闲置时间较多
计算系统利用率不高!
“多数用户承认,计算系统平均利用率只有25%~30%”
## 为什么客户要选择服务器虚拟化?
![1.4](http://oxysobnip.bkt.clouddn.com/1.4.png)
1. 打破“一台服务器对应一套应用”的模式,将物理服务器进行整合,提升利用率
2. 服务器和相关IT硬件更少,节省了机房空间,也减少了散热和电力需求
3. 具备灵活数据备份和应用迁移机制,保障服务永不中断
4. 资源动态调配和模板化部署,应用系统快速上线,及时响应业务变化
## 虚拟化技术分类
![1.5](http://oxysobnip.bkt.clouddn.com/1.5.png)
## 什么是桌面虚拟化?
桌面虚拟化(MS:Remote Desktop、Citrix:XenDesktop、Vmware:View)
− 将原本在本地电脑安装的桌面系统统一在后端数据中心进行部署和管理;
− 用户可以通过任何设备,在任何地点,任何时间访问属于自己的桌面系统环境。
![1.6](http://oxysobnip.bkt.clouddn.com/1.6.png)
## 服务器虚拟化
![1.7](http://oxysobnip.bkt.clouddn.com/1.7.png)
## cpu
【1】无虚拟化
– CPU一般设为四个Ring
– Kernel Mode一般跑在Ring 0上
– User Mode一般跑在Ring 3上
– 对于一个普通的传统的Linux系统没有问题
![1.8](http://oxysobnip.bkt.clouddn.com/1.8.png)
【2】虚拟化
– 在Guest机器和Host机器中间加一层Hypervisor
– Host机器看它像跑在自己上面的程序
– Guest机器看它像自己所运行的硬件
– 如果Host机器和Guest机器都跑相同的Linux,它们的Kernel都想运行在Ring 0,可怎么办?
![1.9](http://oxysobnip.bkt.clouddn.com/1.9.png)
【3】传统cpu工作模式
-- X86 操作系统是设计在直接运行在裸硬件设备上的,因此它们自动认为它们完全占有计算机硬件。x86 架构提供四个特权级别给操作系统和应用程序来访问硬件。 Ring 是指 CPU 的运行级别,Ring 0是最高级别,Ring1次之,Ring2更次之…… 就 Linux+x86 来说,
-- 操作系统(内核)需要直接访问硬件和内存,因此它的代码需要运行在最高运行级别 Ring0上,这样它可以使用特权指令,控制中断、修改页表、访问设备等等。
-- 应用程序的代码运行在最低运行级别上ring3上,不能做受控操作。如果要做,比如要访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候,CPU的运行级别会发生从ring3到ring0的切换,并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问,完成之后再从ring0返回ring3。这个过程也称作用户态和内核态的切换。
【4】为什么需要 为什么需要 CPU 虚拟化
![1.10](http://oxysobnip.bkt.clouddn.com/1.10.png)
## 虚拟化分类
虚拟化在这里就遇到了一个难题,因为宿主操作系统是工作在 ring0 的,客户操作系统就不能也在 ring0 了,但是它不知道这一点,以前执行什么指令,现在还是执行什么指令,但是没有执行权限是会出错的。所以这时候虚拟机管理程序(VMM)需要避免这件事情发生。 虚机怎么通过 VMM 实现 Guest CPU 对硬件的访问,根据其原理不同有三种实现技术:
【1】基于二进制翻译的全虚拟化(Full Virtualization with Binary Translation)
客户操作系统运行在 Ring 1,它在执行特权指令时,会触发异常(CPU的机制,没权限的指令会触发异常),然后 VMM捕获这个异常,在异常里面做翻译,模拟,最后返回到客户操作系统内,客户操作系统认为自己的特权指令工作正常,继续运行。但是这个性能损耗,就非常的大, 简单的一条指令,执行完,了事,现在却要通过复杂的异常处理过程
![1.11](http://oxysobnip.bkt.clouddn.com/1.11.png)
异常 “捕获(trap)-翻译(handle)-模拟(emulate)” 过程:
![1.12](http://oxysobnip.bkt.clouddn.com/1.12.png)
【2】 超虚拟化(或者半虚拟化/操作系统辅助虚拟化 Paravirtualization)
半虚拟化的思想就是,修改操作系统内核,替换掉不能虚拟化的指令,通过超级调用(hypercall)直接和底层的虚拟化层hypervisor来通讯,hypervisor 同时也提供了超级调用接口来满足其他关键内核操作,比如内存管理、中断和时间保持。这种做法省去了全虚拟化中的捕获和模拟,大大提高了效率。所以像XEN这种半虚拟化技术,客户机操作系统都是有一个专门的定制内核版本,和x86、mips、arm这些内核版本等价。这样以来,就不会有捕获异常、翻译、模拟的过程了,性能损耗非常低。这就是XEN这种半虚拟化架构的优势。这也是为什么XEN只支持虚拟化Linux,无法虚拟化windows原因,微软不改代码啊。
![1.13](http://oxysobnip.bkt.clouddn.com/1.13.png)
【3】硬件辅助的全虚拟化
2005年后,CPU厂商Intel 和 AMD 开始支持虚拟化了。Intel 引入了 Intel-VT (Virtualization Technology)技术。这种 CPU,有 VMX root operation 和 VMX non-root operation两种模式,两种模式都支持Ring 0 ~ Ring 3 共 4个运行级别。这样,VMM 可以运行在 VMX root operation模式下,客户 OS 运行在VMX non-root operation模式下。也就说,硬件这层就做了些区分,这样全虚拟化下,那些靠“捕获异常-翻译-模拟”的实现就不需要了。而且CPU厂商,支持虚拟化的力度越来越大,靠硬件辅助的全虚拟化技术的性能逐渐逼近半虚拟化,再加上全虚拟化不需要修改客户操作系统这一优势,全虚拟化技术应该是未来的发展趋势
![1.14](http://oxysobnip.bkt.clouddn.com/1.14.png)
## 三种虚拟化技术的比较
![1.15](http://oxysobnip.bkt.clouddn.com/1.15.png)
## 全虚拟化 vs 半虚拟化
![1.16](http://oxysobnip.bkt.clouddn.com/1.16.png)
## 服务器虚拟化方法
【1】全虚拟化(Full-Virtulization):无需修改操作系统, VM ESXi、Linux KVM
![1.17](http://oxysobnip.bkt.clouddn.com/1.17.png)
【2】半虚拟化(Para-Virtulization):集成半虚拟化代码,直接运行特权指令,性能接近物理机,需要修改操作系统,MS Hyper-V、 Ctrix Xen、IBM PowerVM
![1.18](http://oxysobnip.bkt.clouddn.com/1.18.png)
【3】操作系统层虚拟化:开发、测试环境,VM Workstation、VM Server、Oracle VitrualBox
![1.19](http://oxysobnip.bkt.clouddn.com/1.19.png)
- 献给我的朋友们
- 一、个人对学习的看法
- 二、运维技能图谱
- 三、运维常用技能
- 3.1 Vim(最好用的编辑器)
- 3.2 Nginx & Tengine(Web服务)
- 1. Nginx介绍和部署
- 2. Nginx配置解析
- 3. Nginx常用模块
- 4. Nginx 的session 一致性问题
- 3.3 Tomcat(Web中间件)
- 3.4 Keepalived(负载均衡高可用)
- 3.5 Memcache(分布式缓存)
- 3.6 Zookeeper(分布式协调系统)
- 3.7 KVM(开源虚拟化)
- 1. 虚拟化介绍
- 2. KVM基础
- 3. 设置VNC和时间同步
- 4. kvm虚拟机快照备份
- 5. kvm虚拟机在线扩展磁盘
- 6. kvm虚拟机静态迁移
- 7. kvm虚拟机动态迁移
- 8. kvm虚拟机存储池配置
- 9. cpu添加虚拟化功能
- 3.8 GitLab(版本控制)
- 3.8.1 GitLab安装与汉化
- 3.9 Jenkins(运维自动化)
- 3.10 WAF(Web防火墙)
- 3.10.1初探WAF
- 四、常用数据库
- 4.1 MySQL(关系型数据库)
- 1. MySQL源码安装
- 4.2 Mongodb(适用与大数据分析的数据库)
- 4.3 Redis(非关系数据库)
- 五、自动化运维工具
- 5.1 Cobbler(系统自动化部署)
- 5.2 Ansible(自动化部署)
- 5.3 Puppet(自动化部署)
- 5.4 SaltStack(自动化运维)
- 六、存储
- 6.1 GFS(文件型存储)
- 6.2 Ceph(后端存储)
- 七、运维监控工具
- 7.1 对监控的理解
- 7.2 Zabbix(运维监控)
- 7.2.1 Zabbix简介
- 7.2.2 Zabbix服务部署
- 1. Zabbix服务端部署
- 2. Zabbix客服端部署
- 3. 配置前端展示
- 4. zabbix告警配置
- 7.2.3 Zabbix监控服务
- 1. 监控网络设备
- 2. 自定义Nginx监控
- 7.3 云镜(安全监控)
- 7.4 ELK(日志收集展示)
- 八、运维云平台
- 8.1 OpenStack(开源云操作系统)
- 8.1.1 OpenStack简介
- 8.1.2 实验架构设计
- 8.1.3 集群环境准备
- 8.1.4 controller节点部署
- 1. 安装Mariadb Galera Cluster集群
- 2. 安装RabbitMQ Cluster集群
- 3. 安装Pacemaker
- 4. 安装HAProxy
- 5. 安装配置Keystone
- 6. 安装配置glance
- 1. 制作镜像模板
- 7. 安装配置nova
- 8. 安装配置neutron
- 1. 配置虚拟机网络
- 9. 安装Dashboard
- 10. 安装配置cinder
- 8.1.5 compute节点部署
- 1. 安装相关软件包
- 2. 安装Neutron
- 3. 配置cinder
- 4. 创建第一个虚拟机
- 8.1.6 OpenStack报错处理
- 1. cinder僵尸卷删除
- 8.1.7 快速孵化虚拟机方案
- 8.1.8 Kolla容器化部署OpenStack
- 1. 单点部署
- 2. 多节点部署
- 8.2 Tstack(腾讯云平台)
- 8.3 K8s(微服务容器化)
- 九、运维编程技能
- 9.1 Shell(运维必会语言)
- 9.2 Python(万能的胶水语言)
- 十、Devops运维
- 10.1 理念
- 10.2 Devops实战