版權聲明:轉載請註明出處 JmilkFan:http://blog.csdn.net/jmilk
目錄
前文列表
Openstack組件部署 — Overview和前期環境準備
Openstack組建部署 — Environment of Controller Node
Openstack組件部署 — Keystone功能介紹與認證實現流程
Openstack組件部署 — Keystone Install & Create service entity and API endpoints
Openstack組件部署 — keystone(domain, projects, users, and roles)
Openstack組件實現原理 — Keystone認證功能
Openstack組建部署 — Glance Install
Openstack組件實現原理 — Glance架構(V1/V2)
Openstack組件部署 — Nova overview
Openstack組件部署 — Nova_安裝和配置Controller Node
Openstack組件部署 — Nova_Install and configure a compute node
Nova體系結構
Nova主要有API、Compute、Conductor、Scheduler四個核心服務組成,這些服務之間通過AMQP消息隊列來進行通信。
Client:Nova Client能夠讓Tenant管理員或用戶終端提交指令,是Openstack官方爲了簡化用戶對RESTful API的使用所提供的API封裝,Client能夠將用戶的請求轉換爲標準的HTTP請求。
API(nova-api service):nova-api service能夠接收和響應Client的Compute API調用,所以API就是Client進入Nova的HTTP接口。
Compute(nova-compute service):nova-compute service是一個通過hypervisor APIs(虛擬化層API)來實現創建和終止虛擬機實例的守護進程,Compute通過和VMM的交互來運行虛擬機並管理虛擬機的生命週期。
Scheduler(nova-scheduler service):nova-scheduler service會從queue中接收一個虛擬機實例的請求,並確定該實例能夠運行在哪一臺Compute server中。Scheduler通過讀取數據庫的內容,從可用的池中選擇最合適的Compute Node來創建新的虛擬機實例。
Conductor(nova-conductor):nova-conductor module能夠協調nova-compute service和database之間的交互,Conductor爲數據庫訪問提供了一層安全保障。
Queue:queue是Nova 服務組件之間傳遞信息的中心樞紐。通常使用AMQP(高級消息隊列協議Advanced Message Queuing Protocol)的RabbitMQ消息隊列來實現。
注意:因爲Scheduler只能讀取數據庫內容,和API通過Policy機制來限制數據庫的訪問,所以Scheduler和API這兩個服務都可以直接訪問數據庫。但是支持引入了Conductor服務之後,更加規範的方法是通過Conductor服務來對數據庫進行操作。
虛擬機實例化流程
Step1:首先用戶執行Nova Client提供的用於創建虛擬機的指令
Step2:nova-api service監聽到來自於Nova Client的HTTP請求,並將這些請求轉換爲AMQP消息之後加入消息隊列Queue
Step3:通過消息隊列Queue調用nova-conductor service
Step4:nova-conductor service從Queue接收到虛擬機實例化請求消息後,進行一些準備工作(EG. 彙總HTTP請求中所需要實例化的虛擬機參數)
Step5:nova-conductor service通過Queue告訴nova-scheduler去選擇一個合適的Compute Node來創建虛擬機,此時nova-scheduler會讀取數據庫的內容
Step6:nova-conductor從nova-scheduler得到了合適的Compute Node的信息後,在通過Queue來通知nova-compute service實現虛擬機的創建
送虛擬機實例化的過程可以看出,Nova中最重要的4個服務之間的通信都是通過Queue來實現的。這符合鬆耦合的實現方式。