OpenStack入門之各元件解析(進階)

胡飛發表於2016-04-19

一、OpenStack 入門 之 基礎知識

二、OpenStack 入門 之 基本元件

三、OpenStack 入門 之 各元件解析(基礎)

四、OpenStack 入門 之 各元件解析(進階)

五、OpenStack 入門 之 實際操作

六、OpenStack 入門 之 擴充套件話題

七、OpenStack 入門 之 若干討論

寫在前面

學習目標:

  • 掌握更多元件的架構和功能

本次筆記的內容有:

  • Ceilmeter 元件解析
  • Heat 元件解析
  • Trove 元件解析
  • Sahara 元件解析
  • Ironic 元件解析

1. Ceilometer元件解析

又稱為 OpenStack Telemetry(遠端測量收集資料),是 OpenStack 裡面做 metering 的專案。Ceilometer 的主要目的是 為計費提供資料支援。 OpenStack 本身不提供計費的功能,Ceilometer 會給人在做二次開發的時候實現計費功能帶來很大的便利。

[ 計費用和監控用計量資料的區別?]

側重點 不一樣。Seilometer 是計量與計費相關的資料,這些資料作為訊息在網路中傳輸的時候,都是會經過簽名的,從資訊保安的角度看,簽名的最大的用處是具有 不可抵賴性,涉及到計費應用的時候是很重要的。當然,Ceilometer 現在也增加了更多其它的功能,幫助運維人員去實現更多的監控功能,逐漸地減少甚至是省去一些重新開發部署一套監控系統的工作,降低整個系統的複雜性。

[ Ceilometer 的三個要點:]

  • 原始資料的來源
  • 資料的儲存
  • 如何提供給第三方系統(比如說。二次開發的計費系統)

[ 原始資料的來源主要有三個途徑:]

  1. 通過 MQP 訊息中介軟體收集各個元件發出來的訊息
  2. 通過 Ceilometer 的一些 agent 來呼叫 OpenStack 各個 component 的 api 獲得資料,這裡的 component 包括 Swift、Cinder、Neutron,Trove,Sahara,Ironic
  3. 如果要有效的採集和 Nova 相關的資料或者說和 OpenStack 的計算服務相關的資料,通過在每個計算節點上執行 Ceilometer 的 polling agent 獲得虛擬機器的資訊

[ 資料的儲存:]

Ceilometer 的儲存也是依賴第三方後端來實現的,預設的後端資料庫是 MongoDB,是一個 key- value 資料庫,當然現在也支援其它資料庫包括 HBase、MySQL,首選 MangoDB。

[ 第三方系統:]

最主要的使用方式就是第三方系統,通過呼叫 Ceilometer API 獲得計量資料,設定報警條件和預值,監聽報警,進一步去實現計費和監控功能,具體使用的時候涉及到 Ceilometer 怎麼設定,每項資料通過呼叫什麼 API 獲得,怎麼設定報警的預值等等

2. Heat 元件解析

又被稱為 openStack Orchestration,Heat 是在 OpenStack 裡面提供 Orchestration 服務的元件。把一個 IT 系統的各個模組和資源組織、排程起來,形成一套完整的可以實現一些業務功能的有機的系統。

AWS 裡面有一個 CloudFormation 的東西,Heat 和這個比較像,按照使用者寫的模版,或者說指令碼,把 OpenStack 裡邊的各種資源給它例項化並且組織起來,形成一個完整的應用,這些指令碼在 Heat 裡叫作 Template,Template 生成的東西叫作 Stack。Template 裡面會寫清楚建立一個 Stack 需要用到哪些資源,然後這些資源的相互關係是怎麼樣的,這裡面的資源包括我們說的虛擬機器、卷(雲硬碟)、使用者、IP 地址等等都是屬於這地方所表述的資源。

Heat 的主要任務就是負責這個 Stack 的生命週期:建立、更新和銷燬。

[ Template 的組成:]

  • description 註釋
  • parameters 引數
  • resources 資源
  • outputs 輸出

部分截圖:

[ 更復雜的結構:]

建立一個 WordPress 網站,建立一個三層架構的網站…

PS:Heat 可以和 Ceilometer 配合使用來實現 auto scaling 也可以相容 cloudformation 的模版

3. Trove 元件解析

[ Trove 的功能:]

根據使用者的請求建立一個包含資料庫的虛擬機器(VM Instance),根據使用者給的引數比如說資料庫的型別、使用者名稱密碼等等,對資料庫進行安裝配置。

[ 資料庫的建立:]

建立虛擬機器後由 Trove 去安裝;也可以使用者選擇事先做好 Trove 的映象(映象裡已經裝好資料庫了)。後者的效率會更高一些。

[ Trove 支援的資料庫有:]

  • 關係型資料庫 MySQL
  • NoSQL 型資料庫 MongoDB、Cassandra

[ 四個元件:]

  • Trove API 提供 RESTful API,無狀態的,可以橫向擴充套件,可以做負載均衡,可以接比較多的使用者請求。
  • Trove Taskmanager 完成具體管理命令的執行,比如:建立例項、銷燬例項、管理例項的生命週期、運算元據庫等等。主要的工作方式就是去監聽這個 RabbitMQ 中介軟體,發 MQP 這樣一些呼叫的請求,然後去實現這些請求。
  • Trove-conductor 負責和資料庫互動,與 Nova Conductor 比較類似,執行在 host 上。
  • Guest agent 執行在要去執行資料庫服務的虛擬機器裡面,每一類資料庫都有自己對應的 agent,讓 Trove 對一個更多的資料庫就要自己寫對應的資料庫的 agent,也是 OpenStack 常用的一種方式了。

[ Trove 面臨的挑戰:]

不支援自動配置資料庫的 HA

4. Sahara 元件解析

[ Sahara 的功能:]

在 OpenStack 上快速建立 Hadoop 叢集,利用 Iaas 上空閒的計算能力做大資料的離線處理(設計 Sahara 的初衷)

[ Sahara的架構如圖所示:]

注意圖中的幾個地方,Sahara Dashboard、plugins、Swift(儲存持久化資料)、RESTful API

[ Sahara 有兩種使用模式:]

  1. IaaS 模式/管理模式
  2. PaaS、DAaaS 模式/使用者模式/EDP模式(DAaaS,Data-analysis-a-Service模式)

[ 關於IaaS 模式有幾個概念需要弄清楚:]

(1)節點:是用來 執行 Hadoop 叢集的機器。指的是 Sahara 所 provition 的這個 Hadoop 叢集的節點,實際上往往是一些虛擬機器,也可以是一些物理節點。

(2)節點組:是按照節點的型別來劃分的

(3)節點組模板:定義節點組。一個關於節點組模板配置檔案例子如下

{
"name":"test-master-templ",
"flavor_id":"2",
"plugin_name":"vanilla",  # 宣告用的是Hadoop哪個發行版的版本名
"hadoop_version":"1.2.1",  # 版本號
"node_processes":["jobtracker","namenode"] # 需要執行的哪些程式
}

(4)叢集:一個完整的 Hadoop 叢集,叢集在 Sahara 裡怎麼定義呢?它是通過叢集模板來定義叢集的。下面是叢集模板的例子:

{
"name":"demo-cluster-template",
"plugin_name":"vanilla",
"hadoop_version":"1.2.1",
"node_groups":[
    {
        "name":"master",     # 這是節點組的name
        "node_group_template_id":"b1ac3f04-c67f-445f-b06c-fb722736ccc6",     # 引用節點組模板
        "count":1    # 這個叢集裡面,這個節點組包括了幾個節點數量
    }

    {
        "name":"workers",
        "node_group_template_id":"dbc6147e-4020-4695-8b5d-04f2efa978c5",
        "count":2
    }]
}

我們往往把這個 Hadoop 裡面執行 jobtracker 和 namenode 的節點叫作 master 節點,把執行 task tracker 和 data node 的節點叫作 worker 節點。所以上面的例子就是由一個 master 節點和兩個 worker 節點組成。

[ 關於 EDP 模式:]

  • 前提:在 OpenStack 裡面至少要建立一個 Hadoop 叢集,也可以是多個;
  • 準備工作:上傳要處理的資料,我們需要很清楚我們需要處理的資料是放在哪裡的,編寫 Job 並且上傳,需要給 Sahara 一個三元組,就是在呼叫 EDP API 的時候它的引數(1.用哪個叢集來處理這堆資料;2.這個資料的元和素在哪裡,要處理的資料在哪裡放著的,然後處理完之後存哪裡去;3.我們要執行的 Job 是什麼)

5. Ironic 元件解析

虛擬化環境中涉及到儲存 IO 的時候會不會出現效能問題?確實是存在的,儘管虛擬化 Hypervisor 都已經優化的很好了,計算方面的效能損耗已經很低了,但是說到 IO 特別是虛擬機器還會用到 Cinder 後端來做 Volume,這個問題確實是存在的。

OpenStack 是通過 Ironic 來實現對物理機械的管理,用物理機器來實現雲服務

如何 launch 一個 Baremetal Server 的工作流程

我們可以看到,這個物理節點上 Nova Compute 呼叫的 Ironic API,實際上 launch 的物理機器節點或者說實際提供計算資源的物理節點是由 Ironic Conductor 遠端管理的,通過兩個東西,一個叫作 PXE,一個叫作 IPMI 來遠端管理物理機器,如下圖所示

那麼,為什麼會有這樣的邏輯?因為 Ironic 實際上是從 Nova 一個部分演化出來的。

所以 Ironic 通過 Nova Compute 元件去呼叫 Ironic 的 API,然後再通過 Ironic Conductor 去管理一個遠端的實際提供計算資源的計算節點。(Ironic 以前就是 Nova 的一個 Driver)

實際上如何用物理機器去組雲,用 OpenStack 去管理一堆物理機器來實現雲服務是一個很複雜的事情。

相關文章