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 ...
随机推荐
- kali下启动postgresql
1.service postgresql start 2.su postgres 3.psql
- 关于Unity发布iOS平台代码混淆问题
之前在越狱手机里找到<永恒战士3>的程序发现是用Unity做的,拷出资源出来看的时候发现里面有游戏程序集,立马抽出来反编译了一下,发现里面的代码只有方法签名,没有方法体,还以为用什么高端混 ...
- 点击jQuery Mobile的按钮改变颜色
jquery-mobile-移动 我有这样的代码来改变点击一个按钮的颜色: $('.fav').live('click', function(e) { $(this).buttonMarkup({ t ...
- android 标签页<include /> 的使用
在android页面布局设计中,有时候需要用到很多相同的布局设计.如果每个用到该布局的xml里都写那个相同布局的话,会造成语句冗余,而且可读性很差. 为了解决这个问题的话,我们可以把相同布局的代码单独 ...
- Listview使用安卓自带布局实现单选
安卓提供了一些自带的布局,使用非常简单.直接看代码吧. package com.example.linfeng.myapplication; import android.app.Activity; ...
- axis1.4 发布webservice的问题
用axis1.4 发布webservice的问题 The service class "org.gdt.sgcda.wf.impl.DefinitionManageServiceImpl&q ...
- Hadoop之MapReduce(二)序列化,排序及分区
MapReduce的序列化 序列化(Serialization)是指把结构化对象转化为字节流. 反序列化(Deserialization)是序列化的逆过程.把字节流转为结构化对象. 当要在进程间传递对 ...
- SpringCloud03 Ribbon知识点、 Feign知识点、利用RestTemplate+Ribbon调用远程服务提供的资源、利用feign调用远程服务提供的资源、熔断
1 远程服务资源的调用 1.1 古老的套路 在微服务出现之前,所有的远程服务资源必须通过RestTemplate或者HttpClient进行:但是这两者仅仅实现了远程服务资源的调用,并未提供负载均衡实 ...
- 奇妙的 Storage::url
发现 这是我在做头像上传功能时发现的,下面是图片上传的业务逻辑. class AvatarController extends Controller { public function update( ...
- 【Azure Active Directory】单一登录 (SAML 协议)
Azure Active Directory 支持 SAML 2.0 Web 浏览器单一登录 (SSO) 配置文件. 若要请求 Azure Active Directory 对用户进行身份验证时,云服 ...