上一节我们详细讨论了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. C#计算两个时间年份月份天数(根据生日计算年龄)差,求时间间隔

    C#计算两个时间年份月份差 DateTime dt1 = Convert.ToDateTime("2008-8-8"); DateTime dt2 = System.DateTim ...

  2. react中使用map时onClick事件失效

    分享一些踩过的坑 react中使用map时onClick事件失效 <span> { count.map( (item,index)=>{ return <span style= ...

  3. easyUI之Pagination(分页)

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  4. 传统Web应用请求和响应特点【显示当前时间】

    (1)请求:浏览器以HTTP协议的方式提交请求到服务器 (2)响应:服务器以HTTP协议的方式响应内容到浏览器 注意:HTTP是WEB大众化非安全协议 HTTPS是WEB安全协议,是基于HTTP协议的 ...

  5. [Distributed ML] Yi WANG's talk

    王益,分布式机器学习的践行者,他的足迹值得后来者学习. 膜拜策略: LinkedIn高级分析师王益:大数据时代的理想主义和现实主义(图灵访谈)[心路历程] 分布式机器学习的故事-王益[历史由来] 分布 ...

  6. docker搭建pxc

    1.下载镜像 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.i ...

  7. linux下后台启动springboot项目(转载)

    我们知道启动springboot的项目有三种方式: 运行主方法启动 使用命令 mvn spring-boot:run”在命令行启动该应用 运行“mvn package”进行打包时,会打包成一个可以直接 ...

  8. MMORPG服务器架构

    MMORPG服务器架构 一.摘要 1.网络游戏MMORPG整体服务器框架,包括早期,中期,当前的一些主流架构2.网络游戏网络层,包括网络协议,IO模型,网络框架,消息编码等.3.网络游戏的场景管理,A ...

  9. EF中where中日期帅选问题

    结合 SqlFunctions  和 DbFunctions  不能同时用两个DbFunctions queryAble = queryAble.Where(s=> SqlFunctions.D ...

  10. Chrome F12 谷歌开发者工具解析

    一.工具简单介绍 F12可用于网站界面.性能测试,bug定位等 以 www.baidu.com 为例: Elements:查看页面元素属性(多用于自动化元素定位) Console:记录日志信息(用于定 ...