一、Nova主要作用
- Nova是負責提供計算資源的模塊,也是openstack中的核心模塊,其主要功能是負責虛擬機實例的生命週期管理、網絡管理、存儲卷管理、用戶管理以及其他的相關雲平臺管理功能。
二、Nova的系統架構
部署架構特點:
- 無中心結構
- 各組件無本地持久化狀態
- 可水平擴展
- 通常將nova-api、nova-scheduler、nova-conductor組件合併部署在控制節點上
- 通過部署多個控制節點實現HA和負載均衡
- 通過增加控制節點和計算節點實現簡單方便的系統擴容
三、Nova的主要組件
Nova-api服務
- 接收和相應來自最終用戶的計算API請求,對外提供一個與雲基礎設施交互的接口,也是外部可用於管理基礎設施的唯一組件。
- nova-api 對接收到的 HTTP API 請求會做如下處理:
1)檢查客戶端傳人的參數是否合法有效
2)調用 Nova 其他子服務的處理客戶端 HTTP 請求
3)格式化 Nova 其他子服務返回的結果並返回給客戶端 - 只要是跟虛擬機生命週期相關的操作,nova-api 都可以響應。大部分操作都可以在 Dashboard 上找到
Nova-api-metadata服務
- 接收來自虛擬機發送的元數據請求。nova-api-metadata一般在安裝nova-network服務的多主機模式下使用
Nova-compute(向外提供的端口爲8774)
-
OpenStack 對實例的操作,最後都是交給 nova-compute
來完成。它是一個持續工作的守護進程,通過hypervisor的api來創建和銷燬虛擬機實例,nova-compute 與 Hypervisor 一起實現 OpenStack 對實例生命週期的管理。 -
nova-compute 的功能可以分爲兩類:
1、定時向 OpenStack 報告計算節點的狀態
每隔一段時間,nova-compute 就會報告當前計算節點的資源使用情況和
nova-compute 服務狀態。可以查看日誌 /var/log/nova/nova-compute.log
2、實現實例生命週期的管理
OpenStack 對實例最主要的操作都是通過 nova-compute實現的,包括實例的啓動、關閉、重啓、暫停、恢復、刪除、調整實例大小、遷移、創建快照等。
當 nova-scheduler 選定了部署實例的計算節點後,會通過消息中間件 RabbitMQ 向選定的計算節點發出創建實例的命令。
該計算節點上運行的 nova-compute 收到消息後會執行實例創建操作。日誌 /var/log/nova/nova-compute.log 會記錄整個操作過程。
Nova-conductor
- nova-compute 需要獲取和更新數據庫中實例的信息。但 nova-compute 並不會直接訪問數據庫,而是通過 nova-conductor 實現數據的訪問
- nova-conductor模塊作用於nova-compute服務與數據庫之間,避免了由nova-compute服務對雲數據庫的直接訪問。他可以橫向擴展,但是,不要將它部署在運行nova-compute服務的主機節點上
Nova-scheduler
- nova-scheduler 解決如何選擇在哪個計算節點上啓動實例的問題。
- 當創建實例時,用戶會提出資源需求,例如 CPU、內存、磁盤各需要多少。OpenStack 將這些需求定義在 flavor中,用戶只需要指定用哪個 flavor 就可以了。nova-scheduler 會按照 flavor 去選擇合適的計算節點。
- OpenStack 的虛擬機調度策略主要是由 FilterScheduler ChanceScheduler 和實現的,其中FilterScheduler作爲默認的調度器實現了基於主機過濾(filtering)和權值計算(weighing)的調度算法,而ChanceScheduler 則是基於隨機算法來選擇可用主機的簡單調度器。
- FilterScheduler調度過程分爲兩步:
1、通過過濾(filtering)選擇滿足條件的計算節點(運行
nova-compute)。
2、通過權重計算(weighting)選擇在最優(權重值最大)的計算節點上創建實例。
四、VM實例化流程
- 客戶(可以是 OpenStack 最終用戶,也可以是其他程序)向 API(nova-api)發送請求:“幫我創建一個虛機”。
- API 對請求做一些必要處理後,向 Messaging(RabbitMQ)發送了一條消息:“讓 Scheduler 創建一個虛機”。
- Scheduler(nova-scheduler)從 Messaging 獲取到 API
發給它的消息,然後執行調度算法,從若干計算節點中選出節點 A。 - Scheduler 向 Messaging 發送了一條消息:“在計算節點 A 上創建這個虛機”。
- 計算節點 A 的 Compute(nova-compute)從 Messaging 中獲取到 Scheduler
發給它的消息,然後在本節點的 Hypervisor 上啓動虛機。 - 在虛機創建的過程中,Compute 如果需要查詢或更新數據庫信息,會通過 Messaging 向
Conductor(nova-conductor)發送消息,Conductor 負責數據庫訪問。