理解 Cinder 架构 - 每天5分钟玩转 OpenStack(45)
從本節(jié)開始我們學習 OpenStack 的 Block Storage Service,Cinder
理解 Block Storage
操作系統(tǒng)獲得存儲空間的方式一般有兩種:
通過某種協(xié)議(SAS,SCSI,SAN,iSCSI 等)掛接裸硬盤,然后分區(qū)、格式化、創(chuàng)建文件系統(tǒng);或者直接使用裸硬盤存儲數(shù)據(jù)(數(shù)據(jù)庫)
通過 NFS、CIFS 等 協(xié)議,mount 遠程的文件系統(tǒng)
第一種裸硬盤的方式叫做 Block Storage(塊存儲),每個裸硬盤通常也稱作 Volume(卷) 第二種叫做文件系統(tǒng)存儲。NAS 和 NFS 服務(wù)器,以及各種分布式文件系統(tǒng)提供的都是這種存儲。
理解 Block Storage Service
Block Storage Servicet 提供對 volume 從創(chuàng)建到刪除整個生命周期的管理。
從 instance 的角度看,掛載的每一個 Volume 都是一塊硬盤。
OpenStack 提供 Block Storage Service 的是 Cinder,其具體功能是:
提供 REST API 使用戶能夠查詢和管理 volume、volume snapshot 以及 volume type
提供 scheduler 調(diào)度 volume 創(chuàng)建請求,合理優(yōu)化存儲資源的分配
通過 driver 架構(gòu)支持多種 back-end(后端)存儲方式,包括 LVM,NFS,Ceph 和其他諸如 EMC、IBM 等商業(yè)存儲產(chǎn)品和方案
Cinder 架構(gòu)
下圖是 cinder 的邏輯架構(gòu)圖
Cinder 包含如下幾個組件:
cinder-api
接收 API 請求,調(diào)用 cinder-volume 執(zhí)行操作。
cinder-volume
管理 volume 的服務(wù),與 volume provider 協(xié)調(diào)工作,管理 volume 的生命周期。運行 cinder-volume 服務(wù)的節(jié)點被稱作為存儲節(jié)點。
cinder-scheduler
scheduler 通過調(diào)度算法選擇最合適的存儲節(jié)點創(chuàng)建 volume。
volume provider
數(shù)據(jù)的存儲設(shè)備,為 volume 提供物理存儲空間。 cinder-volume 支持多種 volume provider,每種 volume provider 通過自己的 driver 與cinder-volume 協(xié)調(diào)工作。
Message Queue
Cinder 各個子服務(wù)通過消息隊列實現(xiàn)進程間通信和相互協(xié)作。因為有了消息隊列,子服務(wù)之間實現(xiàn)了解耦,這種松散的結(jié)構(gòu)也是分布式系統(tǒng)的重要特征。
Database Cinder 有一些數(shù)據(jù)需要存放到數(shù)據(jù)庫中,一般使用 MySQL。數(shù)據(jù)庫是安裝在控制節(jié)點上的,比如在我們的實驗環(huán)境中,可以訪問名稱為“cinder”的數(shù)據(jù)庫。
物理部署方案
Cinder 的服務(wù)會部署在兩類節(jié)點上,控制節(jié)點和存儲節(jié)點。 我們來看看控制節(jié)點 devstack-controller 上都運行了哪些 cinder-* 子服務(wù)。
cinder-api 和 cinder-scheduler 部署在控制節(jié)點上,這個很合理。
至于 cinder-volume 也在控制節(jié)點上可能有些同學就會迷糊了:cinder-volume 不是應(yīng)該部署在存儲節(jié)點上嗎?
要回答這個問題,首先要搞清楚一個事實: OpenStack 是分布式系統(tǒng),其每個子服務(wù)都可以部署在任何地方,只要網(wǎng)絡(luò)能夠連通。
無論是哪個節(jié)點,只要上面運行了 cinder-volume,它就是一個存儲節(jié)點,當然,該節(jié)點上也可以運行其他 OpenStack服務(wù)。
cinder-volume 是一頂存儲節(jié)點帽子,cinder-api 是一頂控制節(jié)點帽子。在我們的環(huán)境中,devstack-controller 同時戴上了這兩頂帽子,所以它既是控制節(jié)點,又是存儲節(jié)點。當然,我們也可以用一個專門的節(jié)點來運行 cinder-volume。
這再一次展示了 OpenStack 分布式架構(gòu)部署上的靈活性: 可以將所有服務(wù)都放在一臺物理機上,用作一個 All-in-One 的測試環(huán)境;而在生產(chǎn)環(huán)境中可以將服務(wù)部署在多臺物理機上,獲得更好的性能和高可用。
RabbitMQ 和 MySQL 通常是放在控制節(jié)點上的。
另外,也可以用 cinder service list 查看 cinder-* 子服務(wù)都分布在哪些節(jié)點上
還有一個問題:volume provider 放在那里?
一般來講,volume provider 是獨立的。cinder-volume 使用 driver 與 volume provider 通信并協(xié)調(diào)工作。所以只需要將 driver 與 cinder-volume 放到一起就可以了。在 cinder-volume 的源代碼目錄下有很多 driver,支持不同的 volume provider。
后面我們會以 LVM 和 NFS 這兩種 volume provider 為例討論 cinder-volume 的使用,其他 volume provider 可以查看 OpenStack 的 configuration 文檔。
下一節(jié)我們將討論 Cinder 的這些組件如何協(xié)調(diào)工作。
轉(zhuǎn)載于:https://blog.51cto.com/cloudman/1787719
總結(jié)
以上是生活随笔為你收集整理的理解 Cinder 架构 - 每天5分钟玩转 OpenStack(45)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php获取一维,二维数组长度的方法(有实
- 下一篇: Android数据库新王者-Realm入