Filter Scheduler 是用来判断一个vm应该在哪一台主机上面创建。一台主机选出来被要经历你filters 和weights两个过程。
1 filtering
分类器大致分为2类:主机分类器和cell分类器,主机分类器需要重写hostpass() ,cell分类器需重写cellpass()
用筛选属性,将不符合属性要求的主机筛选掉。选择策略有很多:AllHostsFilter ,ImagePropertiesFilter etc,具体策略可查阅文档:http://docs.openstack.org/developer/nova/devref/filter_scheduler.html
如何编写自己的过滤器:
a 继承BaseHostFilter,实现host_passes方法。
b 改写配置文件 nova.conf
--scheduler_driver=nova.scheduler.FilterScheduler --scheduler_available_filters=nova.scheduler.filters.standard_filters --scheduler_available_filters=myfilter.MyFilter --scheduler_default_filters=RamFilter,ComputeFilter,MyFilter
2 weights
在这一个步骤当中是对刚才过滤得到的主机列表当中,选出最为合适的一台主机。
weight = w1_multiplier * norm(w1) + w2_multiplier * norm(w2) + ...编写自己weighter 应该是 weights.BaseHostWeigher 的子类 ,必须实现 weight_multiplier 和 weight_object 方法。