多存储支持

注意

多存储功能在 Rocky 版本中作为实验性功能引入,现在在 Train 版本中完全支持。

本文档范围

此页面描述了如何在 glance 中启用多个存储。

先决条件

  • Glance 版本 17.0.0 或更高版本

  • Glance 存储库 0.25.0 或更高版本

  • Glance 不使用 Glance 注册表

  • 可用后端

步骤

在本节中,我们将讨论可供操作员使用的配置选项,以启用多存储支持。

  • [DEFAULT] 选项组中

    • enabled_backends 必须设置为键值对,其中键代表存储的标识符,值将是存储的类型。有效值是 filehttprbdswiftcindervmware 中的一个。为了拥有多个存储,操作员可以指定用逗号分隔的多个键值对。

      警告

      存储标识符前缀 os_glance_ 已被保留。如果您定义了带有此前缀的存储标识符,glance 服务将拒绝启动。

      http 存储类型始终被 Glance 视为只读存储。这在对 /v2/info/stores 调用响应中指示,其中 http 类型的存储将具有属性 read-only: True,以及通常的 iddescription 字段。

      [DEFAULT]
      enabled_backends = fast:rbd, cheap:rbd, shared:file, reliable:file
      
  • [glance_store] 选项组中

    • default_backend 必须设置为使用 enabled_backends 选项定义的标识符之一。如果未设置 default_backend,或者它不代表有效的存储驱动程序,则会阻止 glance api 服务启动。

      [glance_store]
      default_backend = fast
      
  • 对于在 enabled_backends 部分中定义的每个存储标识符,操作员需要添加一个新的配置组,该组将定义与该特定存储相关的配置选项。

    [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
    

    注意

    store_description 是添加到每个存储的新配置选项,操作员可以在其中添加关于该存储的描述性信息。此描述在 GET /v2/info/stores 响应中显示。

后端默认值

Glance 提供了一种通过 [backend_defaults] 部分来最大限度地减少配置多存储部署时的配置量。我们可以将所有通用配置选项添加到 [backend_defaults] 组中,从而减少配置工作量并使后端部分更易于阅读。

假设我们在 glance 中配置了两个 ceph 集群作为两个不同的后端。

[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

我们可以注意到,大多数配置选项在两个后端组中都是重复的,因此是冗余的。通过使用 [backend_defaults] 部分,我们可以简化配置文件,如下所示

[backend_defaults]
rbd_store_chunk_size = 8
rbd_store_pool = images
rbd_store_user = admin
rados_connect_timeout = 0

[fast]
store_description = "Fast rbd backend"
rbd_store_ceph_conf = /etc/ceph/ceph.conf

[cheap]
store_description = "Cheap rbd backend"
rbd_store_ceph_conf = /etc/ceph/ceph1.conf

我们可以注意到,除了使配置文件更紧凑之外,[backend_defaults] 部分还可以使后端组看起来更清晰,从而使操作员专注于与特定后端相关的相关信息。

存储配置问题

请记住以下几点。

  • 由于 http 存储类型的特殊只读性质和特性,配置多个 http 类型的存储 不受支持。(此限制当前未在代码中强制执行。)

  • 每个文件系统存储实例 必须具有不同的 filesystem_store_datadir 值。(此限制当前未在代码中强制执行。)

保留的存储

在 Train 版本中,Glance 正在从以前依赖于本地目录进行临时数据存储转变为能够使用通过 glance_store 库访问的后端存储。

在 Train 版本中,除非您正在使用多存储支持功能,否则使用后端存储来实现此目的是可选的。由于您正在阅读本文档,这种情况很可能适用于您。

注意

当前,仅支持文件系统存储类型作为 Glance 保留存储。

保留存储不打算暴露给最终用户。因此,它们不会出现在存储发现调用的响应中,即 GET /v2/info/stores,也不会作为 image-create 调用的 OpenStack-image-store-ids 响应头中的值。

您无法选择保留存储的名称;这些由 Glance 定义,并以 os_glance_ 前缀开头。在 Train 版本中,您无法选择存储类型:所有保留存储必须是文件系统类型。

当前,有两个保留存储

os_glance_tasks_store

此存储用于任务引擎。它取代了已弃用的配置选项 [task]/work_dir 的使用。

os_glance_staging_store

此存储用于可互操作的镜像导入过程的暂存区域。它取代了已弃用的配置选项 [DEFAULT]/node_staging_uri 的使用。

注意

如果最终用户想要使用 CONF.enabled_backends 检索所有可用存储,则需要从该列表中显式删除保留存储。

配置

如上所述,您无法选择保留存储的名称或类型(尽管我们预计您将在未来的版本中能够配置存储类型)。

保留存储 必须 是文件系统类型。因此,您必须在 glance-api.conf 文件中为它们提供配置。您可以通过在 glance-api.conf 文件中为每个保留存储引入一个部分来执行此操作,如下所示

[os_glance_tasks_store]
filesystem_store_datadir = /var/lib/glance/tasks_work_dir

[os_glance_staging_store]
filesystem_store_datadir = /var/lib/glance/staging

由于这两个都是文件系统存储(请记住,您没有选择),因此您必须为每个存储配置的唯一选项是 filesystem_store_datadir。请记住以下几点

  • 用于保留存储的 filesystem_store_datadir 的路径必须与您用于在 enabled_backends 中列出的任何文件系统存储的路径 不同。对多个文件系统存储使用相同的数据目录 不受支持,并且可能导致数据丢失。

  • 保留存储的标识符,即 os_glance_tasks_storeos_glance_staging_store不得包含在 enabled_backends 列表中。

  • 保留存储不会出现在存储发现响应中,也不会作为 image-create 调用的 OpenStack-image-store-ids 响应头中的值。

  • 保留存储不会被接受为 image-data-upload 调用或 image-import 调用的 X-Image-Meta-Store 头的值。