Glance多后端功能介绍

所谓Glance多后端,其实是针对Cinder的多后端功能对比的,我们知道在Cinder中,cinder-volume后面可以接多个存储后端,并且通过cinder types来选择使用哪个存储后端,Cinder中的这个功能很早就有了,因为Cinder要纳管多种存储,对外提供统一的接口,这个功能是刚需。但是对于Glance来说,类似Cinder的这种Glance多后端就没那么刚了,没有多后端也是可以用的,拿Ceph作为后端存储来说,如果镜像只是存在其中一个存储池A的话,要在另外的存储池B中建虚拟机,发现不能执行rbd clone操作,那么它会将该镜像下载到本地,然后再传到存储池B中,而且下载下来的镜像会缓存到本节点,只要在该节点下载过一次,后面在该节点再使用相同的镜像建虚拟机,就不需要再下载了,这种方式虽然效率低一些,但是不影响使用。但是毕竟不完美啊,所以社区一直到R版,才实现了这个功能,到T版算是生产可用,但是仍然有一些bug还在修复,不过不影响使用。

如何配置

参考这里的文档进行配置,主要配置下面几个配置项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[DEFAULT]
enabled_backends = fast:rbd, cheap:rbd, shared:file, reliable:file

[glance_store]
default_backend = fast

[shared]
filesystem_store_datadir = /opt/stack/data/glance/shared_images/
store_description = "Shared filesystem store"

[reliable]
filesystem_store_datadir = /opt/stack/data/glance/reliable
store_description = "Reliable filesystem backend"

[fast]
store_description = "Fast rbd backend"
rbd_store_chunk_size = 8
rbd_store_pool = images
rbd_store_user = admin
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rados_connect_timeout = 0

[cheap]
store_description = "Cheap rbd backend"
rbd_store_chunk_size = 8
rbd_store_pool = images
rbd_store_user = admin
rbd_store_ceph_conf = /etc/ceph/ceph1.conf
rados_connect_timeout = 0
  • enabled_backends配置的是多个后端的ID号和类型,冒号左边是ID号,跟下面的以ID为section名字的配置组对应,冒号右边的是后端存储的类型,支持rbd, file等。
  • default_backend配置的是默认后端,即上传镜像时不指定存储后端的话,默认使用这里配置的后端
  • 下面配置的就是各个存储后端的详细信息了。

配置好之后,可以通过如下的命令,来查看多后端的信息:

1
2
3
4
5
6
[root@control1 ~]# glance stores-info
+----------+--------------------------------------------------------------------+
| Property | Value |
+----------+--------------------------------------------------------------------+
| stores | [{"default": "true", "id": "rbd"}, {"id": "fast"}, {"id": "file"}] |
+----------+--------------------------------------------------------------------+

注意,该命令是直接读取的配置文件,不存数据库。

如何使用

Glance Interoperable Image Import功能介绍中介绍过上传镜像的三种方式,目前,这三种方式,都支持多后端特性,跟Cinder通过指定type不同的是,Glance中是通过Header来指定使用哪个存储后端的,我们以最简单的image upload的方式为例,来看下如何使用多后端:

  1. 首先需要创建一个镜像记录:

    1
    glance image-create --disk-format raw --container-format bare --visibility public --name testfast

    该命令对应的API调用如下:

    1
    curl -g -i -X POST http://10.110.105.30:9292/v2/images -H "Content-Type: application/json" -H "User-Agent: python-glanceclient" -H "X-Auth-Token: {SHA1}53b399279a96b953fc584fc4091ec78bbc47eea1" -d '{"container_format": "bare", "disk_format": "raw", "name": "testfast", "visibility": "public"}'

    返回值如下:

    1
    RESP: [201] Openstack-Image-Import-Methods: glance-direct,web-download Openstack-Image-Store-Ids: rbd,fast,file X-Openstack-Request-Id: req-ad9f63ef-184a-4b35-96f8-59ba7ab00975

    注意到HTTP Response中有一个Header: Openstack-Image-Store-Ids: rbd,fast,file,它表示当前系统支持哪些存储后端,即上面glance stores-info列出的内容。

  2. 然后向该镜像记录上传镜像

    1
    glance image-upload --file CentOS---7.3-64bit---2017-12-11-a.dsk e80e40ea-8567-4919-83b5-632829cf530b --backend fast

    通过--backend参数来指定要向哪个后端传镜像,其对应的API调用如下:

    1
    curl -g -i -X PUT http://10.110.105.30:9292/v2/images/e80e40ea-8567-4919-83b5-632829cf530b/file -H "Content-Type: application/octet-stream" -H "User-Agent: python-glanceclient" -H "X-Auth-Token: {SHA1}3b3d90bfe99d476eef59a67725e9436b35f0853b" -H "x-image-meta-store: fast" -d '<generator object _chunk_body at 0x7fb4c606b870>'

    可以看到在Header中通过”x-image-meta-store: fast”来指定要使用fast存储后端。
    以上命令可以合并成一条命令来执行:

    1
    glance image-create --disk-format raw --container-format bare --visibility public --name testfast --file CentOS---7.3-64bit---2017-12-11-a.dsk  --backend fast

    上传完成后,可以通过image-show命令查看Location属性,指定了该镜像使用哪个后端:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    [root@control1 ~]# glance image-show 00f121f4-929f-4a0c-b706-cfef2e4764ca
    +------------------+----------------------------------------------------------------------------------+
    | Property | Value |
    +------------------+----------------------------------------------------------------------------------+
    | checksum | 7050b89af6d23f80aa5776f51f5387af |
    | container_format | bare |
    | created_at | 2020-11-12T09:23:55Z |
    | direct_url | rbd://c5f578c9-2026-4413-bab0-963c63748a6c/fastimages/00f121f4-929f- |
    | | 4a0c-b706-cfef2e4764ca/snap |
    | disk_format | raw |
    | id | 00f121f4-929f-4a0c-b706-cfef2e4764ca |
    | locations | [{"url": "rbd://c5f578c9-2026-4413-bab0-963c63748a6c/fastimages/00f121f4-929f- |
    | | 4a0c-b706-cfef2e4764ca/snap", "metadata": {"store": "fast"}}] |
    | min_disk | 0 |
    | min_ram | 0 |
    | name | testfast |
    | os_hash_algo | sha512 |
    | os_hash_value | 367dcbf754cee36ad2823bf40d0efa36b902954d1d97eded078634eb277b0fe6cbb4d4af382a608f |
    | | d3e4cbf0656204e7a8418c7b9a194815f73601a4f2912149 |
    | os_hidden | False |
    | owner | 3c638b2eb36b4da6944040bb31084421 |
    | protected | False |
    | size | 3221225472 |
    | status | active |
    | stores | fast |
    | tags | [] |
    | updated_at | 2020-11-12T09:25:05Z |
    | virtual_size | Not available |
    | visibility | public |
    +------------------+----------------------------------------------------------------------------------+

而对于Interoperable Image Import方式来说,除了可以使用Header来指定存储后端外,还可以通过POST body中的”stores”参数来同时指定多个后端一起上传,或者”all_stores”指定所有后端,并且通过”all_stores_must_succeed”参数来设置部分后端上传失败后的行为,如下:

1
2
3
4
5
6
7
{
"method": {
"name": "glance-direct"
},
"stores": ["common", "cheap", "fast", "reliable"],
"all_stores_must_succeed": false
}

不过这些参数在U版才可用,而且还有些Bug正在修复,使用时需要注意:

总结:

在配置了Glance的多后端之后,就可以跟Cinder的多后端结合,通过boot from volume的方式,从同一个存储后端建虚拟机,volume直接从image做clone,加快了虚拟机的创建速度,也简化了镜像的管理。

参考资料:

作者

hackerain

发布于

2020-11-12

更新于

2023-10-26

许可协议