上一节我们详细讨论了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. 我现在A函数开启事务,然后调用B函数,B函数中也开启了事务

    有一点要知道,就是MYSQL不支持事务嵌套.所以PHP再包装,也是一个事务 laravel的事务嵌套,就是一个栈.事务A开启事务(真实开启)事务B开启事务(只是标记,并非真实开启了事务)事务B提交事务 ...

  2. hadoop用户和权限

    当前Apache Hadoop认证(authentication)支持simple和kerberos,simple是默认的,其实是信任操作系统的认证结果(也就是直接使用操作系统的用户).kerbero ...

  3. 图及其衍生算法(Graphs and graph algorithms)

    1. 图的相关概念 树是一种特殊的图,相比树,图更能用来表示现实世界中的的实体,如路线图,网络节点图,课程体系图等,一旦能用图来描述实体,能模拟和解决一些非常复杂的任务.图的相关概念和词汇如下: 顶点 ...

  4. [go]os/exec执行shell命令

    // exec基础使用 import ( "os/exec" ) cmd = exec.Command("C:\\cygwin64\\bin\\bash.exe" ...

  5. OpenCV、OpenCL、OpenGL、OpenMP的区别

    OpenCV        OpenCV的全称是:Open Source Computer Vision Library.OpenCV是一个开源发行的跨平台计算机视觉库,可以运行在Linux.Wind ...

  6. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-4.动态Sql语句Mybaties SqlProvider

    笔记 4.动态Sql语句Mybaties SqlProvider     简介:讲解什么是动态sql,及使用 1.             @UpdateProvider(type=VideoSqlP ...

  7. Spring下使用Redis

    在Spring中使用Redis使用使用两个依赖包jedis.jar.spring-data-redis.jar 一下是Maven项目pom.xml添加依赖 <!--jedis.jar --> ...

  8. js图片预览带进度条

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. [ML] Load and preview large scale data

    Ref: [Feature] Preprocessing tutorial 主要是 “无量纲化” 之前的部分. 加载数据 一.大数据源 http://archive.ics.uci.edu/ml/ht ...

  10. SAP JCO3配置

    windows 环境设置 1.sapjco3.dll 需要与 sapjco3.jar 在同一目录 2.设置系统环境变量,将sapjco3所在目录加入系统环境变量 例如: 新建环境变量 变量名: JAV ...