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 ...
随机推荐
- sublime text3 自动编译php 适合用于简单的php文件执行
1.将php路径放入环境变量中 2. 点击 sublime_text的“工具”->"编译系统"->"编译新系统" { "cmd" ...
- WebSocket实战之JavaScript例子
一.详细代码案例 详细解读一个简单html5 WebSocket的Js实例教程,附带完整的javascript websocket实例源码,以及实例代码效果演示页面,并对本实例的核心代码进行了深入解读 ...
- Lambda表达式中使用正则表达式
某语句如果不用正则表达式: string[] names = { "Tom", "Dick", "Harry", "Mary&qu ...
- Mycat实战之新增基于hash分片的表
1. 修改rule.xml hash分片规则 主要改两个地方: vi rule.xml 分片数量,这里改为3 对应 三个库 hash规则 默认是id列 这里为 PROVINCE 2. reload 加 ...
- MySQL的blob类型
MySQL中的Blob类型 MySQL中存放大对象的时候,使用的是Blob类型.所谓的大对象指的就是图片,比如jpg.png.gif等格式的图片,文档,比如pdf.doc等,以及其他的文件.为了在数据 ...
- UIRect中的Anchor组件
[UIRect中的Anchor组件] Anchor用于实现粘着功能,寄存于UIRect类中.Anchor的类型有三种: 1.None:不使用跟随功能. 2.Unified:四条边使用相同的Target ...
- Linux vi的基本操作
进入命令 vi <文件名> 如 vi test 如果test文件存在,则直接打开编辑.如果不存在,则新建一个test的文件,这个新建的文件如果不保存的话,退出编辑器后也不会保存到硬盘中. ...
- powerdesigner设计的pdm模型导出清晰图片格式
用powerdesigner设计了数据库模型,想把模型粘贴到数据库文档中,之前一直是Ctrl+A然后复制,直接粘贴过去的,这次领导说放大看不清,o(╯□╰)o 没办法,得搞个高清图复制上去啊,怎么办呢 ...
- CMD指令大全
命令提示符(CMD)是在OS / 2 , Windows CE与Windows NT平台为基础的操作系统(包括Windows 2000和XP中, Vista中,和Server 2003 )下的“MS- ...
- 正则表达式复习 (?<=) (?=)
1.首先值得一说的是"<" 和">" 不是元字符 "."是元字符 ,连接字符"-",即使在字符组内部也不一定 ...