Openstack知識點總結


Openstack:

一.雲計算+openstack概念

1.雲計算是一種按使用量付費的模式,這種模式提供可用的,便捷的,按需的訪問,通過互聯網進入可配置的計算資源共享池(資源包括網絡,計算,存儲,應用軟件,服務);

2.OpenStack:是一個開源的雲計算管理平台項目,由幾個主要的組件組合起來完成具體工作,項目目標是提供實施簡單、可大規模擴展、豐富、標准統一的雲計算管理平台。

二.Openstack組件

共享服務組件(6個):

數據庫服務(database service):Mariadb及Mongodb

消息傳輸(Message Queues): RabbitMQ

緩存(cache):Memcached

時間同步(time sync):ntp

存儲(storge provider):ceph,GFS,LVM,ISICI等

高可用及負載均衡:pacemaker,HAproxy,keepalived,lvs

核心組件:

身份服務(Identity Service):Keystone

計算服務(compute):Nova

鏡像服務(Image Service):Glance

網絡服務(Network):Neutron

塊存儲服務(Block Storage):Cinder

Web界面服務(Dashboard):Horizon

對象存儲(Object Storage):Swift

測量(Metering):Ceillrmeter

部署編排(Orchestration):Heat

三.RabbitMQ

1.概念屬於一個流行的開源消息隊列系統。屬於AMQP( 高級消息隊列協議 ) 標准的一個 實現。是應用層協議的一個開放標准,為面向消息的中間件設計。用於在分布式系統中存儲轉發消息,在 易用性、擴展性、高可用性等方面表現不俗。

2.耦合/解耦合

3.rabbitmq中的概念:

Broker:簡單來說就是消息隊列服務器實體。

Exchange:消息交換機,它指定消息按什么規則,路由到哪個隊列。

Queue:消息隊列載體,每個消息都會被投入到一個或多個隊列。
Binding:綁定,它的作用就是把exchange和queue按照路由規則綁定起來。
Routing Key:路由關鍵字, exchange根據這個關鍵字進行消息投遞。
vhost:虛擬主機,一個broker里可以開設多個vhost,用作不同用戶的權限分離。

producer:消息生產者,就是投遞消息的程序。

consumer:消息消費者,就是接受消息的程序。

channel:消息通道,在客戶端的每個連接里,可建立多個channel,每個channel代表一個會話任務。

4.工作原理

( 1)客戶端連接到消息隊列服務器,打開一個channel。

( 2)客戶端聲明一個exchange,並設置相關屬性。

( 3)客戶端聲明一個queue,並設置相關屬性。

( 4)客戶端使用routing key,在exchange和queue之間建立好綁定關系。

( 5)客戶端投遞消息到exchange。

( 6) exchange接收到消息后,就根據消息的key和已經設置的binding,進行消息路由,將消息投遞到一個或多個隊列里。

5.rabbitmq集群部署: 注意必須至少要有一個disk node

四.Memcache

1.概念:

Memcached 是一個開源的、高性能的分布式內存對象緩存系統。通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高網站訪問速度,加速動態WEB應用、減輕數據庫負載。

2.緩存流程:

(1). 檢查客戶端請求的數據是否在 Memcache 中,如果存在,直接將請求的數據返回,不在對數據進行任何操作。

(2).如果請求的數據不在 Memcache 中,就去數據庫查詢,把從數據庫中獲取的數據返回給客戶端,同時把數據緩存一份 Memcache 中
(3).每次更新數據庫的同時更新 Memcache 中的數據庫。確保數據信息一致性。
(4).當分配給 Memcache 內存空間用完后,會使用LRU(least Recently Used ,最近最少使用 ) 策略加到其失效策略,失效的數據首先被替換掉,然后在替換掉最近未使用的數據

五.Keystone

1.概念:

用於為OpenStack家族中的其它組件成員提供統一的認證服務,包括身份驗證、令牌的發放和校驗、服務列表、用戶權限的定義等。雲環境中所有的服務之間的授權和認證都需要經過 keystone. 

(1).管理用戶及其權限;

(2).維護 OpenStack Services 的 Endpoint;

(3).Authentication(認證)和 Authorization(鑒權)

2.keystone中概念:

(1).user指代任何使用open stack的實體,可以是真正的用戶,其他系統或服務;

(2).Credentials:是user用來證明自己身份的信息,可以是1. 用戶名/密碼;2.Token;3. API Key;4. 其他高級方式.

(3). Authentication:是 Keystone 驗證 User 身份的過程。User 訪問 OpenStack時向 Keystone 提交用戶名和密碼形式的 Credential,Keystone 驗證通過后會給 User 簽發一個 Token 作為后續訪問的 Credential。

(4).Token: Token 是由數字和字母組成的字符串,user成功Authentication后成Token並分配給user。Token用作訪問Service的Credential;Service會通過Keystone驗證Token的有限性;Token的有效期默認24小時。

(5).Project:用於將open stack的資源進行分組和隔離。根據openstack的服務對象不同,project可以是一個客戶,部門或者項目組。

(6).Service包括nova,glance,cinder,neutron等,每個service會提供若干個Endpoint,user通過Endpoint訪問資源和執行操作。

(7).Endpoint:是一個網絡上可訪問的地址,通常是一個URL。Service通過Endpoint暴露自己的API,Keystone負責管路和維護每個service的Endpoint.

(8).Role:可以為user分配一個或多個Role,Service決定每個role能做什么事,系統基本角色有兩個:管理員admin和租戶_member_

3.Keystone基本框架

Token: 用來生成和管理token

Catalog: 用來存儲和管理service/endpoint

Identity: 用來管理tenant/user/role和驗證

Policy: 用來管理訪問權限

4.通過查詢可用image’這個實際操作讓大家更加清晰keystone的工作過程及原理:

第一步:登入。

用戶admin拿着credential請求登入,Authentication認證通過,並給admin用戶一個token;

第二步:顯示操作界面。

進入操作界面后,這時admin需要訪問image服務。在訪問image前發生了:admin詢問keystone詢問到了能訪問admin和demo兩個project,同時可以訪問instance,Volume,glance等服務。因為這時admin已經從keystone拿到了service的Endpoints.

第三步:顯示image列表。

Admin要查看project admin中的image,先是把將請求發送到Glance的Endpoint,Glance向keystone詢問admin身份是否有效,接下來Glance會查看/etc/glance/policy.json判斷admin是否有查看image的權限。權限判定后,Glance將image列表發給admin。

5.keystone主要有兩個日志keystone.log和keystone_access.log,保存在/var/log/apache2/目錄里

6.集群搭建圖

六.Glance

1.glance介紹是openstack項目中負責鏡像管理的模塊,其功能包括虛擬機鏡像的查找,注冊和檢索等。Glance提供restful api可以查詢虛擬機鏡像的metadata及獲取鏡像。Glance可以將鏡像保存到多種后端存儲上,比如簡單的文件存儲或者對象存儲。

2.Glance架構

Glance-api

Glance-api是系統后台運行的服務進程,對外提供REST API,響應Image查詢,獲取和存儲的調用。Glance-api不會真正處理請求,如果操作是與image metadata相關,glance-api會把請求轉發給glance-registry;如果操作是與image自身存取相關,glance-api會把請求轉發給image的store backend.

Glance-registry

Glance-registry是系統后台運行的服務進程,負責處理和存取image的metadata,例如image的大小和類型。Glance支持多種格式的image,比較常用的有:Raw,vmdk,ISO,QCOW2.Image的metadata會保持到database中,默認是MySQL。

Store backend

Glance自己並不存儲image,真正的image是存放在backend中。Glance支持多種backend,默認是:A directory on a local file system(Filesystem)具體使用哪種backend,實在/etc/glance/glance-api.conf 中配置。

3.創建Image

方法一:在web界面中創建(步驟見博客)

方法二:在命令行創建

1. 將image上傳到控制節點的文件系統中,例如: /tmp/cirros-0.3.5-x86_64-disk.img

2. glance image-create --name cirros1 --file /tmp/cirros-0.3.5-x86_64-disk.img --disk-format qcow2 --container-format bare --progress

一般創建比較大的鏡像用命令行創建會更快和方便。

Image放在/var/lib/glance/images/

4.glance日志glance_api.log 和glance_registry.log,保存/var/log/glance目錄中

七.Nova

1.nova介紹:是openstack最核心的服務,負責維護和管理雲計算計算資源。

從上圖可以看出,nova處於openstack架構的中心,其他組件都為nova提供支持glance為VM提供image,cinder和swift分別為VM提供塊存儲和對象存儲,neutron提供網絡連接。

2.nova組件介紹

1.nova-api

是整個nova的門戶,所有對nova的請求都首先由nova-api處理。Nova-api向外暴露若干HTTP rest api 接口在keystone中,客戶端可以將請求發送到endpoint指定的地址,向nova-api請求操作。

Nova-api對收到的HTTP api請求會做如下處理:

(1).檢查客戶端傳入的參數是否合法;

(2).調用nova其他子服務的處理客戶端HTTP請求;

(3).格式化nova其他子服務返回的結果並返回給客戶端。

2.nova-conductor

Nova-compute需要獲取和更新數據庫中instance的信息,但nova-compute並不會直接訪問數據庫,而是通過nova-conductor實現數據的訪問。

使用nova-conductor的兩個顯著好處:

(1).更好的系統安全性:早期的openstack版本中,nova-compute可以直接訪問數據庫,但試想如果任意一個計算節點被黑客入侵,都會導致控制節點上的數據庫面臨極大的風險。為了解決這個問題,引入了nova-conductor;

(2)更好的伸縮性:nova-conductor建立后,提高了nova的伸縮性。Nova-compute與conductor是通過消息中間件交互的。這種松散的架構允許配置多個nova-conductor實例,從而應對日益增長的計算節點對數據庫的訪問。

3.nova-scheduler

虛擬機調度服務,負責決定在哪個計算節點上運行虛機。

如何選擇計算節點——啟動實例調度策略

Filter scheduler(調度器),調度過程分兩步:

(1).通過過濾器(filter)選擇滿足條件的計算節點(運行nova-compute)

(2).通過權重計算(weighting)選擇在最優(權重值最大)的計算節點上創建instance

Filter具體有哪些:

RetryFilter

AvailabilityZoneFilter

RamFilter

DiskFilter

CoreFilter

ComputeFilter

ComputeCapabilitiesFilter

ImagePropertiesFilter

ServerGroupAntiAffinityFilter

ServerGroupAffinityFilter

Weight: 默認實現是根據計算節點空閑的內存量計算權重值: 空閑內存越多,權重越大,instance 將被部署到當前空閑內存最多的計算節點上。

4.nova-compute(裝在計算節點上)

nova-compute 在計算節點上運行,負責管理節點上的 instance。OpenStack 對 instance 的操作,最后都是交給 nova-compute 來完成的。nova-compute 與 Hypervisor 一起實現 OpenStack 對 instance 生命周期的管理。

5.Console Interface

nova-console:

用戶可以通過多種方式訪問虛機的控制台:

nova-novncproxy,基於 Web 瀏覽器的 VNC 訪問
nova-spicehtml5proxy,基於 HTML5 瀏覽器的 SPICE 訪問
nova-xvpnvncproxy,基於 Java 客戶端的 VNC 訪問

nova-consoleauth

負責對訪問虛機控制台請求提供 Token 認證

nova-cert

提供 x509 證書支持

3.從創建虛機流程看nova子服務如何協同工作

1.客戶(可以是 OpenStack 最終用戶,也可以是其他程序)向 API(nova-api)發送請求:“幫我創建一個虛機”

2.API 對請求做一些必要處理后,向 Messaging(RabbitMQ)發送了一條消息:“讓 Scheduler 創建一個虛機”

3.Scheduler(nova-scheduler)從 Messaging 獲取到 API 發給它的消息,然后執行調度算法,從若干計算節點中選出節點 A

4.Scheduler 向 Messaging 發送了一條消息:“在計算節點 A 上創建這個虛機”

5.計算節點 A 的 Compute(nova-compute)從 Messaging 中獲取到 Scheduler 發給它的消息,然后在本節點的 Hypervisor 上啟動虛機。

6.在虛機創建的過程中,Compute 如果需要查詢或更新數據庫信息,會通過 Messaging 向 Conductor(nova-conductor)發送消息,Conductor 負責數據庫訪問。

在前面創建虛機的流程示意圖中,我們看到 nova-* 子服務之間的調用嚴重依賴 Messaging。Messaging 是 nova-* 子服務交互的中樞。

以前沒接觸過分布式系統的同學可能會不太理解為什么不讓 API 直接調用Scheduler,或是讓Scheuler 直接調用 Compute,而是非要通過 Messaging 進行中轉。 這里做一些解釋。程序之間的調用通常分兩種:同步調用和異步調用。
同步調用

API 直接調用 Scheduler 的接口是同步調用。 其特點是 API 發出請求后需要一直等待,直到 Scheduler 完成對 Compute 的調度,將結果返回給 API 后 API 才能夠繼續做后面的工作。

異步調用

API 通過 Messaging 間接調用 Scheduler 就是異步調用。 其特點是 API 發出請求后不需要等待,直接返回,繼續做后面的工作。 Scheduler 從 Messaging 接收到請求后執行調度操作,完成后將結果也通過 Messaging 發送給 API。在 OpenStack 這類分布式系統中,通常采用異步調用的方式,其好處是:

1.解耦各子服務。 子服務不需要知道其他服務在哪里運行,只需要發送消息給 Messaging 就能完成調用。

2.提高性能 異步調用使得調用者無需等待結果返回。這樣可以繼續執行更多的工作,提高系統總的吞吐量。

3.提高伸縮性 子服務可以根據需要進行擴展,啟動更多的實例處理更多的請求,在提高可用性的同時也提高了整個系統的伸縮性。而且這種變化不會影響到其他子服務,也就是說變化對別人是透明的。

4.實現 instance 生命周期的管理

nova-compute 創建 instance 的過程可以分為 4 步:

(1).為 instance 准備資源

(2).創建 instance 的鏡像文件

(3).創建 instance 的 XML 定義文件

(4).創建虛擬網絡並啟動虛擬機

5.Nova 創建虛擬機詳細過程

1.界面或命令行通過RESTful API向keystone獲取認證信息。

2、keystone通過用戶請求認證信息,並生成auth-token返回給對應的認證請求。

3、界面或命令行通過RESTful API向nova-api發送一個boot instance的請求(攜帶auth-token)。

4、nova-api接受請求后向keystone發送認證請求,查看token是否為有效用戶和token。

5、keystone驗證token是否有效,如有效則返回有效的認證和對應的角色(注:有些操作需要有角色權限才能操作)。

6、通過認證后nova-api和數據庫通訊。

7、初始化新建虛擬機的數據庫記錄。

8、nova-api通過rpc.call向nova-scheduler請求是否有創建虛擬機的資源(Host ID)。

9、nova-scheduler進程偵聽消息隊列,獲取nova-api的請求。

10、nova-scheduler通過查詢nova數據庫中計算資源的情況,並通過調度算法計算符合虛擬機創建需要的主機。

11、對於有符合虛擬機創建的主機,nova-scheduler更新數據庫中虛擬機對應的物理主機信息。

12、nova-scheduler通過rpc.cast向nova-compute發送對應的創建虛擬機請求的消息。

13、nova-compute會從對應的消息隊列中獲取創建虛擬機請求的消息。

14、nova-compute通過rpc.call向nova-conductor請求獲取虛擬機消息。(Flavor)

15、nova-conductor從消息隊隊列中拿到nova-compute請求消息。

16、nova-conductor根據消息查詢虛擬機對應的信息。

17、nova-conductor從數據庫中獲得虛擬機對應信息。

18、nova-conductor把虛擬機信息通過消息的方式發送到消息隊列中。

19、nova-compute從對應的消息隊列中獲取虛擬機信息消息。

20、nova-compute通過keystone的RESTfull API拿到認證的token,並通過HTTP請求glance-api獲取創建虛擬機所需要鏡像。

21、glance-api向keystone認證token是否有效,並返回驗證結果。

22、token驗證通過,nova-compute獲得虛擬機鏡像信息(URL)。

23、nova-compute通過keystone的RESTfull API拿到認證k的token,並通過HTTP請求neutron-server獲取創建虛擬機所需要的網絡信息。

24、neutron-server向keystone認證token是否有效,並返回驗證結果。

25、token驗證通過,nova-compute獲得虛擬機網絡信息。

26、nova-compute通過keystone的RESTfull API拿到認證的token,並通過HTTP請求cinder-api獲取創建虛擬機所需要的持久化存儲信息。

27、cinder-api向keystone認證token是否有效,並返回驗證結果。

28、token驗證通過,nova-compute獲得虛擬機持久化存儲信息。

29、nova-compute根據instance的信息調用配置的虛擬化驅動來創建虛擬機。

九.Horizon

1.區域(Region

(1).地理上的概念,可以理解為一個獨立的數據中心,每個所定義的區域有自己獨立的Endpoint;

(2).區域之間是完全隔離的,但多個區域之間共享同一個Keystone和Dashboard(目前Openstack中的Dashboard還不支持多個區域);

(3).除了提供隔離的功能,區域的設計更多側重地理位置的概念,用戶可以選擇離自己更新的區域來部署自己的服務,選擇不同的區域主要是考慮那個區域更靠近自己,如用戶在美國,可以選擇離美國更近的區域;

(4).區域的概念是由Amazon在AWS中提出,主要是解決容錯能力和可靠性;

2.可用性區域(Availablilty Zone

AZ是在Region范圍內的再次切分,例如可以把一個機架上的服務器划分為一個AZ,划分AZ是為了提高容災能力和提供廉價的隔離服務;

3.Host Aggreates

一組具有共同屬性的節點集合,如以CPU作為區分類型的一個屬性,以磁盤(SSD\SAS\SATA)作為區分類型的一個屬性,以OS(Windows\Linux)為作區分類型的一個屬性;

4.Cell

nova為了增加橫向擴展以及分布式、大規模(地理位置級別)部署的能力,同時又不增加數據庫和消息中間件的復雜度,引入了cell的概念,並引入了nova-cell服務。

(1).主要是用來解決OpenStack的擴展性和規模瓶頸;

(2).每個Cell都有自己獨立的DB和AMQP,不與其他模塊共用DB和AMQP,解決了大規模環境中DB和AMQP的瓶頸問題;

(3).Cell實現了樹形結構(通過消息路由)和分級調度(過濾算法和權重算法),Cell之間通過RPC通訊,解決了擴展性問題;

十.Cinder

1.cinder架構

Cinder-api接收 API 請求,調用 cinder-volume ;

Cinder-volume管理 volume 的服務,與 volume provider 協調工作,管理 volume 的生命周期。運行 cinder-volume 服務的節點被稱作為存儲節點。

cinder-schedulerscheduler 通過調度算法選擇最合適的存儲節點創建 volume。

volume provider數據的存儲設備,為 volume 提供物理存儲空間。 cinder-volume 支持多種 volume provider,每種 volume provider 通過自己的 driver 與cinder-volume 協調工作。

Message QueueCinder 各個子服務通過消息隊列實現進程間通信和相互協作。因為有了消息隊列,子服務之間實現了解耦,這種松散的結構也是分布式系統的重要特征。

Database Cinder 有一些數據需要存放到數據庫中,一般使用 MySQL。數據庫是安裝在控制節點上。

2.volume創建流程看cinder子服務如何協同工作:

1.客戶(可以是 OpenStack 最終用戶,也可以是其他程序)向 API(cinder-api)發送請求:“幫我創建一個 volume”;

2.API 對請求做一些必要處理后,向 Messaging(RabbitMQ)發送了一條消息:“讓 Scheduler 創建一個 volume”

3.Scheduler(cinder-scheduler)從 Messaging 獲取到 API 發給它的消息,然后執行調度算法,從若干計存儲點中選出節點 A

4.Scheduler 向 Messaging 發送了一條消息:“讓存儲節點 A 創建這個 volume”

5.存儲節點 A 的 Volume(cinder-volume)從 Messaging 中獲取到 Scheduler 發給它的消息,然后通過 driver 在 volume provider 上創建 volume。

數據持久化

如果您想創建一個使用臨時存儲的實例,意味着當實例被刪除時數據會丟失,那么從以下啟動項中選擇一個:

鏡像:本選項使用一個鏡像啟動實例。

實例快照:此選項使用一個實例快照來啟動實例。

如果您想創建一個使用持久存儲的實例,意味着當實例被刪除時數據被保存,那么選擇從以下啟動項中選擇一個

鏡像(帶有選中創建新卷:此選項使用鏡像來啟動實例,並且創建一個新卷來持久化實例數據。您可以指定卷大小並指定在刪除實例時是否刪除實例。

這個選項使用一個已存在的卷。它不創建新卷。您可以選擇在刪除實例時刪除卷。注意:當選擇卷時,您只能啟動一個實例。

卷快照此選項使用卷快照啟動實例,並且創建一個新卷來持久化實例數據。您可以選擇在刪除實例時刪除卷。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM