1. 程式人生 > >nova-scheduler模組排程過程分析

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類說明呼叫關係