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