1. 程式人生 > 實用技巧 >掌握 cinder-scheduler 排程邏輯 - 每天5分鐘玩轉 OpenStack(48)

掌握 cinder-scheduler 排程邏輯 - 每天5分鐘玩轉 OpenStack(48)

掌握 cinder-scheduler 排程邏輯 - 每天5分鐘玩轉 OpenStack(48)

wKiom1h8xyGxX8X5AAExnHl4pkw330.jpg

上一節我們詳細討論了 cinder-api 和 cinder-volume,今天討論另一個重要的 Cinder 元件 cinder-scheduler。

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

下面介紹 cinder-scheduler 是如何實現這個排程工作的。

在 /etc/cinder/cinder.conf 中,cinder 通過 scheduler_driver, scheduler_default_filters 和 scheduler_default_weighers 這三個引數來配置 cinder-scheduler。

Filter scheduler

Filter scheduler 是 cinder-scheduler 預設的排程器。

scheduler_driver=cinder.scheduler.filter_scheduler.FilterScheduler

與 Nova 一樣,Cinder 也允許使用第三方 scheduler,配置 scheduler_driver 即可。

scheduler 排程過程如下:

  1. 通過過濾器(filter)選擇滿足條件的儲存節點(執行 cinder-volume)

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

可見,cinder-scheduler 的執行機制與 nova-scheduler 完全一樣。

Filter

當 Filter scheduler 需要執行排程操作時,會讓 filter 對計算節點進行判斷,filter 返回 True 或者 False。

cinder.conf 中 scheduler_default_filters 選項指定 filter scheduler 使用的 filter,預設值如下:

scheduler_default_filters = AvailabilityZoneFilter, CapacityFilter, CapabilitiesFilter

Filter scheduler 將按照列表中的順序依次過濾:

AvailabilityZoneFilter

為提高容災性和提供隔離服務,可以將儲存節點和計算節點劃分到不同的 Availability Zone 中。例如把一個機架上的機器劃分在一個 Availability Zone 中。OpenStack 預設有一個命名為“Nova” Availability Zone 的,所有的節點初始都是放在“Nova”中。使用者可以根據需要建立自己的 Availability Zone。

wKioL1h8xzjg4qhoAACNM9Ok_0o062.jpg

建立 Volume 時,需要指定 Volume 所屬的 Availability Zone。

wKioL1h8x0rgwwq3AAAnIHdTJHI046.jpg

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

CapacityFilter

建立 Volume 時,使用者會指定 Volume 的大小。CapacityFilter 的作用是將儲存空間不能滿足 Volume 建立需求的儲存節點過濾掉。
wKiom1h8x16xrGdFAAAPV2nj02I662.jpg

CapabilitiesFilter

不同的 Volume Provider 有自己的特性(Capabilities),比如是否支援 thin provision 等。Cinder 允許使用者建立 Volume 時通過 Volume Type 指定需要的 Capabilities。
wKioL1h8x27j3fYkAAAQJUfBCRw136.jpg

Volume Type 可以根據需要定義若干 Capabilities,詳細描述 Volume 的屬性。VolumeVolume Type 的作用與 Nova 的 flavor 類似。

Volume Type 在 Admin -> System -> Volume 選單裡管理

wKiom1h8x4DyfdWHAAA1xoug1_0685.jpg

通過 Volume Type 的 Extra Specs 定義 Capabilities

wKioL1h8x5OhQ_wjAAAVDWSWoZk213.jpg

Extra Specs 是用 Key-Value 的形式定義。 不同的 Volume Provider 支援的 Extra Specs 不同,需要參考 Volume Provider 的文件。

wKiom1h8x6aBpuPkAAAiPxwzt48407.jpg

上圖所示的 Volume Type 只有一個 Extra Specs “volume_backend_name”,這是最重要也是必須的 Extra Specs。

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。

如果在第一步 filtering 環節選出了多個儲存節點,那麼接下來的 weighting 環節會挑選出最合適的一個節點。

Weighter

Filter Scheduler 通過 scheduler_default_weighers 指定計算權重的 weigher,預設為 CapacityWeigher。

scheduler_default_weighers = CapacityWeigher

如命名所示,CapacityWeigher 基於儲存節點的空閒容量計算權重值,空閒容量最大的勝出。

下一節我們將開始通過各種場景學習 Cinder。

轉載於:https://blog.51cto.com/xiaoqinglang/1892407