nova-scheduler模組排程過程分析
openstack在建立虛擬機器或進行虛擬機器的冷遷移時根據在nova.conf檔案中scheduler_default_filters和scheduler_available_filters配置的過濾器,
對主機進行篩選,選擇合適的目的主機。
本文根據nova M版原始碼分析排程不同過濾器的過程。
一、conductor服務通過rpc呼叫scheduler服務 SchedulerManager類的select_destinations,由此開始進入進入主機過濾階段,
此階段主要目的是呼叫事先在nova.conf檔案中配置的過濾器,選擇合適的計算節點。
檔案nova/scheduler/manager.py
104行,self.driver實際是在nova.conf檔案中配置的FileterScheduler
二、nova/scheduler/filter_scheduler.py檔案
52行,num_instances是要選擇的計算節點數。
53行,self._schedule是實際的排程函式,在此函式中排程各個過濾器的函式。
三、_schedule函式
94行,載入json檔案可以在json檔案裡配置過濾規則,現在m版json檔案沒起作用。
104行,在過濾之前首先要從資料庫拿到所有計算節點的的當前狀態。
112行,進行主機過濾
120行,拿到過濾的主機計算權重,並返回根據權重排序的列表。
四、nova/scheduler/host_manager.py檔案
get_filtered_host函式中引數filter_class_names傳進來的值是None,進入517分支
517行,filters是所有過濾器類名字的列表,由self._choose_host_filters函式返回
_choose_host_filters(),函式根據nova.conf檔案中的scheduler_default_filters和scheduler_available_filters挑選出要使用的過濾器
self._load_filters()載入nova.conf檔案中的scheduler_default_filters項,預設在nova/scheduler/filters下的全部過濾器都開啟。
545行,呼叫nova/filters.py檔案中BaseFilterHandler::get_filtered_objects,引數filters是要使用的過濾器類列表,hosts是所有的計算節點。
五、nova/filters.py檔案
81行,迴圈呼叫過濾器
85行,呼叫過濾器類的filter_all方法,對主機進行篩選,以AvailabilityZoneFilter類說明呼叫關係