Openstack中Nova建立虛機流程分析

Openstack做爲一個虛擬機管理平臺,核心功能天然是虛擬機的生命週期的管理,而負責虛機管理的模塊就是Nova。html

今天學到了如下三點: 1,瞭解了openstack的總體架構以及這種架構的優勢是什麼;node

                                     2,瞭解了架構中的各個組件,組件提供的主要功能與各個組件之間的交互;web

                                     3,瞭解了虛機的啓動過程,能在遇到問題時發現問題出在哪一個模塊中的哪一個組件。算法

Nova組件:數據庫

下圖爲建立虛擬機的一個大概流程圖:api

客戶端:能夠認爲是web頁面op或者Horizonl;也能夠是命令行的nova client。
Nova Api:用於接收和處理客戶端發送的HTTP請求;
Nova Scheduler:nova的調度宿主機的服務,決定虛擬機建立在哪一個節點上。
Nova compute:Nova中最和新的服務,負責虛擬機的生命週期的管理。
nova conductor:數據訪問權限的控制操做,能夠理解爲數據庫代理服務。
其餘服務:nova cert管理證書,爲了兼容aws;nova vncproxy和consoleauth控制檯服務。
不一樣的模塊之間是經過HTTP請求REST API服務
同一個模塊不一樣組件之間(如nova-scheduler請求nova-compute)是RPC遠程調用,經過Rabbmq來實現。
             MQ全稱爲Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通訊方法。應用程序經過讀寫出入隊列的消息(針對應用程序的數據)來通訊,而無需專用鏈接來連接它們。消息傳遞指的是程序之間經過在消息中發送數據進行通訊,而不是經過直接調用彼此來通訊,直接調用一般是用於諸如遠程過程調用的技術。排隊指的是應用程序經過 隊列來通訊。隊列的使用除去了接收和發送應用程序同時執行的要求。其中較爲成熟的MQ產品有IBM WEBSPHERE MQ等等。
虛機建立流程梳理
 
 
1.客戶端使用本身的用戶名密碼請求認證。
2.keystone經過查詢在keystone的數據庫user表中保存了user的相關信息,包括password加密後的hash值,並返回一個token_id(令牌),和serviceCatalog(一些服務的endpoint地址,cinder、glance-api後面下載鏡像和建立塊存儲時會用到)。
3.客戶端帶上keystone返回的token_id和建立虛機的相關參數,Post請求nova-api建立虛擬機
4.nova-api接收到請求後,首先使用請求攜帶的token_id來訪問該api,以驗證請求是否有效。
5.keystone驗證經過後返回更新後的認證信息。
6.nova api檢查建立虛擬機參數是否有效與合法。
檢查虛擬機name是否符合命名規範,flavor_id是否在數據庫中存在,image_uuid是不是正確的uuid格式
檢查instance、vcpu、ram的數量是否超過配額。
7.當且僅當全部傳參都有效合法時,更新nova數據庫,新建一條instance記錄,vm_states設爲BUILDING,task_state設爲SCHEDULING.
8.nova api 遠程調用傳遞請求、參數給nova scheduler,把消息「請給我建立一臺虛擬機」丟到消息隊列,而後按期查詢虛機的狀態。
9.nova scheduler從queue中獲取到這條消息
10.nova scheduler訪問nova 數據庫,經過調度算法,過濾出一些合適的計算節點,而後進行排序。
11.更新虛機節點信息,返回一個最優節點id給nova scheduler。
12.nova scheduler選定host以後,經過rpc調用nova-compute服務,把「建立虛機請求」消息丟個mq。
13.nova compute收到建立虛擬機請求的消息
#nova-compute有個定時任務,按期從數據庫中查找到運行在該節點上的全部虛擬機信息,統計獲得空閒內存大小和空閒磁盤大小。而後更新數據庫compute_node信息,以保證調度的準確性。
14.nova compute經過rpc查詢nova數據庫中虛機的信息例如主機模板和id
15.nova conductor從消息隊列中拿到請求查詢數據庫
16.nova conductor查詢nova數據庫
17.數據庫返回虛機信息
18.nova compute從消息隊列中獲取信息。
19.nova compute 請求glance 的rest api,下載所須要的鏡像,通常是qcow2的。
20.glance api 也會去驗證請求的token的有效性。
21.glance api 返回鏡像信息給nova-compute。
22.同理,nova compute請求neutron api配置網絡,例如獲取虛機ip地址
23.驗證token的有效性
24.neutron返回網絡信息
25-27 同glance、neutron驗證token返回塊設備信息
28.據上面配置的虛擬機信息,生成xml,寫入libvirt,xml文件,而後調用libvirt driver去使用libvirt.xml文件啓動虛擬機。
 
總結:
一、Openstack這種分佈式的架構,各個模塊之間鬆耦合,能夠很容易的新增模塊,並且配置靈活,服務能夠安裝在不一樣節點,即便部分服務掛了也不會影響。
二、虛擬機建立簡單說來三步,nova api接受建立虛機請求,nova scheduler爲建立虛機指定宿主機,nova compute啓動虛擬機。若是可以理解上面的全部步驟,那麼對於定位問題能夠精準,甚至有些問題能夠本身解決,譬如虛機error了,若是你看到虛機的信息已經有host信息了,那基本能從nova-compute的日誌中看到問題所在,若是沒有,基本是scheduler會有錯誤信息提示。
相關文章
相關標籤/搜索