Cinder multiple-backends

Cinder可以接多种存储后端。

目的:

  1. 搞清楚cinder.conf中的volume_type(default_volume_type), enabled_backends, volume_backend_name
  2. 动手实验

由来

用devstack装出来的cinder.conf有如下配置:

[DEFAULT]
default_volume_type = lvmdriver-1
enabled_backends = lvmdriver-1
osapi_volume_extension = cinder.api.contrib.standard_extensions

[lvmdriver-1]
lvm_type = default
iscsi_helper = tgtadm
volume_group = cinder-new-volume
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name = lvmdriver-1

好多参数的值都是”lvmdriver-1”。

在dashboard上创建volume时有个Type选项:
这里写图片描述
默认为“No volume type”,下拉菜单中还有一个“lvmdriver-1”

这个”lvmdriver-1”跟配置文件中的哪个参数有关呢?
另外,cinder有个type-list命令:

[admin@maqi-openstack ~]$ cinder type-list
+--------------------------------------+-------------+-------------+-----------+
|                  ID                  |     Name    | Description | Is_Public |
+--------------------------------------+-------------+-------------+-----------+
| 505d3a71-226f-4442-ae8d-8908ae9876fa | lvmdriver-1 |      -      |    True   |
+--------------------------------------+-------------+-------------+-----------+

这里的”lvmdriver-1”又是哪儿来的?

找了些文档来看,并且动手实验一下。

参考:

Notes:

  • 同一个backend可以支持多个volume_type
  • 创建volume的时候指定的是volume_type(不指定时使用default_volume_type)
  • cinder-scheduler会根据volume_type找相应的backend以及host

实验之前

先回到上面的cinder.conf:

[DEFAULT]
default_volume_type = lvmdriver-1
enabled_backends = lvmdriver-1
osapi_volume_extension = cinder.api.contrib.standard_extensions

[lvmdriver-1]
lvm_type = default
iscsi_helper = tgtadm
volume_group = cinder-new-volume
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name = lvmdriver-1
  • enabled_backends

    • 指定enable哪几种backend,用逗号分隔。
    • 每一种backend对应下面的一个section,如[lvmdriver-1]不需要和这个section中的volume_backend_name一样。
  • volume_driver
    指定driver的class在哪里。

  • default_volume_type
    默认的volume_type。

  • volume_backend_name
    和volume_type有关,后面会分析。

下面详细说明volume_type和volume_backend_name的关系:

当用户指定volume_type创建volume时,cinder-scheduler会分析这个请求,把它调度到支持该volume_type的cinder-volume上(没看code,调度肯定不止这么简单)。

之前已经用type-list看到了volume-type,还有个extra-specs-list命令可以查看volume-type和backend的关系:

[admin@maqi-openstack ~]$ cinder extra-specs-list
+--------------------------------------+-------------+------------------------------------------+
|                  ID                  |     Name    |               extra_specs                |
+--------------------------------------+-------------+------------------------------------------+
| 505d3a71-226f-4442-ae8d-8908ae9876fa | lvmdriver-1 | {u'volume_backend_name': u'lvmdriver-1'} |
+--------------------------------------+-------------+------------------------------------------+

这里的extra_specs字段就指明了两者的关系。而这里的u'lvmdriver-1',就是cinder.conf中的"volume_backend_name = lvmdriver-1"

那么问题来了:extra_specs哪儿来的?
在devstack的stack.log中,看到是调用脚本命令还创建这个volume type的。

下面在这个环境中创建另一对volume type和backend。

开始试验

  1. 创建volume type叫做new-lvm-vol-type

    [admin@maqi-openstack ~]$ cinder type-create new-lvm-vol-type
    +--------------------------------------+------------------+-------------+-----------+
    |                  ID                  |       Name       | Description | Is_Public |
    +--------------------------------------+------------------+-------------+-----------+
    | e5de6a17-f6a1-4109-9ca3-6163b21a4238 | new-lvm-vol-type |      -      |    True   |
    +--------------------------------------+------------------+-------------+-----------+
  2. 指定该volume type的backend为new_lvm_backend

    [admin@maqi-openstack ~]$ cinder type-key new-lvm-vol-type set volume_backend_name=new_lvm_backend
    
    [admin@maqi-openstack ~]$ cinder extra-specs-list
    +--------------------------------------+------------------+----------------------------------------------+
    |                  ID                  |       Name       |                 extra_specs                  |
    +--------------------------------------+------------------+----------------------------------------------+
    | 505d3a71-226f-4442-ae8d-8908ae9876fa |   lvmdriver-1    |   {u'volume_backend_name': u'lvmdriver-1'}   |
    | e5de6a17-f6a1-4109-9ca3-6163b21a4238 | new-lvm-vol-type | {u'volume_backend_name': u'new_lvm_backend'} |
    +--------------------------------------+------------------+----------------------------------------------+

    此时,创建volume会失败,因为cinder-scheduler、cinder-volume还不知道new-lvm-vol-type这种volume type要用哪个backend:

    [admin@maqi-openstack ~]$ cinder create --name volume001 --volume-type new-lvm-vol-type 1
    
    c-sch.log:2015-10-31 12:10:45.010 28538 DEBUG cinder.volume.flows.common [req-df4a534c-af9d-4db6-9eba-b40879220bb8 bbe94d4d326946fcb3ff617bec5e3796 3ffa7903f1684fc8b04092ccfbdd567e - - -] Updating volume: 8387d193-8727-4312-875d-d7ca47399fc3 with {'status': 'error'} due to: No valid host was found. No weighed hosts available error_out_volume /home/openstack/workspace/cinder/cinder/volume/flows/common.py:89
  3. 在cinder.conf中指定new_lvm_backend的详细信息

    [DEFAULT]
    default_volume_type = lvmdriver-1
    enabled_backends = lvmdriver-1,whatever_it_is           # 这里的名字无所谓,只要能找到对应的section
    
    [whatever_it_is]
    lvm_type = default
    iscsi_helper = tgtadm
    volume_group = stack-volumes-default                    # 这个vg已经存在
    volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
    volume_backend_name = new_lvm_backend                   # 在第2步创建

    重启cinder-api/cinder-volume/cinder-scheduler,之后:

    [admin@maqi-openstack ~]$ cinder service-list
    +------------------+-----------------------------------------+------+---------+-------+----------------------------+-----------------+
    |      Binary      |                   Host                  | Zone |  Status | State |         Updated_at         | Disabled Reason |
    +------------------+-----------------------------------------+------+---------+-------+----------------------------+-----------------+
    | cinder-scheduler |         maqi-openstack.novalocal        | nova | enabled |   up  | 2015-10-31T12:27:05.000000 |        -        |
    |  cinder-volume   |   maqi-openstack.novalocal@lvmdriver-1  | nova | enabled |   up  | 2015-10-31T12:27:07.000000 |        -        |
    |  cinder-volume   | maqi-openstack.novalocal@whatever_it_is | nova | enabled |   up  | 2015-10-31T12:27:07.000000 |        -        |
    +------------------+-----------------------------------------+------+---------+-------+----------------------------+-----------------+

    有意思哦,多了一个cinder-volume service,而且他的Host字段为maqi-openstack.novalocal@whatever_it_is(详细说明见后面)

  4. 使用新的volume_type创建volume

    [admin@maqi-openstack ~]$ cinder create --name volume001 --volume-type new-lvm-vol-type 1
    
    [admin@maqi-openstack ~]$ cinder list
    +--------------------------------------+-----------+-----------+------+------------------+----------+-------------+--------------------------------------+
    |                  ID                  |   Status  |    Name   | Size |   Volume Type    | Bootable | Multiattach |             Attached to              |
    +--------------------------------------+-----------+-----------+------+------------------+----------+-------------+--------------------------------------+
    | 25fe5325-4cb6-4abc-a5e5-170c349f43e4 | available |   vol009  |  1   |   lvmdriver-1    |  false   |    False    |                                      |
    | c7b95202-91de-4da0-b855-3773c70461b4 | available | volume001 |  1   | new-lvm-vol-type |  false   |    False    |                                      |
    +--------------------------------------+-----------+-----------+------+------------------+----------+-------------+--------------------------------------+
    
    [admin@maqi-openstack ~]$ cinder show c7b95202-91de-4da0-b855-3773c70461b4
    +---------------------------------------+---------------------------------------------------------+
    |                Property               |                          Value                          |
    +---------------------------------------+---------------------------------------------------------+
    |              attachments              |                            []                           |
    |           availability_zone           |                           nova                          |
    |                bootable               |                          false                          |
    |          consistencygroup_id          |                           None                          |
    |               created_at              |                2015-10-31T12:46:53.000000               |
    |              description              |                           None                          |
    |               encrypted               |                          False                          |
    |                   id                  |           c7b95202-91de-4da0-b855-3773c70461b4          |
    |                metadata               |                            {}                           |
    |              multiattach              |                          False                          |
    |                  name                 |                        volume001                        |
    |         os-vol-host-attr:host         | maqi-openstack.novalocal@whatever_it_is#new_lvm_backend |
    |     os-vol-mig-status-attr:migstat    |                           None                          |
    |     os-vol-mig-status-attr:name_id    |                           None                          |
    |      os-vol-tenant-attr:tenant_id     |             3ffa7903f1684fc8b04092ccfbdd567e            |
    |   os-volume-replication:driver_data   |                           None                          |
    | os-volume-replication:extended_status |                           None                          |
    |           replication_status          |                         disabled                        |
    |                  size                 |                            1                            |
    |              snapshot_id              |                           None                          |
    |              source_volid             |                           None                          |
    |                 status                |                        available                        |
    |                user_id                |             bbe94d4d326946fcb3ff617bec5e3796            |
    |              volume_type              |                     new-lvm-vol-type                    |
    +---------------------------------------+---------------------------------------------------------+

关于配置multiple backend就这样了。其实一般是先配置cinder.conf,再用命令行配置volume-type,并在extra_specs中指定volume_backend_name,例如:这里

下一篇笔记来说说volume的Host字段。

posted on 2016-01-24 17:51  七里山塘边  阅读(1127)  评论(0编辑  收藏  举报

导航