OpenStack Compute(Nova)功能分析
OpenStack Compute 提供給一個組織云的工具,其中的功能包括運行虛擬機實例, 管理網絡以及通過用戶和項目來控制對云的訪問。OpenStack最基礎的開源項目名字稱為Nova,它提供的軟件可以控制基礎設施即服務(IaaS)云計算平臺,和Amazon EC2和Rackspace云服務器有一定程度相似。OpenStack Compute 沒有包含任何的虛擬化軟件,相反它定義和運行在主機操作系統上的虛擬化機制交互的驅動程序,并通過基于Web的程序應用接口(API)來提供功能的使用。
功能分析Compute的組件和及其作用
OpenStack Compute是由幾個主要的組件所組成的。
云控制器(cloud controller)包含了很多組件,API服務器(nova-api),計算服務器(nova-Compute),網絡控制器(nova-network),調度器(nova-schedule),卷控制器(nova-volume),消息隊列(queue),DashBoard。
API 服務器為云控制器扮演著web服務前端的角色。這個云框架的核心是API服務器。API服務器命令和控制hypervisor,存儲還有網絡,讓用戶可以實現云計算。API端點是一個基礎的HTTP網頁服務,通過使用多種API接口(Amazon,Rackspace和相關的模型)來提供認證,授權和基礎命令和控制功能,增強了API和多種其他供應商已經存在的資源池的兼容性。
計算控制器(Compute controller)提供了計算服務器資源,其中包含計算服務。Compute控制器控制運行在宿主機上的計算實例。可以通過使用API的方式把命令分發到Compute控制器,進行以下的操作:
- 運行實例
- 結束實例
- 重啟實例
- 接觸卷
- 斷開卷
- 獲得控制臺輸出
- 對象存儲(Object Store)組件選擇性提供存儲服務。
- 授權管理器(auth manager)提供認證和授權服務。
- 卷控制器(volume controller)為Compute服務器提供了快速持久的塊級別存儲。卷工作處理器和iSCSI存儲進行交互,管理基于LVM的實例卷,其中可以進行的操作包括:
- 創建卷
- 刪除卷
- 創建計算卷
卷可以在實例間傳送,但是一次只能連接到一個實例。
網絡控制器(network controller)提供了虛擬網絡,使得Compute服務器和其他的Compute服務器以及外網進行交互。
網絡控制器管理在宿主機上的網絡資源。API服務器通過消息隊列分發命令。這些命令之后會被網絡控制器處理,特定的操作有:
• 分配固定IP地址
• 為項目配置VLAN
• 為計算節點配置網絡
目前為止,Nova只支持Linux網橋網絡使得虛擬接口可以通過物理接口鏈接到外部網絡。網絡控制器提供了虛擬網絡來使得計算服務器之間互相交互以及和公共網絡交互。
Nova支持3種類型的網絡,實現成3種相對應的“網絡管理”類型:
• Flat網絡管理模式
• Flat DHCP網絡管理模式
• VLAN網絡管理模式
這3種類型的網絡管理模式可以在一個云系統里面共存。然而,如果沒有為一個給定的項目選擇它的網絡管理類型,就不能在一個給定的Compute安裝中配置多于一種類型的網絡模式。
Nova有固定IP和浮動IP的概念。固定IP被分發到創建的實例,然后實例持有固定IP直到實例被顯式地停機。浮動IP是一些可以和實例動態相連的IP地址。這些地址在任何時刻可以斷開連接或者連接到另外的實例。用戶可以為他們的項目保留一個浮動的IP地址。
•Flat模式
網絡管理員指定一個子網。為虛擬機實例分配的IP地址都是從這個子網內面獲取,然后在虛擬機啟動時候注入虛擬機鏡像。每個實例從有效地址池接收到一個固定的IP地址。網絡管理員必須要配置好Linux網橋(名為br100),包括擁有網絡的網絡控制器還有擁有實例的云控制器。所有的系統實例都是和同一個網橋所相關的,網絡管理員需要手動配置相連關系。注意:目前為止配置注入只能夠Linux類型的操作系統正常工作,網絡配置保存在/etc/network/interfaces路徑。
•Flat DHCP模式
啟動一個DHCP服務器,把從一個指定的子網中獲得的IP地址傳遞到虛擬機實例,此外網絡管理員還需手動配置網橋。為虛擬機實例所分配的IP地址都是從網絡管理員指定的子網中所獲得的。就像Flat模式一樣,所有的實例都在計算節點中和一個網橋相關。除此以外需要一個DHCP服務器運行來配置實例。在這個模式里面,Compute做了更多一些的配置,嘗試和以太網設備(默認為eth0)建立網橋。Compute也會運行dusmasq作為DHCP服務器監聽這個網橋。之后實例做一次dhcpdiscover操作來接收他們的固定IP。
在兩個Flat模式里面,網絡節點沒有扮演默認網關的角色。實例都被分配了公共的IP地址。Compute節點持有每個項目和實例都會創建的iptables/ebtalbes實體,來抵抗IP/MAC地址欺騙或者是ARP欺騙。
•VLAN網絡模式
OpenStack Compute的默認模式。在這個模式里面,Compute為每個項目創建了VLAN和網橋。為了實現多臺機器的安裝,VLAN網絡模式需要一個支持VLAN標簽(IEEE 802.1Q)的路由器。每個項目獲得一些只能從VLAN內部訪問的私有IP地址。為了實現用戶獲得項目的實例,需要創建一個特殊的VPN實例(代碼名為cloudpipe)。Compute為用戶生成了證明書和key,使得用戶可以訪問VPN,同時Compute自動啟動VPN。它為每個項目的所有實例提供一個私有網絡段,這個私有網絡段都是可以通過因特網的VPN訪問的。在這個模式里面,每個項目獲得它自己的VLAN,Linux網橋還有子網。被網絡管理員所指定的子網都會在需要的時候動態地分配給一個項目。DHCP服務器為所有的VLAN所啟動,從被分配到項目的子網中獲取IP地址并傳輸到虛擬機實例。所有屬于某個項目的實例都會連接到同一個VLAN。OpenStack Compute在必要的時候會創建Linux網橋和VLAN。
調度器(scheduler)選擇最合適的Compute控制器來放置一個實例,實現負載均衡。
消息機制 OpenStack Compute 是建立在無共享(shared-nothing)的,基于消息(messaging-based)架構上的。在多服務器上運行所有的主要組件包括Compute 控制器,卷控制器,網絡控制器以及對象存儲。云控制器通過HTTP協議和內部對象存儲通信。但是云控制器和調度器,網絡控制器以及卷控制器是通過AMQP協議(Advanced Message Queue protocol),即高級消息隊列協議來通信。為了避免在等待響應的時候造成每個組件阻塞,OpenStack Compute使用了異步調用,當響應被接收時候會觸發回調。為了取得同樣組件的多份拷貝的無共享屬性,OpenStack Compute 在分布式數據存儲上保存了整個云系統的狀態。對系統的更新會被寫入到存儲里面,必要時會使用原子性的事務來進行這個操作。對狀態的請求會從存儲里面讀出。在有限的例子,讀取的結果在很短的時間之內緩存到控制器里面。
一個典型的消息傳遞事件從API服務器接受來自用戶的請求開始。這個API服務器授權這個用戶,保證用戶是被允許發起相關的命令。在請求中所涉及到的對象的有效性被評估,如果評估有效,為了相關的工作處理器,這請求會被路由到消息引擎。工作處理器在它們各自角色或者主機名的基礎上監聽這個隊列。當監聽產生了工作請求,工作處理器接收這個任務并開始執行。完成之后,響應會分發到隊列里面。隊列會被API服務器接收和轉述到發起請求的用戶。在整個過程中數據庫實體會根據需求被查詢,增加或者消除。
基于網頁的控制臺DashBoard
在OpenStack Compute安裝時搭配OpenStack DashBoard and Django-Nova 項目提供的基于網頁的控制臺,可以使用DashBoard接口。Django提供了和OpenStack Compute云控制器基于網頁的交互。為了創建一個更有魯棒性的和為產出準備的安裝,需要用Apache網頁服務器和MySQL/Postgres數據庫進行配置。
支持虛擬機熱遷移
支持集群安裝(使用Puppet)
使用Puppet進行集群自動安裝的方法在下面的配置下經過測試:
• 多服務器上安裝nova-Compute組件
• 操作系統:ubuntu10.04或者ubuntu10.10
• 多網絡模式(Vlan模式,Flat模式)
支持EC2 API
EC2 API 提供了客戶遷移,允許用戶繼續使用熟悉的EC2 API來管理他們的解決方案直到他們學會利用本地的具有高性能的OpenStack API。
via openstack.org.cn