1. 程式人生 > >nova架構及資料流轉

nova架構及資料流轉

前言        Openstack作為一個虛擬機器管理平臺,核心功能自然是虛擬機器的生命週期的管理,而負責虛機管理的模組就是 Nova。 本文就是openstack中Nova模組的分析,所以本文重點是以下三點:  
  • 先了解Openstack的整體架構,搞清楚為什麼要用這樣的架構;
  • 然後再瞭解架構中的各個元件,元件提供的主要功能與各個元件之間的互動;
  • 瞭解虛機的啟動過程,能在遇到問題時發現問題出在哪個模組中的哪個元件。
 
Nova元件介紹 接下來進行詳細介紹,如有錯誤,歡迎拍磚!
下圖為建立虛擬機器的一個大概流程圖。
  客戶端:可以認為是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來實現。   虛機建立流程梳理 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的。 http://www.cnblogs.com/zhoumingang/p/5522463.html   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檔案啟動虛擬機器。   image
  總結: 1、Openstack這種分散式的架構,各個模組之間鬆耦合,可以很容易的新增模組,而且配置靈活,服務可以安裝在不同節點,即使部分服務掛了也不會影響。 2、虛擬機器建立簡單說來三步,nova api接受建立虛機請求,nova scheduler為建立虛機指定宿主機,nova compute啟動虛擬機器。如果能夠理解上面的所有步驟,那麼對於定位問題可以精準,甚至有些問題可以自己解決,譬如虛機error了,如果你看到虛機的資訊已經有host資訊了,那基本能從nova-compute的日誌中看到問題所在,如果沒有,基本是scheduler會有錯誤資訊提示。