OpenStack从入门到放弃
http://www.cnblogs.com/pythonxiaohu/p/5861409.html
目錄:
為何選擇云計(jì)算/云計(jì)算之前遇到的問題
什么是云計(jì)算
云服務(wù)模式
云應(yīng)用形式
傳統(tǒng)應(yīng)用與云感知應(yīng)用
openstack及其相關(guān)組件介紹
flat/vlan/gre/vxlan介紹
分布式存儲(chǔ)ceph介紹
openstack mitaka三節(jié)點(diǎn)部署實(shí)戰(zhàn)
?
一:為何選擇云計(jì)算/云計(jì)算之前遇到的問題
????一、有效解決硬件單點(diǎn)故障問題
????單點(diǎn)故障是指某個(gè)硬件的故障造成網(wǎng)站某個(gè)服務(wù)的中斷。要真正解決這個(gè)問題,需要為每個(gè)硬件準(zhǔn)備冗余,這不僅大大增加了硬件購置成本,而且部署與維護(hù)成本也不容小視。
????而云計(jì)算平臺(tái)是基于服務(wù)器集群,從設(shè)計(jì)之初就考慮了單點(diǎn)故障問題,并在建設(shè)時(shí)有效地解決了這個(gè)問題。如果一家云服務(wù)商出現(xiàn)單點(diǎn)故障問題,就如同存在銀行的錢丟了。
????二、按需增/減硬件資源
????自己托管服務(wù)器,增/減硬件一直是頭疼的問題。
????1. 增加服務(wù)器的時(shí)候,購買服務(wù)器需要時(shí)間,而且這個(gè)時(shí)間自己無法控制。而使用云服務(wù)器,隨時(shí)可以增加服務(wù)器——垂手可得。
????2. 減服務(wù)器只能從機(jī)房拉回辦公室,無法再把服務(wù)器退給廠商,購置服務(wù)器的成本就浪費(fèi)了。而使用云服務(wù)器,如果下個(gè)月不用,不續(xù)費(fèi)就行了(針對(duì)阿里云按月購買的情況)——想用就用,想扔就扔。
????3. 不能按需增加滿足基本需求的服務(wù)器配置。假如我們現(xiàn)在需要一臺(tái)低配置的服務(wù)器用Linux跑緩存服務(wù),如果為之單獨(dú)購買一臺(tái)便宜的低配置的服務(wù)器很不合算,因?yàn)檫@臺(tái)服務(wù)器僅僅一年的電費(fèi)就至少要3000元左右。所以只能盡量減少服務(wù)器數(shù)量,提高單臺(tái)服務(wù)器的配置,在讓一臺(tái)服務(wù)器跑更多東西。而使用云服務(wù)器,需要什么樣的配置就買什么樣的配置,讓各個(gè)服務(wù)器的職責(zé)更單一,互相之間的影響更小——職責(zé)分明,效率更高。
????三、BGP線路解決南北互通問題
????南北互通問題是南方電信與北方聯(lián)通線路之間的互通問題,這個(gè)問題困擾我們多年,之前用過雙線機(jī)房,解決的也不是很好。目前只有BGP線路才能有效解決這個(gè)問題,而擁有真正的BGP線路的機(jī)房不是很多,成本也非常高。而我準(zhǔn)備使用的阿里云用的就是BGP線路,這也是吸引我們的主要地方之一。
????究竟什么是南北互通問題?基于我們的理解簡體描述一下,不對(duì)之處歡迎指出。南北互通問題實(shí)際就是路由問題。假設(shè)我們的服務(wù)器放在上海電信的機(jī)房,上海一位聯(lián)通的用戶訪問我們的服務(wù)器,要先繞到聯(lián)通的北京總出口(假設(shè)總出口在北京),然后再繞回上海。實(shí)際上這位聯(lián)通用戶可以通過上海的線路直接到達(dá)我們的服務(wù)器,不用繞這么遠(yuǎn),但上海電信的機(jī)房無法告知聯(lián)通的路由器走近路過來,只能按照聯(lián)通路由器設(shè)定好的路由走。本來即使走北京繞一下也沒有大的影響,畢竟是光的速度,但是由于大多數(shù)聯(lián)通的用戶訪問電信網(wǎng)絡(luò)都這么繞著走,聯(lián)通的總出口成為了瓶頸,總出口流量太大時(shí),聯(lián)通的用戶訪問電信的網(wǎng)絡(luò)速度就會(huì)慢。BGP線路也沒什么神奇之處,只是它能決定走什么路由過來,不繞遠(yuǎn)路,問題自然解決了。它有這樣的特權(quán),就不僅能解決南北互通的問題,而且能解決其他網(wǎng)絡(luò)的互通問題,比如教育網(wǎng)。因?yàn)橛袡?quán)限決定路由,就可以優(yōu)化路由,哪條路堵,我就換條路。
????四、按需增/減帶寬
????帶寬是主要成本,托管服務(wù)器時(shí),與ISP服務(wù)商簽一年合同之前就要確定帶寬。用了一段時(shí)間之后,你發(fā)現(xiàn)帶寬買多了,想減一些是不允許的。中途要臨時(shí)增加帶寬一段時(shí)間也是不行的,要買就買一年(這是根據(jù)我們接觸過的ISP服務(wù)商)。所以,一般都會(huì)多買一些帶寬,留一些余量。
????使用云服務(wù)器可以靈活地增減帶寬,不會(huì)浪費(fèi)帶寬,即使買少了也不用擔(dān)心,隨時(shí)可以增加。雖然各個(gè)云服務(wù)商會(huì)有一定的限制,比如在阿里云一次至少要購買1個(gè)月的帶寬,但比自己托管服務(wù)器靈活很多,同樣的帶寬條件,會(huì)節(jié)省不少成本,尤其是帶寬需求在一年中變化比較大的網(wǎng)站。
????五、更有吸引力的費(fèi)用支付方式
????在IDC機(jī)房托管服務(wù)器一般是簽一年合同,一次支付一個(gè)季度的費(fèi)用。
????而使用云服務(wù),一次可以支付更短時(shí)間的費(fèi)用,比如阿里云可以一次只支付一個(gè)月的費(fèi)用,節(jié)約了流動(dòng)資金。
????從總體上考慮,差不多的成本,卻擁有更多的內(nèi)存、更多的CPU、更多的硬盤空間、更優(yōu)質(zhì)的帶寬線路,更重要的是可以隨時(shí)按需擴(kuò)展計(jì)算資源。
?
二:什么是云計(jì)算(資源和服務(wù)的交互方式)
?
????一、概念分解:???
????????云:云計(jì)算中的云,代表循環(huán)利用的意思(云多了變成雨,落到地面,云減少,水蒸發(fā)到空中,云增加)。
????? ?計(jì)算:云計(jì)算中的計(jì)算,代表計(jì)算資源,涵蓋虛機(jī)、存儲(chǔ)、網(wǎng)絡(luò)等。
????? ?云計(jì)算:代表計(jì)算資源向云水循環(huán)一樣,按需分配,循環(huán)利用。
? ? ? ?附:企業(yè)數(shù)據(jù)中心部署在云計(jì)算分布式平臺(tái)上,類似于從原來單臺(tái)發(fā)電機(jī)轉(zhuǎn)向電廠集中供電模式,它意味著訪問計(jì)算機(jī)和存儲(chǔ)系統(tǒng)也可以作為一種商品流通,就像煤氣、水電一樣,取用方便,費(fèi)用低廉,只不過它是通過互聯(lián)網(wǎng)傳輸?shù)?云就是互聯(lián)網(wǎng)的一種比喻
????二、云計(jì)算分類:
????????狹義:IT基礎(chǔ)設(shè)施的交互和使用模式,通過網(wǎng)絡(luò)以按需,易擴(kuò)展的方式獲取資源
????????廣義:服務(wù)(IT基礎(chǔ)設(shè)施、軟件等)的交互和使用模式,通過網(wǎng)絡(luò)以按需、易擴(kuò)展的方式獲取資源。
????????
三:云服務(wù)模式
?
? ? ?一、IaaS:基礎(chǔ)設(shè)施即服務(wù)
????????用戶通過網(wǎng)絡(luò)獲取虛機(jī)、存儲(chǔ)、網(wǎng)絡(luò),然后用戶根據(jù)自己的需求操作獲取的資源。? 典型應(yīng)用:亞馬遜AWS等
?
? ? ?二、PaaS:平臺(tái)即服務(wù)
????????將軟件研發(fā)平臺(tái)作為一種服務(wù),?如Eclipse/Java編程平臺(tái),服務(wù)商提供編程接口/運(yùn)行平臺(tái)等。典型應(yīng)用:Google AppEngine、Force.com、微軟Azure等?
?
? ? ?三、SaaS:軟件即服務(wù)??
????????將軟件作為一種服務(wù)通過網(wǎng)絡(luò)提供給用戶,如web的電子郵件、HR系統(tǒng)、訂單管理系統(tǒng)、客戶關(guān)系系統(tǒng)等。用戶無需購買軟件,而是向提供商租用基于web的軟件,來管理企業(yè)經(jīng)營活動(dòng)。典型應(yīng)用:Google Doc、Saleforce.com、Oracle CRM On Demand、Office Live Workspace等
?
四:云應(yīng)用形式
????
????一.私有云
????????將基礎(chǔ)設(shè)施與軟硬件資源構(gòu)建于防火墻內(nèi),基于iaas構(gòu)建私有云平臺(tái)供企業(yè)內(nèi)部使用,開源組件有:openstack(最為出色),cloudstack等
????二.云存儲(chǔ)
????????云存儲(chǔ)系統(tǒng)是一個(gè)以數(shù)據(jù)存儲(chǔ)和管理為核心的云計(jì)算系統(tǒng)
????三.云游戲
????????游戲運(yùn)行云平臺(tái)服務(wù)端,云平臺(tái)將游戲畫面解壓縮后傳給用戶,用戶端無需高配置處理器和顯卡,只需要基本的視頻解壓縮能力即可。
????四.云物聯(lián)
????????基于云平臺(tái)實(shí)現(xiàn)物物相連的互聯(lián)網(wǎng)。
????五.云安全
????????通過網(wǎng)狀的大量客戶端檢測網(wǎng)絡(luò)中軟件的異常,獲取木馬,惡意程序的最新信息,推送到云平臺(tái)服務(wù)端自動(dòng)分析和處理,再把解決方案發(fā)送給每一個(gè)客戶端。云平臺(tái)使用者越多,越安全。
????六.公有云
????????云平臺(tái)對(duì)外開放,主要以Iaas和Paas為主,較為成熟的是Iaas,如阿里云,騰訊云,青云,ucloud,首都在線等
????七.混合云 ?
????????公有云和私有云的結(jié)合,即對(duì)企業(yè)內(nèi)部又對(duì)企業(yè)外部,例如AWS
????
五:傳統(tǒng)應(yīng)用與云感知應(yīng)用
?
????一、傳統(tǒng)應(yīng)用
????傳統(tǒng)應(yīng)用像養(yǎng)寵物,寵物病了要細(xì)心呵護(hù)
????每個(gè)應(yīng)用都是獨(dú)特的、專門的
????專門的服務(wù)器、硬件和軟件保證可靠性
????資源不夠,增加cpu、內(nèi)存、磁盤
????專門的技術(shù)支持
????二、云感知應(yīng)用
????云感知應(yīng)用像養(yǎng)牛,牛生病了,你需要一頭新的牛
????應(yīng)用跑在一個(gè)或多個(gè)虛擬機(jī)里
????資源不夠,增加新的虛擬機(jī)
????應(yīng)用掛起,重啟或創(chuàng)建新的虛擬機(jī)
?
?
六:openstack與及其相關(guān)組件介紹
?
????一、openstack由來
????????????openstack最早由美國國家航空航天局NASA研發(fā)的Nova和Rackspace研發(fā)的swift組成。后來以apache許可證授權(quán),旨在為公共及私有云平臺(tái)建設(shè)。openstack主要用來為企業(yè)內(nèi)部實(shí)現(xiàn)類似于Amazon EC2和S3的云基礎(chǔ)架構(gòu)服務(wù)(Iaas).每6個(gè)月更新一次,基本與ubuntu同步,命名是以A-Z作為首字母來的。
? ? ?二、openstack項(xiàng)目與組件(服務(wù)名是項(xiàng)目名的別名)
?
????核心項(xiàng)目3個(gè)
????1.控制臺(tái)
????服務(wù)名:Dashboard
????項(xiàng)目名:Horizon
????功能:web方式管理云平臺(tái),建云主機(jī),分配網(wǎng)絡(luò),配安全組,加云盤
????
????2.計(jì)算
????服務(wù)名:計(jì)算
????項(xiàng)目名:Nova
?nbsp;???功能:負(fù)責(zé)響應(yīng)虛擬機(jī)創(chuàng)建請求、調(diào)度、銷毀云主機(jī)
????
????3.網(wǎng)絡(luò)
????服務(wù)名:網(wǎng)絡(luò)
????項(xiàng)目名:Neutron
????功能:實(shí)現(xiàn)SDN(軟件定義網(wǎng)絡(luò)),提供一整套API,用戶可以基于該API實(shí)現(xiàn)自己定義專屬網(wǎng)絡(luò),不同廠商可以基于此API提供自己的產(chǎn)品實(shí)現(xiàn)
????????
?????????存儲(chǔ)項(xiàng)目2個(gè)
?
????1.對(duì)象存儲(chǔ)
????服務(wù)名:對(duì)象存儲(chǔ)
????項(xiàng)目名:Swift
????功能:REST風(fēng)格的接口和扁平的數(shù)據(jù)組織結(jié)構(gòu)。RESTFUL HTTP API來保存和訪問任意非結(jié)構(gòu)化數(shù)據(jù),ring環(huán)的方式實(shí)現(xiàn)數(shù)據(jù)自動(dòng)復(fù)制和高度可以擴(kuò)展架構(gòu),保證數(shù)據(jù)的高度容錯(cuò)和可靠性
????
????2.塊存儲(chǔ)
????服務(wù)名:塊存儲(chǔ)
????項(xiàng)目名:Cinder
????功能:提供持久化塊存儲(chǔ),即為云主機(jī)提供附加云盤。
?
?
? ? 共享服務(wù)項(xiàng)目3個(gè)
?
????1.認(rèn)證服務(wù)
????服務(wù)名:認(rèn)證服務(wù)
????項(xiàng)目名:Keystone
????功能:為訪問openstack各組件提供認(rèn)證和授權(quán)功能,認(rèn)證通過后,提供一個(gè)服務(wù)列表(存放你有權(quán)訪問的服務(wù)),可以通過該列表訪問各個(gè)組件。
????
????2.鏡像服務(wù)
????服務(wù)名:鏡像服務(wù)
????項(xiàng)目名:Glance
????功能:為云主機(jī)安裝操作系統(tǒng)提供不同的鏡像選擇
?
?
????3.計(jì)費(fèi)服務(wù)
????服務(wù)名:計(jì)費(fèi)服務(wù)
????項(xiàng)目名:Ceilometer
????功能:收集云平臺(tái)資源使用數(shù)據(jù),用來計(jì)費(fèi)或者性能監(jiān)控
?
????高層服務(wù)項(xiàng)目1個(gè)
?
????1.編排服務(wù)
????服務(wù)名:編排服務(wù)
????項(xiàng)目名:Heat
????功能:自動(dòng)化部署應(yīng)用,自動(dòng)化管理應(yīng)用的整個(gè)生命周期.主要用于Paas?
?
????三、openstack各組件詳解及運(yùn)行流程
?
各組件邏輯關(guān)系圖:
?
openstack新建云主機(jī)流程圖:
?
虛擬機(jī)啟動(dòng)過程如下:
界面或命令行通過RESTful API向keystone獲取認(rèn)證信息。
keystone通過用戶請求認(rèn)證信息,并生成auth-token返回給對(duì)應(yīng)的認(rèn)證請求。
界面或命令行通過RESTful API向nova-api發(fā)送一個(gè)boot instance的請求(攜帶auth-token)。
nova-api接受請求后向keystone發(fā)送認(rèn)證請求,查看token是否為有效用戶和token。
keystone驗(yàn)證token是否有效,如有效則返回有效的認(rèn)證和對(duì)應(yīng)的角色(注:有些操作需要有角色權(quán)限才能操作)。
通過認(rèn)證后nova-api和數(shù)據(jù)庫通訊。
初始化新建虛擬機(jī)的數(shù)據(jù)庫記錄。
nova-api通過rpc.call向nova-scheduler請求是否有創(chuàng)建虛擬機(jī)的資源(Host ID)。
nova-scheduler進(jìn)程偵聽消息隊(duì)列,獲取nova-api的請求。
nova-scheduler通過查詢nova數(shù)據(jù)庫中計(jì)算資源的情況,并通過調(diào)度算法計(jì)算符合虛擬機(jī)創(chuàng)建需要的主機(jī)。
對(duì)于有符合虛擬機(jī)創(chuàng)建的主機(jī),nova-scheduler更新數(shù)據(jù)庫中虛擬機(jī)對(duì)應(yīng)的物理主機(jī)信息。
nova-scheduler通過rpc.cast向nova-compute發(fā)送對(duì)應(yīng)的創(chuàng)建虛擬機(jī)請求的消息。
nova-compute會(huì)從對(duì)應(yīng)的消息隊(duì)列中獲取創(chuàng)建虛擬機(jī)請求的消息。
nova-compute通過rpc.call向nova-conductor請求獲取虛擬機(jī)消息。(Flavor)
nova-conductor從消息隊(duì)隊(duì)列中拿到nova-compute請求消息。
nova-conductor根據(jù)消息查詢虛擬機(jī)對(duì)應(yīng)的信息。
nova-conductor從數(shù)據(jù)庫中獲得虛擬機(jī)對(duì)應(yīng)信息。
nova-conductor把虛擬機(jī)信息通過消息的方式發(fā)送到消息隊(duì)列中。
nova-compute從對(duì)應(yīng)的消息隊(duì)列中獲取虛擬機(jī)信息消息。
nova-compute通過keystone的RESTfull API拿到認(rèn)證的token,并通過HTTP請求glance-api獲取創(chuàng)建虛擬機(jī)所需要鏡像。
glance-api向keystone認(rèn)證token是否有效,并返回驗(yàn)證結(jié)果。
token驗(yàn)證通過,nova-compute獲得虛擬機(jī)鏡像信息(URL)。
nova-compute通過keystone的RESTfull API拿到認(rèn)證k的token,并通過HTTP請求neutron-server獲取創(chuàng)建虛擬機(jī)所需要的網(wǎng)絡(luò)信息。
neutron-server向keystone認(rèn)證token是否有效,并返回驗(yàn)證結(jié)果。
token驗(yàn)證通過,nova-compute獲得虛擬機(jī)網(wǎng)絡(luò)信息。
nova-compute通過keystone的RESTfull API拿到認(rèn)證的token,并通過HTTP請求cinder-api獲取創(chuàng)建虛擬機(jī)所需要的持久化存儲(chǔ)信息。
cinder-api向keystone認(rèn)證token是否有效,并返回驗(yàn)證結(jié)果。
token驗(yàn)證通過,nova-compute獲得虛擬機(jī)持久化存儲(chǔ)信息。
nova-compute根據(jù)instance的信息調(diào)用配置的虛擬化驅(qū)動(dòng)來創(chuàng)建虛擬機(jī)。
?
下面我們就圍繞上圖流程展開
?
1.keystone
?
User:指使用Openstack service的用戶,可以是人、服務(wù)、系統(tǒng),但凡使用了Openstack service的對(duì)象都可以稱為User。
Project(Tenant):可以理解為一個(gè)人、或服務(wù)所擁有的?資源集合?。在一個(gè)Project(Tenant)中可以包含多個(gè)User,每一個(gè)User都會(huì)根據(jù)權(quán)限的劃分來使用Project(Tenant)中的資源。比如通過Nova創(chuàng)建虛擬機(jī)時(shí)要指定到某個(gè)Project中,在Cinder創(chuàng)建卷也要指定到某個(gè)Project中。User訪問Project的資源前,必須要與該P(yáng)roject關(guān)聯(lián),并且指定User在Project下的Role。
Role:用于劃分權(quán)限。可以通過給User指定Role,使User獲得Role對(duì)應(yīng)的操作權(quán)限。Keystone返回給User的Token包含了Role列表,被訪問的Services會(huì)判斷訪問它的User和User提供的Token中所包含的Role。系統(tǒng)默認(rèn)使用管理Role admin和成員Role _member_ 。
Policy:OpenStack對(duì)User的驗(yàn)證除了OpenStack的身份驗(yàn)證以外,還需要鑒別User對(duì)某個(gè)Service是否有訪問權(quán)限。Policy機(jī)制就是用來控制User對(duì)Tenant中資源(包括Services)的操作權(quán)限。對(duì)于Keystone service來說,Policy就是一個(gè)JSON文件,默認(rèn)是/etc/keystone/policy.json。通過配置這個(gè)文件,Keystone Service實(shí)現(xiàn)了對(duì)User基于Role的權(quán)限管理。
Token:是一個(gè)字符串表示,作為訪問資源的令牌。Token包含了在?指定范圍和有效時(shí)間內(nèi)?可以被訪問的資源。EG. 在Nova中一個(gè)tenant可以是一些虛擬機(jī),在Swift和Glance中一個(gè)tenant可以是一些鏡像存儲(chǔ),在Network中一個(gè)tenant可以是一些網(wǎng)絡(luò)資源。Token一般被User持有。
Credentials:用于確認(rèn)用戶身份的憑證
Authentication:確定用戶身份的過程
Service:Openstack service,即Openstack中運(yùn)行的組件服務(wù)。
Endpoint:一個(gè)可以通過網(wǎng)絡(luò)來訪問和定位某個(gè)Openstack service的地址,通常是一個(gè)URL。比如,當(dāng)Nova需要訪問Glance服務(wù)去獲取image 時(shí),Nova通過訪問Keystone拿到Glance的endpoint,然后通過訪問該endpoint去獲取Glance服務(wù)。我們可以通過Endpoint的region屬性去定義多個(gè)region。Endpoint 該使用對(duì)象分為三類:
-
admin url –> 給admin用戶使用,Post:35357
-
internal url –> OpenStack內(nèi)部服務(wù)使用來跟別的服務(wù)通信,Port:5000
-
public url –> 其它用戶可以訪問的地址,Post:5000
創(chuàng)建完service后創(chuàng)建API EndPoint. 在openstack中,每一個(gè)service都有三種end points. Admin, public, internal。 Admin是用作管理用途的,如它能夠修改user/tenant(project)。 public 是讓客戶調(diào)用的,比如可以部署在外網(wǎng)上讓客戶可以管理自己的云。internal是openstack內(nèi)部調(diào)用的。三種endpoints 在網(wǎng)絡(luò)上開放的權(quán)限一般也不同。Admin通常只能對(duì)內(nèi)網(wǎng)開放,public通常可以對(duì)外網(wǎng)開放internal通常只能對(duì)安裝有openstack對(duì)服務(wù)的機(jī)器開放。
V3新增
?
-
Tenant 重命名為 Project
-
添加了 Domain 的概念
-
添加了 Group 的概念
?
?
?
?
?
用戶alice登錄keystone系統(tǒng)(password或者token的方式),獲取一個(gè)臨時(shí)的token和catalog服務(wù)目錄(v3版本登錄時(shí),如果沒有指定scope,project或者domain,獲取的臨時(shí)token沒有任何權(quán)限,不能查詢project或者catalog)。
alice通過臨時(shí)token獲取自己的所有的project列表。
alice選定一個(gè)project,然后指定project重新登錄,獲取一個(gè)正式的token,同時(shí)獲得服務(wù)列表的endpoint,用戶選定一個(gè)endpoint,在HTTP消息頭中攜帶token,然后發(fā)送請求(如果用戶知道project name或者project id可以直接第3步登錄)。
消息到達(dá)endpoint之后,由服務(wù)端(nova)的keystone中間件(pipeline中的filter:authtoken)向keystone發(fā)送一個(gè)驗(yàn)證token的請求。(token類型:uuid需要在keystone驗(yàn)證token,pki類型的token本身是包含用戶詳細(xì)信息的加密串,可以在服務(wù)端完成驗(yàn)證)
keystone驗(yàn)證token成功之后,將token對(duì)應(yīng)用戶的詳細(xì)信息,例如:role,username,userid等,返回給服務(wù)端(nova)。
服務(wù)端(nova)完成請求,例如:創(chuàng)建虛擬機(jī)。
服務(wù)端返回請求結(jié)果給alice。
?
2.glance
v1
?
v2
?
?
3.nova與cinder
nova主要組成:
????nova-api
????nova-scheduler
????nova-compute
????nova-conductor
cinder主要組成:
????cinder-api
????cinder-scheduler
????cinder-volume
?
cinder各組件功能:
Cinder-api 是 cinder 服務(wù)的 endpoint,提供 rest 接口,負(fù)責(zé)處理 client 請求,并將 RPC 請求發(fā)送至 cinder-scheduler 組件。
Cinder-scheduler 負(fù)責(zé) cinder 請求調(diào)度,其核心部分就是 scheduler_driver, 作為 scheduler manager 的 driver,負(fù)責(zé) cinder-volume 具體的調(diào)度處理,發(fā)送 cinder RPC 請求到選擇的 cinder-volume。
Cinder-volume 負(fù)責(zé)具體的 volume 請求處理,由不同后端存儲(chǔ)提供 volume 存儲(chǔ)空間。目前各大存儲(chǔ)廠商已經(jīng)積極地將存儲(chǔ)產(chǎn)品的 driver 貢獻(xiàn)到 cinder 社區(qū)
?
cinder架構(gòu)圖:
?
?
openstack組件間通信:調(diào)用各組件api提供的rest接口,組件內(nèi)通信:基于rpc(遠(yuǎn)程過程調(diào)用)機(jī)制,而rpc機(jī)制是基于AMQP模型實(shí)現(xiàn)的
從rpc使用的角度出發(fā),nova,neutron,和cinder的流程是相似的,我們以cinder為例闡述rpc機(jī)制
(參考鏈接:https://www.ibm.com/developerworks/cn/cloud/library/1403_renmm_opestackrpc/)
?
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ā)送請求
Client 端發(fā)送 RPC 請求由 publisher 發(fā)送消息并聲明消息地址,consumer 接收消息并進(jìn)行消息處理,如果需要消息應(yīng)答則返回處理請求的結(jié)果消息。
?
OpenStack RPC 模塊提供了 rpc.call,rpc.cast, rpc.fanout_cast 三種 RPC 調(diào)用方法,發(fā)送和接收 RPC 請求。
?
1.rpc.call 發(fā)送 RPC 請求并返回請求處理結(jié)果,請求處理流程如圖 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 將請求處理結(jié)果消息,請求發(fā)送方創(chuàng)建 Direct Consumer 監(jiān)聽消息的返回結(jié)果
2.rpc.cast 發(fā)送 RPC 請求無返回,請求處理流程如圖 6 所示,與 rpc.call 不同之處在于,不需要請求處理結(jié)果的返回,因此沒有 Direct Publisher 和 Direct Consumer 處理。
3.rpc.fanout_cast 用于發(fā)送 RPC 廣播信息無返回結(jié)果
?
?
4.neutron
?
neutron包含組件:
????neutron-server
????neutron-plugin
????neutron-agent
neutron各組件功能介紹:
?
1.Neutron-server可以理解為一個(gè)專門用來接收Neutron REST API調(diào)用的服務(wù)器,然后負(fù)責(zé)將不同的rest api分發(fā)到不同的neutron-plugin上。
2.Neutron-plugin可以理解為不同網(wǎng)絡(luò)功能實(shí)現(xiàn)的入口,各個(gè)廠商可以開發(fā)自己的plugin。Neutron-plugin接收neutron-server分發(fā)過來的REST API,向neutron database完成一些信息的注冊,然后將具體要執(zhí)行的業(yè)務(wù)操作和參數(shù)通知給自身對(duì)應(yīng)的neutron agent。
3.Neutron-agent可以直觀地理解為neutron-plugin在設(shè)備上的代理,接收相應(yīng)的neutron-plugin通知的業(yè)務(wù)操作和參數(shù),并轉(zhuǎn)換為具體的設(shè)備級(jí)操作,以指導(dǎo)設(shè)備的動(dòng)作。當(dāng)設(shè)備本地發(fā)生問題時(shí),neutron-agent會(huì)將情況通知給neutron-plugin。
4.Neutron database,顧名思義就是Neutron的數(shù)據(jù)庫,一些業(yè)務(wù)相關(guān)的參數(shù)都存在這里。
5.Network provider,即為實(shí)際執(zhí)行功能的網(wǎng)絡(luò)設(shè)備,一般為虛擬交換機(jī)(OVS或者Linux Bridge)。
?
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原生支持。其中:
?
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對(duì)Quantum的插件機(jī)制進(jìn)行了優(yōu)化,將各個(gè)廠商L2插件中獨(dú)立的數(shù)據(jù)庫實(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ò)展與使用。
?
(注意,以前廠商開發(fā)的L2 plugin跟ML2都存在于neutron/plugins目錄下,而可插拔的ML2設(shè)備驅(qū)動(dòng)則存在于neutron/plugins/ml2/drivers目錄下)
?
ML2作為L2的總控,其實(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)上。我們先來分析控制端neutron-server和neutron-plugin的工作,然后再分析設(shè)備端neutron-agent的工作。
?
neutron新進(jìn)展(dragon ?flow):
https://www.ustack.com/blog/neutron-dragonflow/
?
?
網(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 可以分為:
-
VLAN?network(虛擬局域網(wǎng))?:基于物理 VLAN 網(wǎng)絡(luò)實(shí)現(xiàn)的虛擬網(wǎng)絡(luò)。共享同一個(gè)物理網(wǎng)絡(luò)的多個(gè) VLAN 網(wǎng)絡(luò)是相互隔離的,甚至可以使用重疊的 IP 地址空間。每個(gè)支持 VLAN network 的物理網(wǎng)絡(luò)可以被視為一個(gè)分離的 VLAN trunk,它使用一組獨(dú)占的 VLAN ID。有效的 VLAN ID 范圍是 1 到 4094。
-
Flat network:基于不使用 VLAN 的物理網(wǎng)絡(luò)實(shí)現(xiàn)的虛擬網(wǎng)絡(luò)。每個(gè)物理網(wǎng)絡(luò)最多只能實(shí)現(xiàn)一個(gè)虛擬網(wǎng)絡(luò)。
-
local network(本地網(wǎng)絡(luò)):一個(gè)只允許在本服務(wù)器內(nèi)通信的虛擬網(wǎng)絡(luò),不知道跨服務(wù)器的通信。主要用于單節(jié)點(diǎn)上測試。
-
GRE network (通用路由封裝網(wǎng)絡(luò)):一個(gè)使用 GRE 封裝網(wǎng)絡(luò)包的虛擬網(wǎng)絡(luò)。GRE 封裝的數(shù)據(jù)包基于 IP 路由表來進(jìn)行路由,因此 GRE network 不和具體的物理網(wǎng)絡(luò)綁定。
-
VXLAN network(虛擬可擴(kuò)展網(wǎng)絡(luò)):基于 VXLAN 實(shí)現(xiàn)的虛擬網(wǎng)絡(luò)。同 GRE network 一樣, VXLAN network 中 IP 包的路由也基于 IP 路由表,也不和具體的物理網(wǎng)絡(luò)綁定。
注:在AWS中,該概念對(duì)應(yīng) VPC 概念。AWS 對(duì) VPC 的數(shù)目有一定的限制,比如每個(gè)賬戶在每個(gè) region 上默認(rèn)最多只能創(chuàng)建 5 個(gè)VPC,通過特別的要求最多可以創(chuàng)建 100 個(gè)。
?
1.vlan
?
?
2.gre與vxlan請參考
http://www.cnblogs.com/sammyliu/p/4622563.html
http://www.cnblogs.com/xingyun/p/4620727.html
?
?
gre網(wǎng)絡(luò)
?
?
gre與vxlan區(qū)別
?
?
關(guān)于gre和vxlan二次封裝數(shù)據(jù)包的MTU問題
?
?VXLAN 模式下虛擬機(jī)中的 mtu 最大值為1450,也就是只能小于1450,大于這個(gè)值會(huì)導(dǎo)致 openvswitch 傳輸分片,進(jìn)而導(dǎo)致虛擬機(jī)中數(shù)據(jù)包數(shù)據(jù)重傳,從而導(dǎo)致網(wǎng)絡(luò)性能下降。GRE 模式下虛擬機(jī) mtu 最大為1462。
計(jì)算方法如下:
-
vxlan mtu = 1450 = 1500 – 20(ip頭) – 8(udp頭) – 8(vxlan頭) – 14(以太網(wǎng)頭)
-
gre mtu = 1462 = 1500 – 20(ip頭) – 4(gre頭) – 14(以太網(wǎng)頭)
可以配置 Neutron DHCP 組件,讓虛擬機(jī)自動(dòng)配置 mtu,
#/etc/neutron/dhcp_agent.ini [DEFAULT] dnsmasq_config_file?=?/etc/neutron/dnsmasq-neutron.conf#/etc/neutron/dnsmasq-neutron.conf dhcp-option-force=26,1450或1462重啟 DHCP Agent,讓虛擬機(jī)重新獲取 IP,然后使用 ifconfig 查看是否正確配置 mtu。
轉(zhuǎn)載于:https://www.cnblogs.com/tcicy/p/7501936.html
總結(jié)
以上是生活随笔為你收集整理的OpenStack从入门到放弃的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 优化器--牛顿法总结
- 下一篇: 表单按钮居中