1. 程式人生 > >OpenStack之Nova架構分析

OpenStack之Nova架構分析

在雲平臺的建設中,最重要的就是雲平臺資源的合理利用和部署的自動化,我們在搭建雲平臺的時候會虛擬出多個虛擬機器來對外對內提供服務,但是如果將所有的伺服器進行物理劃分構建出來很多虛擬機器讓其一直開著會照成一些問題,如:

       1. 資源的利用,也就是有的虛擬機器比沒有在使用,但還在執行

       2. 部署的麻煩,也就是說我們按照計劃的劃分方法,創建出來計劃個數的虛擬機器,這樣在人力上一定不是最明智

       3. 虛擬機器的管理不方便,這麼多的虛擬機器在提供服務,我們需要一個系統來統一管理這些虛擬機器的啟動關閉等

所以,我們就需要一個虛擬機器的管理系統,open stack,他可以很好的將虛擬機器輕量化,就像k8s排程docker image一樣,它可以排程虛擬機器image的建立,刪除,遷移等,也就是說,我們不用配置每一個虛擬機器,它可以將虛擬機器像image一樣進行復制,建立,並且會記錄下來當前該虛擬機器的狀態,再次啟動時,還會恢復到原來虛擬機器的狀態,同時他還會感知叢集負載的情況,保證了叢集的負載均衡。

對於open stack來說它有三大元件:Nova、Quantum、Swift,在三大元件中,Nova主要負責Computer模組,也就是排程管理虛擬機器的建立、啟動、刪除等,Quantum負責虛擬網路,而Swift主要負責雲端儲存。由此可見,Nova是佔據主要核心位置的。下面我們就來討論一下Nova。

Nova主要負責了雲中虛擬機器的管理,舉個例子,對於自來水公司而言,主要提供的資源是水,而水的運輸是通過水管,因此,水管的鋪設及管理系統是是十分重要的,類比一下:物理資源就相當於水,虛擬機器相當於管道,Nova就相當於管道的管理系統。下面我們慢慢介紹一下Nova的架構:

最簡單的基礎架構:


Nova-API:負責接收來自客戶端的http請求,比如建立一個虛擬機器。

Nova-scheduler:負責選擇合適的伺服器節點,這裡的排程策略是先過濾不合適的節點,然後再進行打分操作,選擇出來最合適的節點通知該節點上的nova-computer來進行建立虛擬機器、遷移等操作。

Nova-computer:以一個守護程序的方式執行在計算節點上,專門負責建立虛擬機器。

但是這是最簡單的架構模型,我們想,nova-computer在建立虛擬機器的時候,需要給虛擬機器準備檔案系統,那麼這就需要用到nova-volume(概念如下)

nova-volume:為虛擬機器提供塊裝置儲存,也就是說,它主要負責建立雲硬碟、刪除雲硬碟。大部分功能已被Cinder替代。

在準備好檔案系統的時候,我們還需要給虛擬機器分配合適的IP地址等網路裝置,保證其有一個穩定的網路通訊,那麼這就需要用到nova-network(概念如下)

nova-network:為虛擬機器提供網路服務,也就是說,它實現了網路資源池的管理,包括:IP池、網橋介面、防火牆、VLAN等的管理。大部分功能已被Quantum替代。

我們考慮一個同步和非同步的問題,如果nova-API在接受到客戶端的http請求之後,向nova-scheduler傳送訊息,那麼這就是同步操作,如果整體的操作都是同步的情況,也就是說,在一個請求操作沒有完成之前,所有模組都會停在這裡不能做其他的工作,這必然會照成工作效率的下降,同時,各個模組之間的關係過於密切,一個模組失效的時候,其他的就無法完成工作,因為訊息無法傳遞下去,所以為了降低各個模組的耦合性同時保證操作的非同步性,這裡用到了訊息佇列機制,RabbitMQ(概念如下)

RabbitMQ:訊息佇列機制的實現,各個nova模組之間的通訊幾乎通過該佇列實現,為各個模組傳遞訊息。比如,nova-API在接受到http請求的時候,他會將該請求放到RabbitMQ中,nova-scheduler、nova-volume、nova-network等會從RabbitMQ佇列中獲取相應的任務去執行。

在解決了訊息傳遞的機制之後,我們會不會覺得這個架構中還缺少一個東西,對,就是一個儲存各個模組所需要必要資訊的資料庫,這裡我們一般使用Mysql、Postgres的等資料庫,各個模組都可以通過該資料庫來查詢自己必要的資訊,並且也可以往資料庫中記錄一些更改等資訊。這裡就有了一個nova database(概念如下)

nova-database:用於儲存各個模組所需要的必要的資訊。一般用Mysql即可。

由於這個資料庫中儲存了各個模組的必要資訊,那麼裡面的資料資訊還是十分重要的,由於nova-computer是存在於每一個節點上的,那麼如果攻破了一個節點,那麼,就可以直接訪問該資料庫,危險性可想而知,所以,為了防止該情況的出現,nova-conductor的出現很好的解決了這個問題(概念如下)

nova-conductor:介於nova-database和nova-computer之間,其目的在於消除nova-compuer直接訪問雲資料庫。保證了資料庫的安全性。

那麼,通過上面的介紹,大家的腦子中是不是已經自動的將nova的架構圖補全了呢,那麼下面就是nova的完整架構圖:


以上觀點均為個人觀點,如有不對的地方還請各位大神指正,謝謝