云計算openstack核心組件——cinder存儲服務(7)

一隧期、cinder 介紹:

理解 Block Storage

操作系統(tǒng)獲得存儲空間的方式一般有兩種:

  1. 通過某種協(xié)議(SAS,SCSI,SAN,iSCSI 等)掛接裸硬盤激才,然后分區(qū)、格式化、創(chuàng)建文件系統(tǒng)绊诲;或者直接使用裸硬盤存儲數(shù)據(jù)(數(shù)據(jù)庫)

  2. 通過 NFS、CIFS 等 協(xié)議褪贵,mount 遠程的文件系統(tǒng)

第一種裸硬盤的方式叫做 Block Storage(塊存儲)掂之,每個裸硬盤通常也稱作 Volume(卷) 第二種叫做文件系統(tǒng)存儲。NAS 和 NFS 服務器脆丁,以及各種分布式文件系統(tǒng)提供的都是這種存儲世舰。

理解 Block Storage Service

Block Storage Servicet 提供對 volume 從創(chuàng)建到刪除整個生命周期的管理。從 instance 的角度看槽卫,掛載的每一個 Volume 都是一塊硬盤跟压。OpenStack 提供 Block Storage Service 的是 Cinder,其具體功能是:

  1. 提供 REST API 使用戶能夠查詢和管理 volume歼培、volume snapshot 以及 volume type

  2. 提供 scheduler 調(diào)度 volume 創(chuàng)建請求震蒋,合理優(yōu)化存儲資源的分配

  3. 通過 driver 架構(gòu)支持多種 back-end(后端)存儲方式,包括 LVM躲庄,NFS查剖,Ceph 和其他諸如 EMC、IBM 等商業(yè)存儲產(chǎn)品和方案

Cinder 架構(gòu)

下圖是 cinder 的邏輯架構(gòu)圖

image.png

Cinder 包含如下幾個組件:

cinder-api

接收 API 請求噪窘, 調(diào)用 cinder-volume 笋庄。是整個 Cinder 組件的門戶,所有 cinder 的請求都首先由 cinder-api 處理倔监。cinder-api 向外界暴露若干 HTTP REST API 接口直砂。在 keystone 中我們可以查詢 cinder-api 的 endponits。

image.png

客戶端可以將請求發(fā)送到 endponits 指定的地址丐枉,向 cinder-api 請求操作。 當然掘托,作為最終用戶的我們不會直接發(fā)送 Rest API 請求瘦锹。OpenStack CLI,Dashboard 和其他需要跟 Cinder 交換的組件會使用這些 API。

cinder-api 對接收到的 HTTP API 請求會做如下處理:

1弯院、檢查客戶端傳人的參數(shù)是否合法有效

2辱士、調(diào)用 cinder 其他子服務的處理客戶端請求

3、將 cinder 其他子服務返回的結(jié)果序列號并返回給客戶端

cinder-api 接受哪些請求呢听绳?簡單的說颂碘,只要是 Volume 生命周期相關(guān)的操作,cinder-api 都可以響應椅挣。大部分操作都可以在 Dashboard 上看到头岔。

cinder-volume

管理 volume 的服務,與 volume provider 協(xié)調(diào)工作鼠证,管理 volume 的生命周期峡竣。運行 cinder-volume 服務的節(jié)點被稱作為存儲節(jié)點。

cinder-volume 在存儲節(jié)點上運行量九,OpenStack 對 Volume 的操作适掰,最后都是交給 cinder-volume 來完成的。cinder-volume 自身并不管理真正的存儲設(shè)備荠列,存儲設(shè)備是由 volume provider 管理的类浪。cinder-volume 與 volume provider 一起實現(xiàn) volume 生命周期的管理。

通過 Driver 架構(gòu)支持多種 Volume Provider

接著的問題是:現(xiàn)在市面上有這么多塊存儲產(chǎn)品和方案(volume provider)肌似,cinder-volume 如何與它們配合呢费就?

通過的 Driver 架構(gòu)。 cinder-volume 為這些 volume provider 定義了統(tǒng)一的接口锈嫩,volume provider 只需要實現(xiàn)這些接口受楼,就可以 Driver 的形式即插即用到 OpenStack 系統(tǒng)中。

定期向 OpenStack 報告計算節(jié)點的狀態(tài)

cinder-volume 會定期向 Cinder 報告存儲節(jié)點的空閑容量來做篩選啟動volume

實現(xiàn) volume 生命周期管理

Cinder 對 volume 的生命周期的管理最終都是通過 cinder-volume 完成的呼寸,包括 volume 的 create艳汽、extend、attach对雪、snapshot河狐、delete 等。

cinder-scheduler

scheduler 通過調(diào)度算法選擇最合適的存儲節(jié)點創(chuàng)建 volume瑟捣。 創(chuàng)建 Volume 時馋艺,cinder-scheduler 會基于容量、Volume Type 等條件選擇出最合適的存儲節(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 各個子服務通過消息隊列實現(xiàn)進程間通信和相互協(xié)作窿给。因為有了消息隊列,子服務之間實現(xiàn)了解耦率拒,這種松散的結(jié)構(gòu)也是分布式系統(tǒng)的重要特征崩泡。

Database Cinder

有一些數(shù)據(jù)需要存放到數(shù)據(jù)庫中,一般使用 MySQL猬膨。數(shù)據(jù)庫是安裝在控制節(jié)點上的枝誊,比如在我們的實驗環(huán)境中竭望,可以訪問名稱為“cinder”的數(shù)據(jù)庫。

image.png

物理部署方案

Cinder 的服務會部署在兩類節(jié)點上,控制節(jié)點和存儲節(jié)點止剖。我們來看看控制節(jié)點 controller 上都運行了哪些 cinder-* 子服務亚茬。

image.png

cinder-api 和 cinder-scheduler 部署在控制節(jié)點上般渡,這個很合理蚕脏。

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

要回答這個問題污它,首先要搞清楚一個事實: OpenStack 是分布式系統(tǒng)剖踊,其每個子服務都可以部署在任何地方,只要網(wǎng)絡(luò)能夠連通衫贬。無論是哪個節(jié)點德澈,只要上面運行了 cinder-volume,它就是一個存儲節(jié)點固惯,當然梆造,該節(jié)點上也可以運行其他 OpenStack服務。

cinder-volume 是一頂存儲節(jié)點帽子葬毫,cinder-api 是一頂控制節(jié)點帽子镇辉。在我們的環(huán)境中,devstack-controller 同時戴上了這兩頂帽子贴捡,所以它既是控制節(jié)點忽肛,又是存儲節(jié)點。當然烂斋,我們也可以用一個專門的節(jié)點來運行 cinder-volume屹逛。

這再一次展示了 OpenStack 分布式架構(gòu)部署上的靈活性: 可以將所有服務都放在一臺物理機上,用作一個 All-in-One 的測試環(huán)境汛骂;而在生產(chǎn)環(huán)境中可以將服務部署在多臺物理機上罕模,獲得更好的性能和高可用。

RabbitMQ 和 MySQL 通常放在控制節(jié)點上帘瞭。另外淑掌,也可以用 cinder service list 查看 cinder-* 子服務都分布在哪些節(jié)點上

image.png

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

一般來講蝶念,volume provider 是獨立的抛腕。cinder-volume 使用 driver 與 volume provider 通信并協(xié)調(diào)工作诈悍。所以只需要將 driver 與 cinder-volume 放到一起就可以了。在 cinder-volume 的源代碼目錄下有很多 driver兽埃,支持不同的 volume provider。

image.png

后面我們會以 LVM 和 NFS 這兩種 volume provider 為例討論 cinder-volume 的使用适袜,其他 volume provider 可以查看 OpenStack 的 configuration 文檔柄错。

二、 Cinder 的設(shè)計思想:

從 volume 創(chuàng)建流程看 cinder- 子服務如何協(xié)同工作*

對于 Cinder 學習來說苦酱,Volume 創(chuàng)建是一個非常好的場景售貌,涉及各個 cinder-* 子服務,下面是流程圖:

image.png
  • 客戶(可以是 OpenStack 最終用戶疫萤,也可以是其他程序)向 API(cinder-api)發(fā)送請求:“幫我創(chuàng)建一個 volume”

  • API 對請求做一些必要處理后颂跨,向 Messaging(RabbitMQ)發(fā)送了一條消息:“讓 Scheduler 創(chuàng)建一個 volume”

  • Scheduler(cinder-scheduler)從 Messaging 獲取到 API 發(fā)給它的消息,然后執(zhí)行調(diào)度算法扯饶,從若干計存儲點中選出節(jié)點 A

  • Scheduler 向 Messaging 發(fā)送了一條消息:“讓存儲節(jié)點 A 創(chuàng)建這個 volume”

  • 存儲節(jié)點 A 的 Volume(cinder-volume)從 Messaging 中獲取到 Scheduler 發(fā)給它的消息恒削,然后通過 driver 在 volume provider 上創(chuàng)建 volume。

Cinder 的設(shè)計思想

Cinder 延續(xù)了 Nova 的以及其他組件的設(shè)計思想尾序。

API 前端服務

cinder-api 作為 Cinder 組件對外的唯一窗口钓丰,向客戶暴露 Cinder 能夠提供的功能,當客戶需要執(zhí)行 volume 相關(guān)的操作每币,能且只能向 cinder-api 發(fā)送 REST 請求携丁。這里的客戶包括終端用戶、命令行和 OpenStack 其他組件兰怠。

設(shè)計 API 前端服務的好處在于:

  1. 對外提供統(tǒng)一接口梦鉴,隱藏實現(xiàn)細節(jié)

  2. API 提供 REST 標準調(diào)用服務,便于與第三方系統(tǒng)集成

  3. 可以通過運行多個 API 服務實例輕松實現(xiàn) API 的高可用揭保,比如運行多個 cinder-api 進程

Scheduler 調(diào)度服務

Cinder 可以有多個存儲節(jié)點肥橙,當需要創(chuàng)建 volume 時,cinder-scheduler 會根據(jù)存儲節(jié)點的屬性和資源使用情況選擇一個最合適的節(jié)點來創(chuàng)建 volume掖举。

調(diào)度服務就好比是一個開發(fā)團隊中的項目經(jīng)理快骗,當接到新的開發(fā)任務時,項目經(jīng)理會根據(jù)任務的難度塔次,每個團隊成員目前的工作負荷和技能水平方篮,將任務分配給最合適的開發(fā)人員。

Worker 工作服務

調(diào)度服務只管分配任務励负,真正執(zhí)行任務的是 Worker 工作服務藕溅。

在 Cinder 中,這個 Worker 就是 cinder-volume 了继榆。這種 Scheduler 和 Worker 之間職能上的劃分使得 OpenStack 非常容易擴展:當存儲資源不夠時可以增加存儲節(jié)點(增加 Worker)巾表。 當客戶的請求量太大調(diào)度不過來時汁掠,可以增加 Scheduler。

Driver 框架

OpenStack 作為開放的 Infrastracture as a Service 云操作系統(tǒng)集币,支持業(yè)界各種優(yōu)秀的技術(shù)考阱,這些技術(shù)可能是開源免費的,也可能是商業(yè)收費的鞠苟。

這種開放的架構(gòu)使得 OpenStack 保持技術(shù)上的先進性乞榨,具有很強的競爭力,同時又不會造成廠商鎖定(Lock-in)当娱。 那 OpenStack 的這種開放性體現(xiàn)在哪里呢吃既?一個重要的方面就是采用基于 Driver 的框架。

以 Cinder 為例跨细,存儲節(jié)點支持多種 volume provider鹦倚,包括 LVM, NFS, Ceph, GlusterFS,以及 EMC, IBM 等商業(yè)存儲系統(tǒng)冀惭。 cinder-volume 為這些 volume provider 定義了統(tǒng)一的 driver 接口震叙,volume provider 只需要實現(xiàn)這些接口,就可以 driver 的形式即插即用到 OpenStack 中散休。下面是 cinder driver 的架構(gòu)示意圖:

image.png

在 cinder-volume 的配置文件 /etc/cinder/cinder.conf 中 volume_driver 配置項設(shè)置該存儲節(jié)點使用哪種 volume provider 的 driver捐友,下面的示例表示使用的是 LVM。

image.png

三溃槐、 Cinder 的配置文件(主要修改信息):
vim /etc/cinder/cinder.conf

[DEFAULT]
本機的IP地址
my_ip = 172.16.254.63
(存儲節(jié)點)glance的主配置程序的地址
glance_api_servers = [http://controller:9292](http://controller:9292/)
認證策略
auth_strategy = keystone
(存儲節(jié)點)打開后端節(jié)點的lvm
enabled_backends = lvm
rabbit消息列隊的用戶和密碼以及控制端ip
transport_url = [rabbit://openstack:admin@controller](rabbit://openstack:admin@controller/)

[backend]

[barbican]

[brcd_fabric_example]

[cisco_fabric_example]

[coordination]

[cors]

[cors.subdomain]

[database]
遠程登錄數(shù)據(jù)庫配置
connection = mysql+[pymysql://cinder:CINDER_DBPASS@controller/cinder](pymysql://cinder:CINDER_DBPASS@controller/cinder)

[fc-zone-manager]

[healthcheck]

[key_manager]

[keystone_authtoken](主控制和存儲都要配置)
keystone外部服務端口地址
auth_uri = [http://controller:5000](http://controller:5000/)
keystone管理服務端口地址
auth_url = [http://controller:35357](http://controller:35357/)
緩存服務端口地址
memcached_servers = controller:11211

auth_type = password

project_domain_name = default

user_domain_name = default

project_name = service

username = cinder

password = cinder

[matchmaker_redis]

[oslo_concurrency]

lock_path = /var/lib/cinder/tmp

[oslo_messaging_amqp]

[oslo_messaging_kafka]

[oslo_messaging_notifications]

[oslo_messaging_rabbit]

[oslo_messaging_zmq]

[oslo_middleware]

[oslo_policy]

[oslo_reports]

[oslo_versionedobjects]

[profiler]

[ssl]

[lvm](存儲節(jié)點配置)
卷組的驅(qū)動對接方式
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
卷組名匣砖,跟創(chuàng)建的卷組保持一致
volume_group = cinder-vg
卷組的保存位置
volumes_dir = $state_path/volumes
iscsi協(xié)議傳輸數(shù)據(jù)
iscsi_protocol = iscsi
連接方式
iscsi_helper = lioadm
存儲節(jié)點的ip地址
iscsi_ip_address = 172.16.254.63

四、 Cinder 的配置文件(原版)

[DEFAULT]

my_ip = 172.16.254.63

glance_api_servers = [http://controller:9292](http://controller:9292/)

auth_strategy = keystone

enabled_backends = lvm

transport_url = [rabbit://openstack:admin@controller](rabbit://openstack:admin@controller/)

[backend]

[barbican]

[brcd_fabric_example]

[cisco_fabric_example]

[coordination]

[cors]

[cors.subdomain]

[database]

connection = mysql+[pymysql://cinder:CINDER_DBPASS@controller/cinder](pymysql://cinder:CINDER_DBPASS@controller/cinder)

[fc-zone-manager]

[healthcheck]

[key_manager]

[keystone_authtoken]

auth_uri = [http://controller:5000](http://controller:5000/)

auth_url = [http://controller:35357](http://controller:35357/)

memcached_servers = controller:11211

auth_type = password

project_domain_name = default

user_domain_name = default

project_name = service

username = cinder

password = cinder

[matchmaker_redis]

[oslo_concurrency]

lock_path = /var/lib/cinder/tmp

[oslo_messaging_amqp]

[oslo_messaging_kafka]

[oslo_messaging_notifications]

[oslo_messaging_rabbit]

[oslo_messaging_zmq]

[oslo_middleware]

[oslo_policy]

[oslo_reports]

[oslo_versionedobjects]

[profiler]

[ssl]

[lvm]

volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver

volume_group = cinder-vg

volumes_dir = $state_path/volumes

iscsi_protocol = iscsi

iscsi_helper = lioadm

iscsi_ip_address = 172.16.254.63

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昏滴,一起剝皮案震驚了整個濱河市猴鲫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谣殊,老刑警劉巖拂共,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異姻几,居然都是意外死亡宜狐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門蛇捌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抚恒,“玉大人,你說我怎么就攤上這事络拌〖笸裕” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵春贸,是天一觀的道長混萝。 經(jīng)常有香客問我遗遵,道長,這世上最難降的妖魔是什么逸嘀? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任车要,我火速辦了婚禮,結(jié)果婚禮上崭倘,老公的妹妹穿的比我還像新娘屯蹦。我一直安慰自己,他們只是感情好绳姨,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阔挠,像睡著了一般飘庄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上购撼,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天跪削,我揣著相機與錄音,去河邊找鬼迂求。 笑死碾盐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的揩局。 我是一名探鬼主播毫玖,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼凌盯!你這毒婦竟也來了付枫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤驰怎,失蹤者是張志新(化名)和其女友劉穎阐滩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體县忌,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡掂榔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了症杏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片装获。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖厉颤,靈堂內(nèi)的尸體忽然破棺而出饱溢,到底是詐尸還是另有隱情,我是刑警寧澤走芋,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布绩郎,位于F島的核電站潘鲫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏肋杖。R本人自食惡果不足惜溉仑,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望状植。 院中可真熱鬧浊竟,春花似錦、人聲如沸津畸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肉拓。三九已至后频,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間暖途,已是汗流浹背卑惜。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驻售,地道東北人露久。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像欺栗,于是被迫代替她去往敵國和親毫痕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容