您好,登錄后才能下訂單哦!
cinder是openstack中提供塊存儲服務的組件,主要是為虛擬機實例提供虛擬磁盤。
通過某種協議(SAS,SCSI,SAN,iSCSI等)掛接裸硬盤,然后分區、格式化創建的文件,或者直接使用裸硬盤存儲數據的方式叫做塊存儲,每個裸硬盤通常也叫做Volume(卷)。
通過nfs,cifs等協議,需要掛載的遠程文件系統,叫做文件系統存儲。
一、理解塊存儲服務
在openstack中提供對卷從創建到刪除整個生命周期的管理,從虛擬機實例的角度來看,掛載的每一個卷都是一塊硬盤。openstack提供塊存儲服務的是cinder,具體功能如下:
提供api使用戶能夠查詢和管理卷、卷快照以及卷類型
提供scheuler調度卷創建請求,合理優化存儲資源的分配
通過driver架構支持多種后端存儲方式
1)cinder-api
接收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
二、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
三、cinder組件詳解
1、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其他子服務返回的結果序列號返回給客戶端
2、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
3、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等
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。