理解 Cinder 架構 - 天天5分鐘玩轉 OpenStack(45)

從本節開始咱們學習 OpenStack 的 Block Storage Service,Cinder算法

理解 Block Storage

操做系統得到存儲空間的方式通常有兩種:數據庫

  1. 經過某種協議(SAS,SCSI,SAN,iSCSI 等)掛接裸硬盤,而後分區、格式化、建立文件系統;或者直接使用裸硬盤存儲數據(數據庫)後端

  2. 經過 NFS、CIFS 等 協議,mount 遠程的文件系統api

第一種裸硬盤的方式叫作 Block Storage(塊存儲),每一個裸硬盤一般也稱做 Volume(卷) 第二種叫作文件系統存儲。NAS 和 NFS 服務器,以及各類分佈式文件系統提供的都是這種存儲。服務器

理解 Block Storage Service

Block Storage Servicet 提供對 volume 從建立到刪除整個生命週期的管理。網絡

從 instance 的角度看,掛載的每個 Volume 都是一塊硬盤。架構

OpenStack 提供 Block Storage Service 的是 Cinder,其具體功能是:分佈式

  1. 提供 REST API 使用戶可以查詢和管理 volume、volume snapshot 以及 volume typeide

  2. 提供 scheduler 調度 volume 建立請求,合理優化存儲資源的分配性能

  3. 經過 driver 架構支持多種 back-end(後端)存儲方式,包括 LVM,NFS,Ceph 和其餘諸如 EMC、IBM 等商業存儲產品和方案

Cinder 架構

下圖是 cinder 的邏輯架構圖

Cinder 包含以下幾個組件:

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

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

cinder-scheduler
scheduler 經過調度算法選擇最合適的存儲節點建立 volume。

volume provider
數據的存儲設備,爲 volume 提供物理存儲空間。 cinder-volume 支持多種 volume provider,每種 volume provider 經過本身的 driver 與cinder-volume 協調工做。

Message Queue
Cinder 各個子服務經過消息隊列實現進程間通訊和相互協做。由於有了消息隊列,子服務之間實現瞭解耦,這種鬆散的結構也是分佈式系統的重要特徵。

Database Cinder 有一些數據須要存放到數據庫中,通常使用 MySQL。數據庫是安裝在控制節點上的,好比在咱們的實驗環境中,能夠訪問名稱爲「cinder」的數據庫。

物理部署方案

Cinder 的服務會部署在兩類節點上,控制節點和存儲節點。 咱們來看看控制節點 devstack-controller 上都運行了哪些 cinder-* 子服務。

cinder-api 和 cinder-scheduler 部署在控制節點上,這個很合理。

至於 cinder-volume 也在控制節點上可能有些同窗就會迷糊了:cinder-volume 不是應該部署在存儲節點上嗎?

要回答這個問題,首先要搞清楚一個事實: OpenStack 是分佈式系統,其每一個子服務均可以部署在任何地方,只要網絡可以連通。

不管是哪一個節點,只要上面運行了 cinder-volume,它就是一個存儲節點,固然,該節點上也能夠運行其餘 OpenStack服務。

cinder-volume 是一頂存儲節點帽子,cinder-api 是一頂控制節點帽子。在咱們的環境中,devstack-controller 同時戴上了這兩頂帽子,因此它既是控制節點,又是存儲節點。固然,咱們也能夠用一個專門的節點來運行 cinder-volume。

這再一次展現了 OpenStack 分佈式架構部署上的靈活性: 能夠將全部服務都放在一臺物理機上,用做一個 All-in-One 的測試環境;而在生產環境中能夠將服務部署在多臺物理機上,得到更好的性能和高可用。

RabbitMQ 和 MySQL 一般是放在控制節點上的。

另外,也能夠用 cinder service list 查看 cinder-* 子服務都分佈在哪些節點上

還有一個問題:volume provider 放在那裏?

通常來說,volume provider 是獨立的。cinder-volume 使用 driver 與 volume provider 通訊並協調工做。因此只須要將 driver 與 cinder-volume 放到一塊兒就能夠了。在 cinder-volume 的源代碼目錄下有不少 driver,支持不一樣的 volume provider。

後面咱們會以 LVM 和 NFS 這兩種 volume provider 爲例討論 cinder-volume 的使用,其餘 volume provider 能夠查看 OpenStack 的 configuration 文檔。

下一節咱們將討論 Cinder 的這些組件如何協調工做。

 

相關文章
相關標籤/搜索