cinder是openstack中提供塊存儲服務的組件,主要是爲虛擬機實例提供虛擬磁盤。
mysql
經過某種協議(SAS,SCSI,SAN,iSCSI等)掛接裸硬盤,而後分區、格式化建立的文件,或者直接使用裸硬盤存儲數據的方式叫作塊存儲,每一個裸硬盤一般也叫作Volume(卷)。
算法經過nfs,cifs等協議,須要掛載的遠程文件系統,叫作文件系統存儲。sql
1、理解塊存儲服務數據庫
在openstack中提供對卷從建立到刪除整個生命週期的管理,從虛擬機實例的角度來看,掛載的每個卷都是一塊硬盤。openstack提供塊存儲服務的是cinder,具體功能以下:後端
提供api使用戶可以查詢和管理卷、卷快照以及卷類型
api
提供scheuler調度卷建立請求,合理優化存儲資源的分配bash
經過driver架構支持多種後端存儲方式架構
1)cinder-apiide
接收api請求,調用cinder-volume
優化
2)cindere-volume
管理卷的服務,與volume provider協調工做,管理volume的生命週期,運行cinder-volum的服務的節點被稱做爲存儲節點
3)cinder-scheduler
scheduler經過調度算法選擇最合適的存儲節點建立卷
4)volume provider
數據的存儲設備,爲volume提供物理存儲空間
5)Message Queue
cinder 各個子服務經過消息列隊實現進程間通訊和相互協做
6)database
存儲cinder一些數據庫,通常使用mysql
2、cinder流程
1)用戶 向 API 發送請求
2)api對請求作一些必要的處理後,向messaging(rabbitmq)發送信息,讓scheduler建立一個volume
3) scheduler從messaging獲取到api發送的消息,而後執行調度算法,從若干存儲節點選出節點A
4) scheduler向messaging發送一條消息,讓存儲節點建立volume
5)存儲節點的volume 從messaging中獲取到scheduler發給它的消息,而後經過driver在volume provider上建立volume
3、cinder組件詳解
一、cinder-api
cinder-api是整個cinder組件的門戶,全部的cinder的請求都首先由nova-api處理,它向外界暴露了若干HTTP REST API接口,在kesystone中能夠查詢到cinder-api的endpoints.
openstack endpoint list --service cinder
客戶端能夠將請求發送到endponits指定的地址,向cinder-api請求操做,大部分的api請求均可以在dashboard上進行
cinder-api對接收到的http api請求會作以下處理:
檢查客戶端傳入的參數是否合法有效
調用cinder其餘子服務的處理客戶端請求
將cinder其餘子服務返回的結果序列號返回給客戶端
二、cinder-scheduler
建立volume時,cinder-scheduler會基於容量、volume type等條件選擇出最合適的存儲節點,而後讓其建立volume
(1)filter scheduler
filter scheduler是cinder-schedule默認的調度器
在/etc/cinder/cinder.conf中,cinder經過schedulerdriver,schedulerdefault_filters和scheduler defaultweighers三個參數來配置cinder-scheuler
scheduler調度過程以下:
經過過濾器(filter)選擇知足條件的存儲節點
經過權重計算(weighting)選擇最優(權重最大)的存儲節點
(2)filter
當filter scheduler須要執行調度操做時,會讓filter對計算節點進行判斷,filter返回true或者false
配置文件中schedulerdefaultfilters選項指定filter scheduler使用的filter,默認以下
filter scheduler將按照列表中順序依次過濾
<1> AvailabilityZoneFilter
爲提升容災性和提供隔離服務,能夠將存儲節點和計算節點劃分不一樣Availability zone,建立volume時,須要指定volume所屬的availability zone
在過濾時,會將使用AvailabilityZoneFilter將不屬於指定AvailabilityZone的存儲節點過濾掉
<2>CapacityFilter
建立volume時,用戶會指定volume的大小。CapactiyFilter的做用時將存儲空間不能知足volume建立需求的存儲節點過濾掉
<3>CapabilitiesFilter
不一樣的Volume Provider有本身的特性,用戶經過建立volume時指定類型所須要的類型。
volume類型能夠在管理員-系統-卷菜單中進行管理指定
(3)weighter
Filter Scheduler經過scheduler_default_weighers指定計算權重的weigher,默認爲CapacityWeigher
三、cinder-volume
openstack上對volume的操做,最後都是交給cinder-volume來完成的。
cinder-volume自身並無論理整整的存儲設備,存儲設備是由volume provider管理的,cinder-volume與volume provider一塊兒實現volume生命週期管理,它經過dirver架構支持多種volume provider.
cinder-volume爲這些volume provider 定義了統一的接口,volume provider只須要實現這些接口,就能夠Driver的形式即插即用到openstack系統中。
在存儲節點的配置文件/etc/cinder/cinder.conf中使用volume_driver選項配置使用的driver
默認是使用LVM 邏輯卷
cinder-volume會按期向cinder報告,從而讓cinder確認得知每一個存儲節點的空閒容量信息
cinder對volume的生命週期管理最終都是經過cinder-volume完成的,包括volume的create,extend,attach,snapshot,delete等