openstack組件之cinder
塊存儲服務提供對 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 通常部署在控制節點上。
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