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


 

從本節開始我們學習 OpenStack 的 Block Storage Service,Cinder

理解 Block Storage

操作系統獲得存儲空間的方式一般有兩種:

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

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

第一種裸硬盤的方式叫做 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 type

  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 的這些組件如何協調工作。



免責聲明!

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



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