OpenStack中的Nova設(shè)計(jì)之初要具備大規(guī)模水平可擴(kuò)展的功能,那么我們來看看如何進(jìn)行云計(jì)算資源的可擴(kuò)展性。
從頂層架構(gòu)設(shè)計(jì)先有個(gè)認(rèn)識(shí),Region大于Cell,Cell大于AZ,AZ大于Host Aggregate,我們從小到大來說:
Host Aggregate主機(jī)集合
虛機(jī)是要部署到計(jì)算節(jié)點(diǎn)上的,占用計(jì)算節(jié)點(diǎn)上的資源。計(jì)算節(jié)點(diǎn)對(duì)應(yīng)一塊物理服務(wù)器,不同廠商的不同系列的物理服務(wù)器有不同的資源和不同的性能抗壓能力等等。OpenStack云平臺(tái)管理員可以根據(jù)硬件資源的某一屬性,將具有相同硬件屬性的服務(wù)器歸類劃分,這就是Host Aggregate。
對(duì)Host Aggregate的理解參考很多公有云供應(yīng)商的云計(jì)算資源供給實(shí)現(xiàn),例如供應(yīng)商的數(shù)據(jù)中心部署了不同類型的服務(wù)器,某些服務(wù)器具有強(qiáng)大的計(jì)算能力,而另外一些服務(wù)器具有強(qiáng)大的I/O能力,其他的一些服務(wù)器具有強(qiáng)大的網(wǎng)絡(luò)吞吐能力,這樣供應(yīng)商為了提供針對(duì)特定領(lǐng)域使用的用戶,便會(huì)將具有強(qiáng)大計(jì)算能力的主機(jī)放置到一個(gè)主機(jī)集合中(取名為A),具有強(qiáng)大I/O能力同時(shí)計(jì)算能力也不錯(cuò)的主機(jī)放置到另一個(gè)主機(jī)集合中(取名B)。此時(shí),如果有用戶想要在該供應(yīng)商的公有云上部署一個(gè)高性能集群,因高性能集群通常有“胖節(jié)點(diǎn)”和“瘦節(jié)點(diǎn)”之分(“胖節(jié)點(diǎn)”既充當(dāng)計(jì)算節(jié)點(diǎn)也充當(dāng)IO節(jié)點(diǎn),而“瘦節(jié)點(diǎn)”只做計(jì)算節(jié)點(diǎn)),這樣用戶便可根據(jù)需求在主機(jī)集合A中創(chuàng)建實(shí)例用作“瘦節(jié)點(diǎn)”,在主機(jī)集合B中創(chuàng)建實(shí)例用作“胖節(jié)點(diǎn)”。而供應(yīng)商便可根據(jù)用戶選擇進(jìn)行差異計(jì)費(fèi),通常計(jì)算能力和I/O能力都不錯(cuò)的主機(jī)集合B收費(fèi)要高于僅提供計(jì)算能力的主機(jī)集合A(當(dāng)然收費(fèi)跟內(nèi)存CPU磁盤多少也有關(guān)系)。
當(dāng)然供應(yīng)商還可以根據(jù)很多硬件參數(shù)來設(shè)置Host Aggregate,例如使用固態(tài)硬盤的機(jī)器,內(nèi)存超過32G的機(jī)器等。根據(jù)服務(wù)器硬盤所屬類型,將AZ中服務(wù)器細(xì)分為SSD硬盤主機(jī)集、SATA硬盤主機(jī)集。
用戶選擇滿足某種要求的物理服務(wù)器主機(jī)集合Host Aggregrate部署虛機(jī)即可。我相信在openstack的某個(gè)版本中應(yīng)該是可以安裝Host Aggregrate來部署虛機(jī)的。不清楚什么原因?qū)е翲ost Aggregate對(duì)用戶不可見,因此無法通過指定Host Aggregate來創(chuàng)建虛機(jī)。
物理服務(wù)器有架式和框式兩種,架式服務(wù)器直接放置在某個(gè)機(jī)架中的,框式服務(wù)器放在某個(gè)機(jī)框中然后機(jī)框再放到機(jī)架中。架式服務(wù)器和框式服務(wù)器最大區(qū)別是后者每個(gè)主機(jī)的電源,風(fēng)扇和網(wǎng)口都是內(nèi)置的,網(wǎng)口是直接連到內(nèi)置交換機(jī),有一個(gè)統(tǒng)一模塊來管理這些硬件,相對(duì)前者來說比較好管理。一般一個(gè)機(jī)框有16臺(tái)物理服務(wù)器,一個(gè)機(jī)架可以容納2-3個(gè)機(jī)框,一個(gè)機(jī)架可以容納6-10臺(tái)物理服務(wù)器。
想象一下,不同廠商的架式服務(wù)器,不同廠商的框式服務(wù)器排列組合放到不同機(jī)架中,Host Aggeegrate根據(jù)硬件資源的某一屬性來劃分,然而對(duì)于某些主機(jī)集合Host Aggregrate在某種程度上提供的計(jì)算/IO/網(wǎng)絡(luò)/存儲(chǔ)的能力是一樣的,且放在同一機(jī)架或相鄰機(jī)架中,這就產(chǎn)生了Availability Zone (AZ)可用域。
AZ(Availability Zone)可用域
為了提高容災(zāi)性和提供廉價(jià)的故障隔離服務(wù),將處于同一個(gè)故障域(Failure Domain, FD)內(nèi)的服務(wù)器劃分到一個(gè)AZ中,一個(gè)故障域在實(shí)際的數(shù)據(jù)中心中通常意味著共享電源系統(tǒng)和網(wǎng)絡(luò)連接的服務(wù)器集合。例如可以把處于相同機(jī)架或者相鄰機(jī)架上的物理服務(wù)器劃分到同一個(gè)AZ中,或者可以把同一個(gè)Region中彼此獨(dú)立供電和制冷的機(jī)房劃分為獨(dú)立的AZ。
從功能實(shí)現(xiàn)而言,OpenStack中AZ功能主要是基于Nova的調(diào)度服務(wù)Nova-scheduler來實(shí)現(xiàn)的。用戶在創(chuàng)建虛擬機(jī)時(shí),可以顯式告知Nova應(yīng)該將虛擬機(jī)創(chuàng)建在哪個(gè)AZ中,當(dāng)Nova-scheduler接收到AZ參數(shù)后,便會(huì)將創(chuàng)建虛擬機(jī)的請(qǐng)求調(diào)度到指定的AZ主機(jī)集中,并將虛擬機(jī)創(chuàng)建在此AZ中的某臺(tái)主機(jī)上。
隨著業(yè)務(wù)增長(zhǎng),AZ內(nèi)主機(jī)不斷增加,根據(jù)OpenStack社區(qū)的討論,超過500個(gè)計(jì)算節(jié)點(diǎn)時(shí)便會(huì)遇到共享消息隊(duì)列系統(tǒng)的性能問題。為了解決大規(guī)模Nova計(jì)算節(jié)點(diǎn)部署過程中可能帶來的集群瓶頸問題,OpenStack的G版本提出Nova的Cell功能。
不管AZ內(nèi)計(jì)算節(jié)點(diǎn)個(gè)數(shù)是否達(dá)到500,尤其是公有云,都可能部署到全球的各個(gè)區(qū)域,用戶可以就近選擇部署的虛機(jī)。此外,為避免人為如恐怖襲擊或自然災(zāi)害如地震,這就需要Region來解決高可用容災(zāi)和部署虛機(jī)離用戶近的問題。
Cell
根據(jù)OpenStack社區(qū)的討論,通常在計(jì)算節(jié)點(diǎn)數(shù)目超過500個(gè)時(shí),便會(huì)遇到共享消息隊(duì)列系統(tǒng)的性能問題。Nova的Cell提出的主要需求是解決這個(gè)集群瓶頸問題。Nova的Cell功能模塊允許用戶在保持現(xiàn)有OpenStack云環(huán)境不變的前提下,提高OpenStack計(jì)算節(jié)點(diǎn)水平橫向擴(kuò)展和大規(guī)模部署的能力。
在目前發(fā)行的OpenStack版本中,Nova Cell功能默認(rèn)并未啟用,而當(dāng)Nova Cell模塊啟用后,OpenStack云環(huán)境被分成多個(gè)子Cell,并且在原有OpenStack云環(huán)境中添加子Cell的方式來擴(kuò)展OpenStack云環(huán)境,因此后期Cell功能的啟用對(duì)原云環(huán)境的影響并不是很大。
那么cell是如何解決這個(gè)集群瓶頸問題呢?Nova Cell模塊以樹型結(jié)構(gòu)為基礎(chǔ),樹形Cell架構(gòu)主要由一個(gè)API-Cell(父Cell)和多個(gè)Child-Cell構(gòu)成。其中,API-Cell只運(yùn)行Nova-API服務(wù),而每個(gè)Child-Cell運(yùn)行除Nova-API以外的全部Nova服務(wù),且每個(gè)Child-Cell運(yùn)行自己的消息隊(duì)列、數(shù)據(jù)庫(kù)及Nova-cells服務(wù),即Cell之間的消息隊(duì)列和數(shù)據(jù)庫(kù)都是獨(dú)立的。Nova Cell通過將共享的消息隊(duì)列和數(shù)據(jù)庫(kù)拆分為以子Cell為單位的獨(dú)立消息隊(duì)列和數(shù)據(jù)庫(kù),以分而治之的思想解決大規(guī)模計(jì)算節(jié)點(diǎn)部署時(shí)經(jīng)常出現(xiàn)的消息堵塞和數(shù)據(jù)庫(kù)性能問題。
AZ與Cell不同,AZ中沒有獨(dú)立的數(shù)據(jù)庫(kù)和消息隊(duì)列服務(wù)器,而是多個(gè)AZ共享Cell內(nèi)部或者Region內(nèi)部的數(shù)據(jù)庫(kù)和消息隊(duì)列系統(tǒng)。
從Nova Cell的發(fā)展歷程來看,Nova Cell可以分為Nova Cell V1和Nova Cell V2兩個(gè)發(fā)展階段。
在Nova Cell V1架構(gòu)中,不同的計(jì)算資源被隔離為多個(gè)獨(dú)立的Cell,而在每個(gè)Cell中均有獨(dú)立的調(diào)度、消息隊(duì)列和數(shù)據(jù)庫(kù)服務(wù),不同的Cell之間可以構(gòu)成樹狀結(jié)構(gòu),并逐步向下擴(kuò)展,因而可以輕松實(shí)現(xiàn)OpenStack計(jì)算節(jié)點(diǎn)的規(guī)模擴(kuò)展。每個(gè)Cell中都有獨(dú)立的數(shù)據(jù)庫(kù)服務(wù)、獨(dú)立的消息隊(duì)列,而不同的Cell之間則通過Nova-Cells服務(wù)進(jìn)行消息傳遞。在啟用Nova Cell V1的OpenStack集群中,用戶創(chuàng)建虛擬機(jī)的請(qǐng)求首先到達(dá)頂層的API Cell(父Cell),然后通過API Cell的調(diào)度算法決定虛擬機(jī)應(yīng)該由哪個(gè)Child-Cell負(fù)責(zé)創(chuàng)建,當(dāng)某個(gè)Compute Child-Cell接收到來自API Cell的請(qǐng)求后,Compute Child-Cell將這個(gè)請(qǐng)求通過Nova-Cells服務(wù)傳遞給Cell中的Nova-scheduler服務(wù)進(jìn)行與Cell無關(guān)的主機(jī)調(diào)度,Compute Child-Cell中的Nova-scheduler服務(wù)收到請(qǐng)求后,再根據(jù)主機(jī)資源統(tǒng)計(jì)信息決定將虛擬機(jī)創(chuàng)建在哪一臺(tái)物理服務(wù)器上。
Nova Cell V1版本在用戶實(shí)際部署和社區(qū)開發(fā)過程中都存在諸多問題和限制。Nova的網(wǎng)絡(luò)模塊Nova-network在設(shè)計(jì)之初并沒有主機(jī)集合(Host Aggregate)的概念,其對(duì)安全組(Security Group)的支持具有一定的局限性,同時(shí)對(duì)可用域AZ的支持和Cell內(nèi)部的調(diào)度功能都有很大的局限性。在Nova Cell V1中,用戶請(qǐng)求需要經(jīng)歷兩層調(diào)度,即頂層API Cell在多個(gè)Compute Cell之間的調(diào)度和各個(gè)Compute Cell內(nèi)部的調(diào)度,而在Nova Cell V1的內(nèi)部Cell中,調(diào)度所支持的策略和過濾條件都具有一定的局限性。
基于上述原因,Nova Cell V1被認(rèn)為是實(shí)驗(yàn)性質(zhì)的功能,且Nova Cell的核心團(tuán)隊(duì)已經(jīng)凍結(jié)了Cell V1的功能,即不再接受關(guān)于Cell V1的新功能建議,也不會(huì)再去修復(fù)Cell V1中存在的Bug,目前團(tuán)隊(duì)的工作優(yōu)先級(jí)和重心是Nova Cell V2的開發(fā)設(shè)計(jì)和Cell V1到Cell V2的遷移。
Cell V2采用了單層調(diào)度,用戶請(qǐng)求只需通過一層調(diào)度即可抵達(dá)最終的物理服務(wù)器,即API Cell不僅在Compute Cell之間進(jìn)行調(diào)度,還同時(shí)對(duì)選定的Compute Cell內(nèi)部的Host進(jìn)行調(diào)度。在每一個(gè)Compute Cell中,消息隊(duì)列系統(tǒng)和數(shù)據(jù)庫(kù)是獨(dú)立的,同時(shí)Cell V2將數(shù)據(jù)庫(kù)進(jìn)行了分離實(shí)現(xiàn),即將整個(gè)OpenStack的全局信息保存在API Cell的數(shù)據(jù)庫(kù)中,而虛擬機(jī)等相關(guān)信息則保存在各個(gè)獨(dú)立的Cell中。此外,Cell V2在設(shè)計(jì)上還新增了Cell0模塊,一旦API Cell對(duì)全部Compute Cell的調(diào)度都失敗或者沒有可用的Compute Cell,則用戶請(qǐng)求被暫時(shí)存放到Cell0中。

CERN兩地三中心的OpenStack部署模式便采用了Nova Cell功能:Nova Cell模式將CERN的OpenStack計(jì)算資源進(jìn)行了隔離,從而使得各個(gè)數(shù)據(jù)中心的OpenStack集群可以實(shí)現(xiàn)透明獨(dú)立的水平擴(kuò)展。在CERN看來,雖然Nova Cell的部署使得CERN不能使用OpenStack的某些功能,如安全組和實(shí)時(shí)遷移功能,并且CERN的技術(shù)人員也需要在不同數(shù)據(jù)中心之間手工拷貝類似Flavors這樣的某些細(xì)節(jié)信息,但Nova Cell的部署模式確實(shí)解決了CERN的不同數(shù)據(jù)中心為用戶提供統(tǒng)一公共服務(wù)Endpoint API的問題和計(jì)算節(jié)點(diǎn)擴(kuò)展時(shí)的問題。在架構(gòu)圖中,CERN創(chuàng)建了1個(gè)API Cell(父Cell)和3個(gè)Compute Cell(子Cell)。在每個(gè)Compute Cell中,CERN為了進(jìn)一步劃分計(jì)算資源又配置了3個(gè)可用域,并為每個(gè)Compute Cell配置了三個(gè)RabbitMQ消息服務(wù)器以實(shí)現(xiàn)消息隊(duì)列的高可用性。CERN的API Cell位于瑞士數(shù)據(jù)中心,并且通過兩個(gè)負(fù)載均衡器配置了API調(diào)用的負(fù)載均衡。API Cell采用CERN自定義的Cell調(diào)度算法來將用戶的API請(qǐng)求轉(zhuǎn)發(fā)到位于不同數(shù)據(jù)中心的Compute Cell。

Region
Region是地理位置上隔離的數(shù)據(jù)中心區(qū)域,不同Region之間是彼此獨(dú)立的,即某個(gè)Region范圍內(nèi)的人為或自然災(zāi)害并不會(huì)影響到其他Region的正常運(yùn)行。
理想情況下,不同的Region最好是分別位于地球上不同的大洲之間,這種布局使得不同Region幾乎不受某個(gè)地區(qū)大面積自然災(zāi)害的影響,當(dāng)然也可以將不同的Region部署到同一國(guó)家的不同省份或州之間,具體如何布局Region更多是受成本預(yù)算導(dǎo)向的。
不論是國(guó)外的云計(jì)算巨頭AWS、Azure,還是國(guó)內(nèi)的阿里云、騰訊云等,用戶都可以在公有云服務(wù)商提供的不同Region中創(chuàng)建自己的服務(wù)器并部署業(yè)務(wù)系統(tǒng),選擇標(biāo)準(zhǔn)通常是以距離用戶最近為首選。
Region的設(shè)計(jì)更多是為公有云服務(wù)供應(yīng)商考慮的,對(duì)于私有云部署,如果不進(jìn)行容災(zāi)高可用設(shè)計(jì),則通常很少在架構(gòu)之初考慮Region。此外,Region的多少是衡量一個(gè)公有云服務(wù)供應(yīng)商運(yùn)營(yíng)成熟度的關(guān)鍵指標(biāo)。
OpenStack官方推薦的私有云多Region部署架構(gòu),Region1和Region2共享Horizon、Keystone和Swift服務(wù),其他OpenStack服務(wù)在Region中獨(dú)立部署。由于不同Region內(nèi)部服務(wù)獨(dú)立部署,因而不同Region內(nèi)部相同的OpenStack服務(wù)會(huì)有不同的Endpints API,對(duì)不同Region內(nèi)部服務(wù)的訪問就需要指定不同的API,在實(shí)際應(yīng)用中,用戶通常是通過負(fù)載均衡器實(shí)現(xiàn)不同Region中服務(wù)API的訪問。

對(duì)于計(jì)算資源的分區(qū),OpenStack僅支持Cell部署、AZ和Host Aggregate劃分,并不能實(shí)現(xiàn)跨Region的部署;網(wǎng)絡(luò)服務(wù)僅能管理相同廣播域或者互聯(lián)交換機(jī)集中的網(wǎng)絡(luò)資源;塊存儲(chǔ)服務(wù)也只能管理單個(gè)Region內(nèi)相同存儲(chǔ)網(wǎng)絡(luò)內(nèi)的存儲(chǔ)資源。
部署和維護(hù)
在OpenStack中,用戶可以選擇是否啟用Nova Cell。如果啟用Nova Cell功能,則通常做法是將單個(gè)Region部署為Compute Cell然后在Cell中劃分AZ;如果用戶不啟用Nova Cell功能,則直接在Region中劃分AZ即可。
主機(jī)的增刪改,可以在某個(gè)region的某個(gè)cell的某個(gè)AZ的某個(gè)Host Aggregate中增加或刪除或更改主機(jī)。而這個(gè)主機(jī)可以是計(jì)算節(jié)點(diǎn),控制節(jié)點(diǎn),網(wǎng)絡(luò)節(jié)點(diǎn)或者存儲(chǔ)節(jié)點(diǎn)等。
筆記整理來自山金孝的《OpenStack高可用集群(上冊(cè)):原理與架構(gòu)》8.3章節(jié) Nova分區(qū)與區(qū)域,如有侵權(quán)請(qǐng)通知?jiǎng)h除。