nova-scheduler模块调度过程分析

openstack在建立虚拟机或进行虚拟机的冷迁移时根据在nova.conf文件中scheduler_default_filters和scheduler_available_filters配置的过滤器,数据库

对主机进行筛选,选择合适的目的主机。json

本文根据nova M版源码分析调度不一样过滤器的过程。函数

1、conductor服务经过rpc调用scheduler服务 SchedulerManager类的select_destinations,由此开始进入进入主机过滤阶段,源码分析

       此阶段主要目的是调用事先在nova.conf文件中配置的过滤器,选择合适的计算节点。3d

文件nova/scheduler/manager.pyblog

104行,self.driver实际是在nova.conf文件中配置的FileterScheduler排序

2、nova/scheduler/filter_scheduler.py文件rpc

52行,num_instances是要选择的计算节点数。get

53行,self._schedule是实际的调度函数,在此函数中调度各个过滤器的函数。源码

3、_schedule函数

94行,加载json文件能够在json文件里配置过滤规则,如今m版json文件没起做用。

104行,在过滤以前首先要从数据库拿到全部计算节点的的当前状态。

112行,进行主机过滤

120行,拿到过滤的主机计算权重,并返回根据权重排序的列表。

4、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是全部的计算节点。

5、nova/filters.py文件

81行,循环调用过滤器

85行,调用过滤器类的filter_all方法,对主机进行筛选,以AvailabilityZoneFilter类说明调用关系

相关文章
相关标签/搜索