zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    获取Mysql-jdbc驱动Driver类的两种方式
    Misha and Changing Handles
    What Are You Talking About (map)
    Let the Balloon Rise <map>的应用
    ignitius and princess 2(全排列)
    大一下学期计划
    大一上学期总结
    algorithm的基本注意事项
    STL的注意事项
    STL的基本操作指令
  • 原文地址:https://www.cnblogs.com/potato-chip/p/10316530.html
Copyright © 2011-2022 走看看