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 ...
随机推荐
- mybatis generator 用法
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...
- Py修行路 python基础 (十一)迭代器 与 生成器
一.什么是迭代? 迭代通俗的讲就是一个遍历重复的过程. 维基百科中 迭代(Iteration) 的一个通用概念是:重复某个过程的行为,这个过程中的每次重复称为一次迭代.具体对应到Python编程中就是 ...
- CVE-2017-11882复现配合koadic
项目地址:https://github.com/iBearcat/CVE-2017-11882 首先开启koadic,然后配置一下 复制这句代码 mshta http://192.168.220.13 ...
- 切面(Aspect)获取请求参数和返回值
@Before("webLog()") public void doBefore(JoinPoint joinPoint) throws Throwable { // 接收到请求, ...
- DataGridView根据条件给单元格绑定图片
代码区: private void Form1_Load(object sender, EventArgs e) { myClass.mySqliteAPI conn = new myClass.my ...
- 最小的VIM操作指南
最小VIM操作指南 vim的操作命令非常多,为了能开始工作,必须学会一个最小的vim操作集合,这里做个总结. 1.插入.追加.插入新行 i:在当前光标所在字符的前面插入,当前字符及其后面的字符后撤 a ...
- 浅谈块元素绝对定位的margin属性
对于div的绝对定位一直以为margin属性是无效的,只是通过top,left,bottom,right定位,然而今天的却发现不是这样的,于是对其做了些实验: 使用的HTML原始测试文件: <! ...
- 02.socket实现远程调用
不使用webservice使用以前的知识也可以实现远程系统之间的调用.用Socket可以.实现Socket通信. 开设一个端口.ip.
- Windows:condition_variable 两个例子
题目:子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码.注意:一定是子线程先执行,主线程再执行. #in ...
- 661. Image Smoother色阶中和器
[抄题]: Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoo ...