天天看點

了解 Cinder 架構 - 每天5分鐘玩轉 OpenStack(45)了解 Block Storage了解 Block Storage ServiceCinder 架構實體部署方案

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

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

通過某種協定(SAS,SCSI,SAN,iSCSI 等)挂接裸硬碟,然後分區、格式化、建立檔案系統;或者直接使用裸硬碟存儲資料(資料庫)

通過 NFS、CIFS 等 協定,mount 遠端的檔案系統

第一種裸硬碟的方式叫做 Block Storage(塊存儲),每個裸硬碟通常也稱作 Volume(卷) 第二種叫做檔案系統存儲。NAS 和 NFS 伺服器,以及各種分布式檔案系統提供的都是這種存儲。

Block Storage Servicet 提供對 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 等商業存儲産品和方案

下圖是 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 的這些元件如何協調工作。

本文轉自CloudMan6 51CTO部落格,原文連結:http://blog.51cto.com/cloudman/1787719