讀古今文學網 > OpenStack系統架構設計實戰 > 3.3 cinder-scheduler >

3.3 cinder-scheduler

cinder-scheduler服務是Cinder的調度服務,主要功能是通過一定的調度算法選擇合適的後端存儲節點以放置新創建的卷。

在Folsom版本中,cinder-scheduler服務只是實現了簡單調度(Simple Scheduler)算法和隨機調度(Chancer Scheduler)算法。簡單調度算法就是獲取活動的卷服務節點,按剩餘容量從小到大排列,選擇剩餘容量最多的Host節點;隨機調度算法就是在滿足條件的節點中隨機挑選出一個Host節點。

在G版本後有了基於濾波和權重的新調度策略FilterScheduler,其工作原理如圖3-3所示。首先使用一個指定的過濾器過濾後得到符合條件的cinder-volume節點,然後對列表中cinder-volume的節點計算權重並進行排序,獲得最佳的一個Host節點。在圖3-3中,排序後最優節點是Host3,次優節點是Host5,最差節點是Host6。

圖3-3 FilterScheduler的工作原理

cinder-scheduler服務提供了調度重試機制,在通過排序挑選出最優的Host節點後,將創建卷的消息發送給該節點,並由該節點的cinder-volume服務來處理。如果該節點的cinder-volume服務在處理過程中由於某些條件不滿足而導致返回錯誤結果,cinder-scheduler將選擇次優Host節點重試。最大可重試次數默認是3次,並且可以設置。

cinder-scheduler實現了多種Filter和Weighter的算法。所有的Filter實現都在cinder/scheduler/filters目錄中,所有的Weighter的實現在cinder/scheduler/weighters目錄中。

具體的Filter有如下幾種。

·Availability Zone Filter:在指定的Zone中選擇Host。

·Retry Filter:在沒有重試過的Host中重新進行調度。

·JsonFilter:允許應用以Json的形式寫出比較複雜的查詢Host的表達式。

·CapabilitiesFilter:在一個由各種類型存儲組合(LVM、Ceph等)的存儲系統中選擇某種存儲類型。

·CapacityFilter:容量過濾,只選擇那些剩餘容量大於要創建的卷的大小的Host。

當然也可以自己創建一個新的Filter。首先要實現一個類,繼承自BaseHostFilter類;實現的類中調用一個host_passes()函數,該函數以filter_properties和host_state為參數;結果返回true或者false兩種結果;然後在cinder.conf文件中額外增加--scheduler_available_filters=myfilter.MYFILTER配置項。