cinder create volume的流程-scheduler调度
创建 Volume 时,cinder-scheduler 会基于容量、Volume Type 等条件选择出最合适的存储节点,然后让其创建 Volume。
1、cinder-scheduler配置相关项
在/etc/cinder/cinder.conf文件中,cinder 通过 scheduler_driver, scheduler_default_filters 和scheduler_default_weighers ,这三个参数来配置 cinder-scheduler。
# Options defined in cinder.scheduler.driver
选项在cinder.scheduler.driver.py文件中定义 # The scheduler host manager class to use (string value)
#scheduler_host_manager=cinder.scheduler.host_manager.HostManager
# Maximum number of attempts to schedule an volume (integer
# value)
#scheduler_max_attempts=3 # Options defined in cinder.scheduler.host_manager
选项在cinder.scheduler.host_manager.py文件中定义
# Which filter class names to use for filtering hosts when not specified in the request. (list value)
在请求中没有指定过滤类时,使用的过滤方法
#scheduler_default_filters=AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter 权重主机时,使用的权重类
# Which weigher class names to use for weighing hosts. (list
# value)
#scheduler_default_weighers=CapacityWeigher # Options defined in cinder.scheduler.manager
选项在cinder.scheduler.manager.py文件中定义
默认的调度驱动程序
# Default scheduler driver to use (string value)
#scheduler_driver=cinder.scheduler.filter_scheduler.FilterScheduler
2、scheduler调度程序
FilterScheduler是 cinder-scheduler 默认的调度器。与 Nova 一样,Cinder 也允许使用第三方 scheduler,配置 scheduler_driver 即可。
scheduler 调度过程如下:
1)通过过滤器(filter)选择满足条件的存储节点(运行 cinder-volume的节点)
2)通过权重计算(weighting)选择最优(权重值最大)的存储节点
3、fiter过滤器
当 FilterScheduler执行调度操作时,会让 filter 对存储节点进行判断,filter 返回 True 或者 False。fiter可以同时指定多个。cinder.conf 中 scheduler_default_filters 选项指定 filter scheduler 使用的 filter,默认值为:scheduler_default_filters = AvailabilityZoneFilter, CapacityFilter, CapabilitiesFilter
FilterScheduler 将按照上面的顺序依次过滤:
1)AvailabilityZoneFilter
为提高容灾性和提供隔离服务,可以将存储节点和计算节点划分到不同的 Availability Zone 中。例如把一个机架上的机器划分在一个 Availability Zone 中。OpenStack 默认有一个命名为“Nova”的 Availability Zone,所有的节点初始都是放在“Nova”中。用户可以根据需要创建自己的 Availability Zone。
创建 Volume 时,指定 Volume 所属的 Availability Zone。cinder-scheduler 在做 filtering 时,会使用 AvailabilityZoneFilter 将不属于指定 Availability Zone 的存储节点过滤掉。
创建volume指定az参数的命令行
#cinder help create
Creates a volume.
Positional arguments:
<size> Volume size, in GBs.
Optional arguments:
--snapshot-id <snapshot-id>
Creates volume from snapshot ID. Default=None.
--source-volid <source-volid>
Creates volume from volume ID. Default=None.
--image-id <image-id>
Creates volume from image ID. Default=None.
--display-name <display-name>
Volume name. Default=None.
--display-description <display-description>
Volume description. Default=None.
--volume-type <volume-type>
Volume type. Default=None.
--availability-zone <availability-zone>
Availability zone for volume. Default=None.
--metadata [<key=value> [<key=value> ...]]
Metadata key and value pairs. Default=None.
2)CapacityFilter
创建 Volume 时,用户会指定 Volume 的大小。CapacityFilter 的作用是将存储空间不能满足 Volume 创建需求的存储节点过滤掉。
3)CapabilitiesFilter
不同的 Volume 提供者 有自己的特性(Capabilities),比如是否支持 thin provision 等。Cinder 允许用户创建 Volume 时通过 Volume Type 指定需要的 Capabilities。
# cinder help create
Creates a volume.
Positional arguments:
<size> Volume size, in GBs. Optional arguments:
--snapshot-id <snapshot-id>
Creates volume from snapshot ID. Default=None.
--source-volid <source-volid>
Creates volume from volume ID. Default=None.
--image-id <image-id>
Creates volume from image ID. Default=None.
--display-name <display-name>
Volume name. Default=None.
--display-description <display-description>
Volume description. Default=None.
--volume-type <volume-type>
Volume type. Default=None.
--availability-zone <availability-zone>
Availability zone for volume. Default=None.
--metadata [<key=value> [<key=value> ...]]
Metadata key and value pairs. Default=None.
Volume Type 可以根据需要定义若干 Capabilities,详细描述 Volume 的属性。Volume Type 的作用与 Nova 的 flavor 类似。
首先创建volume type,命令行如下:
# cinder help type-create
usage: cinder type-create <name>
Creates a volume type.
Positional arguments:
<name> Name for the volume type.
然后通过 Volume Type 的 Extra Specs 定义 Capabilities。Extra Specs 是用 Key-Value 的形式定义。 不同的 Volume Provider 支持的 Extra Specs 不同。Extra Specs最重要也是必须的 是volume_backend_name。cinder-volume 服务会在自己的配置文件 /etc/cinder/cinder.conf 中设置“volume_backend_name”这个参数,其作用是为存储节点的 Volume Provider 命名。这样,CapabilitiesFilter 就可以通过 Volume Type 的“volume_backend_name”参数筛选出指定的 Volume Provider。不同的存储节点可以在各自的 cinder.conf 中配置相同的 volume_backend_name,这是允许的。因为虽然存储节点不同,但它们可能使用的是一种 Volume Provider。
对应命令行如下:
# cinder help type-key
usage: cinder type-key <vtype> <action> [<key=value> [<key=value> ...]]
Sets or unsets extra_spec for a volume type.
Positional arguments:
<vtype> Name or ID of volume type.
<action> The action. Valid values are 'set' or 'unset.'
<key=value> The extra specs key and value pair to set or unset. For unset,
specify only the key. Default=None.
4、Weighter 权重
如果在第一步 filter选出了多个存储节点,那么在 weighting 环节会挑选出最合适的一个节点。Filter Scheduler 通过 scheduler_default_weighers 指定计算权重的 weigher,默认为 CapacityWeigher。
总结就是,先定义调度程序,调度程序,又需要做两件事,先做过滤,最后做权重。
参考文章:https://mp.weixin.qq.com/s/0fQROpXiQ2d8_c_VeWPHeQ
cinder create volume的流程-scheduler调度的更多相关文章
- cinder create volume的流程(1)
前提:代码的跟踪,使用的是ocata版本 零.执行cinder create 命令,创建数据卷,打开debug开关 [root@osnode241001 ~]# cinder --debug crea ...
- cinder创建volume的流程-简单梳理
1. cinder-api接收到创建的请求,入口:cinder.api.v2.volumes.VolumeController#create,该方法主要负责一些参数的重新封装和校验,然后调用cinde ...
- Create Volume 操作(Part II) - 每天5分钟玩转 OpenStack(51)
上一节我们讨论了 Cinder 创建 Volume 的第一部分,cinder-api 的操作,本节继续第二部分,cinder-scheduler 调度工作. cinder-scheduler 执行调度 ...
- Create Volume 操作(Part I) - 每天5分钟玩转 OpenStack(50)
前面已经学习了 Cinder 的架构和相关组件,从本节我们开始详细分析 Cinder 的各种操作,首先讨论 Cinder 如何创建 volume. Create 操作流程如下: 客户(可以是 Open ...
- O050、Create Volume 操作 (Part I)
参考https://www.cnblogs.com/CloudMan6/p/5603312.html 前面已经学习了Cinder的架构和相关组件,从本节开始详细分析 Cinder 的各种操作,首先 ...
- k8s入坑之路(14)scheduler调度 kubelet管理及健康检查 更新策略
kubelet 主要功能 Pod 管理 在 kubernetes 的设计中,最基本的管理单位是 pod,而不是 container.pod 是 kubernetes 在容器上的一层封装,由一组运行在同 ...
- cinder侧挂载卷流程分析
cinder侧挂载卷流程分析,存储类型以lvm+iscsi的方式为分析基础cinder侧主要调用了三个接口1)reserve_volume: 把volume的状态改为attaching,阻止其它节点执 ...
- quartz2.3.0(十二)通过RMI协议向Scheduler调度器远程添加job任务
此代码示例通过RMI协议向Scheduler调度器远程添加job任务. 代码文件包括:job任务类(SimpleJob.java).RMI服务端server类(RemoteServerExample. ...
- Golang源码学习:调度逻辑(三)工作线程的执行流程与调度循环
本文内容主要分为三部分: main goroutine 的调度运行 非 main goroutine 的退出流程 工作线程的执行流程与调度循环. main goroutine 的调度运行 runtim ...
随机推荐
- 1048 Find Coins
题意:略 思路:two pointers思想,简单 先对数字序列进行排序,然后定义两个指针left和right,初始状态low=0,high=n-1.当a[low]+a[high] > M时,h ...
- 怎么样使用yum来安装mysql
linux下使用yum安装mysql,以及启动.登录和远程访问. 1.安装 查看有没有安装过: yum list installed mysql* rpm -qa | grep mysql* 查看有没 ...
- MFC学习(六)计算器
1 stdafx.h 所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H.Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使 ...
- gevent异步,io自动切换
#!/usr/bin/env python # encoding: utf-8 # Date: 2018/6/19 # # from gevent import monkey # 这俩行必须放在首 ...
- vs2017发布web项目
1.webform项目发布 1.右键选择项目. 2.选择自定义. 3.“配置文件名称”,发布后生成在项目中记录此次发布选择的配置信息文件名,下次发布默认为此次选择的配置信息,可以删除,随便填一个. 4 ...
- 缓存 memcached 与 redis
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- SVN安装和使用总结
SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...
- Python可执行对象——exec、eval、compile
Python提供的调用可执行对象的内建函数进行说明,涉及exec.eval.compile三个函数.exec语句用来执行存储在代码对象.字符串.文件中的Python语句,eval语句用来计算存储在代码 ...
- js控制使div自动适应居中
一直都在想怎么样使弹出的DIV能在任何时候都是居中显示的,刚开始的时候是用CSS样式直接定义好层的位置,但是当页面很长的时候,或是浏览器窗口大小不是固定的时候就不能正确的显示,所以只好用JS来控制DI ...
- Vue 简单的总结四(项目流程,DIY脚手架、vue-cli的使用)
项目流程 1.下载 cdn 2.引包 vue-router依赖vue vue-router.js 3.如果是模块化机制 Vue.use(vue-router) 4.创建示例 let Home = {/ ...