cinder create volume的流程-scheduler調度

建立 Volume 時,cinder-scheduler 會基於容量、Volume Type 等條件選擇出最合適的存儲節點,而後讓其建立 Volume。ide

一、cinder-scheduler配置相關項spa

在/etc/cinder/cinder.conf文件中,cinder 經過 scheduler_driver, scheduler_default_filters 和scheduler_default_weighers ,這三個參數來配置 cinder-scheduler。命令行

# Options defined in cinder.scheduler.driver
選項在cinder.scheduler.driver.py文件中定義

# The scheduler host manager class to use (string value)
#scheduler_host_manager=cinder.scheduler.host_manager.HostManager
# Maximum number of attempts to schedule an volume (integer
# value)
#scheduler_max_attempts=3

# Options defined in cinder.scheduler.host_manager
選項在cinder.scheduler.host_manager.py文件中定義
# Which filter class names to use for filtering hosts when not specified in the request. (list value)
在請求中沒有指定過濾類時,使用的過濾方法
#scheduler_default_filters=AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter

權重主機時,使用的權重類
# Which weigher class names to use for weighing hosts. (list
# value)
#scheduler_default_weighers=CapacityWeigher


# Options defined in cinder.scheduler.manager
選項在cinder.scheduler.manager.py文件中定義
默認的調度驅動程序
# Default scheduler driver to use (string value)
#scheduler_driver=cinder.scheduler.filter_scheduler.FilterScheduler

二、scheduler調度程序code

FilterScheduler是 cinder-scheduler 默認的調度器。與 Nova 同樣,Cinder 也容許使用第三方 scheduler,配置 scheduler_driver 便可。blog

scheduler 調度過程以下:ip

1)經過過濾器(filter)選擇知足條件的存儲節點(運行 cinder-volume的節點)ci

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

 

三、fiter過濾器it

當 FilterScheduler執行調度操做時,會讓 filter 對存儲節點進行判斷,filter 返回 True 或者 False。fiter能夠同時指定多個。cinder.conf 中 scheduler_default_filters 選項指定 filter scheduler 使用的 filter,默認值爲:scheduler_default_filters = AvailabilityZoneFilter, CapacityFilter, CapabilitiesFilterio

FilterScheduler 將按照上面的順序依次過濾:

1)AvailabilityZoneFilter

爲提升容災性和提供隔離服務,能夠將存儲節點和計算節點劃分到不一樣的 Availability Zone 中。例如把一個機架上的機器劃分在一個 Availability Zone 中。OpenStack 默認有一個命名爲「Nova」的 Availability Zone,全部的節點初始都是放在「Nova」中。用戶能夠根據須要建立本身的 Availability Zone。

建立 Volume 時,指定 Volume 所屬的 Availability Zone。cinder-scheduler 在作 filtering 時,會使用 AvailabilityZoneFilter 將不屬於指定 Availability Zone 的存儲節點過濾掉。

建立volume指定az參數的命令行

#cinder help create
Creates a volume.
Positional arguments:
  <size>                Volume size, in GBs.
Optional arguments:
  --snapshot-id <snapshot-id>
                        Creates volume from snapshot ID. Default=None.
  --source-volid <source-volid>
                        Creates volume from volume ID. Default=None.
  --image-id <image-id>
                        Creates volume from image ID. Default=None.
  --display-name <display-name>
                        Volume name. Default=None.
  --display-description <display-description>
                        Volume description. Default=None.
  --volume-type <volume-type>
                        Volume type. Default=None.
  --availability-zone <availability-zone>
                        Availability zone for volume. Default=None.
  --metadata [<key=value> [<key=value> ...]]
                        Metadata key and value pairs. Default=None.

2)CapacityFilter

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

3)CapabilitiesFilter

不一樣的 Volume 提供者 有本身的特性(Capabilities),好比是否支持 thin provision 等。Cinder 容許用戶建立 Volume 時經過 Volume Type 指定須要的 Capabilities。

# cinder help create
Creates a volume.
Positional arguments:
  <size>                Volume size, in GBs.

Optional arguments:
  --snapshot-id <snapshot-id>
                        Creates volume from snapshot ID. Default=None.
  --source-volid <source-volid>
                        Creates volume from volume ID. Default=None.
  --image-id <image-id>
                        Creates volume from image ID. Default=None.
  --display-name <display-name>
                        Volume name. Default=None.
  --display-description <display-description>
                        Volume description. Default=None.
  --volume-type <volume-type>
                        Volume type. Default=None.
  --availability-zone <availability-zone>
                        Availability zone for volume. Default=None.
  --metadata [<key=value> [<key=value> ...]]
                        Metadata key and value pairs. Default=None.

Volume Type 能夠根據須要定義若干 Capabilities,詳細描述 Volume 的屬性。Volume Type 的做用與 Nova 的 flavor 相似。

首先建立volume type,命令行以下:

# cinder help type-create
usage: cinder type-create <name>
Creates a volume type.
Positional arguments:
  <name>  Name for the volume type.

而後經過 Volume Type 的 Extra Specs 定義 Capabilities。Extra Specs 是用 Key-Value 的形式定義。 不一樣的 Volume Provider 支持的 Extra Specs 不一樣。Extra Specs最重要也是必須的 是volume_backend_name。cinder-volume 服務會在本身的配置文件 /etc/cinder/cinder.conf 中設置「volume_backend_name」這個參數,其做用是爲存儲節點的 Volume Provider 命名。這樣,CapabilitiesFilter 就能夠經過 Volume Type 的「volume_backend_name」參數篩選出指定的 Volume Provider。不一樣的存儲節點能夠在各自的 cinder.conf 中配置相同的 volume_backend_name,這是容許的。由於雖然存儲節點不一樣,但它們可能使用的是一種 Volume Provider。

對應命令行以下:

# cinder help type-key
usage: cinder type-key <vtype> <action> [<key=value> [<key=value> ...]]
Sets or unsets extra_spec for a volume type.
Positional arguments:
  <vtype>      Name or ID of volume type.
  <action>     The action. Valid values are 'set' or 'unset.'
  <key=value>  The extra specs key and value pair to set or unset. For unset,
               specify only the key. Default=None.

四、Weighter 權重

若是在第一步 filter選出了多個存儲節點,那麼在 weighting 環節會挑選出最合適的一個節點。Filter Scheduler 經過 scheduler_default_weighers 指定計算權重的 weigher,默認爲 CapacityWeigher。

總結就是,先定義調度程序,調度程序,又須要作兩件事,先作過濾,最後作權重。

參考文章:https://mp.weixin.qq.com/s/0fQROpXiQ2d8_c_VeWPHeQ

相關文章
相關標籤/搜索