五、OpenStack的Cinder元件詳解
一:簡介
一、作用
-
塊儲存服務,為執行例項提供穩定的資料塊儲存服務。
-
塊儲存服務,提供對 volume 從建立到刪除整個生命週期的管理。
二、Block Storage
1.作業系統獲得儲存空間的方式一般有兩種:
-
通過某種協議(SAS,SCSI,SAN,iSCSI 等)掛接裸硬碟,然後分割槽、格式化、建立檔案系統;或者直接使用裸硬碟儲存資料(資料庫)。
-
通過 NFS、CIFS 等 協議,mount 遠端的檔案系統。
2.第一種裸硬碟的方式叫做 Block Storage(塊儲存),每個裸硬碟通常也稱作 Volume(卷) 第二種叫做檔案系統儲存。NAS 和 NFS 伺服器,以及各種分散式檔案系統提供的都是這種儲存。
三、Block Storage Service
塊儲存服務提供對 volume 從建立到刪除整個生命週期的管理。從 instance 的角度看,掛載的每一個 Volume 都是一塊硬碟。OpenStack 提供 Block Storage Service 的是 Cinder,其具體功能是:
-
提供 REST API 使使用者能夠查詢和管理 volume、volume snapshot 以及 volume type。
-
提供 scheduler 排程 volume 建立請求,合理優化儲存資源的分配
-
通過 driver 架構支援多種 back-end(後端)儲存方式,包括 LVM,NFS,Ceph 和其他諸如 EMC、IBM 等商業儲存產品和方案
二:架構
一、核心架構
1. cinder採用的是鬆散的架構理念,由cinder-api統一管理外部對cinder的呼叫,cinder-scheduler負責排程合適的節點去構建volume儲存。volume-provider通過driver負責具體的儲存空間,然後cinder內部依舊通過訊息佇列queue溝通,解耦各子服務支援非同步呼叫。
2. cinder-sheduler通過filter進行刪選,允許使用第三方的filter,自定義篩選內容。
二、核心元件
1.cinder-api:接收 API 請求,呼叫 cinder-volume 執行操作。cinder-api 對接收到的 HTTP API 請求會做如下處理:
-
檢查客戶端傳人的引數是否合法有效
-
呼叫 cinder 其他子服務的處理客戶端請求
-
將 cinder 其他子服務返回的結果序列號並返回給客戶端
2.cinder-scheduler:Cinder 可以有多個儲存節點,當需要建立 volume 時,cinder-scheduler 會根據儲存節點的屬性和資源使用情況選擇一個最合適的節點來建立 volume。
3.cinder-volume:cinder-volume 在儲存節點上執行,OpenStack 對 Volume 的操作,最後都是交給 cinder-volume 來完成的。cinder-volume 自身並不管理真正的儲存裝置,儲存裝置是由 volume provider 管理的。cinder-volume 與 volume provider 一起實現 volume 生命週期的管理。
-
通過 Driver 架構支援多種 Volume Provider
-
定期向 OpenStack 報告計算節點的狀態。cinder-volume 會定期向 Cinder 報告儲存節點的空閒容量來做篩選啟動volume
-
實現 volume 生命週期管理。Cinder 對 volume 的生命週期的管理最終都是通過 cinder-volume 完成的,包括 volume 的 create、extend、attach、snapshot、delete 等。
4.volume provider:資料的儲存裝置,為 volume 提供物理儲存空間。 cinder-volume 支援多種 volume provider,每種 volume provider 通過自己的 driver 與cinder-volume 協調工作。
5.Message Queue:Cinder 各個子服務通過訊息佇列實現程序間通訊和相互協作。因為有了訊息佇列,子服務之間實現瞭解耦,這種鬆散的結構也是分散式系統的重要特徵。
三、工作流程
-
使用者向 cinder-api傳送建立volume的請求
-
cinder-api對請求做一些必要處理後,通過 Messaging將建立訊息傳送給cinder-scheduler
-
cinder-scheduler從 Messaging 獲取到 cinder-api發給它的訊息,然後執行排程演算法,從若干計儲存點中選出節點 A
-
cinder-scheduler通過 Messaging 將建立訊息傳送給儲存節點A
-
儲存節點 A 的 cinder-volume從 Messaging 中獲取到 cinder-scheduler發給它的訊息,然後通過 driver 在 volume provider 上建立 volume。