第一章 OpenStack基礎
- OpenStack管理的資源及提供的服務
OpenStack做為一個操作系統(tǒng)冒掌,它管理的資源主要有三個方面:計算歪今,存儲萧锉,網(wǎng)絡端逼。OpenStack管理這些資源并提供給上層應用或用戶去使用朗兵。這些資源管理是通過OpenStack中的各個項目來實現(xiàn)的。其中計算資源管理相關項目是Nova顶滩;存儲相關的主要有塊存儲服務Cinder,對象存儲服務Swift和鏡像存儲服務Glance矛市;與網(wǎng)絡相關的主要是一個和軟件定義網(wǎng)絡相關的項目Neutron(原名叫Qauntum)。另外Nova中有一個管理網(wǎng)絡的模塊叫做NovaNetwork诲祸,它做為一個比較穩(wěn)定的遺留組件浊吏,現(xiàn)在仍然在OpenStack里和Neutron并存,在小規(guī)模部署里面救氯,為了追求穩(wěn)定和減少工作量會去使用它對網(wǎng)絡資源進行管理找田。
2.OpenStack資源VS公有云資源:
- OpenStack基本組件
1) Nova(OpenStack Compute):
它是OpenStack里最核心的項目, 主要作用是控制虛擬機的創(chuàng)建以及改變他的容量和配置着憨;它還可以做虛擬機的銷毀墩衙,即虛擬機的整個生命周期都是由Nova來控制的。Nova的部署和運行一般有兩種情況:一種是作為Controller節(jié)點去運行,它的核心部分主要有Scheduler(決定將要啟動的虛擬機調(diào)度到哪個物理節(jié)點上),Conductor(對所有的計算節(jié)點進行統(tǒng)一管理)漆改,NovaCell(級聯(lián))心铃,用這些來控制其它一些運算節(jié)點。另外一種是作為Compute節(jié)點運行挫剑,它的核心部分是Nova Compute去扣,用來控制運行實際的虛擬機。
2) Cinder:
它主要用途是用來提供塊存儲服務樊破。它最核心的兩個部分是Scheduler和Cinder Volume愉棱。此處Scheduler的功能和Nova的Scheduler功能接近,用來決定通過哪個Cinder Volume進行讀取操作哲戚。而Cinder Volume是實際控制存儲設備的節(jié)點奔滑。
3) Neutron
它是當下流行的SDN(軟件定義網(wǎng)絡)在OpenStack里的一個實現(xiàn)。Neutron有一個很大特點就是它提供了Plugin組件/模塊(用戶可以自定義)顺少。
4) Swift
相對獨立的一個組件朋其,它和其他組件的交互關系比較少。它提供對象存儲服務脆炎,類似于亞馬遜S3或者國內(nèi)七牛這樣一個存儲服務令宿。
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發(fā)展出來的想幻。但Network組件并沒有直接去替換Compute Network,它是相對獨立的(也是當下流行的SDN)的一個項目话浇,它為Compute提供網(wǎng)絡連接脏毯,提供網(wǎng)絡資源管理這些服務。而Block Storage則替換了Compute Vloume幔崖,它為Compute提供塊存儲服務食店。
- OpenStack的API
1)OpenStack各組件間通過相互調(diào)用API實現(xiàn)通信渣淤。OpenStack的API是基于HTTP協(xié)議的RESTful Web API。(REST:表現(xiàn)狀態(tài)傳輸VS另外一種Web服務接口協(xié)議:SOAP)
2)REST架構里對資源的操作包括獲取吉嫩,創(chuàng)建价认,修改和刪除。正好對應HTTP里提供的GET,POST,PUT,DELETE方法自娩。所以用HTTP來實現(xiàn)REST是比較方便的用踩。
3)RESTful Web API主要有以下三個要點:
①資源地址(即資源的URI):如以http開頭的地址
②傳輸資源的表現(xiàn)形式(即Web服務接受與返回的互聯(lián)網(wǎng)媒體類型):JSON, XML等。
③對資源的操作(即Web服務在該資源上所支持的一系列請求方法):如GET,POST,PUT或DELETE
4)調(diào)用及調(diào)試API的方式
①curl命令:linux下發(fā)送http請求并接受響應的命令行工具
②OpenStack命令行客戶端:python寫的命令行客戶端
③FireFox或Chrome瀏覽器的REST客戶端:圖形界面
④OpenStack的SDK: 不要手寫代碼發(fā)送HTTP請求調(diào)用REST接口椒功,省去一些諸如Token等數(shù)據(jù)的管理工作,能夠很方便地基于OpenStack做開發(fā)智什。
3.OpenStack組件間的通信關系
OpenStack組件間的通信關系分為四類:
1)基于HTTP協(xié)議的通信
① 出現(xiàn)在各個組件API之間的調(diào)用动漾。最常見的是通過Horizon(或說命令行接口)對各組件進行操作的時候產(chǎn)生的通信;另外就是各組件通過Keystone對用戶身份進行校驗的時候產(chǎn)生的通信荠锭;還有就是Nova Compute在獲取鏡像的時候?qū)lance API的調(diào)用及Swift數(shù)據(jù)的讀寫也是通過HTTP協(xié)議的RESTful Web API來進行的旱眯。
2)基于(消息隊列)AMQP協(xié)議的通信
① 主要是每個項目內(nèi)部各個組件之間的通信。例如Nova的Nova Compute和Scheduler之間及Scheduler和Cinder Volume之間证九。(注意:由于Cinder是從Nova Volume演化出來的删豺,所以Cinder和Nova之間也有通過AMQP協(xié)議通信的關系)
② AMQP協(xié)議進行通信也屬于面向服務的架構,所以雖然大部分通過AMQP協(xié)議進行通信的組件屬于同一個項目愧怜,但是并不要求它們安裝部署在同一個節(jié)點上呀页。如NovaCompute 和Nova Conductor反而反而通常要求它們不能部署在同一個節(jié)點上;而實際上Nova Conductor和Nova Scheduler也可以放到不同的節(jié)點上拥坛,這有利于系統(tǒng)的橫向擴展蓬蝶,我們可對其中的各個組件分別按照它們的負載情況進行橫向擴展。(用不同數(shù)量的節(jié)點去承載它們這些服務)
③ OpenStack并沒有規(guī)定AMQP協(xié)議的實現(xiàn)猜惋,我們經(jīng)常使用的是private MQ丸氛,實際用戶可根據(jù)自身情況選擇其它的消息中間件。
3)基于數(shù)據(jù)庫連接的通信(主要是SQL)
① 出現(xiàn)在各個組件和數(shù)據(jù)庫之間著摔,這些通信大多也屬于項目內(nèi)部缓窜,和前面基AMQP的類似。它也不要求數(shù)據(jù)庫和項目其它組件安裝在同一個節(jié)點上谍咆,它也可以分開安裝禾锤,甚至我們還可專門部署這個數(shù)據(jù)庫服務器,把這些數(shù)據(jù)庫服務放在上面摹察,然后之間是通過基于SQL的這些連接來進行通信时肿。
② OpenStack同樣沒有規(guī)定必須使用哪種數(shù)據(jù)庫,我們通常使用的是MySQL港粱,實際用戶可根據(jù)自身情況選擇其它的數(shù)據(jù)庫螃成。
4)基于第三方API(或稱為NativeAPI)進行通信
① 出現(xiàn)在各OpenStack各組件和第三方的軟件或硬件之間旦签。如Cinder和存儲后端設備之間的通信;又如Neutron的agent(或者說插件)和網(wǎng)絡設備之間的通信寸宏。這些通信都需要調(diào)用第三方設備或第三方軟件的API(Native API)宁炫。
- OpenStack中幾種不同的存儲
1)OpenStack的三種存儲服務:Glance,Swift,Cinder
① Glance(鏡像存儲): 一個鏡像管理服務,本身不具備存儲功能氮凝,它的后端可以接其它的存儲系統(tǒng)羔巢,可以是存儲設備,本地存儲罩阵,Swift竿秆,也可以是亞馬遜S3等。
附:三種存儲概念:
文件系統(tǒng):(有POSIX接口)如Glance里的GFS稿壁,Hadoop里的HDFS
塊存儲:如EMC設備幽钢,華為的SAN設備,NetApp傅是;“散存儲”一般都提供塊存儲匪燕。
對應Cinder,其實Cinder本身也并不是提供數(shù)據(jù)存儲的喧笔,它也需要接一個存儲的后端帽驯,即EMC的散設備等,及最新流行的開源的分布式存儲Ceph(可提供塊存儲服務)书闸。
對象存儲:對應Swift尼变,典型代表如亞馬遜的AWS S3。它是通過RESTful Web API去訪問的浆劲,它的優(yōu)勢在于可以很方便地去訪問存儲的數(shù)據(jù)享甸。
② Cinder
給OpenStack提供塊存儲的接口。它有一個很重要的功能叫卷管理功能梳侨。虛擬機并不直接去使用存儲設備(或使用后端的存儲系統(tǒng))蛉威,它使用的是虛擬機上的塊設備,可稱為卷(Volume)走哺,實際上Cinder就是去創(chuàng)建和管理這些Volume蚯嫌,并且把它掛載到虛擬機上。
③ Swift
提供對象存儲服務丙躏。如果使用文件系統(tǒng)择示,當數(shù)據(jù)量特別大的時候,存儲性能會急劇下降晒旅。而對象存儲拋棄了目錄樹的結(jié)構栅盲,用一種扁平化的結(jié)構去管理數(shù)據(jù)。實際上Swift只有三層結(jié)構:Account(關聯(lián)賬戶), Container(容器废恋,對Object分類), Object (最終的數(shù)據(jù)/即文件)谈秫。
- OpenStack工作流程
OpenStack工作流程 相當復雜(有五十多個步驟)扒寄。虛擬機創(chuàng)建的四個階段 :
scheduling , networking ,block_device_mapping, spawing
- OpenStack的部署架構
1)OpenStack各個項目,組件按一定方式安裝到實際的服務器節(jié)點上拟烫,實際的存儲設備上该编,然后通過網(wǎng)絡把它們連接起來,這就是OpenStack的部署架構硕淑。
2)OpenStack部署分為單節(jié)點部署和多節(jié)點部署(集群部署)
3)OpenStack的部署架構不是一層不變的课竣,而是根據(jù)實際需求設計不同的實施方案。
4)OpenStack的簡單部署架構:
附:三種網(wǎng)絡:
①(綠色)管理網(wǎng)絡:OpenStack的管理節(jié)點(或管理服務)對其它的節(jié)點進行管理的網(wǎng)絡置媳。它們之間有如不同組件之間的API調(diào)用于樟,虛擬機之間的遷移等
②(藍色)存儲網(wǎng)絡:是計算節(jié)點,訪問存儲服務的網(wǎng)絡拇囊。包括向存儲設備里讀寫數(shù)據(jù)的流量基本上都需要從存儲網(wǎng)絡走迂曲。
③(黃色)服務網(wǎng)絡:是由OpenStack去管理的這些虛擬機對外提供服務的網(wǎng)絡。
四種節(jié)點:
①控制節(jié)點:是OpenStack的管理節(jié)點寂拆,先前介紹的OpenStack大部分服務都是運行在控制節(jié)點上奢米。如keystone認證服務抓韩,Glance管理服務等纠永。
注:特別的,Nova和Neutron這兩個組件必須采用分布式部署谒拴。
對于Nova尝江,因為Nova-Compute是控制和管理虛擬機的,所以它必須部署在計算節(jié)點上英上,而Nova其它幾個服務則應該部署在控制節(jié)點上炭序。特別要強調(diào)的是,Nova-Compute和Nova-Conductor一定不能部署在同一個節(jié)點上苍日,因為二者分開的目的就是為了解耦惭聂。
對于Neutron,Neutron的插件或Agent需要部署在網(wǎng)絡節(jié)點和計算節(jié)點上相恃,而其它部分辜纲,如Neutron Server可以部署在控制節(jié)點上。
②計算節(jié)點:指實際運行虛擬機的節(jié)點拦耐,就是OpenStack的管理的那些虛擬機實際上最后是在計算節(jié)點上運行的耕腾。
③存儲節(jié)點:可以是提供對象存儲的Swift的節(jié)點,或者是Swift集群的Proxy節(jié)點杀糯,也可以是一個其它服務的存儲后端扫俺。
④ 網(wǎng)絡節(jié)點:主要是實現(xiàn)網(wǎng)關和路由的功能。
5)OpenStack的復雜部署架構:要點如下:
①規(guī)模較大的情況下固翰,把各種管理服務部署到不同的服務器上狼纬。
② 把OpenStack的同一個服務部署到不同的節(jié)點上羹呵,形成雙機熱備或者多機熱備的高可用集群。(或者可用負載均衡集群的方式去實現(xiàn)高可用)
③ 在復雜的數(shù)據(jù)中心環(huán)境中畸颅,考慮如何與第三方服務進行對接和集成担巩。(如LDAP服務,DNS服務等)
第三章 OpenStack各組件解析(基礎)
1.Nova組件解析
- Nova的架構
除了先前介紹的七大組件外没炒,在此補充兩個組件:nova-conslole涛癌,nova-consoleauth,它們的作用是通過支持VNC 或SPICE(獨立計算環(huán)境簡單協(xié)議)客戶端來訪問虛擬機界面送火。
SPICE協(xié)議支持USB設備和多屏顯示等功能拳话,使用它需修改nova.conf文件。 - Nova對虛擬機的調(diào)度機制
①placement (放置): 把虛擬機放在哪個物理機上啟動
②migration(遷移):從哪個物理機遷移到哪個物理機
*實際上Nova中的調(diào)度器(Scheduler)只完成了placement (放置)的工作种吸,migration(遷移)實際上是由其它組件協(xié)同完成的弃衍。
**配置Nova.conf文件:Nova-Scheduler基于Filters對虛擬機進行調(diào)度的機制分為兩步,第一步是通過Filters篩選宿主機(含有Compute)這坚俗,第二步是對虛擬機進行排序镜盯,Nova中該排序叫稱重(weighting),最終完成調(diào)度算法猖败,決定了應用哪臺宿主機上啟動哪臺虛擬機速缆。
注:在nova.conf中可以通過ram_allocation_ratio參數(shù)設置內(nèi)存的超配比例,其前提是使用RamFilter恩闻。
- Swift組件解析
1)Swift歷史相對較長艺糜,比較獨立,它和其它組件的耦合度比較低幢尚,有自己完整的存儲體系破停,不依賴第三方軟件或設備(如不依賴keystone做用戶認證和建權)。
★對象存儲:采用RESTful接口尉剩,支持直接從互聯(lián)網(wǎng)訪問存儲系統(tǒng)進行數(shù)據(jù)的讀寫真慢。
2)Swift接口:它和其它組件接口類似,也是RESTful的Web API理茎,總共有四個部分組成:第一個是HTTP操作(GET,POST,PUT或DELETE)黑界;第二個是認證信息(主要是用戶的身份信息);第三個是指示資源地址的URL(包含域名或地址及Account, Container,Object)功蜓;第四個是(可選項)數(shù)據(jù)和元數(shù)據(jù)园爷。
3)Swift其它要點:
Swift的架構:整體架構是RESTful API,它是通過一個叫Proxy Server來實現(xiàn)的式撼。(可對它進行擴展童社,做Load Balancer,用它去接收上面的HTTP請求著隆,然后把請求轉(zhuǎn)發(fā)到實際的StorageServer上)
搭建Swift時的注意事項:
a.(小規(guī)模集群)采用全對等架構扰楼,即它的每個(Server)節(jié)點都一樣呀癣。
b.用Load Balancer把服務器組成一個集群。
c. (小規(guī)模集群)每個服務器是一個zone弦赖。
d. 小規(guī)模Swift集群项栏,服務器數(shù)量最少是5個。(或說最小集群是五個服務器)
e. 不要用虛擬機和RAID蹬竖。(不要把Swift放到虛擬機里去做實現(xiàn)沼沈。)
附:Swif 2.0的新功能:
a. 存儲策略(核心功能):讓用戶能夠選擇數(shù)據(jù)的存儲策略。 - Cinder組件解析
1)傳統(tǒng)數(shù)據(jù)中心的存儲設備:SAN或盤陣币厕,指一類設備列另,通過網(wǎng)絡連接給服務器提供存儲空間。SAN設備和服務器之間的網(wǎng)絡連接主要有兩種形式旦装,第一種叫Fibre Channel(FC)页衙,用專用光線連接網(wǎng)絡; 另外一種叫iSCSI,基于以太網(wǎng)協(xié)議/IP協(xié)議阴绢。
注:Cinder存儲服務可以為虛擬機提供云硬盤店乐。
2)Cinder API
①不同于Swift的RESTful API,它提供一些操作和管理功能
②實際流量是不通過Cinder的這些組件的呻袭,而是直接通過存儲設備和服務器之間的網(wǎng)絡連接走的眨八,該連接可以是FC(光纖通道)或iSCIS(基于IP的數(shù)據(jù)傳輸通道)傳輸數(shù)據(jù)到服務器。
- CinderVolume
① 通過Driver適配其它設備棒妨。(屏蔽底層硬件異構性)
- Neutron組件解析
1)傳統(tǒng)數(shù)據(jù)中心的網(wǎng)絡:它分為幾個層(Tier)踪古,首先是服務器接入的第一級交換機叫接入交換機(往往在機架的頂部又稱為(TOR)架頂交換機)含长;往上會接入一個匯聚層的交換機叫匯聚交換機(往往放在一排機架的頂頭位置)券腔;再往上會接入核心交換機,它把匯聚交換機連接起來拘泞,往往不只一個纷纫。
2)根據(jù)ISO網(wǎng)絡模型,網(wǎng)絡分為七個層(此處是協(xié)議棧里的層陪腌,layer)辱魁,OpenStack和Neutron主要關注其中的二三層,分別是數(shù)據(jù)鏈層和網(wǎng)絡層诗鸭。
3)在OpenStack和Neutron出現(xiàn)之前的虛擬化網(wǎng)絡:用Qauntum去虛擬化網(wǎng)絡染簇,它使用linux系統(tǒng)里的一個軟件叫虛擬網(wǎng)橋,它實現(xiàn)的網(wǎng)橋不存在物理信號問題强岸,可簡單為它是一個二層的交換機(跑在服務器虛擬機內(nèi)部锻弓,把虛擬機都連接到此交換機上),可用它來搭建一個虛擬化環(huán)境蝌箍,但是如果放到云環(huán)境中去青灼,涉及租戶間流量隔離問題暴心,此網(wǎng)橋就不滿足需求了,因為它是連通的(把所有虛擬機連接在同一個虛擬網(wǎng)絡里)杂拨,跟普通交換機無太大區(qū)別专普。
4)Nova中的一個管理網(wǎng)絡模塊Nova Network在前面網(wǎng)橋的基礎上增加了一個模塊,它可以有兩種工作模式:①Flat DHCP工作模式②基于VLAN的隔離 弹沽,它勉強滿足了云的要求檀夹,所以可在一個簡單的,對網(wǎng)絡要求不高的云計算環(huán)境中使用NovaNetwork實現(xiàn)一個比較簡單的網(wǎng)絡策橘。
5)Neutron功能
①VLAN隔離
② 軟件定義網(wǎng)絡(SDN)
如L2-in-L3隧道击胜,GRE 隧道等,還支持OpenFlow(SDN協(xié)議)
③ 第三方API擴展
④ 第三方Plugin擴展
注:可見通過Neutron役纹,租戶可以定制rich topology的虛擬網(wǎng)絡偶摔;可以通過各種agent和plugin實現(xiàn)具體功能并和第三方設備,軟件對接促脉。
eg.構建一個基于三層架構的Web服務:
Web頁面服務器辰斋;應用服務器;數(shù)據(jù)庫服務器 - Horizon組件解析
1)提供可視化GUI瘸味。OpenStack原生的Horizon滿足不了需求宫仗,需在其上做二次開發(fā)。
2)Horizon內(nèi)部架構
可參照python的一個Web應用框架django旁仿。Horizon的內(nèi)部設計分為三個層次:
① Dashboard ② PanelGroup③ panel
Horizon三級代碼組織形式:
① horizon: 表格藕夫,標簽頁,表單枯冈,工作流毅贮,base.py文件(實現(xiàn)動態(tài)加載panel)
② openstack_dashboard: dashboard子文件(包含各個面板的實現(xiàn)代碼,即業(yè)務邏輯都在里面尘奏,它會去加載或調(diào)用horizon文件夾里的那些組件)
6.Glance組件解析
1)Glance架構:上層Glance API Server(提供RESTful API) ,所有訪問請求會通過它滩褥;
Registry Server(提供鏡像注冊和檢索服務);Store Adapter【和Cinder類似炫加,可使用不同存儲后端瑰煎,如Filesystem Store(可理解為Glance本地的一個文件存儲), 還有Swfit Store,S3Store, HTTP Store ,這些都是通過HTTP協(xié)議來訪問的俗孝。所以Glance可以看成是一個典型的對象存儲應用酒甸。】
2) 和Swift一樣赋铝,可以把Glance的API Server做橫向擴展插勤,然后給它做一個負載均衡的集群,下面再轉(zhuǎn)到實際的存儲后端去。但不同的情況是饮六,Glance存儲和管理的鏡像其垄,有的鏡像用戶訪問量特別巨大,所以雖然對Glance的API Server做了負載均衡卤橄,實際的后端訪問負載還是會落到一個點上绿满,給它造成很大壓力。為解決這個問題Glance提供 了一種緩存機制窟扑,使每個通過Glance到達服務器的Server端的鏡像都會緩存到API Server上喇颁,如果我們有多個API Server,隨著用戶訪問請求的增多嚎货,被經(jīng)常訪問的同一個鏡像會在每一個API Server上都有一份橘霎,后續(xù)再有訪問請求的時候,它就會直接調(diào)用API Server上的這個鏡像文件殖属,而不會再去訪問到存儲后端上來姐叁。而且這個機制對終端用戶來說是透明的,即終端用戶并不清楚Glance服務獲取的這個鏡像到底存在哪里洗显。(注:如果我們只有一個節(jié)點提供API服務外潜,這種緩存機制就沒有意義了。)
3) 緩存管理注意事項:
a. 控制cache總量的大心铀簟(它有cache總量大小的控制):周期性的運行一個命令來處理cache總量的大小限制处窥。
b. 清理狀態(tài)異常的cache文件。
c. 預熱某些熱門鏡像到新增的API節(jié)點中:通過命令預先把一些比較熱門的鏡像先加載到新增的API節(jié)點中玄组。
d. 手動刪除緩存鏡像來釋放空間
- KeyStone組件解析
1)KeyStone的作用:
a.權限管理:用戶滔驾,租戶,角色(Role,keystone訪問控制機制的核心)俄讹。
★注:用戶和租戶之間是多對多的關系哆致。可通過Role進行權限管理以及將同一個用戶分配到不同的tenant颅悉。
b.服務目錄:服務沽瞭,端點
2)keystone只是云安全的一部分迁匠,二者不可等同剩瓶。公有云上常見的安全防護手段:
a.安全訪問:允許使用安全的Https訪問
b.內(nèi)置防火墻功能:通過配置內(nèi)置防火墻讓云上的環(huán)境或應用更安全
c.加密數(shù)據(jù)存儲
d.幫助租戶監(jiān)測安全狀況:主動監(jiān)測租戶的安全狀況并給出提示
問題集:
1)比較Swift和Cinder兩種存儲之間的異同
異:Swift比較獨立,它和其它組件的耦合度比較低唆姐,有自己完整的存儲體系僵娃,不依賴第三方軟件或設備(如不依賴keystone做用戶認證和建權),采用RESTful接口跌捆,支持直接從互聯(lián)網(wǎng)訪問存儲系統(tǒng)進行數(shù)據(jù)的讀寫。
?而Cinder本身并不是提供數(shù)據(jù)存儲的枝缔,它需要接一個存儲的后端,即EMC的散設備等,它有一個很重要的功能叫卷管理功能愿卸。虛擬機并不直接去使用存儲設備(或使用后端的存儲系統(tǒng))灵临,它使用的是虛擬機上的塊設備,可稱為卷(Volume)趴荸,實際上Cinder就是去創(chuàng)建和管理這些Volume儒溉,并且把它掛載到虛擬機上。
同:二者整體架構都是RESTful API发钝,但Swift是通過一個叫ProxyServer來實現(xiàn)的顿涣。Cinder API不同于Swift的RESTful API,它提供一些操作和管理功能酝豪。
2)比較Neutron和Nova-Network的異同
Nova Network只是早先Nova中的一個管理網(wǎng)絡模塊涛碑,它在網(wǎng)橋的基礎上增加了一個模塊,它可以有兩種工作模式:①Flat DHCP工作模式②基于VLAN的隔離孵淘,它勉強滿足了云的要求蒲障,所以可在一個簡單的,對網(wǎng)絡要求不高的云計算環(huán)境中使用Nova Network實現(xiàn)一個比較簡單的網(wǎng)絡瘫证。Neutron做為一個Openstack項目出現(xiàn)之后晌涕,租戶可以定制rich topology的虛擬網(wǎng)絡;可以通過各種agent和plugin實現(xiàn)具體功能并和第三方設備痛悯,軟件對接余黎。
第四章 OpenStack各組件解析(進階)
- Ceilometer組件解析
1) Ceilometer又稱為Openstack Telemetry: 遠程測量收集數(shù)據(jù)
2) Ceilometer主要目的:為計費提供數(shù)據(jù)支持
3) 計費用和監(jiān)控用計量數(shù)據(jù)的區(qū)別:
a. 側(cè)重點 b.不可抵賴性
4) Ceilometer要點:
a. 原始數(shù)據(jù)的來源:
①通過AMQP消息中間件收集各個組件發(fā)出的消息
②通過Ceilometer的agent(可擴展)調(diào)用Openstack各個組件的API獲得數(shù)據(jù)
注:支持第三方的agent,plugin或driver來擴展Openstack是常用的手段载萌。
③在每個計算節(jié)點上運行Ceilometer的polling agent獲得虛擬機的信息惧财。
b. 數(shù)據(jù)的存儲:
① 和Nova及Cinder等使用MYSQL作為默認的后端存儲不一樣,Ceilometer默認的后端數(shù)據(jù)庫是MongoDB(是一個key-value數(shù)據(jù)庫)扭仁,當然它也可以用Hbase垮衷,MYSQL等數(shù)據(jù)庫。
c. (如何提供給)第三方系統(tǒng)
① 通過Ceilometer 的API獲得計量數(shù)據(jù)乖坠,設置報警條件和預值搀突。
- Heat組件解析
Heat又稱為Ochestration:把一個IT系統(tǒng)的各個模塊和資源組織,調(diào)度起來熊泵。它和AWS里的CloudFormation比較類似仰迁,它按照用戶寫的模板或腳本(Template)把Openstack的各種資源(如虛擬機或卷)實例化并組織起來形成一個完整的應用。按照Tempalte生成的東西叫stack(棧)顽分。Tempalte寫了創(chuàng)建一個stack需要用到哪些資源徐许,及這些資源的相互關系。Heat的主要任務就是負責stack的創(chuàng)建卒蘸,更新和銷毀雌隅。(創(chuàng)建命令:heat stack-create … -template-file …)
附:完整的Template包括,version ,description , resources,parameters, outputs
*更復雜的結(jié)構:創(chuàng)建一個wordpress網(wǎng)站恰起;創(chuàng)建一個三層架構的網(wǎng)站修械;可以拆分為幾個Template分別實現(xiàn)不同功能。
注:Heat可以和Ceilometer配合使用來實現(xiàn)auto scaling检盼,另外Heat可兼容CloudFormation模板祠肥。 - Trove組件解析
1) Trove的功能:根據(jù)用戶的請求創(chuàng)建一個包含數(shù)據(jù)庫的虛擬機
2) 數(shù)據(jù)庫的建立:可以是創(chuàng)建完虛擬機后由trove去安裝;也可事先做好trove的鏡像(里面已經(jīng)安裝好數(shù)據(jù)庫了)梯皿。后者效率更高仇箱,Trove支持關系型數(shù)據(jù)庫MySQL, NoSQL數(shù)據(jù)庫,MongoDB, Cassandra等
3) Trove的功能實現(xiàn)依賴四個組件:
a. Trove API:提供RESTful API
b. Taskmanager: 完成管理命令的執(zhí)行(創(chuàng)建/銷毀/管理示例东羹,操作數(shù)據(jù)庫)剂桥,它的主要工作方式主要是去監(jiān)聽RabbitMQ這個中間件上的MQP等調(diào)用請求并實現(xiàn)。
c. Trove-Conductor: 和Nova-Conductor比較類似属提,負責和數(shù)據(jù)庫交互权逗。
d. Guest agent: 類似于Neutron agent ,對應數(shù)據(jù)庫
4) Trove目前面臨的挑戰(zhàn):不支持自動配置數(shù)據(jù)庫的HA - Sahara組件解析(Sahara原名叫Savanna)
1) Sahara作用:
a. 在Openstack上快速創(chuàng)建Hadoop集群
b. 利用Iaas上空閑的計算能力做大數(shù)據(jù)的離線處理
2) Sahara的架構(原理)要點:
a. Horison:里包含Sahara的dashboard
b. Plugin:用來支持Hadoop各種發(fā)行版
c. Swift: 存儲持久化數(shù)據(jù)(不該再放到Hadoop的HDFS里冤议,因為它的生命周期和虛擬化的Hadoop集群的生命周期一樣)
d. Sahara API:不同于其它組件,它的API分為兩個服務入口斟薇,一個叫Service.api,另外一個叫Service.edp.api恕酸。
3) Sahara的使用模式
① Iaas模式/管理模式:
a. 節(jié)點(此處不同于先前講的計算節(jié)點等)堪滨,它是運行Hadoop集群的機器。
b. 節(jié)點組:按照節(jié)點類型劃分蕊温,通過節(jié)點組模板定義節(jié)點組
c. 集群:完整的Hadoop集群袱箱,通過集群模板定義集群
d. Job:(有工作流的性質(zhì)),它可能是若干個Hadoop job組織起來形成Sahara
② Pass,DAaas模式/用戶模式/EDP模式
a. 前提:至少創(chuàng)建一個Hadoop集群
b. 準備工作:上傳要處理的數(shù)據(jù)义矛;編寫job并上傳发笔;給Sahara一個三元組(即調(diào)用EDP API時的參數(shù),分別是使用哪個集群凉翻,數(shù)據(jù)元素在哪了讨,要運行的job是什么) - Ironic組件解析
1) 用Ironic(由單詞iron演化而來)實現(xiàn)對物理機械的管理或者說用物理機器實現(xiàn)云服務。
2) 它和Openstack在部署架構上管理虛擬機和物理機器的區(qū)別:
a. 在控制節(jié)點上多了一個Ironic API組件
b. 在Compute Node上除了Nova-Compute, Neutron agent以外制轰,還有一個Ironic Conductor 前计。(注:此處的節(jié)點和先前的節(jié)點不一樣,它和Cinder Volume類似艇挨,并不是實際提供存儲資源的節(jié)點)
3) 它和Openstack在計算資源調(diào)度流程上或啟動一臺機器的工作流程上的區(qū)別:
物理機器節(jié)點上的Nova Compute調(diào)用Ironic API残炮,實際啟動的物理機器節(jié)點或說實際提供計算資源的物理機器節(jié)點是由Ironic Conductor通過PXE ,IPMI遠程管理的。
4) Ironic實際上是由Nova的一個部分演化而來(以前Nova中專門管理物理機器的Novadriver)(同樣的缩滨,先前說的Cinder是Nova Volume演化而來)
問題集:
Heat中的模板和Sahara中的模板的異同:
異:
Heat和AWS里的CloudFormation比較類似,它按照用戶寫的模板或腳本(Template)把Openstack的各種資源(如虛擬機或卷)實例化并組織起來形成一個完整的應用。按照Tempalte生成的東西叫stack(棧), Tempalte寫了創(chuàng)建一個stack需要用到哪些資源脉漏,及這些資源的相互關系苞冯。
Sahara 的Iaas模式/管理模式中,通過節(jié)點組模板定義節(jié)點組侧巨,通過集群模板定義集群舅锄。
同:都包含了配置信息,用來對組件進行配置司忱,通常包括version ,description , resources皇忿,parameters, outputs等信息。
第五章 OpenStack實際操作
- OpenStack部署環(huán)境準備
1) 創(chuàng)建一個路由器(Router);創(chuàng)建一個交換機(用Neutron 中的Network坦仍,它相當于交換機鳍烁,需配置子網(wǎng)(廣播域)),最后把兩者連接起來繁扎。為了讓網(wǎng)絡里的連接其它設備能夠正常訪問公網(wǎng)(Internet)需用Floating IP(也是Netron中的一個概念幔荒,它實際上就是云計算環(huán)境可用的公網(wǎng)IP),它有兩種用法,一是將其綁定到路由器上梳玫,二是將其綁定到云主機上(讓這臺云主機和外網(wǎng)相連通爹梁。它顯示有2個IP,但實際只有一個IP,它是通過Neutron的一種機制把兩個IP映射起來提澎。當然我們也可通過Neutron實現(xiàn)修改虛擬機真正的IP地址和MAC地址)姚垃。
2) 創(chuàng)建云主機(Instance) - KeyStone的安裝部署
a. 登錄Controller節(jié)點安裝KeyStone(apt-get),并修改KeyStone配置文件【修改etc目錄下keystone.conf文件中的三個部分:和數(shù)據(jù)庫連接相關的設置盼忌;修改或設置寫log的位置(log_dir=/var/log/keystone)莉炉;設置keystone服務和其它服務共享的一個token】
b. 創(chuàng)建用戶(需要帶兩個參量:token和url),創(chuàng)建租戶碴犬,創(chuàng)建角色絮宁;創(chuàng)建服務
c. (Controller節(jié)點上)把常用參數(shù)(username,password,tenant-name,auth-url等)作為環(huán)境變量導出
- Glance的安裝部署
a. 安裝Glance(安裝Glance服務及Glance的python客戶端),并修改Glance配置文件【主要修改etc目錄下glance-api.conf文件和glance-registry.conf服协。首先進行glance-api.conf和glance-registry.conf文件中和數(shù)據(jù)庫連接相關的配置绍昂,且檢查/var/lib/glance目錄,如果存在sqlite數(shù)據(jù)庫文件(glance.sqlite)需將其刪除偿荷,防止誤讀窘游;而后修改glance-registry.conf】
b. 創(chuàng)建Glance數(shù)據(jù)庫(MySQL)并同步(glance-manage db_sync)
c. 用keystone命令給Glance創(chuàng)建用戶并添加該用戶到先前的租戶里
d. 修改glance-api.conf文件和glance-registry.conf文件中keystone相關的設置,
并在keystone中注冊Glance以及它的端點跳纳。
e. 上傳鏡像
- Nova的安裝部署
1) 在Controller節(jié)點進行安裝忍饰,此處不能和先前一樣寫個Nova,要寫清楚具體安裝哪些組件(如Scheduller,Conductor,Nova-api,Nova的python客戶端等)寺庄。
2) 在Compute節(jié)點安裝Nova-compute-kvm(此處kvm實際上是由qemu模擬的一個虛擬機)艾蓝,沒有Neutron則需安裝nova-network力崇,nova-api-matadata .
3) 同先前組件一樣,先修改nova.conf相關配置赢织,同樣要去檢查/var/lib/glance目錄亮靴,如果存在sqlite數(shù)據(jù)庫文件將其刪除,創(chuàng)建數(shù)據(jù)庫(MySQL)并同步(把數(shù)據(jù)項或信息填充到現(xiàn)在的數(shù)據(jù)庫于置,glance-manage db sync茧吊,不同于先前的命令,此處無下劃線)
4) 繼續(xù)修改nova.conf中keystone相關的設置八毯,在keystone里創(chuàng)建用戶并注冊服務和端點搓侄。
5) 在Compute節(jié)點上配置nova.network.api.API
6) 在控制節(jié)點上創(chuàng)建網(wǎng)絡
7) 啟動虛擬機(用nova boot命令)
- OpenStack支撐服務的安裝配置
支撐服務:NTP(時間同步服務),mysql數(shù)據(jù)庫服務话速,RabbitMQ(消息中間件服務)讶踪。配置host文件,實現(xiàn)通過主機名訪問虛擬機尿孔。
1)NTP服務:它有兩個作用俊柔,一是將本機時間和網(wǎng)絡上的一臺時間同步器去同步;另外一個作用是將本機作為一個時間同步器提供給其它節(jié)點去使用活合。
在Opentstack部署環(huán)境中雏婶,建議讓Controller結(jié)點去和互聯(lián)網(wǎng)上的一個時間同步器同步,讓其它結(jié)點和這個Controller結(jié)點同步白指,這樣一來留晚,其它結(jié)點和這個Controller結(jié)點的時間同步就在一個局域網(wǎng)內(nèi),時間同步性更高告嘲。安裝完NTP后為實現(xiàn)把Controller結(jié)點做為時間同步源错维,需在其它結(jié)點上編輯它的配置文件(etc文件夾下的ntp.conf,加上servercontroller)。
2)在Contorller結(jié)點上安裝mysql服務(需安裝python-mysqldb客戶端和mysql-server服務進程)橄唬,并修改配置文件(etc文件夾中mysql下的my.cnf,修改bind-address(綁定訪問mysql服務器所需要的IP地址)赋焕;修改或添加數(shù)據(jù)庫引擎配置(mysql默認或推薦的數(shù)據(jù)庫引擎是InnoDB)。
注:【實際運用中可把數(shù)據(jù)庫服務安裝到單獨的一個機器上(可配置全ssd)仰楚,公司里常用全ssd服務器來支撐數(shù)據(jù)庫服務隆判,提高其性能】
其它結(jié)點上不用再安裝數(shù)據(jù)庫服務,只需安裝一個python客戶端即可僧界,Openstack就可以訪問Contorller結(jié)點上的那個數(shù)據(jù)庫了侨嘀。
附:安裝mysql時會創(chuàng)建一個匿名用戶和一些Database,為正常使用起見可將其清除(可手動清除捂襟,也可用mysql提供的一個命令:mysql_secure_installtion)咬腕。
3)在Contorller結(jié)點上安裝RabbitMQ服務。消息中間件還可用別的如Qpid葬荷,ZeroMQ
- 通過圖形界面使用OpenStack
1)除了安裝horizion(dashboard)涨共,還需安裝apache等其它幾個服務纽帖,這些都是為了顯示動態(tài)網(wǎng)頁所需要的。另外還要刪除一個包(openstack-dashboard-ubantu-theme)煞赢,因為它影響到horizon圖形界面的顯示抛计。然后修改配置文件(etc中openstack-dashboard下的一個.py結(jié)尾的文件local_settings.py)哄孤,修改BACKEND和LOCATION(它們是對顯示的web界面緩存的設置)照筑,讓其參數(shù)與memcached中一致。
- 通過命令行使用OpenStack
1)先前多數(shù)是在Controller節(jié)點上用過命令行訪問本地的服務瘦陈,此處介紹遠程訪問的方法凝危。為了模擬遠程訪問的環(huán)境,可在使用的公有云里創(chuàng)建一個ubuntu的云主機作為客戶端(還是接入先前的子網(wǎng))晨逝,并修改配置文件(hosts)蛾默。然后安裝相應客戶端(如python-novaclient)。
注:可以創(chuàng)建腳本捉貌,把導出環(huán)境變量的命令都放在里面支鸡,方便以后使用(里面的命令需根據(jù)自己的環(huán)境進行修改)。之后不直接執(zhí)行腳本趁窃,而是用source命令執(zhí)行腳本牧挣,這樣才能把腳本里設置的環(huán)境變量帶到當前用戶的操作環(huán)境中。(可用echo命令查看環(huán)境變量設置是否成功)
第六章 OpenStack擴展話題
- OpenStack自動化部署
1)分為三個層次:
A. 單節(jié)點自動安裝:常用于準備一個開發(fā)環(huán)境醒陆,常用工具是DevStack
B. 集群化安裝:最常用工具是puppet
C. 多個集群安裝部署:典型代表工具是Mirantis公司推出的fuel
2)DevStack的安裝演示(單節(jié)點自動安裝的實際操作過程)
a. 創(chuàng)建云主機瀑构。更新一下安裝源(apt-get update),安裝git刨摩,通過git clone命令下載DevStack的源代碼寺晌。然后用devstack文件夾里提供的一個工具創(chuàng)建一個用來安裝和運行DevStack的用戶(./create-stack-user.sh)。將下載的源碼在當前用戶的home文件夾下拷貝一份(可從本地拷貝或再次從源端下載)澡刹,找到devstack文件夾中samples下的local.conf文件,拷貝一份到上一級目錄并修改其中的相關配置(把HOST_IP修改成當前當前機器的內(nèi)網(wǎng)IP)呻征。
b. 運行./stack.sh腳本,進入自動安裝過程罢浇。
- Hadoop云化時存在的問題
1)Hadoop是用來做大數(shù)據(jù)處理的一個工具陆赋,它也有自己龐大的生態(tài)圈,其中最重要的兩個軟件是HDFS(分布式存儲系統(tǒng))己莺,MapReduce(任務調(diào)度框架)
注:HDFS把文件分成塊奏甫,把塊做三個副本存儲到不同節(jié)點上,形成一個比較高可靠性的文件系統(tǒng)凌受;MapReduce把我們提交的數(shù)據(jù)處理任務(job)拆分成不同的task分發(fā)到不同的節(jié)點上阵子,以實現(xiàn)并行處理。MapReduce最大的特點是能夠把任務調(diào)度到離數(shù)據(jù)近的節(jié)點上胜蛉,盡量減少數(shù)據(jù)在網(wǎng)絡間的傳輸挠进,使我們可用通用廉價的X86服務器和網(wǎng)絡設備來構筑一個數(shù)據(jù)并行處理系統(tǒng)色乾。
★Openstack虛擬機調(diào)度和Hadoop任務調(diào)度實際上是兩個不同層次的資源調(diào)度。要把Hadoop做云化就需要解決兩個不同層次上的資源和任務調(diào)度問題领突。Hadoop最重要的兩個部分HDFS和MapReduce云化時也會出現(xiàn)相應問題暖璧,為解決相關問題Hadoop提供了一個由VMware主導的開源項目HVE(Hadoop Virtual Extensions)。
- 基于OpenStack實現(xiàn)Hadoop云化
1)Sahara分別從部署管理和提供數(shù)據(jù)處理服務兩個層次上對Hadoop云化做了一些工作君旦。
2)HDFS和Swift集成:在Hadoop集群里仍用本地根硬盤來構筑HDFS澎办,但是把數(shù)據(jù)源和job放在Swift里。此外金砍,由VMware主導的開源項目BDE(Big Data Extensions)局蚀,它和Openstack的Sahara很類似,但是在各個方面都做得比Sahara好得多恕稠,且它和HVE 集成做得很好琅绅。
- Ceph簡介
1)Ceph現(xiàn)在經(jīng)常被用來做為RBD設備提供塊存儲服務。
2)Ceph層次結(jié)構:
底層RADOS鹅巍,中間層LIBRADOS ,頂層RADOS GW, RBD, CEPH FS
① RADOS:可靠的千扶,自動化的,分布式的對象存儲骆捧。底層是一個完整的存儲系統(tǒng)澎羞,它的核心是OSD(Object Storage Daemon),Daemon是一個服務軟件(進程)凑懂,它和Cinder里定義的OSD(Object Storage Device)之間有很強的對應關系煤痕,可認為是其簡略版本。
注:不同于Swift存儲 的對象(文件)接谨,Ceph的對象實際上是把一個文件拆分成若干個Object摆碉,分別放到底層的存儲設備上。
★RADOS邏輯結(jié)構:OSDs , Monitors , Clients
注:此處的客戶端和Swift客戶端有本質(zhì)區(qū)別脓豪,Swift客戶端只是用Pyhon寫的一個供用戶使用能夠調(diào)用RESTful接口的客戶端程序而已巷帝,沒有它我們直接調(diào)用RESTful接口也可以讀寫Swift,但是在RADOS里如果沒有Clients,整個數(shù)據(jù)讀寫就難以實現(xiàn)扫夜,它是存儲系統(tǒng)的一部分楞泼。
★Ceph系統(tǒng)中的尋址流程(文件存儲到底層OSD上)
它首先把文件拆分成若干個Objects,然后把Objects放到PG組里面笤闯,每個組再通過CRUSH算法給它映射到不同的OSD上堕阔。此存儲過程特點是它每一步都是通過計算得到的,它中間沒有查表颗味,這使得Ceph擁有較好的擴展性超陆。
②LIBRADOS: 提供一組直接訪問RADOS的API
③ RADOSGW, RBD, CEPH FS:RADOS GateWay把底層對象存儲系統(tǒng)往外再次封裝,提供兼容Swift和亞馬遜S3對象存儲接口浦马,這個接口也是HTTP的时呀。RBD經(jīng)常作為Cinder的后端為虛擬機提供卷张漂。CEPH FS是在Ceph基礎上封裝了一個POSIX接口,形成文件系統(tǒng)谨娜。
- Ceph在OpenStack中的應用
1)Ceph在OpenStack中受歡迎的原因:
①有了Ceph航攒,可基于X86搭建分布式塊存儲系統(tǒng)
附:塊存儲有強一致性和高性能的要求,這對于Swift和HDFS都是沒有或比較弱的趴梢。
★Cinder支持Ceph提供的RBD設備漠畜,二者結(jié)合可基于X86普通服務器更加廉價方便地搭建一個塊存儲系統(tǒng)提供(卷)給虛擬機去使用。
②提供Swift兼容的對象接口
★Ceph和Swift仍不可互為替代垢油,二者比較如下:
案例一:目前OpenStack規(guī)模小盆驹,節(jié)點數(shù)量少圆丹,此時使用Swift節(jié)點浪費存儲滩愁,可選用Ceph
案例二:提供云盤服務(面對大量用戶,強調(diào)用戶體驗辫封,用戶可選存儲策略(Storage Policy))硝枉,此時選用Swift更好,它更好地支持規(guī)木胛ⅲ化部署妻味,有先進的Feature,成本比Ceph更低欣福。
④ 現(xiàn)在OpenStack所有存儲都(開始)支持Ceph作為后端
- OpenStack與Docker
附:HyperVisor:在一個宿主機上搭建環(huán)境责球,可在環(huán)境里創(chuàng)建虛擬機,再在虛擬機里裝客戶操作系統(tǒng)(Guest OS)拓劝,然后在其上面裝中間件雏逾,之后再裝應用等。
Container技術:另外一種虛擬化技術郑临,無需再裝Guest OS栖博,而直接基于宿主機操作系統(tǒng)來操作,可在其上做運行環(huán)境隔離厢洞,資源劃分等仇让,并形成容器,讓應用在容器中運行躺翻。容器之間底層是共享一個操作系統(tǒng)的丧叽,甚至可以共享一些公用的庫。和傳統(tǒng)的HyperVisor相比公你,它的優(yōu)勢在于省去了Guest OS的開銷踊淳;劣勢在于只能使用和宿主機相同的操作系統(tǒng)。
1)Docker:是基于容器的一個引擎省店,讓開發(fā)者可以打包應用嚣崭,并將其依賴包打到可移植的容器里笨触,而容器可發(fā)布到任何linux機器上。OpenStack里將Docker也看成是一種HyperVisor
2)OpenStack+Docker:(結(jié)合點)
①使用Swift做Docker鏡像的存儲后端
②Nova里有針對Docker的Driver或插件雹舀,可用Nova調(diào)度和管理Docker容器芦劣。
③使用Heat來實現(xiàn)Docker的Ochestration
④基于Neutron設計與實現(xiàn)適用于Docker的SDN方案
⑤使用Glance來管理Docker鏡像
……