一、概述

调度就是将instance放在“最合适”的host上;涉及虚拟机的创建、克隆、冷迁移、热迁移、变更规格、撤离、重建等需要确定虚拟机位置的操作。

二、原理


OpenStack 的虚拟机调度策略主要是由 FilterScheduler 和 ChanceScheduler 实现的,其中FilterScheduler 作为默认的调度器实现了基于主机过滤(filtering)和权值计算(weighing)的调度算法,而 ChanceScheduler 则是基于随机算法来选择可用主机(去掉ignore_hosts)的简单调度引擎。
“最合适”的解释:
合适:使用filtering过滤掉不满足条件的host。(强决策)
最:使用weighting对合适的host进行权重计算,选择最优(权重值最大)的host。(弱决策)
注:权重最大就被选择也不是绝对的,受配置项等因素影响。

scheduler_host_subset_size = max(1,CONF.scheduler_host_subset_size)
if scheduler_host_subset_size < len(weighed_hosts):weighed_hosts = weighed_hosts[0:scheduler_host_subset_size]
chosen_host = random.choice(weighed_hosts)

HostState:
the HostState object allows to get attributes of the host
RequestSpec:
the RequestSpec object describes the user request, including the flavor, the image and the scheduler hints

scheduler_default_filters = RetryFilter,AvailabilityZoneFilter,RamFilter,CoreFilter,
DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,
ServerGroupAffinityFilter,PciPassthroughFilter,NUMATopologyFilter
Filters 作用 说明
RetryFilter 重新调度的时候才起作用,过滤掉已经尝试过的host 如果scheduler_max_attempts值为1或者有force_hosts、force_nodes则不生效
AvailabilityZoneFilter 过滤掉AZ和请求不一致的host 1、请求内没az需求不过滤 2、请求内的az和主机的az一致或者请求内的az等于default_availability_zone不过滤 3、非上述情况的host都会被过滤掉
RamFilter 过滤掉ram不满足请求的host 1、ram_allocation_ratio没被配置时按1.5计算 2、过滤掉节点ram(不算超售比)小于所需ram的节点 3、过滤掉ram资源不足的节点(total_usable_ram_mb * ram_allocation_ratio - used_ram_mb)
CoreFilter 过滤掉cpu不满足的host 1、cpu_allocation_ratio没被配置时是按16.0计算 2、过滤掉节点总cpu核数(不算超售比)小于所需cpu的节点 3、过滤掉cpu资源不足的节点(host_state.vcpus_total * cpu_allocation_rati - host_state.vcpus_used)
DiskFilter 过滤掉disk不满足的host 1、disk_allocation_ratio没配置时按1.0计算 2、过滤掉节点disk(不算超售比)小于所需disk的节点 3、过滤掉disk资源不满足的节点(total_usable_disk_mb * disk_allocation_ratio - used_disk_mb)
ComputeFilter 过滤掉service状态不满足的host 1、过滤掉服务被disable的节点 2、过滤掉服务down的节点
ComputeCapabilitiesFilter 过滤掉capabilities不满足条件的host(相对高级过滤功能) 1、此功能我们暂时未使用,因为我们没有开启规格属性(extra_specs)的自定义(nova flavor-key) 2、过滤规则根据flavor中key决定 2.1、key中不包含":",则去匹配节点stats(host的附属属性)属性是否满足value需求; 2.2、key中包含“capabilities:”,则去匹配host的属性(如cpu的架构)
ServerGroupAntiAffinityFilter 反亲和性过滤器 过滤掉和和instance相同的host
ServerGroupAffinityFilter 亲和性过滤器 过滤掉和和instance不相同的host
PciPassthroughFilter 过滤掉没有相关pci设备的host
NUMATopologyFilter 根据实例的NUMA要求过滤主机 过滤掉numa不满足要求的节点(计算优化型)

注:RAM、CPU、Disk不能overcommit,Do not allow an instance to overcommit against itself, only against other instances.
weighing
由于称重不涉及调度失败不做进一步分析。

三、案例分析

  1. 现象:
    虚拟机调整规格vcpu24c到30c失败
  2. 根因分析:
    a. 变更规格需要迁移到其他节点
    b. 虚拟机的cpu个数是不允许超过节点的cpu个数
  3. 定位过程:
    a. 先更据虚拟机名字和操作的大概时间点, 找到本次操作的请求req-id(nova 会对每次请求都生成一个唯一的req_id,根据req_id找操作和日志会很精确)
    b. 在openstack/nova/目录内可以zgrep 相应的req_id寻找关键信息

    c. 根据关键信息和过滤器的过滤规则去具体分析:
    c.1 只有过滤器才会将host过滤掉
    c.2 哪个过滤器处理后没有合适的host会输出:Filter %s returned 0 hosts
    c.3 分析哪些过滤器过滤的具体细节:Filtering removed all hosts for the request with instance ID…
    c.4 根据过滤器的具体过滤规则去分析原因。

Openstack之Nova组件(一)——云主机调度相关推荐

  1. openstack——使用命令行发放云主机

    openstack--使用命令行发放云主机 一.进入管理员权限环境下 二.创建租户及用户 1.创建租户 2.创建用户 三.上传镜像 四.创建外部网络 1.创建外部网络名 2.创建外部网络子网 五.创建 ...

  2. neutron服务宕机导致nova无法创建云主机

    情况:服务器重启后,创建云主机失败·,查看日志,我们发现是neutron导致nova创建云主机失败,我们查看neutron服务状态,发现neutron中的openvswitch和metadate服务宕 ...

  3. openstack与ceph环境恢复云主机

    有一台Windows系统的云主机出现故障,系统盘坏掉,无法启动,也不能在云环境里修复系统,但是数据比较重要,需要恢复云主机里的数据.云主机有一块系统盘,一款外挂盘. 系统盘: 外挂盘: 以下操作是在生 ...

  4. Openstack采用ISO格式文件创建云主机

    1:  原生ISO镜像创建云主机 创建云主机: 针对不需要virtio的云主机: 最后系统是安装在这个盘上: 之后用云硬盘创建个云主机,就是最后想要的云主机: Q版舍弃了 从云硬盘创建云主机, 变成了 ...

  5. OpenStack 的Nova组件详解

    Open Stack Compute Infrastructure (Nova) Nova是OpenStack云中的计算组织控制器.支持OpenStack云中实例(instances)生命周期的所有活 ...

  6. OpenStack 给nova组件 vnc 配置https(SSL)自验证签名证书

    先说解决办法以及结果 解决办法:Nginx 转发 结果:只转发 生成vnc 的console 地址,拼凑出https,能在Https web应用即可,比如把console url (控制台地址)ifr ...

  7. 用OpenStack搭建简单的云平台并启动云主机

    OpenStack OpenStack简介 OpenStack重要集成组件 OpenStack平台部署 部署环境 建立虚拟机 配置时间同步 安装OpenStack 安装 RabbitMQ 消息队列服务 ...

  8. 云系列---Openstack Nova组件 | 参数说明 | 详细讲解

    Openstack Nova组件 一.Nova 概念 二.Nova 系统架构 三.Nova 组件详讲 1.API 讲解 2.Scheduler 讲解 调度器类型 过滤调度器调度过程 过滤器类型 Sch ...

  9. OpenStack的部署T版(五)——Nova组件

    目录 一.Nova计算服务概念 Nova系统架构 二.Nova组件介绍 1.API 2.Scheduler调度器 Nova调度器的类型 过滤器 权重(weight) 3.Compute组件 Compu ...

最新文章

  1. 使用Spring-Cloud将Spring Boot应用程序部署到Cloud Foundry
  2. 我要自学网java jsp_学javaweb需要什么基础?零基础如何学习javaweb?
  3. linux tcp socket 接收的字节数与发送的字节数不符,TCP发送接口(如send(),write()等)的返回值与成功发送到接收端的数据量无直接关系...
  4. HDU1198-----并查集
  5. 服务器msdtc没有安全显示项,MSDTC 问题疑难解答 - BizTalk Server | Microsoft Docs
  6. 业务系统监控解决方案
  7. H3C 路由器中VLAN隔离
  8. 微信公众号(订阅号)文章阅读数监控V0.1
  9. 《计算机达人成长之路——憧憬与迷茫篇》有钱的捧个预订场,有人的捧个评价场...
  10. Excel 快速跳到表格最后一行/第一行
  11. 逆商之CORE和LEAD
  12. C语言关于变量定义未使用编译警告warring
  13. 【读书笔记】高效能人士的七个习惯
  14. python合并多个excel表到一张表中(有表头)
  15. cesium 之三维场景展示篇(附源码下载)
  16. ”我的2016“-太多难忘的第一次
  17. dnf剑魂buff等级上限_DNF5.8新版buff换装提升整理以及装备选择,防止弯路
  18. 这 7 个阿里程序员的个人公众号,你看过几个?
  19. 岁月沧桑景,浮世微语情
  20. 用js代码判断质数_JavaScript判断数字是否为质数的方法汇总

热门文章

  1. Win11的两个实用技巧系列之电脑system占用高的解决办法
  2. 监听ContentProvider
  3. 2021年材料员-岗位技能(材料员)考试试卷及材料员-岗位技能(材料员)模拟考试软件
  4. python爬取豆瓣图片
  5. 输电线路视频在线监测装置
  6. <POSTGRESQL修炼之道:从小工到专家>之逻辑结构管理(6-11结)
  7. 剧本杀成了“恐怖杀”?
  8. UVa 1533:Moving Pegs(迭代加深搜索)
  9. 《旋元佑进阶文法》:第一章 基本句型
  10. ISO 26262中的ASIL等级确定与分解