OpenStack

第一章 OpenStack基礎

  1. OpenStack管理的資源及提供的服務
    OpenStack做為一個操作系統,它管理的資源主要有三個方面:計算,存儲,網絡。OpenStack管理這些資源并提供給上層應用或用戶去使用。這些資源管理是通過OpenStack中的各個項目來實現的。其中計算資源管理相關項目是Nova;存儲相關的主要有塊存儲服務Cinder,對象存儲服務Swift和鏡像存儲服務Glance;與網絡相關的主要是一個和軟件定義網絡相關的項目Neutron(原名叫Qauntum)。另外Nova中有一個管理網絡的模塊叫做NovaNetwork,它做為一個比較穩定的遺留組件,現在仍然在OpenStack里和Neutron并存,在小規模部署里面,為了追求穩定和減少工作量會去使用它對網絡資源進行管理。

2.OpenStack資源VS公有云資源:

U`2FG}BKLL`AIR`8%Z1)MTG.png
  1. OpenStack基本組件
    1) Nova(OpenStack Compute):
    它是OpenStack里最核心的項目, 主要作用是控制虛擬機的創建以及改變他的容量和配置;它還可以做虛擬機的銷毀,即虛擬機的整個生命周期都是由Nova來控制的。Nova的部署和運行一般有兩種情況:一種是作為Controller節點去運行,它的核心部分主要有Scheduler(決定將要啟動的虛擬機調度到哪個物理節點上),Conductor(對所有的計算節點進行統一管理),NovaCell(級聯),用這些來控制其它一些運算節點。另外一種是作為Compute節點運行,它的核心部分是Nova Compute,用來控制運行實際的虛擬機。
    2) Cinder:
    它主要用途是用來提供塊存儲服務。它最核心的兩個部分是Scheduler和Cinder Volume。此處Scheduler的功能和Nova的Scheduler功能接近,用來決定通過哪個Cinder Volume進行讀取操作。而Cinder Volume是實際控制存儲設備的節點。
    3) Neutron
    它是當下流行的SDN(軟件定義網絡)在OpenStack里的一個實現。Neutron有一個很大特點就是它提供了Plugin組件/模塊(用戶可以自定義)。
    4) Swift
    相對獨立的一個組件,它和其他組件的交互關系比較少。它提供對象存儲服務,類似于亞馬遜S3或者國內七牛這樣一個存儲服務。
    5) Glance
    它是OpenStack里面使用Swift最多的組件,它主要是用Swift來存儲虛擬機的鏡像和快照等。
    6) Keystone
    它主要是為各個組件提供用戶的認證,建權等服務。
    7) Horizon
    它是一個圖形界面。
    8) 其它組件
    Heat: 用來做各個服務的編排。
    Sahara: 使Hadoop能夠在OpenStack上運行。
    ……

第二章 OpenStack架構分析

1.OpenStack組件間的邏輯關系
以E版本為例,含七大基本組件:
Dashboard(即Horizon);Identity(即keystone)compute(即Nova);Image(即Glance);Object Storage(即Swift);Network(即Neutron);Block Storage(即Clinder);
*注:其中Network(即Neutron)和Block Storage(即Clinder)分別是從Compute Network和Compute Vloume發展出來的。但Network組件并沒有直接去替換Compute Network,它是相對獨立的(也是當下流行的SDN)的一個項目,它為Compute提供網絡連接,提供網絡資源管理這些服務。而Block Storage則替換了Compute Vloume,它為Compute提供塊存儲服務。

  1. OpenStack的API
    1)OpenStack各組件間通過相互調用API實現通信。OpenStack的API是基于HTTP協議的RESTful Web API。(REST:表現狀態傳輸VS另外一種Web服務接口協議:SOAP)
    2)REST架構里對資源的操作包括獲取,創建,修改和刪除。正好對應HTTP里提供的GET,POST,PUT,DELETE方法。所以用HTTP來實現REST是比較方便的。
    3)RESTful Web API主要有以下三個要點:
    ①資源地址(即資源的URI):如以http開頭的地址
    ②傳輸資源的表現形式(即Web服務接受與返回的互聯網媒體類型):JSON, XML等。
    ③對資源的操作(即Web服務在該資源上所支持的一系列請求方法):如GET,POST,PUT或DELETE
    4)調用及調試API的方式
    ①curl命令:linux下發送http請求并接受響應的命令行工具
    ②OpenStack命令行客戶端:python寫的命令行客戶端
    ③FireFox或Chrome瀏覽器的REST客戶端:圖形界面
    ④OpenStack的SDK: 不要手寫代碼發送HTTP請求調用REST接口,省去一些諸如Token等數據的管理工作,能夠很方便地基于OpenStack做開發。

3.OpenStack組件間的通信關系

OpenStack組件間的通信關系分為四類:

1)基于HTTP協議的通信

① 出現在各個組件API之間的調用。最常見的是通過Horizon(或說命令行接口)對各組件進行操作的時候產生的通信;另外就是各組件通過Keystone對用戶身份進行校驗的時候產生的通信;還有就是Nova Compute在獲取鏡像的時候對Glance API的調用及Swift數據的讀寫也是通過HTTP協議的RESTful Web API來進行的。

2)基于(消息隊列)AMQP協議的通信

① 主要是每個項目內部各個組件之間的通信。例如Nova的Nova Compute和Scheduler之間及Scheduler和Cinder Volume之間。(注意:由于Cinder是從Nova Volume演化出來的,所以Cinder和Nova之間也有通過AMQP協議通信的關系)

② AMQP協議進行通信也屬于面向服務的架構,所以雖然大部分通過AMQP協議進行通信的組件屬于同一個項目,但是并不要求它們安裝部署在同一個節點上。如NovaCompute 和Nova Conductor反而反而通常要求它們不能部署在同一個節點上;而實際上Nova Conductor和Nova Scheduler也可以放到不同的節點上,這有利于系統的橫向擴展,我們可對其中的各個組件分別按照它們的負載情況進行橫向擴展。(用不同數量的節點去承載它們這些服務)

③ OpenStack并沒有規定AMQP協議的實現,我們經常使用的是private MQ,實際用戶可根據自身情況選擇其它的消息中間件。

3)基于數據庫連接的通信(主要是SQL)

① 出現在各個組件和數據庫之間,這些通信大多也屬于項目內部,和前面基AMQP的類似。它也不要求數據庫和項目其它組件安裝在同一個節點上,它也可以分開安裝,甚至我們還可專門部署這個數據庫服務器,把這些數據庫服務放在上面,然后之間是通過基于SQL的這些連接來進行通信。

② OpenStack同樣沒有規定必須使用哪種數據庫,我們通常使用的是MySQL,實際用戶可根據自身情況選擇其它的數據庫。

4)基于第三方API(或稱為NativeAPI)進行通信

① 出現在各OpenStack各組件和第三方的軟件或硬件之間。如Cinder和存儲后端設備之間的通信;又如Neutron的agent(或者說插件)和網絡設備之間的通信。這些通信都需要調用第三方設備或第三方軟件的API(Native API)。

  1. OpenStack中幾種不同的存儲

1)OpenStack的三種存儲服務:Glance,Swift,Cinder

① Glance(鏡像存儲): 一個鏡像管理服務,本身不具備存儲功能,它的后端可以接其它的存儲系統,可以是存儲設備,本地存儲,Swift,也可以是亞馬遜S3等。

附:三種存儲概念:

文件系統:(有POSIX接口)如Glance里的GFS,Hadoop里的HDFS

塊存儲:如EMC設備,華為的SAN設備,NetApp;“散存儲”一般都提供塊存儲。

對應Cinder,其實Cinder本身也并不是提供數據存儲的,它也需要接一個存儲的后端,即EMC的散設備等,及最新流行的開源的分布式存儲Ceph(可提供塊存儲服務)。

對象存儲:對應Swift,典型代表如亞馬遜的AWS S3。它是通過RESTful Web API去訪問的,它的優勢在于可以很方便地去訪問存儲的數據。

② Cinder

給OpenStack提供塊存儲的接口。它有一個很重要的功能叫卷管理功能。虛擬機并不直接去使用存儲設備(或使用后端的存儲系統),它使用的是虛擬機上的塊設備,可稱為卷(Volume),實際上Cinder就是去創建和管理這些Volume,并且把它掛載到虛擬機上。

③ Swift

提供對象存儲服務。如果使用文件系統,當數據量特別大的時候,存儲性能會急劇下降。而對象存儲拋棄了目錄樹的結構,用一種扁平化的結構去管理數據。實際上Swift只有三層結構:Account(關聯賬戶), Container(容器,對Object分類), Object (最終的數據/即文件)。

  1. OpenStack工作流程

OpenStack工作流程 相當復雜(有五十多個步驟)。虛擬機創建的四個階段 :

scheduling , networking ,block_device_mapping, spawing

  1. OpenStack的部署架構

1)OpenStack各個項目,組件按一定方式安裝到實際的服務器節點上,實際的存儲設備上,然后通過網絡把它們連接起來,這就是OpenStack的部署架構。

2)OpenStack部署分為單節點部署和多節點部署(集群部署)

3)OpenStack的部署架構不是一層不變的,而是根據實際需求設計不同的實施方案。

4)OpenStack的簡單部署架構:

附:三種網絡:

①(綠色)管理網絡:OpenStack的管理節點(或管理服務)對其它的節點進行管理的網絡。它們之間有如不同組件之間的API調用,虛擬機之間的遷移等

②(藍色)存儲網絡:是計算節點,訪問存儲服務的網絡。包括向存儲設備里讀寫數據的流量基本上都需要從存儲網絡走。

③(黃色)服務網絡:是由OpenStack去管理的這些虛擬機對外提供服務的網絡。

四種節點:

①控制節點:是OpenStack的管理節點,先前介紹的OpenStack大部分服務都是運行在控制節點上。如keystone認證服務,Glance管理服務等。

注:特別的,Nova和Neutron這兩個組件必須采用分布式部署。

對于Nova,因為Nova-Compute是控制和管理虛擬機的,所以它必須部署在計算節點上,而Nova其它幾個服務則應該部署在控制節點上。特別要強調的是,Nova-Compute和Nova-Conductor一定不能部署在同一個節點上,因為二者分開的目的就是為了解耦。

對于Neutron,Neutron的插件或Agent需要部署在網絡節點和計算節點上,而其它部分,如Neutron Server可以部署在控制節點上。

②計算節點:指實際運行虛擬機的節點,就是OpenStack的管理的那些虛擬機實際上最后是在計算節點上運行的。

③存儲節點:可以是提供對象存儲的Swift的節點,或者是Swift集群的Proxy節點,也可以是一個其它服務的存儲后端。

④ 網絡節點:主要是實現網關和路由的功能。

5)OpenStack的復雜部署架構:要點如下:

①規模較大的情況下,把各種管理服務部署到不同的服務器上。

② 把OpenStack的同一個服務部署到不同的節點上,形成雙機熱備或者多機熱備的高可用集群。(或者可用負載均衡集群的方式去實現高可用)

③ 在復雜的數據中心環境中,考慮如何與第三方服務進行對接和集成。(如LDAP服務,DNS服務等)

第三章 OpenStack各組件解析(基礎)

1.Nova組件解析

  1. Nova的架構
    除了先前介紹的七大組件外,在此補充兩個組件:nova-conslole,nova-consoleauth,它們的作用是通過支持VNC 或SPICE(獨立計算環境簡單協議)客戶端來訪問虛擬機界面。
    SPICE協議支持USB設備和多屏顯示等功能,使用它需修改nova.conf文件。
  2. Nova對虛擬機的調度機制
    ①placement (放置): 把虛擬機放在哪個物理機上啟動
    ②migration(遷移):從哪個物理機遷移到哪個物理機
    *實際上Nova中的調度器(Scheduler)只完成了placement (放置)的工作,migration(遷移)實際上是由其它組件協同完成的。
    **配置Nova.conf文件:Nova-Scheduler基于Filters對虛擬機進行調度的機制分為兩步,第一步是通過Filters篩選宿主機(含有Compute)這,第二步是對虛擬機進行排序,Nova中該排序叫稱重(weighting),最終完成調度算法,決定了應用哪臺宿主機上啟動哪臺虛擬機。
    注:在nova.conf中可以通過ram_allocation_ratio參數設置內存的超配比例,其前提是使用RamFilter。
  1. Swift組件解析
    1)Swift歷史相對較長,比較獨立,它和其它組件的耦合度比較低,有自己完整的存儲體系,不依賴第三方軟件或設備(如不依賴keystone做用戶認證和建權)。
    ★對象存儲:采用RESTful接口,支持直接從互聯網訪問存儲系統進行數據的讀寫。
    2)Swift接口:它和其它組件接口類似,也是RESTful的Web API,總共有四個部分組成:第一個是HTTP操作(GET,POST,PUT或DELETE);第二個是認證信息(主要是用戶的身份信息);第三個是指示資源地址的URL(包含域名或地址及Account, Container,Object);第四個是(可選項)數據和元數據。
    3)Swift其它要點:
    Swift的架構:整體架構是RESTful API,它是通過一個叫Proxy Server來實現的。(可對它進行擴展,做Load Balancer,用它去接收上面的HTTP請求,然后把請求轉發到實際的StorageServer上)
    搭建Swift時的注意事項:
    a.(小規模集群)采用全對等架構,即它的每個(Server)節點都一樣。
    b.用Load Balancer把服務器組成一個集群。
    c. (小規模集群)每個服務器是一個zone。
    d. 小規模Swift集群,服務器數量最少是5個。(或說最小集群是五個服務器)
    e. 不要用虛擬機和RAID。(不要把Swift放到虛擬機里去做實現。)
    附:Swif 2.0的新功能:
    a. 存儲策略(核心功能):讓用戶能夠選擇數據的存儲策略。
  2. Cinder組件解析
    1)傳統數據中心的存儲設備:SAN或盤陣,指一類設備,通過網絡連接給服務器提供存儲空間。SAN設備和服務器之間的網絡連接主要有兩種形式,第一種叫Fibre Channel(FC),用專用光線連接網絡; 另外一種叫iSCSI,基于以太網協議/IP協議。
    注:Cinder存儲服務可以為虛擬機提供云硬盤。
    2)Cinder API
    ①不同于Swift的RESTful API,它提供一些操作和管理功能
    ②實際流量是不通過Cinder的這些組件的,而是直接通過存儲設備和服務器之間的網絡連接走的,該連接可以是FC(光纖通道)或iSCIS(基于IP的數據傳輸通道)傳輸數據到服務器。
  1. CinderVolume

① 通過Driver適配其它設備。(屏蔽底層硬件異構性)

  1. Neutron組件解析
    1)傳統數據中心的網絡:它分為幾個層(Tier),首先是服務器接入的第一級交換機叫接入交換機(往往在機架的頂部又稱為(TOR)架頂交換機);往上會接入一個匯聚層的交換機叫匯聚交換機(往往放在一排機架的頂頭位置);再往上會接入核心交換機,它把匯聚交換機連接起來,往往不只一個。
    2)根據ISO網絡模型,網絡分為七個層(此處是協議棧里的層,layer),OpenStack和Neutron主要關注其中的二三層,分別是數據鏈層和網絡層。
    3)在OpenStack和Neutron出現之前的虛擬化網絡:用Qauntum去虛擬化網絡,它使用linux系統里的一個軟件叫虛擬網橋,它實現的網橋不存在物理信號問題,可簡單為它是一個二層的交換機(跑在服務器虛擬機內部,把虛擬機都連接到此交換機上),可用它來搭建一個虛擬化環境,但是如果放到云環境中去,涉及租戶間流量隔離問題,此網橋就不滿足需求了,因為它是連通的(把所有虛擬機連接在同一個虛擬網絡里),跟普通交換機無太大區別。
    4)Nova中的一個管理網絡模塊Nova Network在前面網橋的基礎上增加了一個模塊,它可以有兩種工作模式:①Flat DHCP工作模式②基于VLAN的隔離 ,它勉強滿足了云的要求,所以可在一個簡單的,對網絡要求不高的云計算環境中使用NovaNetwork實現一個比較簡單的網絡。
    5)Neutron功能
    ①VLAN隔離
    ② 軟件定義網絡(SDN)
    如L2-in-L3隧道,GRE 隧道等,還支持OpenFlow(SDN協議)
    ③ 第三方API擴展
    ④ 第三方Plugin擴展
    注:可見通過Neutron,租戶可以定制rich topology的虛擬網絡;可以通過各種agent和plugin實現具體功能并和第三方設備,軟件對接。
    eg.構建一個基于三層架構的Web服務:
    Web頁面服務器;應用服務器;數據庫服務器
  2. Horizon組件解析
    1)提供可視化GUI。OpenStack原生的Horizon滿足不了需求,需在其上做二次開發。
    2)Horizon內部架構
    可參照python的一個Web應用框架django。Horizon的內部設計分為三個層次:
    ① Dashboard ② PanelGroup③ panel

Horizon三級代碼組織形式:
① horizon: 表格,標簽頁,表單,工作流,base.py文件(實現動態加載panel)

② openstack_dashboard: dashboard子文件(包含各個面板的實現代碼,即業務邏輯都在里面,它會去加載或調用horizon文件夾里的那些組件)

6.Glance組件解析
1)Glance架構:上層Glance API Server(提供RESTful API) ,所有訪問請求會通過它;
Registry Server(提供鏡像注冊和檢索服務);Store Adapter【和Cinder類似,可使用不同存儲后端,如Filesystem Store(可理解為Glance本地的一個文件存儲), 還有Swfit Store,S3Store, HTTP Store ,這些都是通過HTTP協議來訪問的。所以Glance可以看成是一個典型的對象存儲應用。】
2) 和Swift一樣,可以把Glance的API Server做橫向擴展,然后給它做一個負載均衡的集群,下面再轉到實際的存儲后端去。但不同的情況是,Glance存儲和管理的鏡像,有的鏡像用戶訪問量特別巨大,所以雖然對Glance的API Server做了負載均衡,實際的后端訪問負載還是會落到一個點上,給它造成很大壓力。為解決這個問題Glance提供 了一種緩存機制,使每個通過Glance到達服務器的Server端的鏡像都會緩存到API Server上,如果我們有多個API Server,隨著用戶訪問請求的增多,被經常訪問的同一個鏡像會在每一個API Server上都有一份,后續再有訪問請求的時候,它就會直接調用API Server上的這個鏡像文件,而不會再去訪問到存儲后端上來。而且這個機制對終端用戶來說是透明的,即終端用戶并不清楚Glance服務獲取的這個鏡像到底存在哪里。(注:如果我們只有一個節點提供API服務,這種緩存機制就沒有意義了。)
3) 緩存管理注意事項:
a. 控制cache總量的大小(它有cache總量大小的控制):周期性的運行一個命令來處理cache總量的大小限制。
b. 清理狀態異常的cache文件。
c. 預熱某些熱門鏡像到新增的API節點中:通過命令預先把一些比較熱門的鏡像先加載到新增的API節點中。
d. 手動刪除緩存鏡像來釋放空間

  1. KeyStone組件解析
    1)KeyStone的作用:
    a.權限管理:用戶,租戶,角色(Role,keystone訪問控制機制的核心)。
    ★注:用戶和租戶之間是多對多的關系。可通過Role進行權限管理以及將同一個用戶分配到不同的tenant。
    b.服務目錄:服務,端點
    2)keystone只是云安全的一部分,二者不可等同。公有云上常見的安全防護手段:
    a.安全訪問:允許使用安全的Https訪問
    b.內置防火墻功能:通過配置內置防火墻讓云上的環境或應用更安全
    c.加密數據存儲
    d.幫助租戶監測安全狀況:主動監測租戶的安全狀況并給出提示

問題集:
1)比較Swift和Cinder兩種存儲之間的異同
異:Swift比較獨立,它和其它組件的耦合度比較低,有自己完整的存儲體系,不依賴第三方軟件或設備(如不依賴keystone做用戶認證和建權),采用RESTful接口,支持直接從互聯網訪問存儲系統進行數據的讀寫。

?而Cinder本身并不是提供數據存儲的,它需要接一個存儲的后端,即EMC的散設備等,它有一個很重要的功能叫卷管理功能。虛擬機并不直接去使用存儲設備(或使用后端的存儲系統),它使用的是虛擬機上的塊設備,可稱為卷(Volume),實際上Cinder就是去創建和管理這些Volume,并且把它掛載到虛擬機上。

同:二者整體架構都是RESTful API,但Swift是通過一個叫ProxyServer來實現的。Cinder API不同于Swift的RESTful API,它提供一些操作和管理功能。

2)比較Neutron和Nova-Network的異同
Nova Network只是早先Nova中的一個管理網絡模塊,它在網橋的基礎上增加了一個模塊,它可以有兩種工作模式:①Flat DHCP工作模式②基于VLAN的隔離,它勉強滿足了云的要求,所以可在一個簡單的,對網絡要求不高的云計算環境中使用Nova Network實現一個比較簡單的網絡。Neutron做為一個Openstack項目出現之后,租戶可以定制rich topology的虛擬網絡;可以通過各種agent和plugin實現具體功能并和第三方設備,軟件對接。

第四章 OpenStack各組件解析(進階)

  1. Ceilometer組件解析

1) Ceilometer又稱為Openstack Telemetry: 遠程測量收集數據
2) Ceilometer主要目的:為計費提供數據支持
3) 計費用和監控用計量數據的區別:
a. 側重點 b.不可抵賴性
4) Ceilometer要點:
a. 原始數據的來源:
①通過AMQP消息中間件收集各個組件發出的消息
②通過Ceilometer的agent(可擴展)調用Openstack各個組件的API獲得數據
注:支持第三方的agent,plugin或driver來擴展Openstack是常用的手段。
③在每個計算節點上運行Ceilometer的polling agent獲得虛擬機的信息。
b. 數據的存儲:
① 和Nova及Cinder等使用MYSQL作為默認的后端存儲不一樣,Ceilometer默認的后端數據庫是MongoDB(是一個key-value數據庫),當然它也可以用Hbase,MYSQL等數據庫。
c. (如何提供給)第三方系統
① 通過Ceilometer 的API獲得計量數據,設置報警條件和預值。

  1. Heat組件解析
    Heat又稱為Ochestration:把一個IT系統的各個模塊和資源組織,調度起來。它和AWS里的CloudFormation比較類似,它按照用戶寫的模板或腳本(Template)把Openstack的各種資源(如虛擬機或卷)實例化并組織起來形成一個完整的應用。按照Tempalte生成的東西叫stack(棧)。Tempalte寫了創建一個stack需要用到哪些資源,及這些資源的相互關系。Heat的主要任務就是負責stack的創建,更新和銷毀。(創建命令:heat stack-create … -template-file …)
    附:完整的Template包括,version ,description , resources,parameters, outputs
    *更復雜的結構:創建一個wordpress網站;創建一個三層架構的網站;可以拆分為幾個Template分別實現不同功能。
    注:Heat可以和Ceilometer配合使用來實現auto scaling,另外Heat可兼容CloudFormation模板。
  2. Trove組件解析
    1) Trove的功能:根據用戶的請求創建一個包含數據庫的虛擬機
    2) 數據庫的建立:可以是創建完虛擬機后由trove去安裝;也可事先做好trove的鏡像(里面已經安裝好數據庫了)。后者效率更高,Trove支持關系型數據庫MySQL, NoSQL數據庫,MongoDB, Cassandra等
    3) Trove的功能實現依賴四個組件:
    a. Trove API:提供RESTful API
    b. Taskmanager: 完成管理命令的執行(創建/銷毀/管理示例,操作數據庫),它的主要工作方式主要是去監聽RabbitMQ這個中間件上的MQP等調用請求并實現。
    c. Trove-Conductor: 和Nova-Conductor比較類似,負責和數據庫交互。
    d. Guest agent: 類似于Neutron agent ,對應數據庫
    4) Trove目前面臨的挑戰:不支持自動配置數據庫的HA
  3. Sahara組件解析(Sahara原名叫Savanna)
    1) Sahara作用:
    a. 在Openstack上快速創建Hadoop集群
    b. 利用Iaas上空閑的計算能力做大數據的離線處理
    2) Sahara的架構(原理)要點:
    a. Horison:里包含Sahara的dashboard
    b. Plugin:用來支持Hadoop各種發行版
    c. Swift: 存儲持久化數據(不該再放到Hadoop的HDFS里,因為它的生命周期和虛擬化的Hadoop集群的生命周期一樣)
    d. Sahara API:不同于其它組件,它的API分為兩個服務入口,一個叫Service.api,另外一個叫Service.edp.api。
    3) Sahara的使用模式
    ① Iaas模式/管理模式:
    a. 節點(此處不同于先前講的計算節點等),它是運行Hadoop集群的機器。
    b. 節點組:按照節點類型劃分,通過節點組模板定義節點組
    c. 集群:完整的Hadoop集群,通過集群模板定義集群
    d. Job:(有工作流的性質),它可能是若干個Hadoop job組織起來形成Sahara
    ② Pass,DAaas模式/用戶模式/EDP模式
    a. 前提:至少創建一個Hadoop集群
    b. 準備工作:上傳要處理的數據;編寫job并上傳;給Sahara一個三元組(即調用EDP API時的參數,分別是使用哪個集群,數據元素在哪,要運行的job是什么)
  4. Ironic組件解析
    1) 用Ironic(由單詞iron演化而來)實現對物理機械的管理或者說用物理機器實現云服務。
    2) 它和Openstack在部署架構上管理虛擬機和物理機器的區別:
    a. 在控制節點上多了一個Ironic API組件
    b. 在Compute Node上除了Nova-Compute, Neutron agent以外,還有一個Ironic Conductor 。(注:此處的節點和先前的節點不一樣,它和Cinder Volume類似,并不是實際提供存儲資源的節點)
    3) 它和Openstack在計算資源調度流程上或啟動一臺機器的工作流程上的區別:
    物理機器節點上的Nova Compute調用Ironic API,實際啟動的物理機器節點或說實際提供計算資源的物理機器節點是由Ironic Conductor通過PXE ,IPMI遠程管理的。
    4) Ironic實際上是由Nova的一個部分演化而來(以前Nova中專門管理物理機器的Novadriver)(同樣的,先前說的Cinder是Nova Volume演化而來)
    問題集:
    Heat中的模板和Sahara中的模板的異同:
    異:
    Heat和AWS里的CloudFormation比較類似,它按照用戶寫的模板或腳本(Template)把Openstack的各種資源(如虛擬機或卷)實例化并組織起來形成一個完整的應用。按照Tempalte生成的東西叫stack(棧), Tempalte寫了創建一個stack需要用到哪些資源,及這些資源的相互關系。
    Sahara 的Iaas模式/管理模式中,通過節點組模板定義節點組,通過集群模板定義集群。
    同:都包含了配置信息,用來對組件進行配置,通常包括version ,description , resources,parameters, outputs等信息。

第五章 OpenStack實際操作

  1. OpenStack部署環境準備
    1) 創建一個路由器(Router);創建一個交換機(用Neutron 中的Network,它相當于交換機,需配置子網(廣播域)),最后把兩者連接起來。為了讓網絡里的連接其它設備能夠正常訪問公網(Internet)需用Floating IP(也是Netron中的一個概念,它實際上就是云計算環境可用的公網IP),它有兩種用法,一是將其綁定到路由器上,二是將其綁定到云主機上(讓這臺云主機和外網相連通。它顯示有2個IP,但實際只有一個IP,它是通過Neutron的一種機制把兩個IP映射起來。當然我們也可通過Neutron實現修改虛擬機真正的IP地址和MAC地址)。
    2) 創建云主機(Instance)
  2. KeyStone的安裝部署
    a. 登錄Controller節點安裝KeyStone(apt-get),并修改KeyStone配置文件【修改etc目錄下keystone.conf文件中的三個部分:和數據庫連接相關的設置;修改或設置寫log的位置(log_dir=/var/log/keystone);設置keystone服務和其它服務共享的一個token】

b. 創建用戶(需要帶兩個參量:token和url),創建租戶,創建角色;創建服務
c. (Controller節點上)把常用參數(username,password,tenant-name,auth-url等)作為環境變量導出

  1. Glance的安裝部署
    a. 安裝Glance(安裝Glance服務及Glance的python客戶端),并修改Glance配置文件【主要修改etc目錄下glance-api.conf文件和glance-registry.conf。首先進行glance-api.conf和glance-registry.conf文件中和數據庫連接相關的配置,且檢查/var/lib/glance目錄,如果存在sqlite數據庫文件(glance.sqlite)需將其刪除,防止誤讀;而后修改glance-registry.conf】

b. 創建Glance數據庫(MySQL)并同步(glance-manage db_sync)

c. 用keystone命令給Glance創建用戶并添加該用戶到先前的租戶里

d. 修改glance-api.conf文件和glance-registry.conf文件中keystone相關的設置,

并在keystone中注冊Glance以及它的端點。

e. 上傳鏡像

  1. Nova的安裝部署
    1) 在Controller節點進行安裝,此處不能和先前一樣寫個Nova,要寫清楚具體安裝哪些組件(如Scheduller,Conductor,Nova-api,Nova的python客戶端等)。

2) 在Compute節點安裝Nova-compute-kvm(此處kvm實際上是由qemu模擬的一個虛擬機),沒有Neutron則需安裝nova-network,nova-api-matadata .
3) 同先前組件一樣,先修改nova.conf相關配置,同樣要去檢查/var/lib/glance目錄,如果存在sqlite數據庫文件將其刪除,創建數據庫(MySQL)并同步(把數據項或信息填充到現在的數據庫,glance-manage db sync,不同于先前的命令,此處無下劃線)
4) 繼續修改nova.conf中keystone相關的設置,在keystone里創建用戶并注冊服務和端點。

5) 在Compute節點上配置nova.network.api.API

6) 在控制節點上創建網絡

7) 啟動虛擬機(用nova boot命令)

  1. OpenStack支撐服務的安裝配置

支撐服務:NTP(時間同步服務),mysql數據庫服務,RabbitMQ(消息中間件服務)。配置host文件,實現通過主機名訪問虛擬機。

1)NTP服務:它有兩個作用,一是將本機時間和網絡上的一臺時間同步器去同步;另外一個作用是將本機作為一個時間同步器提供給其它節點去使用。

在Opentstack部署環境中,建議讓Controller結點去和互聯網上的一個時間同步器同步,讓其它結點和這個Controller結點同步,這樣一來,其它結點和這個Controller結點的時間同步就在一個局域網內,時間同步性更高。安裝完NTP后為實現把Controller結點做為時間同步源,需在其它結點上編輯它的配置文件(etc文件夾下的ntp.conf,加上servercontroller)。

2)在Contorller結點上安裝mysql服務(需安裝python-mysqldb客戶端和mysql-server服務進程),并修改配置文件(etc文件夾中mysql下的my.cnf,修改bind-address(綁定訪問mysql服務器所需要的IP地址);修改或添加數據庫引擎配置(mysql默認或推薦的數據庫引擎是InnoDB)。

注:【實際運用中可把數據庫服務安裝到單獨的一個機器上(可配置全ssd),公司里常用全ssd服務器來支撐數據庫服務,提高其性能】

其它結點上不用再安裝數據庫服務,只需安裝一個python客戶端即可,Openstack就可以訪問Contorller結點上的那個數據庫了。

附:安裝mysql時會創建一個匿名用戶和一些Database,為正常使用起見可將其清除(可手動清除,也可用mysql提供的一個命令:mysql_secure_installtion)。

3)在Contorller結點上安裝RabbitMQ服務。消息中間件還可用別的如Qpid,ZeroMQ

  1. 通過圖形界面使用OpenStack

1)除了安裝horizion(dashboard),還需安裝apache等其它幾個服務,這些都是為了顯示動態網頁所需要的。另外還要刪除一個包(openstack-dashboard-ubantu-theme),因為它影響到horizon圖形界面的顯示。然后修改配置文件(etc中openstack-dashboard下的一個.py結尾的文件local_settings.py),修改BACKEND和LOCATION(它們是對顯示的web界面緩存的設置),讓其參數與memcached中一致。

  1. 通過命令行使用OpenStack

1)先前多數是在Controller節點上用過命令行訪問本地的服務,此處介紹遠程訪問的方法。為了模擬遠程訪問的環境,可在使用的公有云里創建一個ubuntu的云主機作為客戶端(還是接入先前的子網),并修改配置文件(hosts)。然后安裝相應客戶端(如python-novaclient)。

注:可以創建腳本,把導出環境變量的命令都放在里面,方便以后使用(里面的命令需根據自己的環境進行修改)。之后不直接執行腳本,而是用source命令執行腳本,這樣才能把腳本里設置的環境變量帶到當前用戶的操作環境中。(可用echo命令查看環境變量設置是否成功)

第六章 OpenStack擴展話題

  1. OpenStack自動化部署

1)分為三個層次:

A. 單節點自動安裝:常用于準備一個開發環境,常用工具是DevStack

B. 集群化安裝:最常用工具是puppet

C. 多個集群安裝部署:典型代表工具是Mirantis公司推出的fuel

2)DevStack的安裝演示(單節點自動安裝的實際操作過程)

a. 創建云主機。更新一下安裝源(apt-get update),安裝git,通過git clone命令下載DevStack的源代碼。然后用devstack文件夾里提供的一個工具創建一個用來安裝和運行DevStack的用戶(./create-stack-user.sh)。將下載的源碼在當前用戶的home文件夾下拷貝一份(可從本地拷貝或再次從源端下載),找到devstack文件夾中samples下的local.conf文件,拷貝一份到上一級目錄并修改其中的相關配置(把HOST_IP修改成當前當前機器的內網IP)。

b. 運行./stack.sh腳本,進入自動安裝過程。

  1. Hadoop云化時存在的問題

1)Hadoop是用來做大數據處理的一個工具,它也有自己龐大的生態圈,其中最重要的兩個軟件是HDFS(分布式存儲系統),MapReduce(任務調度框架)

注:HDFS把文件分成塊,把塊做三個副本存儲到不同節點上,形成一個比較高可靠性的文件系統;MapReduce把我們提交的數據處理任務(job)拆分成不同的task分發到不同的節點上,以實現并行處理。MapReduce最大的特點是能夠把任務調度到離數據近的節點上,盡量減少數據在網絡間的傳輸,使我們可用通用廉價的X86服務器和網絡設備來構筑一個數據并行處理系統。

★Openstack虛擬機調度和Hadoop任務調度實際上是兩個不同層次的資源調度。要把Hadoop做云化就需要解決兩個不同層次上的資源和任務調度問題。Hadoop最重要的兩個部分HDFS和MapReduce云化時也會出現相應問題,為解決相關問題Hadoop提供了一個由VMware主導的開源項目HVE(Hadoop Virtual Extensions)。

  1. 基于OpenStack實現Hadoop云化

1)Sahara分別從部署管理和提供數據處理服務兩個層次上對Hadoop云化做了一些工作。

2)HDFS和Swift集成:在Hadoop集群里仍用本地根硬盤來構筑HDFS,但是把數據源和job放在Swift里。此外,由VMware主導的開源項目BDE(Big Data Extensions),它和Openstack的Sahara很類似,但是在各個方面都做得比Sahara好得多,且它和HVE 集成做得很好。

  1. Ceph簡介

1)Ceph現在經常被用來做為RBD設備提供塊存儲服務。

2)Ceph層次結構:

底層RADOS,中間層LIBRADOS ,頂層RADOS GW, RBD, CEPH FS

① RADOS:可靠的,自動化的,分布式的對象存儲。底層是一個完整的存儲系統,它的核心是OSD(Object Storage Daemon),Daemon是一個服務軟件(進程),它和Cinder里定義的OSD(Object Storage Device)之間有很強的對應關系,可認為是其簡略版本。

注:不同于Swift存儲 的對象(文件),Ceph的對象實際上是把一個文件拆分成若干個Object,分別放到底層的存儲設備上。

★RADOS邏輯結構:OSDs , Monitors , Clients

注:此處的客戶端和Swift客戶端有本質區別,Swift客戶端只是用Pyhon寫的一個供用戶使用能夠調用RESTful接口的客戶端程序而已,沒有它我們直接調用RESTful接口也可以讀寫Swift,但是在RADOS里如果沒有Clients,整個數據讀寫就難以實現,它是存儲系統的一部分。

★Ceph系統中的尋址流程(文件存儲到底層OSD上)
它首先把文件拆分成若干個Objects,然后把Objects放到PG組里面,每個組再通過CRUSH算法給它映射到不同的OSD上。此存儲過程特點是它每一步都是通過計算得到的,它中間沒有查表,這使得Ceph擁有較好的擴展性。
②LIBRADOS: 提供一組直接訪問RADOS的API

③ RADOSGW, RBD, CEPH FS:RADOS GateWay把底層對象存儲系統往外再次封裝,提供兼容Swift和亞馬遜S3對象存儲接口,這個接口也是HTTP的。RBD經常作為Cinder的后端為虛擬機提供卷。CEPH FS是在Ceph基礎上封裝了一個POSIX接口,形成文件系統。

  1. Ceph在OpenStack中的應用

1)Ceph在OpenStack中受歡迎的原因:

①有了Ceph,可基于X86搭建分布式塊存儲系統

附:塊存儲有強一致性和高性能的要求,這對于Swift和HDFS都是沒有或比較弱的。

★Cinder支持Ceph提供的RBD設備,二者結合可基于X86普通服務器更加廉價方便地搭建一個塊存儲系統提供(卷)給虛擬機去使用。

②提供Swift兼容的對象接口

★Ceph和Swift仍不可互為替代,二者比較如下:

47%4Y{}QJ@MGGG~56(R`OOD.png

案例一:目前OpenStack規模小,節點數量少,此時使用Swift節點浪費存儲,可選用Ceph

案例二:提供云盤服務(面對大量用戶,強調用戶體驗,用戶可選存儲策略(Storage Policy)),此時選用Swift更好,它更好地支持規模化部署,有先進的Feature,成本比Ceph更低。

④ 現在OpenStack所有存儲都(開始)支持Ceph作為后端

  1. OpenStack與Docker

附:HyperVisor:在一個宿主機上搭建環境,可在環境里創建虛擬機,再在虛擬機里裝客戶操作系統(Guest OS),然后在其上面裝中間件,之后再裝應用等。

Container技術:另外一種虛擬化技術,無需再裝Guest OS,而直接基于宿主機操作系統來操作,可在其上做運行環境隔離,資源劃分等,并形成容器,讓應用在容器中運行。容器之間底層是共享一個操作系統的,甚至可以共享一些公用的庫。和傳統的HyperVisor相比,它的優勢在于省去了Guest OS的開銷;劣勢在于只能使用和宿主機相同的操作系統。

1)Docker:是基于容器的一個引擎,讓開發者可以打包應用,并將其依賴包打到可移植的容器里,而容器可發布到任何linux機器上。OpenStack里將Docker也看成是一種HyperVisor

2)OpenStack+Docker:(結合點)

①使用Swift做Docker鏡像的存儲后端

②Nova里有針對Docker的Driver或插件,可用Nova調度和管理Docker容器。

③使用Heat來實現Docker的Ochestration

④基于Neutron設計與實現適用于Docker的SDN方案

⑤使用Glance來管理Docker鏡像
……

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容