Openstack入坑指南
?什么是云計(jì)算
概念
云計(jì)算是一種基于互聯(lián)網(wǎng)的計(jì)算方式,通過這種方式,共享的軟硬件資源和信息,可以按需求提供給計(jì)算機(jī)和其他設(shè)備。用戶不需要了解”云“中的基礎(chǔ)設(shè)施細(xì)節(jié),不必具有相應(yīng)的專業(yè)知識(shí),也無需直接控制。云計(jì)算描述了一種基于互聯(lián)網(wǎng)的新的IT服務(wù)增加、使用和交付模式。
我們舉一個(gè)例子來理解云計(jì)算,云計(jì)算中的”云“可以理解為天上的云,天上的云可以變成雨水降落到地上,落到地上的水蒸發(fā)后又變成云彩。這樣就形成了一個(gè)循環(huán)。
這里的雨水表示計(jì)算資源,比如虛擬機(jī)、存儲(chǔ)、網(wǎng)絡(luò)等等。?
云變水的過程表示獲取資源的過程。?
水變?cè)频倪^程表示資源回收的過程。
云計(jì)算就像云水的循環(huán)過程一樣,按需分配,循環(huán)利用。
為什么需要云計(jì)算
云計(jì)算的本質(zhì)是希望解決資源利用率、計(jì)算能力不足和成本的問題。
- 單點(diǎn)故障會(huì)造成服務(wù)的中斷,要解決單點(diǎn)故障,需要為每個(gè)硬件準(zhǔn)備備用硬件,不但增加了硬件購(gòu)置成本,部署與維護(hù)成本也大。
這里的資源指的是硬件、帶寬等。自己管理服務(wù)器會(huì)面臨一個(gè)很頭疼的問題,?
- 增加服務(wù)的時(shí)候,需要購(gòu)買服務(wù)器,購(gòu)買服務(wù)器需要時(shí)間;使用云服務(wù)器的時(shí)候,可隨時(shí)增加素驅(qū)動(dòng)的結(jié)果:需求拉動(dòng)和技術(shù)推動(dòng)。業(yè)務(wù)需求的拉動(dòng),希望解決業(yè)務(wù)應(yīng)用的問題,云計(jì)算本質(zhì)上是希望解決資源利用率、計(jì)算能力不足和成本的問題。技術(shù)發(fā)展的推動(dòng),使得云計(jì)算具備了技術(shù)上的可行性,技術(shù)的發(fā)展推動(dòng)了IT創(chuàng)新的商業(yè)價(jià)值。云計(jì)算的出現(xiàn)也有其必然性。
- 減少服務(wù)的時(shí)候,需要把購(gòu)置的服務(wù)器取下,服務(wù)器會(huì)退還給廠商或者閑置下來,而云服務(wù)器不用的時(shí)候,直接不續(xù)費(fèi)就好了(比如說阿里云)
- 在未使用云服務(wù)器之前,加入我們需要一臺(tái)低配置的服務(wù)器運(yùn)行一個(gè)服務(wù),服務(wù)器需要空間存放,每年的耗電量也不小,因此都是使用一臺(tái)服務(wù)器運(yùn)行多個(gè)服務(wù)來降低服務(wù)器的購(gòu)買和維護(hù)成本;而使用云服務(wù)器之后,需要什么樣的配置,直接購(gòu)買即可,對(duì)服務(wù)器的職責(zé)進(jìn)行分離,減少各個(gè)服務(wù)之間的互相影響,效率更高。
- 在托管服務(wù)器的時(shí)候,我們需要購(gòu)買帶寬,一般在與ISP服務(wù)商簽訂合同之前需要確定帶寬大小,當(dāng)后期發(fā)現(xiàn)購(gòu)買的帶寬過多或者過少的時(shí)候,是無法減小或增加帶寬的; 使用云服務(wù)器之后,可以靈活的增減帶寬,可以隨時(shí)對(duì)帶寬進(jìn)行增減。舉個(gè)例子,對(duì)類似于淘寶的電商網(wǎng)站,假設(shè)每年只有雙11和雙12期間需要大量帶寬,其他時(shí)間網(wǎng)站流量很小,這個(gè)時(shí)候使用云服務(wù)器就可以針對(duì)雙11和雙12增加帶寬,其他時(shí)間只要保持一般的流量就可以了。
- 一般在IDC托管服務(wù)器的時(shí)候,合同都是以年為單位簽訂合同,一次支付一個(gè)季度的費(fèi)用; 而使用云服務(wù)器, 可以支付更短時(shí)間內(nèi)的費(fèi)用,像阿里云可以按照月為單位進(jìn)行支付, 或者按照使用量來購(gòu)買,比如按照網(wǎng)絡(luò)流量支付費(fèi)用。
- 寬帶市場(chǎng)一直有”南電信北聯(lián)通“的問題(即中國(guó)聯(lián)通的根基在北方市場(chǎng)、中國(guó)電信的根基在南方市場(chǎng)),所以我們需要考慮南北互通的問題,即路由問題。比如說,南方的聯(lián)通用戶,在訪問上海電信機(jī)房的服務(wù)器的時(shí)候,先要繞路到聯(lián)通的北京總出口(假設(shè)在北京),再回到上海。雖然使用光纖的速度很快,但是當(dāng)聯(lián)通的總出口出現(xiàn)瓶頸,無法負(fù)擔(dān)巨大的網(wǎng)絡(luò)流量時(shí),聯(lián)通的用戶訪問電信網(wǎng)絡(luò)的服務(wù)器就會(huì)變慢。BGP就解決了南北互通時(shí)的繞路問題,優(yōu)化了線路。
云計(jì)算服務(wù)模式
云計(jì)算有三種模式:
- IaaS:基礎(chǔ)設(shè)施即服務(wù)——消費(fèi)者使用“基礎(chǔ)計(jì)算資源”,如處理能力、存儲(chǔ)空間、網(wǎng)絡(luò)組件或中間件。消費(fèi)者能掌控操作系統(tǒng)、存儲(chǔ)空間、已部署的應(yīng)用程序及網(wǎng)絡(luò)組件(如防火墻、負(fù)載平衡器等),但并不掌控云基礎(chǔ)架構(gòu)。例如:Amazon AWS、Rackspace。
- PasS:平臺(tái)即服務(wù)——消費(fèi)者使用主機(jī)操作應(yīng)用程序。消費(fèi)者掌控運(yùn)作應(yīng)用程序的環(huán)境(也擁有主機(jī)部分掌控權(quán)),但并不掌控操作系統(tǒng)、硬件或運(yùn)作的網(wǎng)絡(luò)基礎(chǔ)架構(gòu)。平臺(tái)通常是應(yīng)用程序基礎(chǔ)架構(gòu)。例如:Google App Engine。
- SaaS: 軟件即服務(wù)——消費(fèi)者使用應(yīng)用程序,但并不掌控操作系統(tǒng)、硬件或運(yùn)作的網(wǎng)絡(luò)基礎(chǔ)架構(gòu)。是一種服務(wù)觀念的基礎(chǔ),軟件服務(wù)供應(yīng)商,以租賃的概念提供客戶服務(wù),而非購(gòu)買,比較常見的模式是提供一組賬號(hào)密碼。例如:Microsoft CRM與Salesforce.com。
云計(jì)算應(yīng)用
- 公有云 —— 公用云服務(wù)可通過網(wǎng)絡(luò)及第三方服務(wù)供應(yīng)者,開放給客戶使用,“公用”一詞并不一定代表“免費(fèi)”,但也可能代表免費(fèi)或相當(dāng)廉價(jià),公用云并不表示用戶數(shù)據(jù)可供任何人查看,公用云供應(yīng)者通常會(huì)對(duì)用戶實(shí)施使用訪問控制機(jī)制,公用云作為解決方案,既有彈性,又具備成本效益。
- 私有云 —— 私有云具備許多公用云環(huán)境的優(yōu)點(diǎn),例如彈性、適合提供服務(wù),兩者差別在于私有云服務(wù)中,數(shù)據(jù)與程序皆在組織內(nèi)管理,且與公用云服務(wù)不同,不會(huì)受到網(wǎng)絡(luò)帶寬、安全疑慮、法規(guī)限制影響;此外,私有云服務(wù)讓供應(yīng)者及用戶更能掌控云基礎(chǔ)架構(gòu)、改善安全與彈性,因?yàn)橛脩襞c網(wǎng)絡(luò)都受到特殊限制。
- 云物聯(lián) —— “物聯(lián)網(wǎng)就是物物相連的互聯(lián)網(wǎng)”。這有兩層意思:第一,物聯(lián)網(wǎng)的核心和基礎(chǔ)仍然是互聯(lián)網(wǎng),是在互聯(lián)網(wǎng)基礎(chǔ)上的延伸和擴(kuò)展的網(wǎng)絡(luò);第二,其用戶端延伸和擴(kuò)展到了任何物品與物品之間,進(jìn)行信息交換和通信。
- 云存儲(chǔ) —— 云存儲(chǔ)是在云計(jì)算(cloud computing)概念上延伸和發(fā)展出來的一個(gè)新的概念,是指通過集群應(yīng)用、網(wǎng)格技術(shù)或分布式文件系統(tǒng)等功能,將網(wǎng)絡(luò)中大量各種不同類型的存儲(chǔ)設(shè)備通過應(yīng)用軟件集合起來協(xié)同工作,共同對(duì)外提供數(shù)據(jù)存儲(chǔ)和業(yè)務(wù)訪問功能的一個(gè)系統(tǒng)。 當(dāng)云計(jì)算系統(tǒng)運(yùn)算和處理的核心是大量數(shù)據(jù)的存儲(chǔ)和管理時(shí),云計(jì)算系統(tǒng)中就需要配置大量的存儲(chǔ)設(shè)備,那么云計(jì)算系統(tǒng)就轉(zhuǎn)變成為一個(gè)云存儲(chǔ)系統(tǒng),所以云存儲(chǔ)是一個(gè)以數(shù)據(jù)存儲(chǔ)和管理為核心的云計(jì)算系統(tǒng)。
- 云游戲 —— 云游戲是以云計(jì)算為基礎(chǔ)的游戲方式,在云游戲的運(yùn)行模式下,所有游戲都在服務(wù)器端運(yùn)行,并將渲染完畢后的游戲畫面壓縮后通過網(wǎng)絡(luò)傳送給用戶。在客戶端,用戶的游戲設(shè)備不需要任何高端處理器和顯卡,只需要基本的視頻解壓能力就可以了。?
- 云安全 —— 云安全(Cloud Security)是一個(gè)從“云計(jì)算”演變而來的新名詞。云安全的策略構(gòu)想是:使用者越多,每個(gè)使用者就越安全,因?yàn)槿绱她嫶蟮挠脩羧?#xff0c;足以覆蓋互聯(lián)網(wǎng)的每個(gè)角落,只要某個(gè)網(wǎng)站被掛馬或某個(gè)新木馬病毒出現(xiàn),就會(huì)立刻被截獲。 “云安全”通過網(wǎng)狀的大量客戶端對(duì)網(wǎng)絡(luò)中軟件行為的異常監(jiān)測(cè),獲取互聯(lián)網(wǎng)中木馬、惡意程序的最新信息,推送到Server端進(jìn)行自動(dòng)分析和處理,再把病毒和木馬的解決方案分發(fā)到每一個(gè)客戶端。
- 混合云 —— 混合云結(jié)合公用云及私有云,這個(gè)模式中,用戶通常將非企業(yè)關(guān)鍵信息外包,并在公用云上處理,但同時(shí)掌控企業(yè)關(guān)鍵服務(wù)及數(shù)據(jù)。
OpenStack
OpenStack 簡(jiǎn)介
OpenStack是一個(gè)由NASA(美國(guó)國(guó)家航空航天局)和Rackspace合作研發(fā)并發(fā)起的,以Apache許可證授權(quán)的自由軟件和開放源代碼項(xiàng)目。作為一個(gè)開源的云計(jì)算管理平臺(tái)項(xiàng)目,旨在為公共及私有云的建設(shè)與管理提供軟件的開源項(xiàng)目,幫助服務(wù)商和企業(yè)內(nèi)部實(shí)現(xiàn)類似于 Amazon EC2 和 S3 的云基礎(chǔ)架構(gòu)服務(wù)(Infrastructure as a Service, IaaS)。
OpenStack項(xiàng)目及組件
服務(wù)名:Dashboard?
項(xiàng)目名:Horzon?
功能:提供一個(gè)Web前端控制臺(tái),以此來展示OpenStack的功能.
服務(wù)名:計(jì)算(Compute)?
項(xiàng)目名:Nova?
功能:一套控制器,用于為單個(gè)用戶或使用群組管理虛擬機(jī)實(shí)例的整個(gè)生命周期,根據(jù)用戶需求來提供虛擬服務(wù)。負(fù)責(zé)虛擬機(jī)創(chuàng)建、開機(jī)、關(guān)機(jī)、掛起、暫停、調(diào)整、遷移、重啟、銷毀等操作,配置CPU、內(nèi)存等信息規(guī)格。
服務(wù)名:網(wǎng)絡(luò)&地址管理(Network)?
項(xiàng)目名:Neutron?
功能:提供云計(jì)算的網(wǎng)絡(luò)虛擬化技術(shù),為OpenStack其他服務(wù)提供網(wǎng)絡(luò)連接服務(wù)。為用戶提供接口,可以定義Network、Subnet、Router,配置DHCP、DNS、負(fù)載均衡、L3服務(wù),網(wǎng)絡(luò)支持GRE、VLAN。插件架構(gòu)支持許多主流的網(wǎng)絡(luò)廠家和技術(shù),如OpenvSwitch。
服務(wù)名:對(duì)象存儲(chǔ)(Object Storage)?
項(xiàng)目名:Swift?
功能:一套用于在大規(guī)模可擴(kuò)展系統(tǒng)中通過內(nèi)置冗余及高容錯(cuò)機(jī)制實(shí)現(xiàn)對(duì)象存儲(chǔ)的系統(tǒng),允許進(jìn)行存儲(chǔ)或者檢索文件。可為Glance提供鏡像存儲(chǔ),為Cinder提供卷備份服務(wù)。
服務(wù)名:塊存儲(chǔ) (Block Storage)?
項(xiàng)目名:Cinder?
功能:為運(yùn)行實(shí)例提供穩(wěn)定的數(shù)據(jù)塊存儲(chǔ)服務(wù),它的插件驅(qū)動(dòng)架構(gòu)有利于塊設(shè)備的創(chuàng)建和管理,如創(chuàng)建卷、刪除卷,在實(shí)例上掛載和卸載卷。
服務(wù)名:認(rèn)證服務(wù)(Identity Service)?
項(xiàng)目名:Keystone?
功能:為OpenStack其他服務(wù)提供身份驗(yàn)證、服務(wù)規(guī)則和服務(wù)令牌的功能,管理Domains、Projects、Users、Groups、Roles。
服務(wù)名:鏡像服務(wù)(Image Service)?
項(xiàng)目名:Glance?
功能:一套虛擬機(jī)鏡像查找及檢索系統(tǒng),支持多種虛擬機(jī)鏡像格式(AKI、AMI、ARI、ISO、QCOW2、Raw、VDI、VHD、VMDK),有創(chuàng)建上傳鏡像、刪除鏡像、編輯鏡像基本信息的功能。
服務(wù)名:計(jì)費(fèi)(Metering)?
項(xiàng)目名:Ceilometer?
功能:能把OpenStack內(nèi)部發(fā)生的幾乎所有的事件都收集起來,然后為計(jì)費(fèi)和監(jiān)控以及其它服務(wù)提供數(shù)據(jù)支撐。
服務(wù)名:部署編排 (Orchestration)?
項(xiàng)目名:Heat?
功能:提供了一種通過模板定義的協(xié)同部署方式,實(shí)現(xiàn)云基礎(chǔ)設(shè)施軟件運(yùn)行環(huán)境(計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)資源)的自動(dòng)化部署。
服務(wù)名:數(shù)據(jù)庫(kù)服務(wù)(Database Service)?
項(xiàng)目名:Trove?
功能:為用戶在OpenStack的環(huán)境提供可擴(kuò)展和可靠的關(guān)系和非關(guān)系數(shù)據(jù)庫(kù)引擎服務(wù)。
OpenStack各組件詳解
-
組件邏輯關(guān)系圖
-
- ?
- Openstack新建云主機(jī)流程圖
?
?
虛擬機(jī)創(chuàng)建過程:
?
?keystone 組件
- keystone?中的概念?
- User —— 使用 OpenStack Service 的的對(duì)象被稱為用戶,這里的用戶可以是人、服務(wù)、系統(tǒng)。
- Role —— 用來劃分權(quán)限。給User指定Role的過程,就是給User指定權(quán)限的過程。可以簡(jiǎn)單理解為公司內(nèi)部職位和職員的關(guān)系。公司職員在不同的崗位有不同的權(quán)限。在OpenStack中,Keystone返回給User的Token中包含了Role列表,被訪問的Service會(huì)判斷訪問它的User和User提供的Token中的Role。系統(tǒng)默認(rèn)使用 Role 是 admin(管理) 和 _member_(成員) 。
- Project (Tenant)—— 可以理解為一個(gè)人或者服務(wù)所擁有的資源集合。一個(gè)Project中可以包含多個(gè)User, 每一個(gè)User都可以根據(jù)分配的權(quán)限來使用Project中的資源。比如使用Nova創(chuàng)建的虛擬機(jī)要被指定到某個(gè)Project中,Cinder創(chuàng)建的卷也要指定到某個(gè)Project中,User訪問Project中的資源前,需要先與Project關(guān)聯(lián),并指定User在Project中的Role。
- Policy —— Openstack對(duì)User的驗(yàn)證除了身份驗(yàn)證,還需要鑒別 User 對(duì)某個(gè)Service是否有訪問權(quán)限。Policy用來定義什么角色對(duì)應(yīng)什么權(quán)限。對(duì)Keystone來說,Policy其實(shí)是一個(gè)JSON文件,默認(rèn)是 /etc/keystone/policy.json 。通過Policy,Keystone實(shí)現(xiàn)了對(duì)User的權(quán)限管理。
- Token —— 令牌,使用一個(gè)字符串表示。Token中包含了在指定的范圍和指定的時(shí)間內(nèi)可以被訪問的資源。Token一般被用戶持有。
- Credentials —— 用于確認(rèn)用戶身份的憑證。
- Authentication —— 確定用戶身份的過程。
- Service —— 指Openstack中運(yùn)行的組件服務(wù)。
- EndPoint —— 一個(gè)可以通過網(wǎng)絡(luò)來訪問和定位某個(gè)OpenStack Service的地址,通常表現(xiàn)為一個(gè)URL。EndPoint 分三種:?
- Admin Url —— 供admin用戶使用,Port:35357
- Internal Url —— OpenStack 內(nèi)部服務(wù)使用,Port: 5000
- Public Url —— 供其他用戶使用,Port: 5000?
需要注意的是,雖然這里分了三種 URL, 在使用 EndPoint 訪問的時(shí)候,用戶的權(quán)限是和URL無關(guān)的,用戶的權(quán)限只和 Role 有關(guān),和用戶訪問哪一個(gè)URL無關(guān)。
? Glance 組件 glance負(fù)責(zé)提供鏡像服務(wù) V1 :? glance 分兩部分 ? glance-api ?: ?提供 rest 接口,接收其他組件的請(qǐng)求,發(fā)送給glance-registry; 去后端存儲(chǔ)設(shè)備拉取鏡像 glance-registry ?: ?連接數(shù)據(jù)庫(kù),并將查詢道德鏡像的元數(shù)據(jù)發(fā)送給glance-api。 V2 : ?進(jìn)行了改進(jìn) glance-api做了所有的工作
Cinder 流程圖:
?
cinder主要組成及其功能:
Cinder-api 是 cinder 服務(wù)的 endpoint,提供 rest 接口,負(fù)責(zé)處理 client 請(qǐng)求,并將 RPC 請(qǐng)求發(fā)送至 cinder-scheduler 組件。
Cinder-scheduler 負(fù)責(zé) cinder 請(qǐng)求調(diào)度,其核心部分就是 scheduler_driver, 作為 scheduler manager 的 driver,負(fù)責(zé) cinder-volume 具體的調(diào)度處理,發(fā)送 cinder RPC 請(qǐng)求到選擇的 cinder-volume。
Cinder-volume 負(fù)責(zé)具體的 volume 請(qǐng)求處理,由不同后端存儲(chǔ)提供 volume 存儲(chǔ)空間。目前各大存儲(chǔ)廠商已經(jīng)積極地將存儲(chǔ)產(chǎn)品的 driver 貢獻(xiàn)到 cinder 社區(qū)
openstack組件間通過調(diào)用各組件api提供的rest接口來實(shí)現(xiàn)通信,組件內(nèi)通信則基于rpc(遠(yuǎn)程過程調(diào)用)機(jī)制,而rpc機(jī)制是基于AMQP模型實(shí)現(xiàn)的。
從rpc使用的角度出發(fā),nova,neutron,和cinder的流程是相似的,我們以cinder為例闡述rpc機(jī)制。
Openstack 組件內(nèi)部的 RPC(Remote Producer Call)機(jī)制的實(shí)現(xiàn)是基于 AMQP(Advanced Message Queuing Protocol)作為通訊模型,從而滿足組件內(nèi)部的松耦合性。AMQP 是用于異步消息通訊的消息中間件協(xié)議,AMQP 模型有四個(gè)重要的角色:
????Exchange:根據(jù) Routing key 轉(zhuǎn)發(fā)消息到對(duì)應(yīng)的 Message Queue 中
????Routing key:用于 Exchange 判斷哪些消息需要發(fā)送對(duì)應(yīng)的 Message Queue
????Publisher:消息發(fā)送者,將消息發(fā)送的 Exchange 并指明 Routing Key,以便 Message Queue ??????????可以正確的收到消息
????Consumer:消息接受者,從 Message Queue 獲取消息
消息發(fā)布者 Publisher 將 Message 發(fā)送給 Exchange 并且說明 Routing Key。Exchange 負(fù)責(zé)根據(jù) Message 的 Routing Key 進(jìn)行路由,將 Message 正確地轉(zhuǎn)發(fā)給相應(yīng)的 Message Queue。監(jiān)聽在 Message Queue 上的 Consumer 將會(huì)從 Queue 中讀取消息。
Routing Key 是 Exchange 轉(zhuǎn)發(fā)信息的依據(jù),因此每個(gè)消息都有一個(gè) Routing Key 表明可以接受消息的目的地址,而每個(gè) Message Queue 都可以通過將自己想要接收的 Routing Key 告訴 Exchange 進(jìn)行 binding,這樣 Exchange 就可以將消息正確地轉(zhuǎn)發(fā)給相應(yīng)的 Message Queue。
?
Publisher可以分為4類:
????Direct Publisher發(fā)送點(diǎn)對(duì)點(diǎn)的消息;
????Topic Publisher采用“發(fā)布——訂閱”模式發(fā)送消息;
????Fanout Publisher發(fā)送廣播消息的發(fā)送;
????Notify Publisher同Topic Publisher,發(fā)送 Notification 相關(guān)的消息。
?
Exchange可以分為3類:
????1.Direct Exchange根據(jù)Routing Key進(jìn)行精確匹配,只有對(duì)應(yīng)的 Message Queue 會(huì)接受到消息;
????2.Topic Exchange根據(jù)Routing Key進(jìn)行模式匹配,只要符合模式匹配的Message Queue都會(huì)收到消息;
????3.Fanout Exchange將消息轉(zhuǎn)發(fā)給所有綁定的Message Queue。
AMQP消息模型
RPC 發(fā)送請(qǐng)求
Client 端發(fā)送 RPC 請(qǐng)求由 publisher 發(fā)送消息并聲明消息地址,consumer 接收消息并進(jìn)行消息處理,如果需要消息應(yīng)答則返回處理請(qǐng)求的結(jié)果消息。?
OpenStack RPC 模塊提供了 rpc.call,rpc.cast, rpc.fanout_cast 三種 RPC 調(diào)用方法,發(fā)送和接收 RPC 請(qǐng)求。?
1.rpc.call 發(fā)送 RPC 請(qǐng)求并返回請(qǐng)求處理結(jié)果,請(qǐng)求處理流程如圖 5 所示,由 Topic Publisher 發(fā)送消息,Topic Exchange 根據(jù)消息地址進(jìn)行消息轉(zhuǎn)發(fā)至對(duì)應(yīng)的 Message Queue 中,Topic Consumer 監(jiān)聽 Message Queue,發(fā)現(xiàn)需要處理的消息則進(jìn)行消息處理,并由 Direct Publisher 將請(qǐng)求處理結(jié)果消息,請(qǐng)求發(fā)送方創(chuàng)建 Direct Consumer 監(jiān)聽消息的返回結(jié)果
2.rpc.cast 發(fā)送 RPC 請(qǐng)求無返回,請(qǐng)求處理流程如圖 6 所示,與 rpc.call 不同之處在于,不需要請(qǐng)求處理結(jié)果的返回,因此沒有 Direct Publisher 和 Direct Consumer 處理。
3.rpc.fanout_cast 用于發(fā)送 RPC 廣播信息無返回結(jié)果
Nova(機(jī)制與Cinder類似) 流程圖:?
?
nova主要組成及其作用:????nova-api ? 接收rest請(qǐng)求
????nova-scheduler ?負(fù)責(zé)調(diào)度
????nova-compute ?負(fù)責(zé)調(diào)用虛擬化驅(qū)動(dòng),建立虛擬機(jī)等
????nova-conductor ?幫助nova-compute 訪問數(shù)據(jù)庫(kù),并將查詢結(jié)果返回給nova-compute?
?
?
?
?Neutron
在網(wǎng)絡(luò)這一塊,OpenStack經(jīng)歷了由nova-network(早期)到Quantum(F版本)再到Neutron(H版本)的演進(jìn)過程。
流程圖:
?
?
neutron-server 接到請(qǐng)求 --> 將請(qǐng)求發(fā)送到MQ?--> neotron-plugins 得到請(qǐng)求?--> 發(fā)送請(qǐng)求到MQ?--> neotron-agent 建立網(wǎng)絡(luò)設(shè)備。
?
neutron包含組件及功能介紹:
????neutron-server :對(duì)外提供rest api,接收請(qǐng)求 并將請(qǐng)求分發(fā)到不同的 neutron-plugin 上。
????neutron-plugin :?處理 Neutron Server 發(fā)來的請(qǐng)求,維護(hù) OpenStack 邏輯網(wǎng)絡(luò)的狀態(tài), 并調(diào)用 Agent 處理請(qǐng)求。每個(gè)廠商基于Openstack開發(fā)了模擬自己硬件的軟件,這個(gè)軟件就是plugin。 在早期,每個(gè)廠商開發(fā)各自的plugin,功能也是各自實(shí)現(xiàn),有大量的代碼是重復(fù)的;另外,不同的廠商有不同的開發(fā)標(biāo)準(zhǔn),導(dǎo)致程序的兼容性很差。針對(duì)這種情況neutron-plugin 被分為了兩部分:Core-plugin 和?Service-plugin 。
- ?Core-plugin :?Neutron中即為ML2(Modular Layer 2),負(fù)責(zé)管理L2的網(wǎng)絡(luò)連接。ML2中主要包括network、subnet、port三類核心資源,對(duì)三類資源進(jìn)行操作的REST API被neutron-server看作Core API,由Neutron原生支持。其中:
- Network : 代表一個(gè)隔離的二層網(wǎng)段,是為創(chuàng)建他的租戶而保留的一個(gè)廣播域。Subnet 和 Port 始終被分配給某個(gè)特定的network。 Network 的類型包括Flat、Vlan、VxLan、Gre等等
- Subnet:代表一個(gè)IPv4/v6的CIDR地址池,以及與其相關(guān)的配置,如網(wǎng)關(guān)、DNS等等,該 Subnet 中的 VM 實(shí)例隨后會(huì)自動(dòng)繼承該配置。Subnet 必須關(guān)聯(lián)一個(gè) Network。
- Port:代表虛擬交換機(jī)上的一個(gè)虛擬交換端口。VM 的網(wǎng)卡連接 VIF 連接Port后,就會(huì)擁有 MAC 地址和 IP 地址,Port 的 IP 地址是從Subnet 地址池中分配的。
- ?Service-plugin :?即為除core-plugin以外其它的plugin,包括l3 router、firewall、loadbalancer、VPN、metering等等,主要實(shí)現(xiàn)L3-L7的網(wǎng)絡(luò)服務(wù)。這些plugin要操作的資源比較豐富,對(duì)這些資源進(jìn)行操作的REST API被neutron-server看作Extension API,需要廠家自行進(jìn)行擴(kuò)展。
????neutron-agent :?處理 Plugin 的請(qǐng)求,負(fù)責(zé)在 network provider 上真正實(shí)現(xiàn)各種網(wǎng)絡(luò)功能。和 plugin 是一一對(duì)應(yīng)的關(guān)系,
?
?在架構(gòu)設(shè)計(jì)上, Neutron沿用了OpenStack完全分布式的思想,各組件之間通過消息機(jī)制進(jìn)行通信,使得Neutron中各個(gè)組件甚至各個(gè)進(jìn)程都可以運(yùn)行在任意的節(jié)點(diǎn)上,如前面的流程圖所示。這種微內(nèi)核的架構(gòu)使得開發(fā)者可以集中精力在網(wǎng)絡(luò)業(yè)務(wù)的實(shí)現(xiàn)上。目前Neutron提供了眾多的插件與驅(qū)動(dòng),基本上可以滿足各種部署的需要,如果這些還難以支撐實(shí)際所需的環(huán)境,則可以方便地在Neutron的框架下擴(kuò)展插件或驅(qū)動(dòng)。
?
Neutron對(duì)Quantum的插件機(jī)制進(jìn)行了優(yōu)化,將各個(gè)廠商L2插件中獨(dú)立的數(shù)據(jù)庫(kù)實(shí)現(xiàn)提取出來,作為公共的ML2插件存儲(chǔ)租戶的業(yè)務(wù)需求,使得廠商可以專注于L2設(shè)備驅(qū)動(dòng)的實(shí)現(xiàn),而ML2作為總控可以協(xié)調(diào)多廠商L2設(shè)備共同運(yùn)行”。在Quantum中,廠家都是開發(fā)各自的Service-plugin,不能兼容而且開發(fā)重復(fù)度很高,于是在Neutron中就為設(shè)計(jì)了ML2機(jī)制,使得各廠家的L2插件完全變成了可插拔的,方便了L2中network資源擴(kuò)展與使用。
ML2作為L(zhǎng)2的總控,其實(shí)現(xiàn)包括Type和Mechanism兩部分,每部分又分為Manager和Driver。Type指的是L2網(wǎng)絡(luò)的類型(如Flat、VLAN、VxLAN等),與廠家實(shí)現(xiàn)無關(guān)。Mechanism則是各個(gè)廠家自己設(shè)備機(jī)制的實(shí)現(xiàn),如下圖所示。當(dāng)然有ML2,對(duì)應(yīng)的就可以有ML3,不過在Neutron中L3的實(shí)現(xiàn)只負(fù)責(zé)路由的功能,傳統(tǒng)路由器中的其他功能(如Firewalls、LB、VPN)都被獨(dú)立出來實(shí)現(xiàn)了,因此暫時(shí)還沒有看到對(duì)ML3的實(shí)際需求。
?
一般而言,neutron-server和各neutron-plugin部署在控制節(jié)點(diǎn)或者網(wǎng)絡(luò)節(jié)點(diǎn)上,而neutron agent則部署在網(wǎng)絡(luò)節(jié)點(diǎn)上和計(jì)算節(jié)點(diǎn)上。我們先來簡(jiǎn)單地分析控制端neutron-server和neutron-plugin的工作,然后再分析設(shè)備端neutron-agent的工作。
(注意,以前廠商開發(fā)的L2 plugin跟ML2都存在于neutron/plugins目錄下,而可插拔的ML2設(shè)備驅(qū)動(dòng)則存在于neutron/plugins/ml2/drivers目錄下)?
?
控制端的實(shí)現(xiàn) ——?從neutron-server的啟動(dòng)開始說起。neutron-server時(shí),主要就干了兩件事,第一是啟動(dòng)wsgi服務(wù)器監(jiān)聽Neutron REST API,第二是啟動(dòng)rpc服務(wù),用于core plugin與agent間的通信,兩類服務(wù)作為綠色線程并發(fā)運(yùn)行。從SDN的角度來看,wsgi負(fù)責(zé)Neutron的北向接口,而Neutron的南向通信機(jī)制主要依賴于rpc來實(shí)現(xiàn)(當(dāng)然,不同廠家的plugin可能有其它的南向通信機(jī)制)。?
- 北向方面,Neutron的wsgi通過Paste工具進(jìn)行模板化部署,它接收Neutron REST API的業(yè)務(wù)請(qǐng)求,然后通過APIRouter將其分發(fā)給對(duì)應(yīng)的plugin。
- Neutron內(nèi)部,plugin與數(shù)據(jù)庫(kù)交互,獲取業(yè)務(wù)的全局參數(shù),然后通過rpc機(jī)制將操作與參數(shù)傳給設(shè)備上的Agent(某些plugin和ML2 Mechanism Driver通過別的方式與Agent通信,比如REST API、NETCONF等)。
- RPC機(jī)制就可以理解為Neutron的南向通信機(jī)制,Neutron的RPC實(shí)現(xiàn)基于AMPQ模型,plugins和agents之間通常采用“發(fā)布——訂閱”模式傳遞消息,agents收到相應(yīng)plugins的***NotifyApi后,會(huì)回調(diào)設(shè)備本地的***CallBack來操作設(shè)備,完成業(yè)務(wù)的底層部署。
設(shè)備端的實(shí)現(xiàn) ——?控制端neutron-server通過wsgi接收北向REST API請(qǐng)求,neutron-plugin通過rpc與設(shè)備端進(jìn)行南向通信。設(shè)備端agent則向上通過rpc與控制端進(jìn)行通信,向下則直接在本地對(duì)網(wǎng)絡(luò)設(shè)備進(jìn)行配置。
?
?
?OSI七層:
?? ? ??
| 應(yīng)用層 | 數(shù)據(jù) | 計(jì)算機(jī):應(yīng)用程序 | 直接和應(yīng)用程序連接并提供常見的網(wǎng)絡(luò)應(yīng)用服務(wù) |
| 表示層 | 數(shù)據(jù) | 計(jì)算機(jī):編碼方式 | 將數(shù)據(jù)按照網(wǎng)絡(luò)能理解的方案進(jìn)行格式化 |
| 會(huì)話層 | 數(shù)據(jù) | 計(jì)算機(jī):建立會(huì)話 | 負(fù)責(zé)在網(wǎng)絡(luò)中的兩節(jié)點(diǎn)之間建立、維持和終止通信 |
| 傳輸層 | 數(shù)據(jù)段 | 計(jì)算機(jī):進(jìn)程和端口 | 提供端到端的交換數(shù)據(jù)的機(jī)制,檢查分組編號(hào)與次序 |
| 網(wǎng)絡(luò)層 | 數(shù)據(jù)包 | 網(wǎng)絡(luò):路由器 | 將網(wǎng)絡(luò)地址轉(zhuǎn)化為對(duì)應(yīng)的物理地址,并且決定如何將數(shù)據(jù)從發(fā)送方傳到接收方 |
| 數(shù)據(jù)鏈路層 | 數(shù)據(jù)幀 | 網(wǎng)絡(luò):交換機(jī)、網(wǎng)橋 | 控制物理層和網(wǎng)絡(luò)層之間的通訊 |
| 物理層 | 比特 | 網(wǎng)絡(luò):集線器、網(wǎng)線 | 產(chǎn)生并檢測(cè)電壓,以便發(fā)送和接收攜帶數(shù)據(jù)的信號(hào),提供為建立、維護(hù)和拆除物理鏈路所需要的機(jī)械的、電氣的、功能的和規(guī)程的特性 |
?
應(yīng)用層:就是應(yīng)用軟件使用的協(xié)議,如郵箱使用的POP3,SMTP、遠(yuǎn)程登錄使用的Telnet、獲取IP地址的DHCP、域名解析的DNS、網(wǎng)頁(yè)瀏覽的http協(xié)議等;這部分協(xié)議主要是規(guī)定應(yīng)用軟件如何去進(jìn)行通信的。
表示層:決定數(shù)據(jù)的展現(xiàn)(編碼)形式,如同一部電影可以采樣、量化、編碼為RMVB、AVI,一張圖片能夠是JPEG、BMP、PNG等。
會(huì)話層:為兩端通信實(shí)體建立連接(會(huì)話),中間有認(rèn)證鑒權(quán)以及檢查點(diǎn)記錄(供會(huì)話意外中斷的時(shí)候可以繼續(xù),類似斷點(diǎn)續(xù)傳)。
傳輸層:將一個(gè)數(shù)據(jù)/文件斬件分成很多小段,標(biāo)記順序以被對(duì)端接收后可以按順序重組數(shù)據(jù),另外標(biāo)記該應(yīng)用程序使用的端口號(hào)及提供QOS。(不同的應(yīng)用程序使用不同計(jì)算機(jī)的端口號(hào),同樣的應(yīng)用程序需要使用一樣的端口號(hào)才能正常通信)
網(wǎng)絡(luò)層:路由選路,選擇本次通信使用的協(xié)議(http、ftp等),指定路由策略及訪問控制策略。(IP地址在這一層)
數(shù)據(jù)鏈路層:根據(jù)端口與MAC地址,做分組(VLAN)隔離、端口安全、訪問控制。(MAC地址在這一層)處理VLAN內(nèi)的數(shù)據(jù)幀轉(zhuǎn)發(fā),跨VLAN間的訪問,需要上升到網(wǎng)絡(luò)層。
物理層:將數(shù)據(jù)最終編碼為用0、1表示的比特流,然后傳輸。
?
?
網(wǎng)絡(luò)模式
?
根據(jù)創(chuàng)建網(wǎng)絡(luò)的用戶的權(quán)限,Neutron network 可以分為:
?
-
Provider network:管理員創(chuàng)建的和物理網(wǎng)絡(luò)有直接映射關(guān)系的虛擬網(wǎng)絡(luò)。
-
Tenant network:租戶普通用戶創(chuàng)建的網(wǎng)絡(luò),物理網(wǎng)絡(luò)對(duì)創(chuàng)建者透明,其配置由 Neutorn 根據(jù)管理員在系統(tǒng)中的配置決定
??
根據(jù)網(wǎng)絡(luò)的類型,Neutron network 可以分為:Local、Flat / Flat Dhcp 、VLan 、Gre 、VxLan
1. Local —— 所有的組件全部安裝在一臺(tái)機(jī)器上,多用于測(cè)試環(huán)境。
2. Flat / Flat Dhcp —— ?Flat模型最為簡(jiǎn)單,所有的虛擬機(jī)共用一個(gè)私有IP網(wǎng)段,IP地址在虛擬機(jī)啟動(dòng)時(shí)完成注入,虛擬機(jī)間的通信直接通過HyperVisor中的網(wǎng)橋轉(zhuǎn)發(fā),公網(wǎng)流量在該網(wǎng)段的網(wǎng)關(guān)上進(jìn)行NAT(Nova-network實(shí)現(xiàn)為開啟nova-network主機(jī)內(nèi)核的iptables,Neutron實(shí)現(xiàn)為網(wǎng)絡(luò)節(jié)點(diǎn)上的l3-agent)。Flat DHCP模型與Flat區(qū)別在于網(wǎng)橋中開啟了DHCP進(jìn)程,虛擬機(jī)通過DHCP消息獲得IP地址(Nova-network實(shí)現(xiàn)為nova-network主機(jī)中的dnsmaq,Neutron實(shí)現(xiàn)為網(wǎng)絡(luò)節(jié)點(diǎn)上的dhcp-agent)。
優(yōu)點(diǎn):結(jié)構(gòu)簡(jiǎn)單,穩(wěn)定
缺點(diǎn):全部租戶都在一個(gè)水平面上,租戶之間沒有隔離,因?yàn)槿孔鈶舳荚谝粋€(gè)子網(wǎng)內(nèi),當(dāng)大規(guī)模部署后,其廣播風(fēng)暴將會(huì)是不小的負(fù)面因素。
?
?3. ?VLan
LAN 表示 Local Area Network,本地局域網(wǎng),通常使用 Hub 和 Switch 來連接LAN 中的計(jì)算機(jī)。一般來說,當(dāng)你將兩臺(tái)計(jì)算機(jī)連入同一個(gè) Hub 或者 Switch 時(shí),它們就在同一個(gè) LAN 中。同樣地,你連接兩個(gè) Switch 的話,它們也在一個(gè) LAN 中。一個(gè) LAN 表示一個(gè)廣播域,它的意思是,LAN 中的所有成員都會(huì)收到 LAN 中一個(gè)成員發(fā)出的廣播包。可見,LAN 的邊界在路由器或者類似的3層設(shè)備。
VLAN 表示 Virutal LAN。一個(gè)帶有 VLAN 功能的switch 能夠同時(shí)處于多個(gè) LAN 中。最簡(jiǎn)單地說,VLAN 是一種將一個(gè)交換機(jī)分成多個(gè)交換機(jī)的一種方法。比方說,你有兩組機(jī)器,group A 和 B,你想配置成組 A 中的機(jī)器可以相互訪問,B 中的機(jī)器也可以相互訪問,但是A組中的機(jī)器不能訪問B組中的機(jī)器。你可以使用兩個(gè)交換機(jī),兩個(gè)組分別接到一個(gè)交換機(jī)。如果你只有一個(gè)交換機(jī),你可以使用 VLAN 達(dá)到同樣的效果。你在交換機(jī)上分配配置連接組A和B的機(jī)器的端口為 VLAN access ports。這個(gè)交換機(jī)就會(huì)只在同一個(gè) VLAN 的端口之間轉(zhuǎn)發(fā)包。
帶 VLAN 的交換機(jī)的端口分為兩類:
-
- Access port:這些端口被打上了 VLAN Tag。離開交換機(jī)的 Access port 進(jìn)入計(jì)算機(jī)的以太幀中沒有 VLAN Tag,這意味著連接到 access ports 的機(jī)器不會(huì)覺察到 VLAN 的存在。離開計(jì)算機(jī)進(jìn)入這些端口的數(shù)據(jù)幀被打上了 VLAN Tag。
- Trunk port: 有多個(gè)交換機(jī)時(shí),組A中的部分機(jī)器連接到 switch 1,另一部分機(jī)器連接到 switch 2。要使得這些機(jī)器能夠相互訪問,你需要連接兩臺(tái)交換機(jī)。 要避免使用一根電纜連接每個(gè) VLAN 的兩個(gè)端口,我們可以在每個(gè)交換機(jī)上配置一個(gè) VLAN trunk port。Trunk port 發(fā)出和收到的數(shù)據(jù)包都帶有 VLAN header,該 header 表明了該數(shù)據(jù)包屬于那個(gè) VLAN。因此,只需要分別連接兩個(gè)交換機(jī)的一個(gè) trunk port 就可以轉(zhuǎn)發(fā)所有的數(shù)據(jù)包了。通常來講,只使用 trunk port 連接兩個(gè)交換機(jī),而不是用來連接機(jī)器和交換機(jī),因?yàn)闄C(jī)器不想看到它們收到的數(shù)據(jù)包帶有 VLAN Header。
?
一個(gè)計(jì)算節(jié)點(diǎn)上的網(wǎng)絡(luò)實(shí)例
它反映的網(wǎng)絡(luò)配置如下:
Neutron 在該計(jì)算節(jié)點(diǎn)上做的事情:
- 創(chuàng)建了 OVS Integration bridge br-int。它的四個(gè) Access 端口中,兩個(gè)打上了內(nèi)部 Tag 1,連接接入 network 1 的兩個(gè)網(wǎng)卡;另兩個(gè)端口的 VLAN Tag 為 2。
- 創(chuàng)建了一對(duì) patch port,連接 br-int 和 br-eth1。
- 設(shè)置 br-int 中的 flow rules。對(duì)從 access ports 進(jìn)入的數(shù)據(jù)幀,加上相應(yīng)的 VLAN Tag,轉(zhuǎn)發(fā)到 patch port;從 patch port 進(jìn)入的數(shù)據(jù)幀,將 VLAN ID 101 修改為 1, 102 修改為 2,再轉(zhuǎn)發(fā)到相應(yīng)的 Access ports。
- 設(shè)置 br-eth1 中的 flow rules。從 patch port 進(jìn)入的數(shù)據(jù)幀,將內(nèi)部 VLAN ID 1 修改為 101,內(nèi)部 VLAN ID 2 修改為 102,再?gòu)?eth1 端口發(fā)出。對(duì)從 eth1 進(jìn)入的數(shù)據(jù)幀做相反的處理。
?
優(yōu)點(diǎn):租戶有隔離
缺點(diǎn): ?1.?VLAN 使用 12-bit 的 VLAN ID,所以 VLAN 的第一個(gè)不足之處就是它最多只支持 4096 個(gè) VLAN 網(wǎng)絡(luò)(當(dāng)然這還要除去幾個(gè)預(yù)留的),對(duì)于大型數(shù)據(jù)中心的來說,這個(gè)數(shù)量是遠(yuǎn)遠(yuǎn)不夠的。
?2.?VLAN 是基于 L2 的,所以很難跨越 L2 的邊界,在很大程度上限制了網(wǎng)絡(luò)的靈活性。
- ?3.?VLAN 操作需手工介入較多,這對(duì)于管理成千上萬(wàn)臺(tái)機(jī)器的管理員來說是難以接受的。
?
?更多具體內(nèi)容參考:
http://www.cnblogs.com/sammyliu/p/4626419.html
?
gre與vxlan請(qǐng)參考
http://www.cnblogs.com/sammyliu/p/4622563.html
http://www.cnblogs.com/xingyun/p/4620727.html
?
轉(zhuǎn)載于:https://www.cnblogs.com/resn/p/5870264.html
總結(jié)
以上是生活随笔為你收集整理的Openstack入坑指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: onhashchange
- 下一篇: 读书笔记 - 《乌合之众》