openstack-理解cinder服務

    cinder是openstack中提供塊存儲服務的組件,主要是爲虛擬機實例提供虛擬磁盤。
mysql

經過某種協議(SAS,SCSI,SAN,iSCSI等)掛接裸硬盤,而後分區、格式化建立的文件,或者直接使用裸硬盤存儲數據的方式叫作塊存儲,每一個裸硬盤一般也叫作Volume(卷)。
算法

經過nfs,cifs等協議,須要掛載的遠程文件系統,叫作文件系統存儲。sql

1、理解塊存儲服務數據庫

    在openstack中提供對卷從建立到刪除整個生命週期的管理,從虛擬機實例的角度來看,掛載的每個卷都是一塊硬盤。openstack提供塊存儲服務的是cinder,具體功能以下:後端


    提供api使用戶可以查詢和管理卷、卷快照以及卷類型
api

    提供scheuler調度卷建立請求,合理優化存儲資源的分配bash

    經過driver架構支持多種後端存儲方式架構

image.png



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流程

image.png


    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

image.png

 客戶端能夠將請求發送到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

image.png

scheduler調度過程以下:

經過過濾器(filter)選擇知足條件的存儲節點

經過權重計算(weighting)選擇最優(權重最大)的存儲節點


(2)filter

當filter scheduler須要執行調度操做時,會讓filter對計算節點進行判斷,filter返回true或者false

配置文件中schedulerdefaultfilters選項指定filter scheduler使用的filter,默認以下

image.png

filter scheduler將按照列表中順序依次過濾

<1> AvailabilityZoneFilter

爲提升容災性和提供隔離服務,能夠將存儲節點和計算節點劃分不一樣Availability zone,建立volume時,須要指定volume所屬的availability zone

image.png

在過濾時,會將使用AvailabilityZoneFilter將不屬於指定AvailabilityZone的存儲節點過濾掉


<2>CapacityFilter

建立volume時,用戶會指定volume的大小。CapactiyFilter的做用時將存儲空間不能知足volume建立需求的存儲節點過濾掉

image.png

<3>CapabilitiesFilter

不一樣的Volume Provider有本身的特性,用戶經過建立volume時指定類型所須要的類型。

volume類型能夠在管理員-系統-卷菜單中進行管理指定

image.png


(3)weighter

Filter  Scheduler經過scheduler_default_weighers指定計算權重的weigher,默認爲CapacityWeigher

image.png



三、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系統中。


image.png



在存儲節點的配置文件/etc/cinder/cinder.conf中使用volume_driver選項配置使用的driver

image.png

默認是使用LVM 邏輯卷


cinder-volume會按期向cinder報告,從而讓cinder確認得知每一個存儲節點的空閒容量信息

image.png


cinder對volume的生命週期管理最終都是經過cinder-volume完成的,包括volume的create,extend,attach,snapshot,delete等

相關文章
相關標籤/搜索