當前位置:
首頁 > 最新 > OpenStack 基礎介紹03——各組件綜述之Nova

OpenStack 基礎介紹03——各組件綜述之Nova

前面,我們通過兩篇文章介紹了 OpenStack 整體概念,接下來我們將對其進行展開,在此之前,我們總體來聊一下 OpenStack 的各組件,以增強對基礎理解。

1 哪些內容需要我們理解?

為了提高針對性,我們將帶著對如下 17 個疑問來對 OpenStack 組件進行學習。

(1)OpenStack 雲實例生命期所需的各種動作都將由那個組件來進行處理和支撐?

(2)Nova 是否具有虛擬能力?

(3)那個組件負責管理整個雲的計算資源、網路、授權及測度?

(4)Nova 有幾部分組成?

(5)消息隊列的什麼機制使得 OpenStack 整個系統高效?

(6)Nova 的那個組件負責實例的生命周期?

(7)調度器負責與 nova-API 的關係是什麼?

(8)Nova 調度器使用了哪幾種基本調度演算法?

(9)Glance 的作用是什麼?

(10)鏡像都存儲在什麼位置?

(11)Glance 構件構成是什麼?

(12)那個組件內建冗餘和失效備援管理,也能夠處理歸檔和媒體流,特別是對大數據(千兆位元組)和大容量(多對象數量)的測度非常高效?

(13)Swift 組件包含機部分?

(14)Swift 中物理存儲對象的位置信息由誰來管理?

(15)哪個組件提供 OpenStack 組件提供認證和訪問策略服務?原理是什麼?

(16)keystone 除了用戶名和密碼授權,另外一種授權是什麼方式?

(17)OpenStack 管理的 Web 介面是什麼?

2 OpenStack 各組件介紹

OpenStack 是面向 IaaS 服務的,即基礎架構雲平台。該平台的可以比喻成一個生產虛擬化基礎架構的車間。這個車間主要生產 a. 虛擬機實例,b. 虛擬存儲塊,c. 虛擬網段等雲服務組件,而每種服務組件都有相應的「車間主任」進行管理、調度和分配,這裡的「車間主任」就是 OpenStack 雲平台的管理模塊,下面對 OpenStack 的管理模塊進行介紹:

在 OpenStack 諸多組件模塊中,包括 7 個重要的管理模塊:

(1)Nova - 計算服務

(2)Glance - 鏡像服務

(3)Swift - 對象存儲服務

(4)Keystone - 認證服務

(5)Cinder - 塊存儲服務

(6)Neutron - 網路服務

(7)Horizon - UI服務

這些核心組件的基本工作原理如下:

通過上圖可見,在制定好的雲系統平台上,用戶在經 KeyStone 模塊授權後(Provide Auth),通過 Horizon 或 RestAPI 模式創建虛擬機服務。

創建過程包括了利用 Nova 模塊創建虛擬機實例(VM Provision),該 VM 採用了 Glance 模塊提供的鏡像服務(Provide Image),然後用 Neutron 模塊為新建的 VM 分配 IP 地址,把其納入到虛擬網路中(Provide network connectivity),之後再通過 Cinder 模塊創建的 Volume 為 VM 掛載存儲塊。整個過程都在 Cellometer 模塊的資源監控下(Monitors),Cinder 產生的 Volume 和 Glance 提供的 Image 可以通過 Swift 的對象存儲機制進行保存。

通過以上解析我們可以看到 OpenStack 雲平台服務的提供主要是依靠 Nova、Glance、Cinder 和 Neutron 四個核心模塊完成的,相對四個輔助模塊 Horizon、Cellometer、Keystone、Swift 提供的訪問、監控、許可權和對象存儲功能

上面這幾個核心組件我們經常接觸到,但未必真正了解,下面讓我們來認識一下吧。

2.1 外部組件

圓形為 OpenStack 組件,矩形為外部組件,先介紹一下外部組件:

(1)RabbitMQ, Qpid, ZeroMQ 為消息隊列。

(2)xapi+XCP, xapi+XenServer, libvirt+KVM, libvirt+QEMU, libvirt+LXC, libvirt+VMWare 為虛擬化技術。

(3)LVM+IET, LVM+tgt, Xen Storage Manager, SAN (Solaris, HP, SolidFire), NexentaStor, NetApp, Ceph, Sheepdog 為外部擴展 iscsi 存儲,用來掛載遠程塊存儲設備。

(4)MySQL, PostgreSQL, sqlite 為資料庫。

(5)Apache, Nginx 為 web 伺服器。

(6)memcache, any Django-supported database backend (e.g., MySQL, PostgreSQL, sqlite)為會話緩存技術。

(7)floating IP 為伺服器對外網路 IP,fixed IP 為虛擬機網段 IP。

2.2OpenStack 組件

以下是 OpenStack 組件簡介:

(1)nova-compute 通過虛擬驅動技術管理虛擬機,一般採用 KVM+libvirt 或 XCP+xapi 技術。

(2)nova-network 通過 linux 網路技術實現虛擬機與物理伺服器的通信,Dnsmasq 與DHCP 伺服器相似,向虛擬機分發 IP。(F 版為 Quantum,G 版為 Neutron)

(3)nova-volume 利用 LVM 創建和管理本地磁碟卷,使用 IET 或 tgt 實現 iSCSI。(F 版為 Cinder)

(4)openstack-dashboard 基於 Django 的 web 應用,使用 apache web 伺服器,默認使用 memcache 做會話緩存,novnc 通過 VNC 技術遠程控制虛擬機節點。

3 OpenStack 計算設施 —— Nova

Nova 是 OpenStack 計算的彈性控制器。

這個模塊很重要,可以說是 OpenStack 最核心的模塊,以至於在 OpenStack 的初期版本里大部分的雲系統管理功能都是由該模塊負責管理的,只不過後來為了減輕該「車間主任」的壓力,也便於功能分配管理,才把虛擬存儲、網路等部分分離出來,而使該模塊主要負責雲虛擬機實例(Compute 或 Instance) 的生成、監測、終止、授權及測度等管理功能(問題 1 和 3)。

Nova 本身並不提供任何虛擬能力(問題 2),它由 nova-compute 模塊通過 libvirt、XenAPI 等管理 hypervisor,從而管理虛機,此外它還通過 nova-api 服務向外提供如 EC2(亞馬遜彈性計算雲) 兼容、管控功能等的介面(問題 17),通過 nova-scheduler 模塊提供虛機調研邏輯等;這些模塊間的通信全部通過消息隊列完成。

功能及特點:實例生命周期管理、計算資源管理、網路與授權管理、基於 REST 的API、非同步連續通信、支持各種宿主:Xen、XenServer/XCP、KVM、UML、VMware vSphere及 Hyper-V。

3.1 Nova 包含以下主要部分(問題 4)

API Server(nova-api)、消息隊列(rabbit-mq server)、運算工作站(nova-compute)、網路控制器(nova-network)、卷管理(nova-volume)、調度器(nova-scheduler)。

(1)API 伺服器(nova-api)

API 伺服器提供了雲設施與外界交互的介面,它是外界用戶對雲實施管理的唯一通道。通過使用 web 服務來調用各種 EC2 的 API,接著 API 伺服器便通過消息隊列把請求送達至雲內目標設施進行處理。作為對 EC2-api 的替代,用戶也可以使用 OpenStack 的原生API,我們把它叫做「OpenStack API」。

(2)消息隊列(Rabbit MQ Server)

OpenStack 內部在遵循 AMQP(高級消息隊列協議)的基礎上採用消息隊列進行通信。Nova 對請求應答進行非同步調用,當請求接收後便則立即觸發一個回調。由於使用了非同步通信,不會有用戶的動作被長置於等待狀態(問題 5)。例如,啟動一個實例或上傳一份鏡像的過程較為耗時,API 調用就將等待返回結果而不影響其它操作,在此非同步通信起到了很大作用,使整個系統變得更加高效。

(3)運算工作站(nova-compute)

運算工作站的主要任務是管理實例的整個生命周期(問題 6)。他們通過消息隊列接收請求並執行,從而對實例進行各種操作。在典型實際生產環境下,會架設許多運算工作站,根據調度演算法,一個實例可以在可用的任意一台運算工作站上部署。

(4)網路控制器(nova-network)

網路控制器處理主機的網路配置,例如IP地址分配,配置項目 VLAN,設定安全群組以及為計算節點配置網路。

(5)卷工作站(nova-volume)

卷工作站管理基於 LVM(邏輯卷管理的簡寫,它是 Linux 環境下對磁碟分區進行管理的一種機制,通過 LVM,用戶在無需停機的情況下可以方便地調整各個分區大小) 的實例卷,它能夠為一個實例創建、刪除、附加卷,也可以從一個實例中分離卷。

卷管理非常重要!因為它提供了一種保持實例持續存儲的手段,比如當結束一個實例後,根分區如果是非持續化的,那麼對其的任何改變都將丟失。可是,如果從一個實例中將卷分離出來,或者為這個實例附加上卷的話,即使實例被關閉,數據仍然保存其中。這些數據可以通過將卷附加到原實例或其他實例的方式而重新訪問。

因此,為了日後訪問,重要數據務必要寫入卷中。這種應用對於數據伺服器實例的存儲而言,尤為重要。

(6)調度器(nova-scheduler)

調度器負責把 nova-API 調用送達給目標(問題 7)。調度器以名為「nova-schedule」的守護進程方式運行,並根據調度演算法從可用資源池中恰當地選擇運算伺服器。有很多因素都可以影響調度結果,比如負載、內存、子節點的遠近、CPU 架構等等。強大的是 nova 調度器採用的是可插入式架構。

目前 Nova 調度器使用了幾種基本的調度演算法(問題 8):

(1)隨機化:主機隨機選擇可用節點;

(2)可用化:與隨機相似,只是隨機選擇的範圍被指定;

(3)簡單化:應用這種方式,主機選擇負載最小者來運行實例。負載數據可以從別處獲得,如負載均衡伺服器。

通過今天的文章,各位小夥伴對 OpenStack 各組件的認識是否更加完整了呢?如果有興趣,各位可以對 OpenStack 進一步展開研究,而且我們關於這個話題的分享也將繼續。

圖片授權基於:CC0協議

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 聽泉Rit 的精彩文章:

OpenStack 基礎介紹02——整體架構介紹

TAG:聽泉Rit |