官术网_书友最值得收藏!

1.3 OpenStack體系結(jié)構(gòu)

“云計算”中的“云”可以被簡單地理解為任何可以通過互聯(lián)網(wǎng)訪問的服務(wù),那么根據(jù)所提供服務(wù)的類型,云計算有3種落地方式。

· IaaS(基礎(chǔ)架構(gòu)即服務(wù)):通過互聯(lián)網(wǎng)向用戶提供“基礎(chǔ)的計算資源”,包括處理能力、存儲空間、網(wǎng)絡(luò)等。用戶能從中申請到硬件或虛擬硬件,包括裸機(jī)(Bare Metal)或虛擬機(jī),然后在上面安裝操作系統(tǒng)或其他應(yīng)用程序。

· PaaS(平臺即服務(wù)):把計算環(huán)境、開發(fā)環(huán)境等平臺當(dāng)作一種服務(wù)并通過互聯(lián)網(wǎng)提供給用戶。用戶能從中申請到一個安裝了操作系統(tǒng)及支撐應(yīng)用程序運(yùn)行所需要的運(yùn)行庫等軟件的物理機(jī)或虛擬機(jī),然后在上面安裝其他應(yīng)用程序,但不能修改已經(jīng)預(yù)先安裝好的操作系統(tǒng)和運(yùn)行環(huán)境。

· SaaS(軟件即服務(wù)):通過互聯(lián)網(wǎng)為用戶提供軟件及應(yīng)用程序的一種服務(wù)方式。應(yīng)用軟件被安裝在廠商或服務(wù)供應(yīng)商那里,用戶可以通過網(wǎng)絡(luò)以租賃的方式來使用這些軟件,而不是直接購買這些軟件。比較常見的模式是提供一組賬號和密碼。

PaaS和SaaS并不一定需要底層有虛擬化技術(shù)的支持,但I(xiàn)aaS一般都是建立在虛擬化技術(shù)的基礎(chǔ)上的。OpenStack及其一直在跟隨的榜樣——亞馬遜的AWS都屬于IaaS的范疇。

在本質(zhì)上,IaaS是一個用戶層的軟件系統(tǒng),它包含多個服務(wù)和應(yīng)用程序,這些服務(wù)或程序被部署到多臺被管理的物理主機(jī)上,這些物理主機(jī)通過網(wǎng)絡(luò)連接成一個大的分布式系統(tǒng)。IaaS系統(tǒng)要解決的問題就是如何自動管理這些物理主機(jī)上虛擬出來的虛擬機(jī),包括虛擬機(jī)的創(chuàng)建、遷移、關(guān)閉,虛擬存儲的創(chuàng)建和維護(hù),虛擬網(wǎng)絡(luò)的管理,還包括監(jiān)控計費(fèi)、負(fù)載均衡、高可用性、安全等。這里不提供任何虛擬化服務(wù)的裸機(jī)(Bare Metal)也被視為虛擬機(jī)的一種特例,對它的管理也屬于虛擬機(jī)管理的范疇。

在單臺主機(jī)上,這些都可以通過簡單的命令和操作完成,有些問題,如高可用性或負(fù)載均衡等根本不存在。但是在大規(guī)模網(wǎng)絡(luò)上或數(shù)據(jù)中心里,將有成千上萬臺物理主機(jī),僅僅依靠運(yùn)維人員來完成這些管理任務(wù)是不現(xiàn)實(shí)的,這時就需要軟件系統(tǒng)來自動輔助運(yùn)維人員管理和維護(hù)系統(tǒng)的運(yùn)行,給用戶提供虛擬機(jī)服務(wù)。這就是IaaS系統(tǒng)產(chǎn)生的初衷,也是AWS和OpenStack,以及其他IaaS產(chǎn)品和開源項目要實(shí)現(xiàn)的功能。

1.OpenStack與AWS

無論是否情愿,我們都不得不承認(rèn),與亞馬遜的AWS相比,OpenStack只是處于一個跟隨者的位置。

在Bezos發(fā)布那份充滿系統(tǒng)架構(gòu)智慧的命令之后,2006年亞馬遜推出了AWS產(chǎn)品,正式開啟了云計算的新紀(jì)元。AWS由一系列服務(wù)組成,用來實(shí)現(xiàn)IaaS系統(tǒng)所需要的功能。如圖1-3所示,AWS架構(gòu)由5層組成,自下而上分別是AWS全球基礎(chǔ)架構(gòu)、基礎(chǔ)服務(wù)、應(yīng)用平臺服務(wù)、管理和用戶應(yīng)用程序。

而對于服務(wù)類型本身而言,AWS提供6類主要服務(wù):Database(數(shù)據(jù)庫)、Storage &CDN(存儲和內(nèi)容分發(fā))、Analytics(分析)、Compute &Networking(計算和網(wǎng)絡(luò))、Deployment &Management(部署管理)和App Services(應(yīng)用服務(wù)),如圖1-4所示。

img

圖1-3 AWS架構(gòu)

img

圖1-4 AWS的服務(wù)模塊

在數(shù)據(jù)庫服務(wù)里,包括NoSQL數(shù)據(jù)庫服務(wù)DynamoDB、關(guān)系數(shù)據(jù)庫服務(wù)RDS、緩存和數(shù)據(jù)倉庫服務(wù)Redshift。

在存儲和內(nèi)容轉(zhuǎn)發(fā)服務(wù)里,涵蓋了簡單存儲服務(wù)S3、塊存儲服務(wù)EBS、Amazon云前端Cloud Front、Amazon Glacier、AWS存儲網(wǎng)關(guān)Storage Gateway及AWS導(dǎo)入/導(dǎo)出Import Export。其中S3提供AWS永久存儲服務(wù),而EBS提供塊存儲服務(wù)。

在分析服務(wù)里,包括用于大數(shù)據(jù)的Elastic MapReduce(EMR)、用于大規(guī)模實(shí)時流數(shù)據(jù)處理的Kinesis和數(shù)據(jù)管道Data Pipeline。

在計算和網(wǎng)絡(luò)服務(wù)里,涵蓋了負(fù)責(zé)虛擬機(jī)調(diào)度和管理的弾性計算云EC2、保證企業(yè)在公有云上搭建安全私有云的虛擬私有云服務(wù)VPC、負(fù)載均衡服務(wù)ELB、虛擬桌面管理服務(wù)WorkSpaces、用于計算資源自動擴(kuò)容縮容的Auto Scaling服務(wù)、為企業(yè)定制的專屬網(wǎng)絡(luò)連接DirectConnect,以及高可靠且可擴(kuò)展的域名系統(tǒng)Web服務(wù)Route 53等。

在部署管理服務(wù)里,包括建立和管理AWS資源的CloudFormation、監(jiān)控CloudWatch、用于輕松部署Web應(yīng)用和服務(wù)的Elastic Beanstalk、驗證訪問管理IAM、日志管理CloudTrail、為運(yùn)維人員配備的應(yīng)用管理服務(wù)OpsWorks和安全服務(wù)CloudHSM。

在應(yīng)用服務(wù)里,包括用于云搜索的CloudSearch、用于流媒體轉(zhuǎn)碼的Elastic Transcoder、簡單郵件服務(wù)SES、簡單消息服務(wù)SNS、簡單隊列服務(wù)SQS、簡單工作流服務(wù)SWF,以及應(yīng)用程序流AppStream。

綜上所述,AWS的功能十分強(qiáng)大,而且目前還在不斷發(fā)展之中,OpenStack從誕生之初就一直在向AWS學(xué)習(xí),同時,OpenStack也提供開放接口去兼容各種AWS服務(wù)。

比如,在AWS中最為核心的EC2模塊,負(fù)責(zé)計算資源的管理,以及虛擬機(jī)的調(diào)度和管理,在OpenStack中對應(yīng)的就是Nova項目;在AWS中的簡單存儲服務(wù)S3,在OpenStack中有Swift項目與其功能相近;AWS的塊存儲服務(wù)EBS對應(yīng)OpenStack的Cinder項目;AWS的驗證訪問管理IAM對應(yīng)OpenStack的Keystone項目;AWS的監(jiān)控CloudWatch對應(yīng)OpenStack的Ceilometer項目;AWS有CloudFormation,OpenStack則有Heat項目;AWS支持關(guān)系數(shù)據(jù)庫服務(wù)RDS和NoSQL數(shù)據(jù)庫服務(wù)DynamoDB,OpenStack也支持MySQL、PostgreSQL和NoSQL數(shù)據(jù)庫MongoDB。

目前來看,OpenStack遠(yuǎn)沒有AWS完善,但是相比來說,OpenStack是一個開源項目,并不收取版權(quán)費(fèi)用,這一點(diǎn)吸引了眾多的企業(yè)IT人員、開源愛好者和開發(fā)人員、學(xué)術(shù)界人士、云服務(wù)提供商、運(yùn)維人員等加入OpenStack社區(qū),并貢獻(xiàn)代碼和分享經(jīng)驗。

2.OpenStack架構(gòu)視圖

作為一個IaaS范疇的云平臺,完整的OpenStack架構(gòu)首先要具有如圖1-5所示的基本視圖,它向我們傳遞了這樣的信息——OpenStack通過網(wǎng)絡(luò)將用戶和網(wǎng)絡(luò)背后豐富的硬件資源分離。

img

圖1-5 OpenStack基本視圖

OpenStack一方面負(fù)責(zé)與運(yùn)行在物理節(jié)點(diǎn)上的Hypervisor進(jìn)行交互,實(shí)現(xiàn)對各種硬件資源的管理與控制;另一方面為用戶提供一個滿足要求的虛擬機(jī)。

至于OpenStack內(nèi)部,作為AWS的一個跟隨者,它的體系結(jié)構(gòu)里不可避免地體現(xiàn)著前面所介紹的AWS各個組件的痕跡。OpenStack架構(gòu)標(biāo)準(zhǔn)視圖如圖1-6所示。

img

圖1-6 OpenStack架構(gòu)標(biāo)準(zhǔn)視圖

圖1-6涵蓋了OpenStack曾經(jīng)的7個核心組件,分別是Compute(計算)、Object Storage(對象存儲)、Identity(認(rèn)證)、Dashboard(用戶界面)、Block Storage(塊存儲)、Network(網(wǎng)絡(luò))和Image(鏡像服務(wù))。在這7個核心組件中,除用戶界面以外,其余6個仍是目前的核心組件。每個組件都是多個服務(wù)的集合,一個服務(wù)意味著運(yùn)行著的一個進(jìn)程。根據(jù)OpenStack的部署規(guī)模,可以決定用戶是選擇將所有服務(wù)運(yùn)行在同一臺機(jī)器上還是多臺機(jī)器上。

1)Compute(Nova)

Compute的項目代號是Nova,它根據(jù)需求提供虛擬機(jī)服務(wù),如創(chuàng)建虛擬機(jī)或?qū)μ摂M機(jī)進(jìn)行熱遷移等。從概念上看,它對應(yīng)于AWS的EC2服務(wù),而且它實(shí)現(xiàn)了對EC2 API兼容。如今,Rackspace和惠普提供的商業(yè)計算服務(wù)正是建立在Nova之上的,NASA內(nèi)部使用的也是Nova。

Nova組件包括nova-api、nova-compute、nova-scheduler、nova-conductor、nova-db、nova-console、nova-consoleauth、nova-cert和nova-objectstore等。

· nova-api是Nova對外提供服務(wù)的窗口,它接收并響應(yīng)來自用戶的Compute API調(diào)用。nova-api同時兼容亞馬遜AWS EC2 API,也提供一套與管理員操作相關(guān)的管理API。

· nova-compute是安裝到每臺物理主機(jī)上的服務(wù)進(jìn)程,這個服務(wù)在接收請求之后會執(zhí)行一批與虛擬機(jī)相關(guān)的操作,這些操作需要調(diào)用底層的Hypervisor API完成,如支持XenServer/XCP的XenAPI、支持KVM和QEMU的Libvirt或支持VMware的VMwareAPI等。

· nova-scheduler用于接收創(chuàng)建虛擬機(jī)的請求,并決定在哪臺物理主機(jī)上啟動該虛擬機(jī)的調(diào)度器。

· nova-conductor是處于nova-compute與nova-db之間的一個組件。nova-conductor建立的初衷是基于安全的考慮而避免nova-compute直接訪問nova-db。也就是說,nova-compute對nova-db的訪問請求,比如,讓nova-compute查詢一臺虛擬機(jī)的狀態(tài),或者更新一條記錄,都由nova-conductor代為轉(zhuǎn)交。而nova-scheduler對nova-db的請求,卻沒有這種顧慮,也就是說nova-scheduler可以直接訪問nova-db。

· nova-db包含大量數(shù)據(jù)庫表,該數(shù)據(jù)庫用于記錄虛擬機(jī)狀態(tài)、虛擬機(jī)與物理機(jī)的對應(yīng)關(guān)系、租戶信息等數(shù)據(jù)內(nèi)容。

· nova-console和nova-consoleauth是Nova提供的控制臺服務(wù),允許最終用戶通過代理服務(wù)器訪問其虛擬機(jī)的控制臺。

· nova-cert和nova-objectstore分別提供了X509驗證管理服務(wù)和在Glance中注冊鏡像的S3接口服務(wù)。

2)Object Storage(Swift)

Object Storage的項目代號是Swift,它允許存儲或檢索對象,也可以認(rèn)為它允許存儲或檢索文件,它能以低成本的方式通過RESTful API管理大量無結(jié)構(gòu)數(shù)據(jù),對應(yīng)于AWS的S3服務(wù)。目前,KT、Rackspace和Internap都提供基于Swift的商業(yè)存儲服務(wù),許多公司的內(nèi)部也使用Swift來存儲數(shù)據(jù)。

Swift由proxy-server、account-server、container-server和object-server等一系列進(jìn)程或服務(wù)組成。

· proxy-server處于Swift系統(tǒng)內(nèi)部與外部之間,它負(fù)責(zé)接收API請求或HTTP請求,這些請求包括上傳文件、修改元數(shù)據(jù)、創(chuàng)建容器等。有時為了提高系統(tǒng)性能,proxy-server也會與Memcached在一起部署。

· account-server僅用于賬號管理。

· container-server用于管理容器或文件夾的映射關(guān)系。

· object-server用于管理在存儲節(jié)點(diǎn)上的實(shí)際對象,如文件等。

除此之外,還有一些定期執(zhí)行的進(jìn)程,如Replication、Auditor、Updater和Reaper等。

3)Identity(Keystone)

Identity的項目代號是Keystone,為所有OpenStack服務(wù)提供身份驗證和授權(quán),跟蹤用戶及他們的權(quán)限,提供一個可用服務(wù)及API的列表。

Keystone的構(gòu)成組件并不復(fù)雜,只包括接收前臺請求的Keystone API和后臺的keystone-db。

4)Dashboard(Horizon)

Dashboard的項目代號是Horizon,它為所有OpenStack服務(wù)提供一個模塊化的基于Django的界面。通過這個界面,無論是最終用戶還是運(yùn)維人員都可以完成大多數(shù)的操作,如啟動虛擬機(jī)、分配IP地址、動態(tài)遷移等。

5)Block Storage(Cinder)

Block Storage的項目代號是Cinder,用來提供塊存儲服務(wù)。Cinder最早是由nova-volume演化而來的,由于當(dāng)時Nova已經(jīng)變得非常龐大并擁有眾多功能,同時Volume服務(wù)的需求會進(jìn)一步增加nova-volume的復(fù)雜度,比如,增加Volume調(diào)度,允許多個Volume Driver同時工作,并且需要nova-volume與其他OpenStack項目交互;將Glance中的鏡像模板轉(zhuǎn)換成可啟動的Volume,因此OpenStack新成立了一個項目Cinder來擴(kuò)展nova-volume的功能。Cinder對應(yīng)AWS的塊存儲服務(wù)EBS。

Cinder由cinder-api、cinder-volume、cinder-db、volumeprovider和cinder-scheduler組成。

· cinder-api用于接收來自外部的API請求,并把請求交給cinder-volume執(zhí)行。

· cinder-volume負(fù)責(zé)與底層的塊存儲服務(wù)打交道,它響應(yīng)讀、寫塊設(shè)備請求,并把這個請求交給塊存儲服務(wù),底層的不同存儲服務(wù)提供商都通過Driver的方式實(shí)現(xiàn)了volumeprovider,所以具體的讀、寫請求交給底層volumeprovider來完成。

· cinder-db用于記錄和維護(hù)塊設(shè)備的信息。

· cinder-scheduler與nova-scheduler類似,由于底層提供存儲的節(jié)點(diǎn)很多,cinder-scheduler會試圖尋找一個最佳的節(jié)點(diǎn)創(chuàng)建Volume。

6)Network(Neutron)

Network的項目代號是Neutron,用于提供網(wǎng)絡(luò)連接服務(wù),允許用戶創(chuàng)建自己的虛擬網(wǎng)絡(luò)并連接各種網(wǎng)絡(luò)設(shè)備接口。

Neutron通過插件(Plugin)的方式對眾多的網(wǎng)絡(luò)設(shè)備提供商進(jìn)行支持,如Cisco、Juniper等,同時支持很多流行的技術(shù),如Open vSwitch、OpenDaylight和SDN等。與Cinder類似,Neutron也來源于Nova,即nova-network,它最初的項目代號是Quantum,但由于商標(biāo)版權(quán)沖突問題,后來經(jīng)過提名投票更名為Neutron。

Neutron包含的組件有neutron-server、neutron-agent、network-provider、neutron-plugin,以及用于保存網(wǎng)絡(luò)配置等相關(guān)信息的neutron-db等。

neutron-server用于接收來自外部的API請求,并將該請求交給合適的Neutron插件處理。

在Neutron中,有眾多的插件和代理(Agent),它們負(fù)責(zé)插拔端口、建立網(wǎng)絡(luò)和子網(wǎng)、提供IP地址等。插件從功能上來說用于存儲當(dāng)前邏輯網(wǎng)絡(luò)的配置信息,判斷和存儲邏輯網(wǎng)絡(luò)與物理網(wǎng)絡(luò)之間的對應(yīng)關(guān)系,以及與一種或多種交換機(jī)通信來實(shí)現(xiàn)這種對應(yīng)關(guān)系,它需要訪問neutron-db。

而實(shí)現(xiàn)這種對應(yīng)關(guān)系,一般需要通過物理機(jī)上的代理來完成,代理可以分為Plugin Agent、DHCP Agent和L3 Agent。虛擬網(wǎng)絡(luò)上數(shù)據(jù)包的處理都是由Plugin Agent完成的,一般選擇了什么插件,就需要選擇相應(yīng)的Plugin Agent,Plugin Agent會調(diào)用相應(yīng)的network-provider完成與該網(wǎng)絡(luò)設(shè)備對應(yīng)的功能;DHCP Agent會為租戶網(wǎng)絡(luò)提供DHCP服務(wù),每個插件都使用這個代理;L3 Agent會為虛擬機(jī)訪問外部網(wǎng)絡(luò)提供3層轉(zhuǎn)發(fā)服務(wù)。

7)Image Service(Glance)

Image Service的項目代號是Glance,它是OpenStack的鏡像服務(wù)組件,相對于其他組件來說,Glance功能比較單一,代碼量也比較少,而且由于新功能的開發(fā)數(shù)量越來越少,近來社區(qū)的活躍度也沒有其他組件那么高,但它仍是OpenStack核心項目之一。

Glance主要提供一個虛擬機(jī)鏡像的存儲、查詢和檢索服務(wù),通過提供一個虛擬磁盤鏡像的目錄和存儲庫,為Nova的虛擬機(jī)提供鏡像服務(wù)。它與AWS中的Amazon AMI Catalog功能相似。

Glance由glance-api、glance-registry和glance-db等組件組成。

· glance-api用于接收來自外部的API鏡像請求,這些請求包括鏡像發(fā)現(xiàn)、獲取及存儲。

· glance-registry用于存儲、處理和獲取鏡像元數(shù)據(jù)。對于v2版本的API,glance-registry的功能已經(jīng)被整合到glance-api中。

· glance-db里存儲的就是元數(shù)據(jù)。

現(xiàn)在以創(chuàng)建虛擬機(jī)為例來介紹這些核心組件是如何通過相互配合完成工作的。用戶首先接觸到的是界面,即Horizon。通過Horizon上的簡單界面操作,一個創(chuàng)建虛擬機(jī)的請求被發(fā)送到OpenStack系統(tǒng)后端。

既然要啟動一個虛擬機(jī),就必須指定虛擬機(jī)的操作系統(tǒng)的類型,同時下載啟動鏡像以供虛擬機(jī)啟動使用。這件事情就是由Glance來完成的,而此時Glance所管理的鏡像有可能存儲在Swift上,所以需要與Swift進(jìn)行交互以得到需要的鏡像文件。

在創(chuàng)建虛擬機(jī)時,自然需要Cinder提供塊服務(wù)和Neutron提供網(wǎng)絡(luò)服務(wù),以便該虛擬機(jī)有Volume可以使用,能被分配到IP地址以與外界網(wǎng)絡(luò)連接,而且之后訪問該虛擬機(jī)的資源要經(jīng)過Keystone的認(rèn)證之后才可以繼續(xù)。至此,OpenStack的所有核心組件都參與了創(chuàng)建虛擬機(jī)的操作過程。

主站蜘蛛池模板: 金山区| 若尔盖县| 惠州市| 旅游| 丘北县| 洪江市| 江油市| 开原市| 屏山县| 郴州市| 眉山市| 肇庆市| 万源市| 遵义县| 黄梅县| 油尖旺区| 云龙县| 洞头县| 工布江达县| 玉屏| 大港区| 徐州市| 安西县| 潼南县| 鹰潭市| 南靖县| 淮滨县| 菏泽市| 达孜县| 栖霞市| 彩票| 塘沽区| 文化| 定西市| 温泉县| 岑溪市| 田东县| 始兴县| 山丹县| 西藏| 石河子市|