Filter scheduler 是 nova-scheduler 默认的调度器,调度过程分为两步:

 
 

通过过滤器(filter)选择满足条件的计算节点(运行 nova-compute)

通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创建 Instance。

 
 

Nova 允许使用第三方 scheduler,配置 scheduler_driver 即可。

 
 

Scheduler 可以使用多个 filter 依次进行过滤,过滤之后的节点再通过计算权重选出最适合的节点。

 
 

 
 

【RetryFilter】

 
 

RetryFilter 的作用是刷掉之前已经调度过的节点。

 
 

举个例子方便大家理解: 假设 A,B,C 三个节点都通过了过滤,最终 A 因为权重值最大被选中执行操作。 但由于某个原因,操作在 A 上失败了。 默认情况下,nova-scheduler 会重新执行过滤操作(重复次数由 scheduler_max_attempts 选项指定,默认是 3)。 那么这时候 RetryFilter 就会将 A 直接刷掉,避免操作再次失败。

RetryFilter 通常作为第一个 filter。

 
 

【AvailabilityZoneFilter】

 
 

为提高容灾性提供隔离服务,可以将计算节点划分到不同的Availability Zone中。

 
 

例如把一个机架上的机器划分在一个 Availability Zone 中。 OpenStack 默认有一个命名为 "Nova" 的 Availability Zone,所有的计算节点初始都是放在 "Nova" 中。 用户可以根据需要创建自己的 Availability Zone

 
 

【RamFilter】

 
 

RamFilter 将不能满足 flavor 内存需求的计算节点过滤掉。

 
 

对于内存有一点需要注意: 为了提高系统的资源使用率,OpenStack 在计算节点可用内存时允许 overcommit(超售),也就是可以超过实际内存大小。 超过的程度是通过 nova.conf 中 ram_allocation_ratio 这个参数来控制的,默认值为 1.5

ram_allocation_ratio = 1.5

 
 

其含义是:如果计算节点的内存有 10GB,OpenStack 则会认为它有 15GB(10*1.5)的内存。

 
 

【DiskFilter】

 
 

DiskFilter 将不能满足 flavor 磁盘需求的计算节点过滤掉。

 
 

Disk 同样允许 overcommit,通过 nova.conf 中 disk_allocation_ratio 控制,默认值为 1

 
 

disk_allocation_ratio = 1.0

 
 

【CoreFilter】

 
 

CoreFilter 将不能满足 flavor vCPU 需求的计算节点过滤掉。

 
 

vCPU 同样允许 overcommit,通过 nova.conf 中 cpu_allocation_ratio 控制,默认值为 16

 
 

cpu_allocation_ratio = 16.0

 
 

这意味着一个 8 vCPU 的计算节点,nova-scheduler 在调度时认为它有 128 个 vCPU。 需要提醒的是: nova-scheduler 默认使用的 filter 并没有包含 CoreFilter。 如果要用,可以将 CoreFilter 添加到 nova.conf 的 scheduler_default_filters 配置选项中。

 
 

【ComputeFilter】

 
 

ComputeFilter 保证只有 nova-compute 服务正常工作的计算节点才能够被 nova-scheduler调度。

ComputeFilter 显然是必选的 filter。

 
 

【ComputeCapabilitiesFilter】

 
 

ComputeCapabilitiesFilter 根据计算节点的特性来筛选。

 
 

这个比较高级,我们举例说明。

例如我们的节点有 x86_64 和 ARM 架构的,如果想将 Instance 指定部署到 x86_64 架构的节点上,就可以利用到 ComputeCapabilitiesFilter。

 
 

还记得 flavor 中有个 Metadata 吗,Compute 的 Capabilitie s就在 Metadata中 指定。

 

【ImagePropertiesFilter】

 
 

ImagePropertiesFilter 根据所选 image 的属性来筛选匹配的计算节点。

跟 flavor 类似,image 也有 metadata,用于指定其属性。

 

【ServerGroupAntiAffinityFilter】

 
 

ServerGroupAntiAffinityFilter 可以尽量将 Instance 分散部署到不同的节点上。

 

【ServerGroupAffinityFilter】

 
 

与 ServerGroupAntiAffinityFilter 的作用相反,ServerGroupAffinityFilter 会尽量将 instance 部署到同一个计算节点上。

 
 

【Weight】

 
 

经过前面一堆 filter 的过滤,nova-scheduler 选出了能够部署 instance 的计算节点。

如果有多个计算节点通过了过滤,那么最终选择哪个节点呢?

 
 

Scheduler 会对每个计算节点打分,得分最高的获胜

打分的过程就是 weight,翻译过来就是计算权重值,那么 scheduler 是根据什么来计算权重值呢?

 
 

目前 nova-scheduler 的默认实现是根据计算节点空闲的内存量计算权重值:

空闲内存越多,权重越大,instance 将被部署到当前空闲内存最多的计算节点上。

 
 

最新文章

  1. CocoaPods 1.1.0上传遇到swift问题
  2. C# foreach,等量代换,冒泡排序
  3. NSNotificationCenter(通知)与Key-Value Coding (KVC)与Key-Value Observing (KVO)
  4. SSH整合(1)异常
  5. 关于CSS中清除浮动的方法
  6. 【资源下载】Ext4.1.0_Doc中文版_V1.0.0_Beta正式提供下载!
  7. java的nio之:java的nio系列教程之概述
  8. c# 鼠标在控件上拖动 移动窗体 移动窗口
  9. codevs 1049 棋盘染色
  10. C#读取文件为byte数组
  11. 【转】我的电脑最近忽然开不了机,启动修复也无法修复,win7系统。开机的时候如果不点启动修复直接正常启动
  12. hdu - 4651 - Partition
  13. 【CSS3】动画
  14. dubbo服务达成jar包
  15. JAVA测试编程
  16. win2d 图片水印
  17. IOS开发常见第三方总结
  18. 关于ASP .NET Core在跨平台的linux ubuntun,SUSE ,Mac OS的发布的相关平台操作
  19. hdu6121 build a tree(树)
  20. Spring Cloud之网关

热门文章

  1. Excel中减少两边的字符
  2. linux部署win服务 dotnet mono jexus
  3. 模块 string 常用序列字符
  4. Unix 下 使用 RVM 管理 Ruby 和 gem
  5. Ali_Cloud++:阿里云-单机版 solr4.10.3 安装部署
  6. CSAPP实验——DataLab
  7. Mybatis中的# 与 $
  8. html 中video标签视频不自动播放的问题
  9. 从零搭建一个SpringCloud项目之Zuul(四)
  10. django中设置定时任务