## 什么是系統虛擬化
系統虛擬化是將底層物理設備與上層操作系統、軟件分離的一種去耦合技術,在一臺物理機器上邏輯的劃分出多臺機器。虛擬化的目標是實現IT資源利用效率和靈活性的最大化

多個系統融合在一臺服務器上——資源利用率高 資源利用率高
應用系統不再依賴特定的硬件——系統維護靈活
## 虛擬化基礎架構

## 虛擬化
在一臺物理主機上虛擬出多個虛擬計算機(虛擬機,Virtual Machine,VM),其上能同時運行多個獨立的操作系統,這些客戶操作系統(Guest OS)通過虛擬機管理器(Virtual Machine Monitor,VMM,也稱作Hypervisor)訪問實際的物理資源。

## 為什么需要使用虛擬化
公司服務器越來越多
– 充分利用是個問題
– 統一運維管理是個問題
* 浪費時間
* 操作繁瑣
* 機器閑置時間較多
計算系統利用率不高!
“多數用戶承認,計算系統平均利用率只有25%~30%”
## 為什么客戶要選擇服務器虛擬化?

1. 打破“一臺服務器對應一套應用”的模式,將物理服務器進行整合,提升利用率
2. 服務器和相關IT硬件更少,節省了機房空間,也減少了散熱和電力需求
3. 具備靈活數據備份和應用遷移機制,保障服務永不中斷
4. 資源動態調配和模板化部署,應用系統快速上線,及時響應業務變化
## 虛擬化技術分類

## 什么是桌面虛擬化?
桌面虛擬化(MS:Remote Desktop、Citrix:XenDesktop、Vmware:View)
? 將原本在本地電腦安裝的桌面系統統一在后端數據中心進行部署和管理;
? 用戶可以通過任何設備,在任何地點,任何時間訪問屬于自己的桌面系統環境。

## 服務器虛擬化

## cpu
【1】無虛擬化
– CPU一般設為四個Ring
– Kernel Mode一般跑在Ring 0上
– User Mode一般跑在Ring 3上
– 對于一個普通的傳統的Linux系統沒有問題

【2】虛擬化
– 在Guest機器和Host機器中間加一層Hypervisor
– Host機器看它像跑在自己上面的程序
– Guest機器看它像自己所運行的硬件
– 如果Host機器和Guest機器都跑相同的Linux,它們的Kernel都想運行在Ring 0,可怎么辦?

【3】傳統cpu工作模式
-- X86 操作系統是設計在直接運行在裸硬件設備上的,因此它們自動認為它們完全占有計算機硬件。x86 架構提供四個特權級別給操作系統和應用程序來訪問硬件。 Ring 是指 CPU 的運行級別,Ring 0是最高級別,Ring1次之,Ring2更次之…… 就 Linux+x86 來說,
-- 操作系統(內核)需要直接訪問硬件和內存,因此它的代碼需要運行在最高運行級別 Ring0上,這樣它可以使用特權指令,控制中斷、修改頁表、訪問設備等等。
-- 應用程序的代碼運行在最低運行級別上ring3上,不能做受控操作。如果要做,比如要訪問磁盤,寫文件,那就要通過執行系統調用(函數),執行系統調用的時候,CPU的運行級別會發生從ring3到ring0的切換,并跳轉到系統調用對應的內核代碼位置執行,這樣內核就為你完成了設備訪問,完成之后再從ring0返回ring3。這個過程也稱作用戶態和內核態的切換。
【4】為什么需要 為什么需要 CPU 虛擬化

## 虛擬化分類
虛擬化在這里就遇到了一個難題,因為宿主操作系統是工作在 ring0 的,客戶操作系統就不能也在 ring0 了,但是它不知道這一點,以前執行什么指令,現在還是執行什么指令,但是沒有執行權限是會出錯的。所以這時候虛擬機管理程序(VMM)需要避免這件事情發生。 虛機怎么通過 VMM 實現 Guest CPU 對硬件的訪問,根據其原理不同有三種實現技術:
【1】基于二進制翻譯的全虛擬化(Full Virtualization with Binary Translation)
客戶操作系統運行在 Ring 1,它在執行特權指令時,會觸發異常(CPU的機制,沒權限的指令會觸發異常),然后 VMM捕獲這個異常,在異常里面做翻譯,模擬,最后返回到客戶操作系統內,客戶操作系統認為自己的特權指令工作正常,繼續運行。但是這個性能損耗,就非常的大, 簡單的一條指令,執行完,了事,現在卻要通過復雜的異常處理過程

異常 “捕獲(trap)-翻譯(handle)-模擬(emulate)” 過程:

【2】 超虛擬化(或者半虛擬化/操作系統輔助虛擬化 Paravirtualization)
半虛擬化的思想就是,修改操作系統內核,替換掉不能虛擬化的指令,通過超級調用(hypercall)直接和底層的虛擬化層hypervisor來通訊,hypervisor 同時也提供了超級調用接口來滿足其他關鍵內核操作,比如內存管理、中斷和時間保持。這種做法省去了全虛擬化中的捕獲和模擬,大大提高了效率。所以像XEN這種半虛擬化技術,客戶機操作系統都是有一個專門的定制內核版本,和x86、mips、arm這些內核版本等價。這樣以來,就不會有捕獲異常、翻譯、模擬的過程了,性能損耗非常低。這就是XEN這種半虛擬化架構的優勢。這也是為什么XEN只支持虛擬化Linux,無法虛擬化windows原因,微軟不改代碼啊。

【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廠商,支持虛擬化的力度越來越大,靠硬件輔助的全虛擬化技術的性能逐漸逼近半虛擬化,再加上全虛擬化不需要修改客戶操作系統這一優勢,全虛擬化技術應該是未來的發展趨勢

## 三種虛擬化技術的比較

## 全虛擬化 vs 半虛擬化

## 服務器虛擬化方法
【1】全虛擬化(Full-Virtulization):無需修改操作系統, VM ESXi、Linux KVM

【2】半虛擬化(Para-Virtulization):集成半虛擬化代碼,直接運行特權指令,性能接近物理機,需要修改操作系統,MS Hyper-V、 Ctrix Xen、IBM PowerVM

【3】操作系統層虛擬化:開發、測試環境,VM Workstation、VM Server、Oracle VitrualBox

- 獻給我的朋友們
- 一、個人對學習的看法
- 二、運維技能圖譜
- 三、運維常用技能
- 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實戰