上一节我们详细讨论了cinder-api 和 cinder-volume ,今天讨论另一个重要的 Cinder组件 cinder-scheduler
 
创建Volume 时,cinder-scheduler 会基于容量、Volume type 等条件选择出最合适的存储节点,然后让其创建Volume,下面介绍cinder-scheduler 是如何实现这个调度工作的。
 
在 /etc/cinder/cinder.conf 中,cinder通过 scheduler_driver, scheduler_default_filters 和 scheduler_default_weighers 这三个参数来配置 cinder-scheduler。(这几项在 devstack安装的rocky版本中并未找到)
 
Filter scheduler
 
Filter Scheduler 是 cinder-scheduler 默认的调度器。
 
scheduler_driver=cinder.scheduler.filter_scheduler.FilterScheduler
 
与nova一样,Cinder 也允许使用第三方scheduler,配置scheduler_driver 即可。
 
scheduler 调度过程如下:
 
    1、通过过滤器(filter)选择满足条件的存储节点(运行 cinder-volume)
    2、通过权重计算(weighting)选择最优(权重值最大)的存储节点
 
可见,cinder-scheduler 的运行机制和 nova-scheduler 完全一致。
 
Filter
 
当 Filter scheduler 需要执行调度操作时,会让Filter 对存储节点进行判断,filter 返回 True 或者 False。cinder.conf 中 scheduler_default_filters 选项指定 filter scheduler 使用的filter,默认值为:
 
scheduler_default_filters = AvailabilityZoneFilter, CapacityFilter, CapabilitiesFilter
 
Filter scheduler 将按照上面的顺序依次过滤
 
AvailabilityZoneFilter
 
为提高容灾性和提供隔离服务,可以将存储节点和计算节点划分到不同的 Availability Zone 中。例如把一个机架上的机器划分在一个Availability Zone 中。OpenStack默认有一个命名为 Nova 的 Availability Zone ,所有的节点初始都是在 Nova 中。用户可以根据需要创建自己的 Availability Zone。
 
 
 
CapacityFilter
 
创建volume 时,用户会指定volume的大小,CapacityFilter 的作用是将存储空间不能满足 volume创建需求的存储节点过滤掉。
 
CapabilitiesFilter
 
不同的volume provider 有自己的特性(Capabilities),比如是否支持 thin provision 等。Cinder 允许用户创建 volume 时通过volume type 指定需要的 Capabilities
 
volume type 可以根据需要定义若干个 Capabilities ,详细描述 volume的属性。volume type 的作用与 nova 的flavor类似。
 
 
通过 volume type 的extra specs 定义 Capabilities
 
 
Extra Specs 是用 Key-Value 的形式定义,不同的 volume provider 支持的 Extra Specs 不同,需要参考 volume provider 的文档。
 
 
上面的volume type 只有一个 Extra Specs “volume_backend_name”,这是最重要的也是必须的 Extra Specs 。
 
cinder-volume 会在自己的配置文件 /etc/cinder/cinder.conf 中定义设置 “volume_backend_name = lvmdriver-1”,其作用是为存储节点的volume provider 命名。这样 CapabilitiesFilter 就可以通过 volume type 的volume_backend_name 筛选出指定的 volume provider。
 
如果在第一步filtering 环节选出了多个存储节点,那么接下来的weighting 环节会挑选出最合适的一个节点。
 
Weighting
 
Filter Scheduler 通过 scheduler_default_weighers 指定计算权重的weigher,默认为 CapacityWeigher。
 
scheduler_default_weighers = CapacityWeigher
 
如命名所示,CapacityWeigher 基于存储节点的空闲容量计算权重值,空闲最多的胜出。
 
 

O048、掌握 cinder-scheduler 调度逻辑的更多相关文章

  1. cinder create volume的流程-scheduler调度

    创建 Volume 时,cinder-scheduler 会基于容量.Volume Type 等条件选择出最合适的存储节点,然后让其创建 Volume. 1.cinder-scheduler配置相关项 ...

  2. 掌握 cinder-scheduler 调度逻辑 - 每天5分钟玩转 OpenStack(48)

    上一节我们详细讨论了 cinder-api 和 cinder-volume,今天讨论另一个重要的 Cinder 组件 cinder-scheduler. 创建 Volume 时,cinder-sche ...

  3. quartz2.3.0(十二)通过RMI协议向Scheduler调度器远程添加job任务

    此代码示例通过RMI协议向Scheduler调度器远程添加job任务. 代码文件包括:job任务类(SimpleJob.java).RMI服务端server类(RemoteServerExample. ...

  4. scrapy 源码解析 (四):启动流程源码分析(四) Scheduler调度器

    Scheduler调度器 对ExecutionEngine执行引擎篇出现的Scheduler进行展开.Scheduler用于控制Request对象的存储和获取,并提供了过滤重复Request的功能. ...

  5. k8s入坑之路(14)scheduler调度 kubelet管理及健康检查 更新策略

    kubelet 主要功能 Pod 管理 在 kubernetes 的设计中,最基本的管理单位是 pod,而不是 container.pod 是 kubernetes 在容器上的一层封装,由一组运行在同 ...

  6. 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯云容器服务团队 源码为 k8s v1.6.1 版本,github 上对应的 commit id 为 b0b7a323cc5a4a ...

  7. quartz2.3.0(二)触发器Trigger花式Scheduler调度job

    任务类 package org.quartz.examples.example2; import java.util.Date; import org.slf4j.Logger; import org ...

  8. Golang源码学习:调度逻辑(一)初始化

    本文所使用的Golang为1.14,dlv为1.4.0. 源代码 package main import "fmt" func main() { fmt.Println(" ...

  9. Golang源码学习:调度逻辑(二)main goroutine的创建

    接上一篇继续分析一下runtime.newproc方法. 函数签名 newproc函数的签名为 newproc(siz int32, fn *funcval) siz是传入的参数大小(不是个数):fn ...

随机推荐

  1. JS 省市联动 ajax

    省市联动 //省市联动     $('.locationCode').change(function () {         var val = $(this).val();         if ...

  2. matlab gui界面设计记录

    我们要进行的程序是彩色图像处理试验示例,用这个程序来练习我们的gui前台设计. 程序功能介绍:具有彩色图像处理及保存和音乐播放功能效果如下图 2 在MATLAB的命令窗口中输入guide命令,打开gu ...

  3. linux设备树中如何删除某个节点?

    答:使用以下语法即可删除某节点: /delete-node/ 节点名;

  4. Linux环境下warning: no newline at end of file

    今天在Windows下VS2012写了一个程序, 然后放在Linux系统下进行编译.Linux下使用的编译器是CC,结果,一编译出现了很多诸如下面的警告信息,似乎每一个.cpp和.h文件都有. Ite ...

  5. centos6里面装zabbix(五)

    今天说使用ICMP ping监控server与agent端的网络状态 今天要使用的是fping,这个软件包需要去官网下载,官网地址:http://www.fping.org/.现在的最新版是4.0 第 ...

  6. spring cloud之Eureka不能注销docker部署的实例

    1 起因 事件的起因是这样的,我们在微服务改造的过程中,选择将服务注册到eureka中,开发的时候还好,使用场景是这样的: 在idea中启动服务,成功注册到eureka,关闭服务,eureka成功注销 ...

  7. chrome调试笔记

    F12启动调试 1.右键加载按钮可以清空缓存并重新加载,有时候浏览器有缓存,代码更新不会及时反映出来. 2.performance mointer实时查看performance 点击三个竖着的小点,选 ...

  8. 浏览器输入url后发生的事情以及每步可以做的优化

    首先总结下输入url按下回车后的大致流程: 查询url的ip地址. 建立tcp连接,连接服务器. 浏览器发起http/https请求. 服务器响应浏览器的请求. 网页的解析与渲染. 下面分析每个过程 ...

  9. innodb 隔离等级

    前一段时间参加了一个国内知名公司的面试,被问及对数据库的了解,自感还不错,可谁知在隔离等级这种基本概念的点翻个船,也不是因为完全不懂,而是本来这里就比较晦涩,加之具体上次看这里的东西时候已经过了一年多 ...

  10. 如何写resultful接口

    一.协议 API与客户端用户的通信协议,总是使用HTTPS协议,以确保交互数据的传输安全. 二.域名 应该尽量将API部署在专用域名之下: https://api.example.com 如果确定AP ...