OpenStack橫向擴(kuò)展配置
如果你的云系統(tǒng)非常成功,遲早會(huì)有往云里添加新資源的需求。OpenStack直接支持橫向擴(kuò)展。你可以在已有的云系統(tǒng)中添加更多的服務(wù)器而不需要在服務(wù)器上進(jìn)行縱向升級(jí)。理論上可以在擴(kuò)展云系統(tǒng)的同時(shí)而不影響提供的服務(wù)。
起點(diǎn)
如何計(jì)劃云系統(tǒng)擴(kuò)展性需要在很多的變量配置中進(jìn)行平衡。沒有***方案可以滿足所有的擴(kuò)展需求。即使這樣在實(shí)際運(yùn)維中監(jiān)控大量系統(tǒng)指標(biāo)還是有很多益處。
常見的規(guī)劃出發(fā)點(diǎn)就是云系統(tǒng)的核心數(shù)量。可用一些基本公式,估算相關(guān)容量信息。如:(重用因子 X 物理核數(shù)) / 每實(shí)例所需虛擬核:估算可運(yùn)行虛擬機(jī)數(shù)量;磁盤空間 X 實(shí)例數(shù)量:估算系統(tǒng)需求的存儲(chǔ)容量。通過這些估算信息可以決定在云中額外需要添加多少資源。
OpenStack的系統(tǒng)默認(rèn)值如下:
名稱 | 虛擬核數(shù) | 內(nèi)存 | 磁盤空間 | 臨時(shí)空間 |
m1.tiny | 1 | 512 MB | 0 GB | 0 GB |
m1.small | 1 | 2 GB | 10 GB | 20 GB |
m1.medium | 2 | 4 GB | 10 GB | 40 GB |
m1.large | 4 | 8 GB | 10 GB | 80 GB |
m1.xlarge | 8 | 16 GB | 10 GB | 160 GB |
我們假設(shè)以下條件:
200個(gè)物理核 大部分實(shí)例是m1.medium類型(2虛擬核,50GB存儲(chǔ)空間) 默認(rèn)是的CPU重用因子16:1(在nova.conf文件中配置cpu_allocation_ratio參數(shù)) 按照公式計(jì)算(16 X 200) / 2 = 1600,該硬件環(huán)境可以支持1600個(gè)虛擬機(jī)實(shí)例和需要80TB的存儲(chǔ)空間 |
對(duì)于API服務(wù),數(shù)據(jù)庫和消息隊(duì)列則需要更多信息才能進(jìn)行評(píng)估。你還需要了解云系統(tǒng)的使用規(guī)律。比如:比較2種虛擬機(jī)的使用情況,一種是用于web平臺(tái),另一種是用于項(xiàng)目開發(fā)過程中使用的集成測(cè)試。前者所用的虛擬機(jī)可能每隔幾個(gè)月才有增加;而后者則經(jīng)常會(huì)發(fā)生變動(dòng),造成對(duì)云控制器較多請(qǐng)求負(fù)荷。收集虛擬機(jī)的平均使用時(shí)間,當(dāng)該指標(biāo)值較大時(shí)相應(yīng)的云控制器的負(fù)荷會(huì)較小。
伴隨的虛擬機(jī)的開啟和關(guān)閉,還需要考慮用戶對(duì)于服務(wù)訪問所造成的影響,特別是nova-api和相應(yīng)的數(shù)據(jù)庫。用戶最常用的就是列出虛擬機(jī)實(shí)例清單和相關(guān)信息。當(dāng)云系統(tǒng)有很多用戶時(shí),列出虛擬機(jī)實(shí)例清單這樣的操作也會(huì)帶來較大的系統(tǒng)負(fù)荷。有時(shí)用戶自己都沒有意識(shí)到這種操作(如:打開OpenStack儀表盤進(jìn)入實(shí)例頁界面中,瀏覽器會(huì)每隔30秒刷新一次虛擬機(jī)列表信息)。
在考慮了以上因素后,你可以大致判斷出云控制器的配置要求。通常8核,8G內(nèi)存的服務(wù)器足以應(yīng)付一個(gè)服務(wù)器機(jī)架內(nèi)的計(jì)算節(jié)點(diǎn)。
除此外為了用戶使用虛擬機(jī)的性能,你還需要考慮硬件本身的一些指標(biāo),同時(shí)平衡預(yù)算和性能需求。如:存儲(chǔ)性能(磁盤數(shù)量/核數(shù)),內(nèi)存可用性(內(nèi)存空間/核數(shù)),網(wǎng)絡(luò)帶寬(Gbps/核數(shù))和CPU總性能(CPU/核數(shù))。
可以查看**監(jiān)控**章節(jié)獲得可以跟蹤哪些指標(biāo)來判斷是否需要進(jìn)行云系統(tǒng)的擴(kuò)展。
添加控制器節(jié)點(diǎn)
你可方便的通過添加更多的節(jié)點(diǎn)來橫向擴(kuò)展云系統(tǒng)。添加計(jì)算節(jié)點(diǎn)是一件容易的事情,你只需要和原來一致的方式進(jìn)行安裝配置。但同時(shí)為了云系統(tǒng)的高可用,你在設(shè)計(jì)時(shí)就需要考慮以下幾個(gè)要點(diǎn)。
本書中的例子中云控制節(jié)點(diǎn)上會(huì)運(yùn)維多個(gè)服務(wù)。有些直接通過消息隊(duì)列通訊的服務(wù)(如:nova-scheduler,nova-console)可以較簡(jiǎn)單的安裝到其他硬件環(huán)境中。但其他服務(wù)則更麻煩一些。
對(duì)于用戶訪問的服務(wù),如:儀表盤,nova-api,對(duì)象存儲(chǔ),則建議采用通過負(fù)載均衡方式分?jǐn)傇L問請(qǐng)求。任何標(biāo)準(zhǔn)的HTTP負(fù)載均衡方式都可以使用(DNS輪詢,負(fù)載均衡硬件或軟件(如Pound或HAProxy))。儀表盤需要注意的是VNC proxy。VNC proxy使用的是WebSocket協(xié)議,而對(duì)于第7層應(yīng)用的負(fù)載均衡處理這種協(xié)議則有問題。請(qǐng)參見橫向回話存儲(chǔ)(Horizon session storage)(http://docs.openstack.org/developer/horizon/topics/deployment.html#session-storage)
有些服務(wù)(如:nova-api,glance-api)通過修改配置文件中的標(biāo)示可以支持多進(jìn)程。多進(jìn)程可以更好的在多核CPU的硬件上分配計(jì)算任務(wù)。
有部分的配置可用于MySQL負(fù)載均衡,RabbitMQ也支持內(nèi)建的集群機(jī)制。請(qǐng)參考運(yùn)維章節(jié)獲得更多關(guān)于配置各種服務(wù)的信息。
云系統(tǒng)隔離
使用OpenStack中的方法進(jìn)行云系統(tǒng)的隔離,方法有:cells, regions, zones和host aggregates。每種方法提供了不同的功能,具體功能能描述如下:
cells 使用場(chǎng)景:需要單個(gè)API endpoint或需要二次調(diào)度;例子:云系統(tǒng)中有多個(gè)地點(diǎn),虛擬機(jī)可以任意調(diào)度運(yùn)行或指定地點(diǎn)運(yùn)行;系統(tǒng)開銷:每個(gè)節(jié)點(diǎn)除nova-api外都需要完整安裝nova環(huán)境,和nova-cell服務(wù);共享服務(wù):Keystone,nova-api。 Regions 使用場(chǎng)景:需要分割的Region,Region間沒有通訊協(xié)調(diào)機(jī)制,各自需要獨(dú)立的API endpoint;例子:云系統(tǒng)需要區(qū)分多個(gè)地點(diǎn),可以指定在這些地點(diǎn)間調(diào)度分配虛擬機(jī)。多個(gè)地點(diǎn)間是共享底層基礎(chǔ)架構(gòu);系統(tǒng)開銷:每個(gè)Region中需要獨(dú)立的API endpoint,每個(gè)Region需要安裝完整的nova環(huán)境; 共享服務(wù):Keystone。 Availability Zones 使用場(chǎng)景:為了保證硬件的隔離和冗余,可以邏輯上將nova分散部署;例子:一個(gè)地點(diǎn)的云系統(tǒng),底層硬件分別有2個(gè)供電系統(tǒng);系統(tǒng)開銷:配置nova.conf配置文件;共享服務(wù):Keystone,所有nova服務(wù)。 Host Aggregates 使用場(chǎng)景:一組具有類似特性的主機(jī),期望能組合在一起進(jìn)行虛擬機(jī)調(diào)度;例子:在一組信賴的服務(wù)器上調(diào)度運(yùn)行虛擬機(jī);系統(tǒng)開銷:配置nova.conf配置文件;共享服務(wù):Keystone,所有nova服務(wù)。 |
以上隔離方案可以分成2大類:
cells & regions:用于將nova部署服務(wù)進(jìn)行隔離。 availability zones & host aggregates:用于將部署地點(diǎn)進(jìn)行隔離。
Cells & Regions
OpenStack的cell是一種分布式運(yùn)行方式,該方式下不需要引入過于復(fù)雜的技術(shù)且也不會(huì)影響已存在nova環(huán)境。支持運(yùn)行云系統(tǒng)的服務(wù)器通過分組,每組就是一個(gè)Cell,Cell是一種按照樹狀方式組織資源的方式。Cell樹根節(jié)點(diǎn)cell(API cell)服務(wù)運(yùn)行nova-api服務(wù),該服務(wù)器上不運(yùn)行nova-compute服務(wù)。在根節(jié)點(diǎn)之下的服務(wù)器運(yùn)行除nova-api外所有nova-*服務(wù)。每個(gè)Cell運(yùn)行自己的消息隊(duì)列,數(shù)據(jù)庫和nova-cells服務(wù)。nova-cells服務(wù)管理根節(jié)點(diǎn)cell和子節(jié)點(diǎn)cell之間的通訊。
以上的Cell方式可以運(yùn)行單個(gè)的API服務(wù)用于控制多個(gè)云環(huán)境。在nova-scheduler直接調(diào)度選擇服務(wù)器資源外,也引入了二次調(diào)度的形式(調(diào)度選擇cell資源)。cell的這種間接調(diào)度方式給控制虛擬機(jī)帶來了更靈活的控制方式。
和Cell不同的是Region是一種隔離度比cell更高的方式,該方式下不同的region中需要獨(dú)立有相應(yīng)的API endpoint。用戶需要在不同的Region中運(yùn)行虛擬機(jī)實(shí)例需要明確的指定Region。Region下沒有其他額外的服務(wù)需要運(yùn)行。
當(dāng)前OpenStack儀表盤服務(wù)只支持單個(gè)Region,所以每個(gè)Region需要運(yùn)行一個(gè)儀表盤服務(wù)。Region用于提供了在共享同一基礎(chǔ)架構(gòu)上建立健壯服務(wù)一種方式,該方式可用于在較高層次建立容錯(cuò)機(jī)制。
Availability Zones & Host Aggregates
Host Aggregates和Availability Zones是用于將nova部署進(jìn)行分隔。Host Aggregates和Availability Zones雖然配置類似但是用途不同。Host Aggregates是用于邏輯上分組適用于負(fù)載均衡和分布虛擬機(jī)實(shí)例;Availability Zones是用于同其他Zone分隔的物理冗余和隔離分組(如:分隔電源或網(wǎng)絡(luò)物理不同的服務(wù)器設(shè)備)。Host Aggregates可以視作對(duì)于Availability Zones中進(jìn)一步分組的方式,如:可將服務(wù)器分成多個(gè)組,每組共享相似的資源如存儲(chǔ)、網(wǎng)絡(luò);或區(qū)分特別的資源(可信賴計(jì)算硬件)。
Host Aggregates常用于將服務(wù)器分組提供nova-scheduler調(diào)度資源,如:將某種類型的虛擬機(jī)類型或鏡像限制在給定子網(wǎng)中的某些服務(wù)器。
Availability zones可以將OpenStack中的計(jì)算服務(wù)或?qū)ο蟠鎯?chǔ)服務(wù)所用的服務(wù)器進(jìn)行邏輯分組。通常是將一些具有相同屬性的服務(wù)器分配到同一個(gè)zone中。如:數(shù)據(jù)中心中有部分機(jī)架的電源同其他機(jī)架的電源來自不同的供電線路,那么這些在獨(dú)立供電機(jī)架上的服務(wù)器需要分配在同一個(gè)Availability zone中。
Availability zones也可以用于區(qū)分不同檔次的硬件。特別是對(duì)于OpenStack對(duì)象存儲(chǔ)服務(wù)比較有用,用于運(yùn)行對(duì)象存儲(chǔ)的服務(wù)器可能配置了不同的磁盤。當(dāng)用戶選擇應(yīng)用所需的配置時(shí),就可以通過指定不同的zone上的虛擬主機(jī)實(shí)例或磁盤卷。用戶通過自主選擇就可以確定他們的應(yīng)用運(yùn)行是分布在不同的底層硬件服務(wù)器上,這樣就可以在硬件故障時(shí),實(shí)現(xiàn)應(yīng)用的高可用性。
硬件擴(kuò)展
在準(zhǔn)備了部署和安裝OpenStack相關(guān)的資源同時(shí),另一項(xiàng)非常重要的任務(wù)是提前準(zhǔn)備好擴(kuò)展的硬件部署準(zhǔn)備。本書建議是至少在現(xiàn)有運(yùn)行的OpenStack云環(huán)境之外有空閑機(jī)架供使用,同時(shí)還需要準(zhǔn)備何時(shí),如何擴(kuò)展硬件的方案。
硬件采購
“云系統(tǒng)”常備描述成靈活多變的環(huán)境,在云上運(yùn)行的服務(wù)環(huán)境經(jīng)常隨意的開啟和關(guān)閉。這種對(duì)云系統(tǒng)的描述無誤,但不代表支持運(yùn)行云系統(tǒng)的底層服務(wù)器是經(jīng)常變動(dòng)的。只有底層硬件的穩(wěn)定和正確的配置才能確保其上云系統(tǒng)的正常穩(wěn)定的運(yùn)行。通常需要將主要的工作集中在建立一個(gè)穩(wěn)定的基礎(chǔ)硬件環(huán)境才能提供用戶一個(gè)靈活多變的云系統(tǒng)環(huán)境。
OpenStack可部署于任何支持的Linux發(fā)行版所兼容的硬件環(huán)境上,如:本書所使用到的Ubuntu 21.04
服務(wù)器硬件環(huán)境不必完全一致,但是至少需要相同的CPU類型,以便于能支持實(shí)例在不同硬件環(huán)境上的遷移。
OpenStack建議的典型硬件就是商品硬件(commodity)。商品硬件就是指市場(chǎng)上大部分硬件供應(yīng)商所提供的標(biāo)準(zhǔn)硬件配置。如果能直接采購,則可以直接按照需要建立類型的系統(tǒng)(如:計(jì)算,對(duì)象存儲(chǔ),云控制器)進(jìn)行采購即可。另一種情況是預(yù)算不多,在現(xiàn)存的服務(wù)器上進(jìn)行升級(jí)以滿足性能和虛擬化要求,這樣也可以支持部署OpenStack。
規(guī)劃容量
OpenStack在于增加系統(tǒng)容量方面相對(duì)簡(jiǎn)單容易。請(qǐng)參考擴(kuò)展性章節(jié),其中特別需要注意的是對(duì)于云控制器容量考慮。建議在可能情況下考慮對(duì)于計(jì)算和對(duì)象存儲(chǔ)節(jié)點(diǎn)留有額外的容量。增加的新節(jié)點(diǎn)不必要同現(xiàn)存節(jié)點(diǎn)保持相同配置,相同供應(yīng)商。
在計(jì)算節(jié)點(diǎn)上,nova-scheduler將根據(jù)核數(shù),內(nèi)存信息進(jìn)行系統(tǒng)資源的調(diào)配和管理。同時(shí)需要注意的是當(dāng)使用不同CPU時(shí),由于CPU計(jì)算速度的差異會(huì)導(dǎo)致用戶體驗(yàn)的不一致。當(dāng)添加對(duì)象存儲(chǔ)節(jié)點(diǎn)時(shí),不同節(jié)點(diǎn)需要給出權(quán)重用以反映出節(jié)點(diǎn)的性能。
監(jiān)控資源的使用和用戶的增長(zhǎng)可以幫助你了解到何時(shí)需要考慮采購新資源。在監(jiān)控章節(jié)中會(huì)提供詳細(xì)有用的監(jiān)控指標(biāo)。
高負(fù)荷測(cè)試
服務(wù)器硬件在剛開始使用和快到使用壽命時(shí)最容易產(chǎn)生故障。所以為了避免在生產(chǎn)環(huán)境中忙于應(yīng)付硬件故障,可以在初期適當(dāng)采用高負(fù)荷測(cè)試方式來測(cè)試硬件故障。通常高負(fù)荷測(cè)試可以連續(xù)運(yùn)行幾天的CPU或磁盤性能基準(zhǔn)測(cè)試軟件,用以將硬件負(fù)荷增加至極限。