1. 程式人生 > >openstack組件之cinder

openstack組件之cinder

cinder 組件

1、塊存儲服務

塊存儲服務提供對 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 等商業存儲產品和方案


2、cinder架構

1)cinder-api

接收 API 請求,調用 cinder-volume 執行操作。

2)cinder-volume

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

3)cinder-scheduler

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

4)volume provider

數據的存儲設備,為 volume 提供物理存儲空間。

cinder-volume 支持多種 volume provider,每種 volume provider 通過自己的 driver 與cinder-volume 協調工作。

5)Message Queue

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

6)Database

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


3、物理部署方案

cinder 的服務會部署在兩類節點上,控制節點和存儲節點。

cinder-api 和 cinder-scheduler 部署在控制節點上。

cinder-volume 在存儲節點上。

RabbitMQ 和 MySQL 通常部署在控制節點上。

volume provider 一般來講是獨立的。

cinder-volume 使用 driver 與 volume provider 通信並協調工作。

所以只需要將 driver 與 cinder-volume 放到一起就可以了。


4、從 volume 創建流程看 cinder-* 子服務如何協同工作

技術分享圖片

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

2)API 對請求做一些必要處理後,向 Messaging(RabbitMQ)發送了一條消息:“讓 Scheduler 選擇合適的存儲節點”

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

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

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


5、子服務詳解

1)cinder-api

cinder-api對接收到的 HTTP API(Volume 生命周期相關的操作)請求會做如下處理:

檢查客戶端傳人的參數是否合法有效

調用 cinder 其他子服務的處理客戶端請求

將 cinder 其他子服務返回的結果序列號並返回給客戶端

2)cinder-scheduler

創建Volume時,cinder-scheduler會基於容量、Volume Type等條件選擇出最合適的存儲節點,然後讓其創建Volume

3)cinder-volume

cinder-volume 在存儲節點上運行,OpenStack 對 Volume 的操作,最後都是交給 cinder-volume 來完成的。

cinder-volume 自身並不管理真正的存儲設備,存儲設備是由 volume provider 管理的。

cinder-volume 與 volume provider 一起實現 volume 生命周期的管理。它們之間是通過driver實現通信。

6、Volume的掛載和卸載

未完待續……


openstack組件之cinder