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

8c4bfc6514c8e93293a8da928061ea602b2.jpg

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

543c49f70184e5cc76d91d86869d9d7a7a4.jpg

二、nova/scheduler/filter_scheduler.py文件

9c4b76b0175c2f8183cc482121d56aaf642.jpg

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

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

三、_schedule函数

41a0d52e30f5e10a236476b2b97bf56793a.jpg

94行,加载json文件可以在json文件里配置过滤规则,现在m版json文件没起作用。

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

112行,进行主机过滤

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

四、nova/scheduler/host_manager.py文件

0ca9c08563680e062c64a063c97dec4b044.jpg

get_filtered_host函数中参数filter_class_names传进来的值是None,进入517分支

517行,filters是所有过滤器类名字的列表,由self._choose_host_filters函数返回

b3e4a7190ac8f371d58a6231cfebbab20df.jpg

_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文件

d46ce2e0b1c9354a2862e0e7b371639a1e0.jpg

81行,循环调用过滤器

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

49a33905113c6b3ae23ddd75c47c74ca755.jpg

 

转载于:https://my.oschina.net/u/2326998/blog/2964231

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值