Cinder multiple-backends
Cinder可以接多种存储后端。
目的:
- 搞清楚cinder.conf中的
volume_type
(default_volume_type
),enabled_backends
,volume_backend_name
- 动手实验
由来
用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”又是哪儿来的?
找了些文档来看,并且动手实验一下。
参考:
- http://giuliofidente.com/2013/06/openstack-cinder-configure-multiple-backends.html
- https://wiki.openstack.org/wiki/Cinder-multi-backend
- http://www.rushiagr.com/blog/2014/01/16/playing-around-with-cinder-multi-backend/
- http://www.sebastien-han.fr/blog/2013/04/25/ceph-and-cinder-multi-backend/
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。
开始试验
创建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 | +--------------------------------------+------------------+-------------+-----------+
指定该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
在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
(详细说明见后面)使用新的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字段。