博主自從以前換了工做到如今,由於工做太忙的緣由,已經很久沒有更新博客了,深表歉意,還望你們理解。。。。。。html
今天正好有點時間,整理下Openstack建立雲主機的流程,大神勿噴。node
1、流程圖算法
2、虛擬機建立流程以下 數據庫
客戶(用戶)端經過命令行CLI或Dashboard Horizon使用本身的用戶名密碼請求認證組件keystone進行用戶的驗證;api
keystone經過查詢在keystone的數據庫user表中是否存在user的相關信息,包括password加密後的hash值,並返回一個token_id(令牌),和 serviceCatalog(一些服務的endpoint地址,cinder、glance-api後面下載鏡像和建立塊存儲時會用到);restful
客戶端帶上keystone返回的token_id和建立虛機的相關參數,經過nova-api地址Post請求nova組件建立虛擬機;網絡
nova-api接收到請求後,首先使用請求攜帶的token_id去訪問keystone,驗證令牌是否有效;架構
keystone驗證經過後返回更新後的認證信息;分佈式
nova api經過查詢Nova DB庫,比對檢查建立虛擬機的參數是否有效與合法;ide
檢查虛擬機name是否符合命名規範,flavor_id是否在數據庫中存在,p_w_picpath_uuid是不是正確的uuid格式,檢查instance、vcpu、ram的數量是否超過配額。
當且僅當全部傳參都有效合法時,更新nova數據庫,新建一條instance記錄,vm_states設爲BUILDING,task_state設爲SCHEDULING;
nova api 遠程調用傳遞請求、參數給nova scheduler,把消息「請給我建立一臺虛擬機」丟到消息隊列,而後定時查詢虛機的狀態;
nova scheduler從queue中獲取到「請給我建立一臺虛擬機」的這條消息;
nova scheduler訪問nova數據庫,經過調度算法,過濾出一些合適的、空閒的計算節點,而後進行排序;
更新虛機節點信息,返回一個最優節點id 給nova scheduler;
nova scheduler選定host(最優節點id)以後,經過rpc.call的方式調用nova-compute服務,把「建立虛機請求」消息再次丟到消息隊列(mq);
nova compute從MQ中獲取到建立虛擬機請求的消息;
#nova-compute有個定時任務,按期從數據庫中查找到運行在該節點上的全部虛擬機信息,統計獲得空閒CPU個數、空閒內存大小和空閒磁盤大小。而後更新數據庫compute_node信息,以保證調度的準確性。
nova compute經過rpc.call的方式查詢nova數據庫中虛機的信息,例如主機模板和id;
nova conductor從消息隊列中拿到請求查詢數據庫中該(虛擬機信息)的消息;
nova conductor查詢nova數據庫;
nova 數據庫返回被查詢的虛擬機信息給nova conductor;
nova conductor把查詢到的虛擬機信息丟到MQ中,而後nova compute從消息隊列中獲取該虛擬機的信息;
nova compute 請求glance 的restful api,下載所須要的鏡像,通常是qcow2格式的; http://www.cnblogs.com/zhoumingang/p/5522463.html
glance api 也會去keystone 驗證請求的token是否有效;
token驗證有效,glance api 返回鏡像信息給nova-compute;
同理,nova compute請求neutron api配置網絡(Quantum(Neutron的前身)),例如獲取虛機的ip地址、掩碼,網關等信息;
neutron api去keystone 驗證請求的token是否有效;
token驗證有效,neutron api 返回網 絡信息給nova-compute;
25-27步驟. 同glance、neutron 驗證token, 返回塊設備信息,即雲硬盤給nova-compute;
28步驟. 根據上面配置的虛擬機信息,生成xml,寫入libvirt.xml文件,而後調用libvirt driver 去使用libvirt.xml 文件啓動虛擬機。
3、總結
一、Openstack這種分佈式的架構,各個模塊之間鬆耦合,能夠很容易的新增模塊,並且配置靈活,服務能夠安裝在不一樣節點,即便部分服務掛了也不會影響。
二、虛擬機建立簡單來講分三步,nova api接受建立虛機請求,nova scheduler爲建立虛機指定宿主機,nova compute啓動虛擬機。若是可以理解上面的全部步驟,那麼對於定位問題能夠精準,甚至有些問題能夠本身解決,譬如虛機error了,若是你看到虛機的信息已經有host信息了,那基本能從novacompute的日誌中看到問題所在,若是沒有,基本是scheduler會有錯誤信息提示。