存储指南

Red Hat OpenStack Platform 17.0

了解 OpenStack 中的持久性存储的、使用和管理

OpenStack Documentation Team

摘要

本指南详细介绍了在 Red Hat OpenStack Platform 环境中使用和管理持久性存储的不同步骤。它还包括配置和管理各种持久性存储类型的 OpenStack 服务的步骤。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。与我们分享您的成功秘诀。

使用直接文档反馈(DDF)功能

使用 添加反馈 DDF 功能,用于特定句子、段落或代码块上的直接注释。

  1. Multi-page HTML 格式查看文档。
  2. 请确定您看到文档右上角的 反馈 按钮。
  3. 用鼠标指针高亮显示您想评论的文本部分。
  4. 添加反馈
  5. 添加反馈项中输入您的意见。
  6. 可选:添加您的电子邮件地址,以便文档团队可以联系您以讨论您的问题。
  7. Submit

第 1 章 Red Hat OpenStack Platform(RHOSP)中的持久性存储简介

在 Red Hat OpenStack Platform 中,存储由三个主要服务提供:

  • Block Storage(openstack-cinder)
  • Object Storage(openstack-swift)
  • 共享文件系统服务存储(openstack-manila)

这些服务提供不同类型的持久性存储,每种存储在不同的用例中都有自己的一组优点。本指南讨论了用于一般企业存储要求的适用性。

您可以使用 RHOSP 仪表板或命令行客户端来管理云存储。您可以使用以下任一方法执行大多数操作。但是,您只能在命令行中完成一些更高级的步骤。本指南为仪表板提供了可能的步骤。

注意

有关 Red Hat OpenStack Platform 的完整文档套件,请参阅 Red Hat OpenStack Platform 文档

重要

本指南记录使用 crudini 应用一些自定义服务设置。因此,需要首先安装 crudini 软件包:

# dnf install crudini -y

RHOSP 识别两种类型的存储: 临时 和持久性。临时存储是仅与特定计算实例关联的存储。实例终止后,即它的临时存储。这种存储对基本运行时要求很有用,比如存储实例的操作系统。

永久存储 的设计旨在独立于任何正在运行的实例(永久)。此存储适用于需要被不同实例或超出特定实例生命周期之外的任何需要重复使用的数据。RHOSP 使用以下类型的持久性存储:

OpenStack 块存储服务(openstack-cinder)允许用户通过 访问块存储设备。用户可以将卷附加到实例,以用通用型持久性存储来增加其临时存储。卷可以把实例分离和重新附加到实例,只能通过它们所连接的实例进行访问。

您还可以将实例配置为使用临时存储。您可以配置块存储服务来将镜像写入卷,而不使用临时存储。然后,您可以将卷用作实例的可引导 root 卷。

卷还通过备份和快照提供固有冗余和灾难恢复。另外,您还可以加密卷以提高安全性。

容器

OpenStack Object Storage 服务(openstack-swift)提供完全分布式的存储解决方案,用于存储任何种类的静态数据或二进制对象,如媒体文件、大型数据集和磁盘镜像。Object Storage 服务使用容器来组织这些对象。

虽然卷的内容只能通过实例访问,但容器内的对象可以通过 Object Storage REST API 访问。因此,通过几乎可在云中的每个服务将对象存储服务用作存储库。

共享
共享文件系统服务(openstack-manila)提供了轻松调配远程、可共享文件系统 或共享 的方法。共享允许云中的项目开放共享存储,并可同时由多个实例使用。

每种存储类型都旨在处理特定的存储要求。容器设计为可广泛访问,而且具有所有存储类型的最高吞吐量、访问和容错能力。容器使用面向服务量多。

另一方面,卷主要用于实例消耗。它们不像容器一样获得相同的访问和性能,但它们具有更大的功能集,并且具有比容器更多的原生安全功能。共享与此相关卷类似,但它们可由多个实例使用。

以下小节详细讨论了在特定存储条件上下文中每个存储类型的架构和功能集。

1.1. 可扩展性和后端存储

通常,集群的存储解决方案提供了更大的后端可扩展性。例如,当您将 Red Hat Ceph 用作块存储(cinder)后端时,您可以通过添加更多 Ceph Object Storage Daemon(OSD)节点来扩展存储容量和冗余。块存储、对象存储(swift)和共享文件系统服务(manila)服务支持 Red Hat Ceph Storage 作为后端。

块存储服务可以使用多个存储解决方案作为离散后端。在后端级别,您可以通过添加更多后端并重启服务来扩展容量。块存储服务还具有大量受支持的后端解决方案列表,其中一些具有额外的可扩展性功能。

默认情况下,Object Storage 服务使用配置的存储节点上的文件系统,它可以使用尽可能多的空间。对象存储服务支持 XFS 和 ext4 文件系统,并可扩展为消耗尽可能多的底层块存储。您还可以通过在存储节点中添加更多存储设备来扩展容量。

共享文件系统服务从指定的存储池置备文件共享,这些共享由一个或多个第三方后端存储系统进行管理。您可以通过增加服务可用的存储池大小或数量来扩展此共享存储,或者向部署添加更多第三方后端存储系统。

1.2. 存储可访问性和管理

卷仅通过实例使用,且一次只能附加到一个实例并挂载到一个实例中。用户可以创建卷快照,它们可用于克隆或将卷恢复到之前的状态。如需更多信息,请参阅 第 1.4 节 “存储冗余和灾难恢复”。作为项目管理员,您可以使用块存储服务 创建卷类型,以汇总卷设置,如大小和后端。您可以将卷类型与 服务质量(QoS) 规格关联,为您的云用户提供不同的性能级别。您的用户可以指定创建新卷时所需的卷类型。例如,使用高性能 QoS 规格的卷可以为您的用户提供更多 IOPS,或者您的用户可以为使用较低性能 QoS 规格的卷分配更轻量级的工作负载来节省资源。

与卷一样,共享会通过实例使用。但是,共享可以直接挂载到实例内,不需要通过控制面板或 CLI 连接。共享也可以同时由多个实例挂载。共享文件系统服务还支持共享快照和克隆 ; 您还可以创建共享类型来聚合设置(与卷类型类似)。

容器中的对象可以通过 API 访问,并可提供给云中的实例和服务。这使得它们应当用作服务的对象存储库;例如,镜像服务(openstack-glance)可以将其镜像存储在由对象存储服务管理的容器中。

1.3. 存储安全性

Block Storage 服务(cinder)通过卷加密提供基本数据安全性。使用此功能,您可以将卷类型配置为通过静态密钥加密,然后密钥用于加密从配置卷类型中创建的所有卷。更多信息请参阅 第 2.7 节 “Block Storage 服务(cinder)卷加密”

对象和容器安全性是在服务和节点级别配置的。Object Storage 服务(swift)为容器和对象提供原生加密。相反,对象存储服务优先处理云中可访问性,因此仅依赖于云网络安全来保护对象数据。

共享文件系统服务(manila)可以通过访问限制来保护共享,无论是实例 IP、用户或组还是 TLS 证书。此外,一些共享文件系统服务部署具有单独的共享服务器,以管理共享网络和共享之间的关系;一些共享服务器支持甚至需要其他网络安全。例如: CIFS 共享服务器需要部署 LDAP、Active Directory 或 Kerberos 身份验证服务。

有关如何保护镜像服务(glance)的更多信息,如镜像签名和验证和元数据定义(metadef)API 限制,请参阅创建和管理镜像指南中的镜像服务 (glance)

1.4. 存储冗余和灾难恢复

Block Storage 服务(cinder)具有卷备份和恢复,为用户存储提供基本灾难恢复。使用备份来保护卷内容。该服务还支持快照。除了克隆外,您还可以使用快照将卷恢复到以前的状态。

在多后端环境中,也可以在后端间迁移卷。如果您需要使后端离线维护,这将非常有用。备份通常存储在独立于其源卷的存储后端中,以帮助保护数据。快照无法做到这一点,因为快照依赖于其源卷。

块存储服务还支持创建一致性组,从而将卷分组在一起,以便同时创建快照。这为多个卷之间提供了更高的数据一致性。更多信息请参阅 第 2.9 节 “块存储服务(cinder)一致性组”

Object Storage 服务(swift)不提供内置的备份功能。您必须在文件系统或节点级别执行所有备份。对象存储服务具有更强大的冗余和容错功能,甚至是 Object Storage 服务多次复制对象的最基本部署。您可以使用 dm-multipath 等故障转移功能来增强冗余。

共享文件系统服务没有提供共享的内置备份功能,但它允许您创建用于克隆和恢复的快照。

第 2 章 配置块存储服务(cinder)

Block Storage 服务(cinder)管理所有卷的管理、安全性、调度和整体管理。卷用作计算实例的持久性存储的主要形式。

有关卷备份的详情请参考 块存储备份指南

重要

在任何使用块存储服务和光纤通道(FC)后端的部署中,您必须在所有 Controller 节点和 Compute 节点上安装主机总线适配器(HBAs)。

块存储使用块存储 REST API 配置。

注意

确保您在使用 Block Storage REST API 版本 3,因为块存储不再支持版本 2。默认的 overcloud 部署通过设置环境变量 OS_VOLUME_API_VERSION=3.0 来为您执行此操作。

块存储 REST API 通过使用 microversions 添加增强功能来保持向后兼容性。cinder CLI 使用 REST API 版本 3.0,除非您指定了特定的微版本。例如,若要为 cinder 命令指定 3.17 微版本,请添加 --os-volume-api-version 3.17 参数。

注意

openstack CLI 只能使用块存储 REST API 版本 3.0,因为它不支持这些微版本。

2.1. 块存储服务后端

Red Hat OpenStack Platform(RHOSP)使用 director 部署。这样做有助于确保每个服务的正确配置,包括块存储服务(cinder),并通过扩展其后端。director 还有几个集成的后端配置。

RHOSP 支持将 Red Hat Ceph Storage 和 NFS 用作块存储服务后端。默认情况下,块存储服务使用 LVM 后端作为卷的软件仓库。虽然这种后端适用于测试环境,但在生产环境中不支持 LVM。

有关如何使用 RHOSP 部署 Red Hat Ceph Storage 的说明,请参阅将 Red Hat Ceph Storage 和 OpenStack Platform 与 director 一起部署

您还可以将块存储服务配置为使用支持的第三方存储设备。director 包括部署不同后端解决方案所需的组件。

有关支持的块存储服务后端设备和驱动程序的完整列表,请参阅 Red Hat OpenStack Platform 组件、插件和驱动程序 支持的 Cinder。所有第三方后端设备和驱动程序都有额外的部署指南。查看适当的部署指南,以确定后端设备或驱动程序是否需要插件。

如果将块存储配置为使用多个后端,则必须为每个后端创建一个卷类型。如果您在创建卷时没有指定后端,则块存储调度程序使用过滤器来选择合适的后端。如需更多信息,请参阅配置默认块存储调度程序过滤器

2.2. 主动 - 主动块存储以实现高可用性

在主动 - 被动模式下,如果块存储服务在超融合部署中失败,节点隔离将不可取。这是因为节点隔离可以触发不必要的重新平衡存储。边缘站点不部署 Pacemaker,但 Pacemaker 仍位于控制站点。相反,边缘站点在主动配置中部署块存储服务,以支持高可用性超融合部署。

主动 - 主动部署通过在所有可用节点之间平衡工作负载,提高扩展、性能和响应时间。在主动配置中部署块存储服务会创建一个高度可用的环境,可在部分网络中断和单一或多节点硬件故障期间维护管理层。通过主动 - 主动部署,集群可以在节点停机期间继续提供块存储服务。

但是,主动部署不会启用自动恢复的工作流。如果服务停止,在故障节点上运行的单个操作也会在停机期间失败。在这种情况下,请确认服务停机并启动了资源清理(in-flight 操作)。

2.2.1. 启用主动块存储

cinder-volume-active-active.yaml 文件允许您在主动-主动配置中部署块存储服务。此文件确保 director 使用非 Pacemaker cinder-volume heat 模板,并将 etcd 服务作为分布式锁定管理器(DLM)添加。

cinder-volume-active-active.yaml 文件还通过为 CinderVolumeCluster 参数指定一个值来定义 active-active 集群名称。CinderVolumeCluster 是一个全局块存储参数。因此,您不能将集群(active-active)和非集群后端包含在同一部署中。

重要

目前,块存储的主动配置仅适用于 Ceph RADOS 块设备(RBD)后端。如果您计划使用多个后端,则所有后端都必须支持主动-主动配置。如果部署中不包括不支持主动配置的后端,则该后端不适用于存储。在主动部署中,如果您在不支持主动主动配置的后端中保存数据,您会面临数据丢失风险。

先决条件

  • 已安装 undercloud。如需更多信息,请参阅 Director 安装和使用 中的 安装 director

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc undercloud 凭证文件:

    $ source ~/stackrc
  3. 要启用主动-主动块存储服务卷,请将此环境文件添加到带有其他环境文件的堆栈中,并部署 overcloud:

    /usr/share/openstack-tripleo-heat-templates/environments/cinder-volume-active-active.yaml

2.2.2. 用于主动块存储配置的维护命令

在部署主动块存储配置后,您可以使用下列命令来管理集群及其服务。

注意

这些命令需要 3.17 或更高版本的 Block Storage (cinder) REST API 微版本。

用户目标

命令

查看有关所有服务的详细信息,如二进制、主机、区域、状态、状态、集群、禁用原因和集群名称。

cinder --os-volume-api-version 3.17 service-list

查看有关所有集群的详细信息,如名称、二进制、状态和状态。

注意 : 当由 director 为 Ceph 后端部署时,默认集群名称为 tripleo@tripleo_ceph

cinder --os-volume-api-version 3.17 cluster-list

查看有关特定集群服务的详细信息。

cinder --os-volume-api-version 3.17 cluster-show <cluster_name>

启用集群服务。

cinder --os-volume-api-version 3.17 cluster-enable <cluster_name>

禁用集群服务。

cinder That-aramikoos-volume-api-version 3.17 cluster-disable <cluster_name>

2.2.3. 卷管理和取消管理

unmanage and manage 机制有助于使用版本 X 将卷从一个服务移动到另一个服务,使用版本 X+1。在此过程中,这两个服务都在运行。

在 Block Storage (cinder) REST API microversion 3.17 或更高版本中,您可以列出可以在 Block Storage 集群中管理的卷和快照。要查看这些列表,请将 --cluster 参数与 cinder manageable-listcinder snapshot-manageable-list 一起使用。

在块存储 REST API microversion 3.16 及更高版本中,您可以使用 cinder manage 命令的可选 --cluster 参数将非受管卷添加到块存储集群中。

2.2.4. 集群服务上的卷迁移

使用 Block Storage (cinder) REST API microversion 3.16 及更新的版本,cinder migratecinder-manage 命令使用 --cluster 参数为 active-active 部署定义目的地。

当您在块存储服务中迁移卷时,请使用可选的 --cluster 参数并省略 主机 位置参数,因为这些参数是相互排斥的。

2.2.5. 启动块存储服务维护

所有块存储卷服务在启动时执行自己的维护。

在一个环境中,在集群中分组的多个卷服务,您可以清理当前没有运行的服务。

命令 work-cleanup 会触发服务器清理。该命令返回:

  • 命令清理的服务列表。
  • 命令无法清理的服务列表,因为它们当前没有在集群中运行。

先决条件

  • 您必须是一个项目管理员才能启动块存储服务维护。
  • Block Storage (cinder) REST API microversion 3.24 或更高版本。

流程

  1. 查找 overcloud 凭证文件:

    $ source ~/<credentials_file>
    • <credentials_file > 替换为凭证文件的名称,如 overcloudrc
  2. 运行以下命令,以验证集群的所有服务是否在运行:

    $ cinder cluster-list --detailed

    或者,运行 cluster show 命令。

  3. 如果有任何服务没有运行,请运行以下命令来识别这些特定服务:

    $ cinder service-list
  4. 运行以下命令以触发服务器清理:

    $ cinder --os-volume-api-version 3.24 work-cleanup [--cluster <cluster-name>] [--host <hostname>] [--binary <binary>] [--is-up <True|true|False|false>] [--disabled <True|true|False|false>] [--resource-id <resource-id>] [--resource-type <Volume|Snapshot>]
    注意

    过滤(如 --cluster--host--binary )可定义命令清理的内容。您可以过滤集群名称、主机名、服务类型和资源类型,包括特定资源。如果您没有应用过滤,命令会尝试清理清理的所有内容。

    以下示例根据集群名称过滤:

    $ cinder --os-volume-api-version 3.24 work-cleanup --cluster tripleo@tripleo_ceph

2.3. 使用卷类型的组卷配置

使用 Red Hat OpenStack Platform,您可以创建卷类型,以便您可以对每种卷类型应用相关的设置。您可以在创建卷前和之后分配所需的卷类型。如需更多信息,请参阅创建 块存储卷 和块存储卷。以下列表显示了您可以应用到卷类型的一些关联设置:

设置使用名为 Extra Specs 的键值对与卷类型关联。当您在卷创建过程中指定卷类型时,块存储调度程序会以设置的形式应用这些键值对。您可以将多个键值对关联到同一卷类型。

您可以创建卷类型来为云用户提供不同性能级别:

  • 为每个卷类型添加特定的性能、弹性和其他 Extra Specs 作为键值对。
  • 将不同的 QoS 性能限值列表或 QoS 规格与卷类型相关联。

当用户创建卷时,他们可以选择满足其性能要求的适当卷类型。

如果您创建卷且不指定卷类型,则块存储将使用默认卷类型。您可以使用 Block Storage (cinder)配置文件来定义应用到所有项目(租户)的一般默认卷类型。但是,如果部署使用特定于项目的卷类型,请确保为各个项目定义默认卷类型。在这种情况下,块存储使用特定于项目的卷类型,而不是一般的默认卷类型。如需更多信息,请参阅 定义项目特定默认卷类型

2.3.1. 列出后端驱动程序属性

与卷类型关联的属性使用名为 Extra Specs 的键值对。每个卷类型后端驱动程序支持自己的一组 Extra Specs。有关驱动程序支持的 Extra Specs 的更多信息,请参阅后端驱动程序文档。

或者,您可以直接查询块存储主机,以列出其后端驱动程序的定义良好的标准 Extra Specs。

先决条件

  • 您必须是一个项目管理员,才能直接查询块存储主机。

流程

  1. 查找 overcloud 凭证文件:

    $ source ~/<credentials_file>
    • <credentials_file > 替换为凭证文件的名称,如 overcloudrc
  2. 确定 cinder-volume 的主机:

    $ cinder service-list

    此命令将返回一个包含每个块存储服务主机的列表(cinder-backupcinder-schedulercinder-volume)。例如:

    +------------------+---------------------------+------+---------
    |      Binary      |            Host           | Zone |  Status ...
    +------------------+---------------------------+------+---------
    |  cinder-backup   |   localhost.localdomain   | nova | enabled ...
    | cinder-scheduler |   localhost.localdomain   | nova | enabled ...
    |  cinder-volume   | *localhost.localdomain@lvm* | nova | enabled ...
    +------------------+---------------------------+------+---------
  3. 显示驱动程序功能,以确定块存储服务支持的 Extra Specs:

    $ cinder get-capabilities <volsvchost>
    • <volsvchost> 替换为 cinder-volume 的主机。例如:

      $ cinder get-capabilities localhost.localdomain@lvm
          +---------------------+-----------------------------------------+
          |     Volume stats    |                        Value            |
          +---------------------+-----------------------------------------+
          |     description     |                         None            |
          |     display_name    |                         None            |
          |    driver_version   |                        3.0.0            |
          |      namespace      | OS::Storage::Capabilities::localhost.loc...
          |      pool_name      |                         None            |
          |   storage_protocol  |                        iSCSI            |
          |     vendor_name     |                     Open Source         |
          |      visibility     |                         None            |
          | volume_backend_name |                         lvm             |
          +---------------------+-----------------------------------------+
          +--------------------+------------------------------------------+
          | Backend properties |                        Value             |
          +--------------------+------------------------------------------+
          |    compression     |      {u'type': u'boolean', u'description'...
          |        qos         |              {u'type': u'boolean', u'des ...
          |    replication     |      {u'type': u'boolean', u'description'...
          | thin_provisioning  | {u'type': u'boolean', u'description': u'S...
          +--------------------+------------------------------------------+

      Backend properties 列中显示您可以设置的 Extra Spec Keys 列表,而 Value 列则提供有效对应值的信息。

2.3.2. 创建并配置卷类型

您可以创建卷类型,以便您可以将关联的设置应用到每种卷类型。例如,您可以创建卷类型来为云用户提供不同级别的性能:

  • 为每个卷类型添加特定的性能、弹性和其他 Extra Specs 作为键值对。
  • 将不同的 QoS 性能限值列表或 QoS 规格与卷类型相关联。如需更多信息,请参阅 块存储服务(cinder)服务质量规格

当用户创建卷时,他们可以选择满足其性能要求的适当卷类型。

先决条件

  • 您必须是一个项目管理员来创建和配置卷类型。
  • 访问 Red Hat OpenStack Platform(RHOSP)Dashboard(horizon)。如需更多信息,请参阅 OpenStack 控制面板简介

流程

  1. 以 admin 用户身份登录控制面板。
  2. 选择 Admin > Volumes > Volume Types
  3. Create Volume Type
  4. Name 字段中输入卷类型名称。
  5. Create Volume Type。新类型会出现在 Volume Types 表中。
  6. 选择卷类型的 View Extra Specs 操作。
  7. 单击 Create,再指定 KeyValue。键值对必须有效;否则,在卷创建过程中指定卷类型会导致错误。
  8. Create。关联的设置(键值对)现在显示在 Extra Specs 表中。

默认情况下,所有 OpenStack 项目都可以访问所有卷类型。如果您需要创建具有受限访问权限的卷类型,需要通过 CLI 进行。具体步骤请参阅 创建和配置私有卷类型

2.3.3. 编辑卷类型

编辑仪表板中的卷类型,以修改卷类型的 Extra Specs 配置。您还可以删除卷类型。

先决条件

  • 您必须是一个项目管理员来编辑或删除卷类型。
  • 访问 Red Hat OpenStack Platform(RHOSP)Dashboard(horizon)。如需更多信息,请参阅 OpenStack 控制面板简介

流程

  1. 以 admin 用户身份登录控制面板。
  2. 选择 Admin > Volumes > Volume Types
  3. Volume Types 表中,选择卷类型的 View Extra Specs 操作。
  4. 在此页面的 Extra Specs 表中,您可以:

    • 向卷类型添加新设置。要做到这一点,点 Create 并指定您要与卷类型关联的新设置的键/值对。
    • 选择设置的 Edit action,编辑与卷类型关联的现有设置。
    • 选择额外 specs 复选框并点击 Delete Extra Specs 以及下一个对话框来删除与卷类型关联的现有设置。

要删除卷类型,请从卷类型表中选中其对应的复选框,然后点 Delete Volume Types

2.3.4. 创建并配置私有卷类型

默认情况下,所有卷类型都可用于所有项目(租户)。您可以通过标记 私有 来创建受限卷类型。为此,请将卷类型的 is-public 标志设为 false,因为此标志的默认值是 true。

私有卷类型对于使用某些属性限制对卷的访问很有用。通常,这些设置应仅可供特定项目使用。例如,新后端或计算正在测试的高性能配置。

先决条件

  • 您必须是一个项目管理员,才能为私有卷类型创建、查看或配置访问权限。

流程

  1. 查找 overcloud 凭证文件:

    $ source ~/<credentials_file>
    • <credentials_file > 替换为凭证文件的名称,如 overcloudrc
  2. 创建新的 cinder 卷类型,并将 is-public 标志设置为 false

    $ cinder type-create --is-public false <type_name>
    • <type_name > 替换为您要调用这个新私有卷类型的名称。

默认情况下,私有卷类型只能由其创建者访问。但是,管理员用户可以通过以下命令查找并查看私有卷类型:

$ cinder type-list

此命令列出公共和私有卷类型的名称和 ID。您需要卷类型的 ID 来提供对它的访问。

在项目级别授予私有卷类型的访问权限。因此,您需要知道所需项目的 ID。如果您不知道这个租户 ID,但您知道这个项目的用户名,然后运行:

注意

如果您不确定这个用户名,openstack user list 命令会列出所有配置的用户的名称和 ID。

$ openstack user show <user_name>
  • 将 &lt ;user_name > 替换为所需项目的用户名称,以显示该用户详细信息的列表,包括该用户所关联的项目的 tenantId

要授予项目对私有卷类型的访问权限,请运行:

$ cinder  type-access-add --volume-type <type_id> --project-id <tenant_id>
  • <type_id> 替换为所需的私有卷类型的 ID。
  • <tenant_id > 替换为所需的租户 ID。

要查看哪些项目有权访问私有卷类型,请运行:

$ cinder  type-access-list --volume-type <type_id>

要从私有卷类型的访问列表中删除项目,请运行:

$ cinder  type-access-remove --volume-type <type_id> --project-id <tenant_id>

2.3.5. 定义特定于项目的默认卷类型

可选: 对于复杂的部署,项目管理员可以为各个项目定义默认卷类型(租户)。

如果您创建卷且不指定卷类型,则块存储将使用默认卷类型。

您可以使用 Block Storage (cinder)配置文件 cinder.confdefault_volume_type 选项来定义适用于所有项目的通用默认卷类型。

但是,如果您的 Red Hat OpenStack Platform (RHOSP)部署使用特定于项目的卷类型,请确保为各个项目定义默认卷类型。在这种情况下,块存储使用特定于项目的卷类型,而不是一般的默认卷类型。以下 RHOSP 部署示例需要特定于项目的默认卷类型:

  • 跨多个可用区(AZ)的分布式 RHOSP 部署。每个 AZ 都位于自己的项目中,并拥有自己的卷类型。
  • 适合公司三个不同部门的 RHOSP 部署。每个部门都在自己的项目中,拥有自己的专用卷类型。

先决条件

  • 每个项目中至少有一个卷类型,它将是特定于项目的默认卷类型。如需更多信息,请参阅 创建和配置卷类型
  • 块存储 REST API 微版本 3.62 或更高版本。
  • 只有项目管理员可以为其项目定义、清除或列出默认卷类型。

流程

  1. 查找 overcloud 凭证文件:

    $ source ~/<credentials_file>
    • <credentials_file > 替换为凭证文件的名称,如 overcloudrc
  2. 定义、清除或列出项目的默认卷类型:

    注意

    您必须将这些命令中的 < project_id > 替换为所需项目的 ID。若要查找每个租户的 ID 和名称,请运行 openstack project list 命令。

    • 为项目定义默认卷类型:

      $ cinder --os-volume-api-version 3.62 default-type-set <volume_type> <project_id>
      • <volume_type> 替换为所需卷类型的名称或 ID。您可以运行 cinder type-list 命令列出所有卷类型的名称和 ID。
    • 清除项目的默认卷类型:

      $ cinder --os-volume-api-version 3.62 default-type-unset <project_id>
    • 列出项目的默认卷类型:

      $ cinder --os-volume-api-version 3.62 default-type-list --project <project_id>

2.4. 为块存储服务(cinder)创建并配置内部项目。

一些块存储功能(例如,image-Volume 缓存)需要配置 内部租户。块存储服务使用此租户/项目来管理无需向普通用户公开的块存储项目。此类项目的示例是缓存的用于频繁卷克隆或迁移卷临时副本的镜像。

流程

  1. 要配置内部项目,首先请创建一个名为 cinder-internal 的通用项目和用户。要做到这一点,登录到 Controller 节点并运行:
$ openstack project create --enable --description "Block Storage Internal Project" cinder-internal
    +-------------+----------------------------------+
    |   Property  |              Value               |
    +-------------+----------------------------------+
    | description |  Block Storage Internal Tenant   |
    |   enabled   |               True               |
    |      id     | cb91e1fe446a45628bb2b139d7dccaef |
    |     name    |         cinder-internal          |
    +-------------+----------------------------------+
$ openstack user create --project cinder-internal cinder-internal
    +----------+----------------------------------+
    | Property |              Value               |
    +----------+----------------------------------+
    |  email   |               None               |
    | enabled  |               True               |
    |    id    | 84e9672c64f041d6bfa7a930f558d946 |
    |   name   |         cinder-internal          |
    |project_id| cb91e1fe446a45628bb2b139d7dccaef |
    | username |         cinder-internal          |
    +----------+----------------------------------+

2.5. 配置 image-volume 缓存

块存储服务具有可选的 Image-Volume 缓存,可在从镜像创建卷时使用。这个缓存旨在提高从常用镜像创建卷的速度。有关如何从镜像创建卷的详情,请参考创建块存储卷

启用后,image-Volume 缓存会在第一次创建卷时存储镜像的副本。此存储的镜像将本地缓存到块存储后端,以帮助在下次用于创建卷时提高性能。Image-Volume 缓存的限制可以设置为大小(以 GB 为单位)、镜像数或两者。

几个后端支持 Image-Volume 缓存。如果您使用第三方后端,请参阅其文档以了解有关 image-Volume 缓存支持的信息。

先决条件

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc undercloud 凭证文件:

    $ source ~/stackrc
  3. 要在后端上启用并配置 Image-Volume 缓存,您必须将以下值添加到 overcloud 部署命令中包含的环境文件的 ExtraConfig 部分中:

    parameter_defaults:
      ExtraConfig:
        cinder::config::cinder_config:
          DEFAULT/cinder_internal_tenant_project_id:
            value: TENANTID 1
          DEFAULT/cinder_internal_tenant_user_id:
            value: USERID 2
          BACKEND/image_volume_cache_enabled: 3
            value: True
          BACKEND/image_volume_cache_max_size_gb:
            value: MAXSIZE 4
          BACKEND/image_volume_cache_max_count:
            value: MAXNUMBER 5
    1
    TENANTID 替换为 cinder-internal 项目的 ID。
    2
    USERID 替换为 cinder-internal 用户的 ID。
    3
    BACKEND 替换为目标后端的名称(特别是,其 volume_backend_name 值)。
    4
    默认情况下,Image-Volume 缓存大小仅受后端的限制。将 MAXSIZE 设置为所需的大小(以 GB 为单位)。
    5
    MAXNUMBER 设置为镜像的最大数量。

    块存储服务数据库使用时间戳来跟踪每个缓存的镜像最后一次用于创建镜像时。如果设置了 或 MAXSIZEMAXNUMBER,则块存储服务将根据需要删除缓存的镜像,以便新服务器进行。满足 Image-Volume 缓存限制时,首先删除具有最旧的时间戳的缓存镜像。

  4. 将更新保存到环境文件。
  5. 将环境文件添加到与其他环境文件的堆栈中,并部署 overcloud。

2.6. Block Storage 服务(cinder)服务质量规格

您可以通过创建与每种卷类型关联的服务质量(QoS)规格,将性能限制应用到云用户创建的卷。例如,使用高性能 QoS 规格的卷可为您的用户提供更多 IOPS,或者用户可以为使用较低性能 QoS 规格的卷分配更轻量级的工作负载来节省资源。

注意

您必须是一个项目管理员,才能创建、配置、关联和解除关联 QoS 规格。

在创建 QoS 规格时,您必须选择所需的消费者。消费者决定您要应用 QoS 限制的位置,并确定哪些 QoS 属性键可用于定义 QoS 限制。有关可用消费者的更多信息,请参阅 QoS 规格的消费者

您可以通过将所需的 QoS 属性键设置为部署特定值来创建卷性能限制。有关块存储服务(cinder)提供的 QoS 属性键的更多信息,请参阅 块存储 QoS 属性键

要创建 QoS 规格并将其与卷类型关联,请完成以下任务:

  1. 创建并配置 QoS 规格。
  2. 将 QoS 规格与卷类型关联。

您可以使用控制面板或使用 CLI 创建、配置和使用 QoS 规格与卷类型相关联。

2.6.1. QoS 规格的用户

在创建 QoS 规格时,您必须选择所需的消费者。消费者决定您要应用 QoS 限制的位置,并确定哪些 QoS 属性键可用于定义 QoS 限制。Block Storage 服务(cinder)支持以下 QoS 规格用户:

  • 前端 :当卷附加到实例时,计算服务(nova)应用 QoS 限制。Compute 服务支持块存储服务提供的所有 QoS 属性键。
  • 后端 :关联卷类型的后端驱动程序应用 QoS 限制。每个后端驱动程序支持自己的一组 QoS 属性键。有关驱动程序支持的 QoS 属性键的更多信息,请参阅后端驱动程序文档。

    当不支持 前端 消费者时,您可以使用后端 消费者。例如,当通过裸机置备服务(ironic)将卷附加到裸机节点时。

  • 两者 :用户在可能的情况下应用 QoS 限制。因此,这个使用者类型支持以下 QoS 属性键:

    • 当卷附加到一个实例时,您可以使用 Compute 服务和后端驱动程序支持的每个 QoS 属性键。
    • 当卷没有附加到实例时,您只能使用后端驱动程序支持的 QoS 属性键。

2.6.2. 块存储 QoS 属性键

块存储服务为您提供了 QoS 属性键,以便您可以限制云用户创建的卷的性能。这些限制使用以下两个行业标准测量存储卷性能:

  • 每秒输入/输出操作(IOPS)
  • 数据传输率,以字节/秒为单位

QoS 规格的消费者决定支持哪些 QoS 属性键。如需更多信息,请参阅 QoS 规格的消费者

块存储无法对 QoS 属性键进行错误检查,因为一些 QoS 属性键由后端驱动程序外部定义。因此,块存储会忽略任何无效的或不支持的 QoS 属性键。

重要

确保正确解析 QoS 属性键。包含错误错误属性键的卷性能限制将被忽略。

对于 IOPS 和数据传输率测量,您可以配置以下性能限制:

固定限制
通常,固定限制应该定义卷性能测量的平均使用量。
突发限制

通常,突发限制应该定义卷性能测量的大量活动周期。突发限制为特定时间增加活动率,同时保持固定限值较低,以实现平均使用量。

注意

突发限制都使用 1 秒的突发长度。

总限值

使用 total bang QoS 属性键为所需性能限制的读写操作指定全局限制。

注意

您可以把独立的限制应用到读写操作,而不使用总限制,或者只限制读取或写入操作。

读取限制

使用 readbang QoS 属性键指定只适用于所需性能限制的 读取操作 的限制。

注意

当您指定总限制时,会忽略这个限制。

写入限制

指定一个限制,它只适用于所需的性能限制的写入操作,方法是使用 write the QoS 属性键。

注意

当您指定总限制时,会忽略这个限制。

您可以使用以下块存储 QoS 属性键为部署创建卷性能限制:

注意

所有 QoS 属性键 的默认值为 0,这意味着限制是不受限制的。

表 2.1. 块存储 QoS 属性键

性能限制测量单元QoS 属性键

修复了 IOPS

IOPS

total_iops_sec

read_iops_sec

write_iops_sec

修复了根据卷的大小计算的 IOPS。

有关这些限制的使用限制的更多信息,请参阅 根据卷大小 扩展的 QoS 限制

每 GB 的 IOPS

total_iops_sec_per_gb

read_iops_sec_per_gb

write_iops_sec_per_gb

burst IOPS

IOPS

total_iops_sec_max

read_iops_sec_max

write_iops_sec_max

修复了数据传输率

每秒字节数

total_bytes_sec

read_bytes_sec

write_bytes_sec

突发数据传输率

每秒字节数

total_bytes_sec_max

read_bytes_sec_max

write_bytes_sec_max

计算 IOPS 限制时 IO 请求的大小。

如需更多信息,请参阅为 IOPS 限制设置 IO 请求大小

bytes

size_iops_sec

2.6.2.1. 为 IOPS 限制设置 IO 请求大小

如果您实施 IOPS 卷性能限制,您还应指定典型的 IO 请求大小,以防止用户绕过这些限制。如果您不提交多个大型 IO 请求,而不是许多较小的 IO 请求。

使用 size_iops_sec QoS 属性键指定典型 IO 请求的最大大小(以字节为单位)。块存储服务使用此大小来计算提交的每个 IO 请求的典型 IO 请求比例数量,例如:

size_iops_sec=4096

  • 8 KB 请求计为两个请求。
  • 6 KB 请求计为一和一半请求。
  • 任何小于 4 KB 的请求都被计算为一个请求。

块存储服务仅在计算 IOPS 限制时使用此 IO 请求大小限制。

注意

size_iops_sec 的默认值为 0, 它会在应用 IOPS 限制时忽略 IO 请求的大小。

2.6.2.2. 根据卷大小缩放的 IOPS 限制

您可以创建 IOPS 卷性能限制,由用户创建的卷容量决定。这些服务质量(QoS)限制了置备卷的大小的规模。例如,如果卷类型的 IOPS 限制为每 GB 卷大小为 500,则读取操作的大小为 500,则此卷类型置备的 3 GB 卷将具有 1500 的读取 IOPS 限制。

重要

在卷附加到实例时,确定卷的大小。因此,如果在实例附加到实例时更改了卷的大小,则这些限制仅在这个卷分离时重新计算新卷大小,然后重新附加到一个实例。

您可以使用以下 QoS 属性键(以 IOPS 为单位)来创建可扩展的卷性能限制:

  • total_iops_sec_per_gb :为读写操作指定每 GB 卷大小的全局 IOPS 限制。

    注意

    您可以把独立的限制应用到读写操作,而不使用总限制,或者只限制读取或写入操作。

  • read_iops_sec_per_gb :指定每个 GB 卷大小的 IOPS 限制,它只适用于读取操作。

    注意

    当您指定总限制时,会忽略这个限制。

  • write_iops_sec_per_gb :指定每个 GB 的卷大小的 IOPS 限制,它只适用于写入操作。

    注意

    当您指定总限制时,会忽略这个限制。

重要

包含这些 QoS 限值的 QoS 规格的消费者可以是 前端,也可以是 两者,但不能是 后端。如需更多信息,请参阅 QoS 规格的消费者

2.6.3. 使用仪表板创建和配置 QoS 规格

服务质量(QoS)规格是卷性能 QoS 限制列表。您可以通过将 QoS 属性键设置为部署特定值来创建每个 QoS 限制。要将 QoS 性能限制应用到卷,您必须将 QoS 规格与所需的卷类型关联。

先决条件

  • 您必须是一个项目管理员,才能创建、配置、关联和解除关联 QoS 规格。
  • 访问 Red Hat OpenStack Platform(RHOSP)Dashboard(horizon)。如需更多信息,请参阅 OpenStack 控制面板简介

流程

  1. 以 admin 用户身份登录控制面板。
  2. 选择 Admin > Volumes > Volume Types
  3. QoS Specs 表中,点 Create QoS Spec
  4. 输入 QoS Spec 的名称。
  5. Consumer 字段中,选择此 QoS 规格的消费者。如需更多信息,请参阅 QoS 规格的消费者
  6. Create。新的 QoS 规格显示在 QoS Specs 表中。
  7. QoS Specs 表中,选择新 QoS 规范的 Manage Specs 操作来打开 Specs 窗口,在其中添加 QoS 性能限制。
  8. Specs 窗口中点 Create 打开 Create Extra Specs 窗口。
  9. Key 字段中为 QoS 性能限制指定 QoS 属性键,并在 Value 字段中设置性能限制值。有关可用属性键的更多信息,请参阅 块存储 QoS 属性键

    重要

    确保正确解析 QoS 属性键。包含错误错误属性键的卷性能限制将被忽略。

  10. Create 在您的 QoS 规格中添加 QoS 限制。
  11. 对您要添加到 QoS 规格的每个 QoS 限制重复步骤 7 到 10。

2.6.4. 使用 CLI 创建并配置 QoS 规格

服务质量(QoS)规格是卷性能 QoS 限制列表。您可以通过将 QoS 属性键设置为部署特定值来创建每个 QoS 限制。要将 QoS 性能限制应用到卷,您必须将 QoS 规格与所需的卷类型关联。

先决条件

  • 您必须是一个项目管理员,才能创建、配置、关联和解除关联 QoS 规格。

流程

  1. 查找 overcloud 凭证文件:

    $ source ~/<credentials_file>
    • <credentials_file > 替换为凭证文件的名称,如 overcloudrc
  2. 创建 QoS 规格:

    $ openstack volume qos create [--consumer <qos_spec_consumer>] <qos_spec_name>
    • 可选:将 <qos_spec_consumer > 替换为这个 QoS 规格所需的消费者。如果未指定,则消费者默认为 两者。如需更多信息,请参阅 QoS 规格的消费者
    • <qos_spec_name > 替换为 QoS 规格的名称。
  3. 通过为要添加的每个 QoS 限制指定单独的 --property <key=value&gt; 参数,为 QoS 规格添加性能限制:

    $ openstack volume qos set --property <key>=<value> <qos_spec_name>
    • <key > 替换为所需性能约束的 QoS 属性键。如需更多信息,请参阅 块存储 QoS 属性键

      重要

      确保正确解析 QoS 属性键。包含错误错误属性键的卷性能限制将被忽略。

    • <value > 替换为这个性能约束的特定于部署的限制,在 QoS 属性键所需的测量单元中。
    • <qos_spec_name > 替换为 QoS 规格的名称或 ID。

      Example:

      $ openstack volume qos set \
       --property read_iops_sec=5000 \
       --property write_iops_sec=7000 \
       myqoslimits
  4. 查看 QoS 规格:

    $ openstack volume qos list
    +--------------------------------------+---------+-----------+--------------+-----------------------------------------------------+
    | ID                                   | Name    | Consumer  | Associations | Properties                                          |
    +--------------------------------------+---------+-----------+--------------+-----------------------------------------------------+
    | 204c6ba2-c67c-4ac8-918a-03f101811235 | myqoslimits | front-end |              | read_iops_sec='5000', write_iops_sec='7000' |
    +--------------------------------------+---------+-----------+--------------+-----------------------------------------------------+

    这个命令提供了所有配置的 QoS 规格的配置详情表。

2.6.5. 使用仪表板将 QoS 规格与卷类型关联

您必须将服务质量(QoS)规格与现有卷类型关联,才能将 QoS 限制应用到卷。

重要

如果卷已附加到一个实例,则 QoS 限制仅在卷分离时才会应用到这个卷,然后重新附加到这个实例。

先决条件

流程

  1. 以 admin 用户身份登录控制面板。
  2. 选择 Admin > Volumes > Volume Types
  3. 卷类型 表中,选择所需 卷类型的管理 QoS Spec 关联 操作。
  4. 要关联的 QoS Spec 列表中选择所需的 QoS 规格。
  5. 单击关联。QoS 规格添加到编辑 卷类型的关联 QoS Spec 列中。

2.6.6. 使用 CLI 将 QoS 规格与卷类型关联

您必须将服务质量(QoS)规格与现有卷类型关联,才能将 QoS 限制应用到卷。

重要

如果卷已附加到一个实例,则 QoS 限制仅在卷分离时才会应用到这个卷,然后重新附加到这个实例。

先决条件

流程

  1. 查找 overcloud 凭证文件:

    $ source ~/<credentials_file>
    • <credentials_file > 替换为凭证文件的名称,如 overcloudrc
  2. 将所需的 QoS 规格与所需的卷类型关联:

    $ openstack volume qos associate <qos_spec_name> <volume_type>
    • <qos_spec_name > 替换为 QoS 规格的名称或 ID。您可以运行 openstack volume qos list 命令来列出所有 QoS 规格的名称和 ID。
    • <volume_type > 替换为卷类型的名称或 ID。您可以运行 cinder type-list 命令列出所有卷类型的名称和 ID。
  3. 验证 QoS 规格是否已关联:

    $ openstack volume qos list

    输出表 的关联 列显示哪些卷类型与此 QoS 规格相关联。

2.6.7. 使用仪表板将 QoS 规格与卷类型解除关联

当您不再希望 QoS 限制应用到该卷类型的卷时,您可以从卷类型解除服务质量(QoS)规格。

重要

如果卷已附加到一个实例,则 QoS 限制仅在卷分离时从这个卷中删除,然后重新附加到这个实例。

先决条件

  • 您必须是一个项目管理员,才能创建、配置、关联和解除关联 QoS 规格。
  • 访问 Red Hat OpenStack Platform(RHOSP)Dashboard(horizon)。如需更多信息,请参阅 OpenStack 控制面板简介

流程

  1. 以 admin 用户身份登录控制面板。
  2. 选择 Admin > Volumes > Volume Types
  3. 卷类型 表中,选择所需 卷类型的管理 QoS Spec 关联 操作。
  4. 要关联的 QoS Spec 列表中选择 None
  5. 单击关联

    QoS 规格应该从编辑 卷类型的关联 QoS Spec 列中删除。

2.6.8. 使用 CLI 将 QoS 规格与卷类型解除关联

当您不再希望 QoS 限制应用到该卷类型的卷时,您可以从卷类型解除服务质量(QoS)规格。

重要

如果卷已附加到一个实例,则 QoS 限制仅在卷分离时从这个卷中删除,然后重新附加到这个实例。

先决条件

  • 您必须是一个项目管理员,才能创建、配置、关联和解除关联 QoS 规格。

流程

  1. 查找 overcloud 凭证文件:

    $ source ~/<credentials_file>
    • <credentials_file > 替换为凭证文件的名称,如 overcloudrc
  2. 解除与 QoS 规格关联的卷类型。当多个卷类型与同一 QoS 规格关联时,您可以解除关联特定卷类型或所有卷类型:

    • 解除与 QoS 规格关联的特定卷类型:

      $ openstack volume qos disassociate <qos_spec_name> --volume-type <volume_type>
      • <qos_spec_name > 替换为 QoS 规格的名称或 ID。您可以运行 openstack volume qos list 命令来列出所有 QoS 规格的名称和 ID。
      • <volume_type > 替换为与此 QoS 规格关联的卷类型的名称或 ID。您可以运行 cinder type-list 命令列出所有卷类型的名称和 ID。
    • 解除与 QoS 规格关联的所有卷类型:

      $ openstack volume qos disassociate <qos_spec_name> --all
  3. 验证 QoS 规格是否已解除关联:

    $ openstack volume qos list

    此 QoS 规格的 关联 列不应指定卷类型或为空。

2.7. Block Storage 服务(cinder)卷加密

卷加密有助于在卷后端被破坏或立即停止时提供基本数据保护。计算和块存储服务都集成,允许实例读取访问和使用加密卷。您必须部署 Barbican,才能利用卷加密。

重要
  • 基于文件的卷(比如 NFS)不支持卷加密。
  • 不支持将未加密的卷重新调整为相同大小的加密卷,因为加密卷需要额外的空间来存储加密数据。有关加密未加密的卷的详情,请参考 加密未加密的卷

卷加密通过卷类型应用。有关加密卷类型的详情,请参考 使用控制面板配置块存储服务卷加密, 或使用 CLI 配置块存储服务卷加密

如需更多信息,请参阅使用 OpenStack Key Manager (barbican)管理块存储(cinder)加密密钥,请参阅 加密块存储(cinder)卷

2.7.1. 使用 Dashboard 配置块存储服务卷加密

要创建加密的卷,您首先需要一个 加密的卷类型。加密卷类型涉及设置它应使用的供应商类、密码和密钥大小。您还可以重新配置加密卷类型的加密设置。

您可以调用加密的卷类型来自动创建加密的卷。

先决条件

  • 您必须是一个项目管理员来创建加密的卷。
  • 访问 Red Hat OpenStack Platform(RHOSP)Dashboard(horizon)。如需更多信息,请参阅 OpenStack 控制面板简介

流程

  1. 以 admin 用户身份登录控制面板。
  2. 选择 Admin > Volumes > Volume Types
  3. 在要加密的卷的 Actions 列中,选择 Create Encryption 以启动 Create Volume Type Encryption 向导。
  4. 在那里,配置卷类型加密的 提供程序控制位置CipherKey Size 设置。Description 列描述每个设置。

    重要

    以下列表的值是 ProviderCipherKey Size 唯一支持的选项。

    1. Provider 输入 luks
    2. Cipher 输入 aes-xts-plain64
    3. Key Size 输入 256
  5. Create Volume Type Encryption

您还可以重新配置加密卷类型的加密设置。

  1. 从卷类型的 Actions 列中选择 Update Encryption,以启动 Update Volume Type Encryption 向导。
  2. 在 Project > Compute > Volumes 中,检查 Volumes 表中的 Encrypted 列来确定卷是否加密。
  3. 如果卷已加密,请单击该列中的 Yes 来查看加密设置。

2.7.2. 使用 CLI 配置块存储服务卷加密

要创建加密的卷,您首先需要一个 加密的卷类型。加密卷类型涉及设置它应使用的供应商类、密码和密钥大小。

先决条件

  • 您必须是一个项目管理员来创建加密的卷。

流程

  1. 查找 overcloud 凭证文件:

    $ source ~/<credentials_file>
    • <credentials_file > 替换为凭证文件的名称,如 overcloudrc
  2. 创建卷类型:

    $ cinder type-create myEncType
  3. 配置密码、密钥大小、控制位置和提供程序设置:

    $ cinder encryption-type-create --cipher aes-xts-plain64 --key-size 256 --control-location front-end myEncType luks
  4. 创建加密的卷:

    $ cinder --debug create 1 --volume-type myEncType --name myEncVol

2.7.3. 自动删除卷镜像加密密钥

当块存储服务(cinder)将加密卷上传到镜像服务(glance)时,会在密钥管理服务(barbican)中创建一个加密密钥。这会在加密密钥和存储的镜像间创建一个 1:1 关系。

加密密钥删除可防止密钥管理服务无限度地消耗资源。块存储、密钥管理和镜像服务会自动管理加密卷的密钥,包括删除密钥。

块存储服务自动为卷镜像添加两个属性:

  • cinder_encryption_key_id - Key Management 服务存储用于特定镜像的加密密钥的标识符。
  • cinder_encryption_key_deletion_policy - 告知镜像服务是否删除与此镜像关联的密钥。
重要

这些属性的值会自动分配。为了避免意外的数据丢失,请不要调整这些值

当您创建卷镜像时,块存储服务会将 cinder_encryption_key_deletion_policy 属性设置为 on_image_deletion。当您删除卷镜像时,如果 cinder_encryption_key_deletion_policy 等于 on_image_deletion,则镜像服务会删除对应的加密密钥。

重要

红帽不推荐手动操作 cinder_encryption_key_idcinder_encryption_key_deletion_policy 属性。如果您使用由 cinder_encryption_key_id 值为任何其他目的标识的加密密钥,则可能会面临数据丢失。

2.8. 为块存储卷后端部署可用区

可用域是特定于供应商的,对云实例和服务进行分组的方法。director 使用 CinderXXXAvailabilityZone 参数(其中 XXX 与特定后端关联)来配置块存储卷后端的不同可用区。

先决条件

  • 已安装 undercloud。如需更多信息,请参阅 Director 安装和使用 中的 安装 director

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc undercloud 凭证文件:

    $ source ~/stackrc
  3. 在环境文件中添加以下参数以创建两个可用区:

    parameter_defaults:
     CinderXXXAvailabilityZone: zone1
     CinderYYYAvailabilityZone: zone2
    • 使用支持的后端值替换 XXXYYY,例如:

      CinderISCSIAvailabilityZone
      CinderNfsAvailabilityZone
      CinderRbdAvailabilityZone
      注意

      搜索 /usr/share/openstack-tripleo-heat-templates/deployment/cinder/ 目录,以查找与后端值关联的 heat 模板。

      以下示例部署两个后端,其中 rbd 是 zone 1,并且 iSCSI 是 zone 2:

      parameter_defaults:
       CinderRbdAvailabilityZone: zone1
       CinderISCSIAvailabilityZone: zone2
  4. 将更新保存到环境文件。
  5. 将环境文件添加到与其他环境文件的堆栈中,并部署 overcloud。

2.9. 块存储服务(cinder)一致性组

您可以使用 Block Storage(cinder)服务将一致性组设置为将多个卷作为单个实体分组到一起。这意味着,您可以同时对多个卷执行操作,而不是单独执行。您可以使用一致性组为多个卷同时创建快照。这也意味着您可以同时恢复或克隆这些卷。

卷可以是多个一致性组的成员。但是,在将卷添加到一致性组后,您无法删除、重新输入或迁移卷。

2.9.1. 配置块存储服务一致性组

默认情况下,块存储安全策略会禁用一致性组 API。在使用该功能前,您必须在这里启用它。托管 Block Storage API 服务的节点 /etc/cinder/policy.json 文件中的相关一致性组条目 openstack-cinder-api 列出默认设置:

"consistencygroup:create" : "group:nobody",
​"consistencygroup:delete": "group:nobody",
​"consistencygroup:update": "group:nobody",
​"consistencygroup:get": "group:nobody",
​"consistencygroup:get_all": "group:nobody",
​"consistencygroup:create_cgsnapshot" : "group:nobody",
​"consistencygroup:delete_cgsnapshot": "group:nobody",
​"consistencygroup:get_cgsnapshot": "group:nobody",
​"consistencygroup:get_all_cgsnapshots": "group:nobody",

您必须在环境文件中更改这些设置,然后使用 openstack overcloud deploy 命令将它们部署到 overcloud。不要直接编辑 JSON 文件,因为下次部署 overcloud 时会覆盖更改。

先决条件

  • 已安装 undercloud。如需更多信息,请参阅 Director 安装和使用 中的 安装 director

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc undercloud 凭证文件:

    $ source ~/stackrc
  3. 编辑环境文件,并在 parameter_defaults 部分中添加新条目。这样可确保条目在容器中更新,并在 director 使用 openstack overcloud deploy 命令重新部署环境时保留。
  4. 使用 CinderApiPolicies 为环境文件添加新部分来设置一致性组设置。等效的 parameter_defaults 部分包含 JSON 文件中的默认设置,其方式如下:

    parameter_defaults:
      CinderApiPolicies: { \
         cinder-consistencygroup_create: { key: 'consistencygroup:create', value: 'group:nobody' }, \
         cinder-consistencygroup_delete: { key: 'consistencygroup:delete', value: 'group:nobody' },  \
         cinder-consistencygroup_update: { key: 'consistencygroup:update', value: 'group:nobody' }, \
         cinder-consistencygroup_get: { key: 'consistencygroup:get', value: 'group:nobody' }, \
         cinder-consistencygroup_get_all: { key: 'consistencygroup:get_all', value: 'group:nobody' }, \
         cinder-consistencygroup_create_cgsnapshot: { key: 'consistencygroup:create_cgsnapshot', value: 'group:nobody' }, \
         cinder-consistencygroup_delete_cgsnapshot: { key: 'consistencygroup:delete_cgsnapshot', value: 'group:nobody' }, \
         cinder-consistencygroup_get_cgsnapshot: { key: 'consistencygroup:get_cgsnapshot', value: 'group:nobody' }, \
         cinder-consistencygroup_get_all_cgsnapshots: { key: 'consistencygroup:get_all_cgsnapshots', value: 'group:nobody' }, \
     }
  5. 'group:nobody' 的值决定了没有组群可以使用这个功能,因此可以有效地禁用它。要启用它,请将组更改为另一个值。
  6. 为提高安全性,为一致性组 API 和卷类型管理 API 设置权限,使其相同。默认情况下,卷类型管理 API 会在同一个 /etc/cinder/policy.json_ file 文件中设置为 "rule:admin_or_owner"

    "volume_extension:types_manage": "rule:admin_or_owner",
  7. 要使一致性组功能可供所有用户使用,请设置 API 策略条目,以便用户创建、使用和管理自己的一致性组。要做到这一点,使用 rule:admin_or_owner

    CinderApiPolicies: { \
         cinder-consistencygroup_create: { key: 'consistencygroup:create', value: 'rule:admin_or_owner' }, \
         cinder-consistencygroup_delete: { key: 'consistencygroup:delete', value: 'rule:admin_or_owner' },  \
         cinder-consistencygroup_update: { key: 'consistencygroup:update', value: 'rule:admin_or_owner' }, \
         cinder-consistencygroup_get: { key: 'consistencygroup:get', value: 'rule:admin_or_owner' }, \
         cinder-consistencygroup_get_all: { key: 'consistencygroup:get_all', value: 'rule:admin_or_owner' }, \
         cinder-consistencygroup_create_cgsnapshot: { key: 'consistencygroup:create_cgsnapshot', value: 'rule:admin_or_owner' }, \
         cinder-consistencygroup_delete_cgsnapshot: { key: 'consistencygroup:delete_cgsnapshot', value: 'rule:admin_or_owner' }, \
         cinder-consistencygroup_get_cgsnapshot: { key: 'consistencygroup:get_cgsnapshot', value: 'rule:admin_or_owner' }, \
         cinder-consistencygroup_get_all_cgsnapshots: { key: 'consistencygroup:get_all_cgsnapshots', value: 'rule:admin_or_owner’ }, \
     }
  8. 将更新保存到环境文件。
  9. 将环境文件添加到与其他环境文件的堆栈中,并部署 overcloud。

2.9.2. 使用控制面板创建块存储一致性组

启用一致性组 API 后,您可以开始创建一致性组。

先决条件

  • 您必须是一个项目管理员或卷组所有者才能创建一致性组。
  • 访问 Red Hat OpenStack Platform(RHOSP)Dashboard(horizon)。如需更多信息,请参阅 OpenStack 控制面板简介

流程

  1. 以 admin 用户身份或卷所有者登录控制面板。
  2. 选择 Project > Compute > Volumes > Volume Consistency Groups
  3. 单击 Create Consistency Group
  4. 在向导的 Consistency Group Information 选项卡中,为您的一致性组输入名称和描述。然后,指定其 可用性区域
  5. 您还可以在一致性组中添加卷类型。当您在一致性组中创建卷时,块存储服务将从这些卷类型中应用兼容的设置。要添加卷类型,请单击 All available 卷类型 列表中的 + 按钮。
  6. 单击 Create Consistency Group。它会出现在 Volume Consisty Groups 表中。

2.9.3. 使用控制面板管理块存储服务一致性组

您可以在控制面板中为块存储卷管理一致性组。

先决条件

  • 您必须是一个项目管理员来管理一致性组。
  • 访问 Red Hat OpenStack Platform(RHOSP)Dashboard(horizon)。如需更多信息,请参阅 OpenStack 控制面板简介

流程

  1. 以 admin 用户身份登录控制面板。
  2. 选择 Project > Compute > Volumes > Volume Consistency Groups
  3. 可选:您可以通过从 Action 列中选择 Edit Consistency Group 来更改一致性组的名称或描述。
  4. 要直接从一致性组中添加或删除卷,请查找您要配置的一致性组。在该一致性组的 Actions 列中,选择 Manage Volumes。这会启动 Add/Remove Consistency Group Volumes 向导。

    1. 要向一致性组添加卷,请单击 All available volumes 列表中它的 + 按钮。
    2. 要从一致性组中删除卷,请单击 Selected volumes 列表中它的 - 按钮。
  5. 单击 Edit Consistency Group

2.9.4. 为块存储服务创建和管理一致性组快照

在将卷添加到一致性组后,您可以从其中创建快照。

先决条件

  • 您必须是一个项目管理员来创建和管理一致性组快照。

流程

  1. 查找 overcloud 凭证文件:

    $ source ~/<credentials_file>
    • <credentials_file > 替换为凭证文件的名称,如 overcloudrc
  2. 列出所有可用一致性组及其对应的 ID:

    $ cinder consisgroup-list
  3. 使用一致性组创建快照:

    $ cinder cgsnapshot-create [--name <cgsnapname>] [--description "<description>"] <cgnameid>
    • <cgsnapname > 替换为快照的名称。
    • <description > 替换为快照的描述。
    • <cgnameid> 替换为一致性组的名称或 ID。
  4. 显示所有可用一致性组快照的列表:

    # cinder cgsnapshot-list

2.9.5. 克隆块存储服务一致性组

您还可以使用一致性组来同时创建预配置卷的完整批处理。您可以通过克隆现有的一致性组或恢复一致性组快照来完成此操作。两个进程都使用相同的命令。

先决条件

  • 您必须是一个项目管理员,才能克隆一致性组并恢复一致性组快照。

流程

  1. 查找 overcloud 凭证文件:

    $ source ~/<credentials_file>
    • <credentials_file > 替换为凭证文件的名称,如 overcloudrc
  2. 克隆现有的一致性组:

    $ cinder consisgroup-create-from-src --source-cg <cgnameid> [--name <cgname>] [--description "<description>"]
    • <cgnameid > 替换为您要克隆的一致组的名称或 ID。
    • <cgname > 替换为一致性组的名称。
    • <description > 替换为一致性组的描述。
  3. 从一致性组快照创建一致性组:

    $ cinder consisgroup-create-from-src --cgsnapshot <cgsnapname> [--name <cgname>] [--description "<description>"]
    • 将 < cgsnapname > 替换为用于创建一致性组的快照的名称或 ID。

2.10. 配置默认块存储调度程序过滤器

如果在卷创建过程中没有指定卷后端,则块存储调度程序使用过滤器来选择合适的后端。确保配置以下默认过滤器:

AvailabilityZoneFilter
过滤掉无法满足所请求卷的可用区要求的所有后端。
CapacityFilter
仅选择具有足够空间的后端以容纳该卷。
CapabilitiesFilter
只选择可支持卷中任何指定设置的后端。
InstanceLocality
配置集群以使用本地卷到同一节点。

先决条件

  • 已安装 undercloud。如需更多信息,请参阅 Director 安装和使用 中的 安装 director

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc undercloud 凭证文件:

    $ source ~/stackrc
  3. 在 overcloud 部署命令中添加包含以下参数的环境文件:

    parameter_defaults:
      ControllerExtraConfig: # 1
        cinder::config::cinder_config:
          DEFAULT/scheduler_default_filters:
            value: 'AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter,InstanceLocality'
    1
    您还可以将 ControllerExtraConfig: hook 及其嵌套部分添加到现有环境文件的 parameter_defaults: 部分。
  4. 将更新保存到环境文件。
  5. 将环境文件添加到与其他环境文件的堆栈中,并部署 overcloud。

2.11. 在 overcloud 节点上启用 LVM2 过滤

如果您使用带有特定块存储服务(cinder)后端的 LVM2(Logical Volume Management)卷,在 Red Hat OpenStack Platform(RHOSP)客户端中创建的卷可能会变得在托管 cinder-volumenova-compute 容器的 overcloud 节点上可见。在这种情况下,主机上的 LVM2 工具会扫描 OpenStack 客户端所创建的 LVM2 卷,这会导致 Compute 或 Controller 节点上出现一个或多个问题:

  • LVM 会出现从客户机查看卷组
  • LVM 报告重复的卷组名称
  • 卷分离失败,因为 LVM 正在访问存储
  • 由于 LVM 的问题,客户机无法引导
  • 客户端机器上的 LVM 是部分状态,因为缺少了实际存在的磁盘
  • 在 LVM 的设备中,块存储服务(cinder)操作会失败
  • 块存储服务(cinder)快照无法正确删除
  • 实时迁移期间错误: /etc/multipath.conf 不存在

要防止这种错误扫描,并将客户机 LVM2 卷与主机节点隔离,您可以在部署或更新 overcloud 时启用和配置带有 LVMFilterEnabled heat 参数的过滤器。这个过滤器从托管活跃 LVM2 卷的物理设备列表中计算。您还可以使用 LVMFilterAllowlistLVMFilterDenylist 参数明确允许和拒绝块设备。您可以在全局范围内应用此过滤到特定的节点角色或特定设备。

先决条件

  • 已安装 undercloud。如需更多信息,请参阅 Director 安装和使用 中的 安装 director

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc undercloud 凭证文件:

    $ source ~/stackrc
  3. 在包含以下参数的 overcloud 部署命令中添加环境文件:

    parameter_defaults:
      LVMFilterEnabled: true

    您可以进一步自定义 LVM2 过滤器的实现。例如,要只在 Compute 节点上启用过滤,请使用以下配置:

    parameter_defaults:
      ComputeParameters:
        LVMFilterEnabled: true

    这些参数也支持正则表达式。要只在 Compute 节点上启用过滤,并忽略以 /dev/sd 开头的所有设备,请使用以下配置:

    parameter_defaults:
      ComputeParameters:
        LVMFilterEnabled: true
        LVMFilterDenylist:
          - /dev/sd.*
  4. 将更新保存到环境文件。
  5. 将环境文件添加到与其他环境文件的堆栈中,并部署 overcloud。

2.12. 多路径配置

使用多路径将服务器节点和存储阵列之间的多个 I/O 路径配置为单个设备,以创建冗余并提高性能。

2.12.1. 使用 director 配置多路径

您可以在 Red Hat OpenStack Platform (RHOSP) overcloud 部署中配置多路径,以实现更高的带宽和网络弹性。

重要

当您在现有部署中配置多路径时,新的工作负载是多路径的。如果有任何已存在的工作负载,您必须分离和取消使实例在这些实例上启用多路径。

先决条件

  • 已安装 undercloud。如需更多信息,请参阅 Director 安装和使用 中的 安装 director

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 stackrc undercloud 凭证文件:

    $ source ~/stackrc
  3. 使用覆盖环境文件或创建新环境文件,如 multipath_overrides.yaml。添加并设置以下参数:

    parameter_defaults:
      ExtraConfig:
        cinder::config::cinder_config:
          backend_defaults/use_multipath_for_image_xfer:
            value: true
    注意

    默认设置将生成适用于大多数环境的基本多路径配置。但是,根据您的存储厂商检查是否有建议,因为有些供应商已经优化了特定于其硬件的配置。有关多路径的更多信息,请参阅配置设备映射器多路径

  4. 可选:如果您有用于 overcloud 部署的多路径配置文件,您可以使用 multipathd CustomConfigFile 参数指定此文件的位置:

    parameter_defaults:
      MultipathdCustomConfigFile: <config_file_directory>/<config_file_name>

    在以下示例中,/home/stack 是多路径配置文件的目录,multipath.conf 是这个文件的名称:

    parameter_defaults:
      MultipathdCustomConfigFile: /home/stack/multipath.conf
    注意

    其他 TripleO 多路径参数覆盖本地自定义配置文件中的任何对应的值。例如,如果 multipathdEnableUserFriendlyNamesFalse,则 overcloud 节点上的文件也会更新以匹配,即使本地自定义文件中启用了该设置。

    有关多路径参数的更多信息,请参阅 多路径 heat 模板参数

  5. 将更新保存到覆盖环境文件。
  6. 使用其他环境文件将覆盖环境文件添加到堆栈中,例如:

    ----
    /usr/share/openstack-tripleo-heat-templates/environments/multipathd.yaml
    ----
  7. 部署 overcloud。

2.12.1.1. 多路径 heat 模板参数

使用这个参数了解启用多路径的参数。

参数描述默认值

multipathdEnable

定义是否启用多路径守护进程。通过 multipathd.yaml 文件中包含的配置,此参数默认为 True

true

MultipathdEnableUserFriendlyNames

定义是否启用为每个路径的用户友好名称分配。

False

MultipathdEnableFindMultipaths

定义是否自动为每个路径创建多路径设备。

true

MultipathdSkipKpartx

定义是否跳过该设备中自动创建分区。

true

MultipathdCustomConfigFile

包括 overcloud 节点上的本地自定义多路径配置文件。默认情况下会安装最小的 multipath.conf 文件。

注意: 其他 TripleO 多路径参数覆盖您添加的任何本地自定义配置文件中的任何对应的值。例如,如果 multipathdEnableUserFriendlyNamesFalse,则 overcloud 节点上的文件也会更新以匹配,即使本地自定义文件中启用了设置。

 

2.12.2. 验证多路径配置

您可以在新的或现有 overcloud 部署中验证多路径配置。

流程

  1. 创建一个实例。
  2. 将非加密卷附加到实例。
  3. 获取包含实例的 Compute 节点的名称:

    $ nova show <instance> | grep OS-EXT-SRV-ATTR:host

    <instance > 替换为您创建的实例的名称。

  4. 检索实例的 virsh 名称:

    $ nova show <instance> | grep instance_name
  5. 获取 Compute 节点的 IP 地址:

    $ . stackrc
    $ metalsmith list | grep <compute_name>

    <compute_name > 替换为 nova show <instance& gt; 命令输出的名称,从六列表中显示两个行。

    在第四列中找到 & lt;compute_name > 所在的行。< compute_name&gt; 的 IP 地址位于此行的最后一列中。

    在以下示例中,compute-0 的 IP 地址是 192.168.24.15,因为 compute-0 在第二行的第四列中:

    $ . stackrc
    $ metalsmith list | grep compute-0
    | 3b1bf72e-c425-494c-9717-d0b89bb66580 | compute-0    | 95b21d3e-36be-470d-ba5c-70d5dcd6d0b3 | compute-1    | ACTIVE | ctlplane=192.168.24.49 |
    | 72a24883-25f9-435c-bf71-a20e66be172d | compute-1    | a59f79f7-006e-4f38-a9ad-8164da47d58e | compute-0    | ACTIVE | ctlplane=192.168.24.15 |
  6. SSH 到运行实例的 Compute 节点:

    $ ssh tripleo-admin@<compute_node_ip>

    <compute_node_ip > 替换为 Compute 节点的 IP 地址。

  7. 登录到运行 virsh 的容器:

    $ podman exec -it nova_libvirt /bin/bash
  8. 在 Compute 节点上输入以下命令,以验证是否在 cinder 卷主机位置中使用多路径:

    virsh domblklist <virsh_instance_name> | grep /dev/dm

    <virsh_instance_name > 替换为 nova show <instance> | grep instance_name 命令的输出。

    如果实例显示 /dev/dm- 以外的值,则连接为非多路径,且您必须使用 nova shelvenova unshelve 命令刷新连接信息:

    $ nova shelve <instance>
    $ nova unshelve <instance>
    注意

    如果您有多个类型的后端,您必须验证所有后端上的实例和卷,因为每个后端返回的连接信息可能会有所不同。

第 3 章 使用块存储服务(cinder)执行基本操作

创建并配置块存储卷,作为 overcloud 中计算实例的持久性存储的主要形式。创建卷,将卷附加到实例,编辑并调整卷所有权,以及修改卷所有权。

3.1. 创建块存储卷

创建卷,以便为您使用 overcloud 中 Compute 服务(nova)启动的实例提供持久性存储。

要创建加密的卷,您必须首先配置卷类型以便进行卷加密。另外,您必须同时配置 Compute 和 Block Storage 服务,使其使用相同的静态密钥。有关如何设置卷加密要求的详情,请参考 块存储服务(cinder)卷加密

重要

您可以为项目创建的默认最大卷数为 10。

先决条件

流程

  1. 登录控制面板。
  2. 选择 Project > Compute > Volumes
  3. Create Volume,编辑以下字段:

    字段描述

    卷名称

    卷的名称。

    描述

    卷的可选、简短描述。

    类型

    可选的卷类型。如需更多信息,请参阅使用 卷类型 对卷进行分组配置

    如果您创建卷且不指定卷类型,则块存储将使用默认卷类型。有关定义默认卷类型的更多信息,请参阅 定义项目特定默认卷类型

    如果没有指定后端,则块存储调度程序将尝试为您选择合适的后端。如需更多信息,请参阅多个后端的卷分配

    注意

    如果没有合适的后端,则不会创建卷。

    您还可以在创建卷后更改卷类型。如需更多信息,请参阅 块存储卷重新处理

    大小(GB)

    卷大小(以 GB 为单位)。

    如果要从未加密的镜像创建加密的卷,您必须确保卷大小大于镜像大小,以便加密数据不会截断卷数据。

    可用性区域

    可用性区域(逻辑服务器组)以及主机聚合是分隔 OpenStack 内资源的通用方法。可用区在安装过程中定义。如需有关可用性区域和主机聚合的更多信息,请参阅 配置计算服务的"实例 创建"指南中的创建和管理主机聚合

  4. 指定 卷源

    描述

    没有源,空卷

    卷为空,不包含

    文件系统或分区表。

    Snapshot

    使用现有快照作为卷源。如果选择这个选项,则会打开一个新的 Use snapshot 作为源列表,您可以从列表中选择快照。如果要从加密卷的快照创建新卷,您必须确保新卷至少有 1GB 大于旧卷。有关卷快照的更多信息,请参阅 从快照创建新卷

    Image

    使用现有镜像作为卷源。如果选择这个选项,则会打开新的 Use snapshot 作为源列表,然后从列表中选择一个镜像。

    使用现有卷作为卷源。如果选择这个选项,则会打开一个新的 Use snapshot 作为源列表,您可以从列表中选择一个卷。

  5. 创建卷。创建卷后,其名称将显示在 卷表中

3.2. 编辑卷名称或描述

您可以在仪表板中更改卷的名称和描述。

先决条件

流程

  1. 登录控制面板。
  2. 选择 Project > Compute > Volumes
  3. 选择卷的 编辑卷 按钮。
  4. 根据需要编辑卷名称或描述。
  5. Edit Volume 保存您的更改。

3.3. 重新定义大小(扩展)块存储服务卷

调整卷大小以增加卷的存储容量。

注意

支持重新定义使用卷大小的功能,但依赖于驱动程序。支持 RBD。您不能在多附加卷内扩展。有关这个功能支持的更多信息,请联系红帽支持团队。

流程

  1. 提供您的凭据文件。
  2. 列出卷以检索您要扩展的卷 ID:

    $ cinder list
  3. 增加卷的大小:

    $ cinder extend <volume_id> <size>
    • <volume_id> 替换为您要扩展的卷的 ID。
    • <size> 替换为这个卷所需的大小,以 GB 为单位。

      注意

      确保指定大小大于这个卷的现有大小。

      例如:

      $ cinder extend 573e024d-5235-49ce-8332-be1576d323f8 10

3.4. 删除块存储服务卷

您可以删除不再需要的卷。

注意

如果存在快照,则无法删除卷。有关删除快照的更多信息,请参阅 删除卷快照

先决条件

流程

  1. 登录控制面板。
  2. 选择 Project > Compute > Volumes
  3. Volumes 表中,选择要删除的卷。
  4. 删除卷

3.5. 多个后端上的卷分配

当您创建卷时,您可以从 Type 列表中选择所需后端的卷类型。如需更多信息,请参阅创建块存储卷

注意

如果将块存储服务(cinder)配置为使用多个后端,则必须为每个后端创建一个卷类型。

如果您在创建卷时没有指定后端,块存储调度程序将尝试为您选择合适的后端。

调度程序使用过滤器,用于卷的以下默认关联设置,以选择合适的后端:

AvailabilityZoneFilter
过滤掉无法满足所请求卷的可用区要求的所有后端。
CapacityFilter
仅选择具有足够空间的后端以容纳该卷。
CapabilitiesFilter
只选择可支持卷中任何指定设置的后端。
InstanceLocality
配置集群以使用本地卷到同一节点。

如果有多个合适的后端,调度程序将使用权重方法选择最佳后端。默认情况下使用 CapacityWeigher 方法,因此会选择带有最多可用空间的过滤后端。

注意

如果没有合适的后端,则不会创建卷。

3.6. 将卷附加到实例

当您关闭所有数据时,所有数据都会丢失。您可以为持久性存储附加卷。您可以一次将卷附加到一个实例,除非它有一个多附加卷类型。有关创建多附加卷的更多信息,请参阅可附加到多个实例 的卷。

先决条件

流程

  1. 登录控制面板。
  2. 选择 Project > Compute > Volumes
  3. 选择 Edit Attachments 操作。如果卷没有附加到实例,则可以看到 Attach To Instance 下拉列表。
  4. Attach To Instance 列表中,选择要将卷附加到的实例。
  5. Attach Volume

3.7. 从实例分离卷

当卷附加到另一个实例时,您必须将卷从实例分离,除非它有一个多附加卷类型。您还必须分离一个卷,以更改对卷的访问权限或删除卷。

先决条件

流程

  1. 登录控制面板。
  2. 选择 Project > Compute > Volumes
  3. 选择卷的 Manage Attachments 操作。如果卷连接到实例,则实例的名称将显示在 Attachments 表中。
  4. 点击这个和下一个对话框中的 Detach Volume

后续步骤

3.8. 配置卷的访问权限

卷的默认状态是可读写卷,以允许写入数据并从中读取数据。您可以将卷标记为只读,以防止其数据被意外覆盖或删除。

注意

将卷更改为只读后,您可以将其重新更改为读写。

先决条件

流程

  1. 提供您的凭据文件。
  2. 列出卷以检索您要配置的卷 ID:

    $ cinder list
  3. 为这个卷设置所需的访问权限:

    • 将卷的访问权限设置为只读:

      $ cinder readonly-mode-update <volume_id> true
      • <volume_id > 替换为所需卷的 ID。
    • 将卷的访问权限设置为读写:

      $ cinder readonly-mode-update <volume_id> false
  4. 如果您将这个卷与实例分离,以更改访问权限,然后重新附加卷。如需更多信息,请参阅 将卷附加到实例

3.9. 使用仪表板更改卷所有者

要更改卷的所有者,您必须执行卷转让。卷转让由卷的所有者启动,在卷的新所有者接受转让后,卷的所有权的更改就会完成。

先决条件

流程

  1. 以卷所有者身份登录到控制面板。
  2. 选择 Projects > Volumes
  3. 在要转让的卷的 Actions 列中,选择 Create Transfer
  4. Create Transfer 对话框中,输入转让名称并点 Create Volume Transfer

    卷转让被创建,在 Volume Transfer 屏幕中,您可以捕获要发送到接收方项目的 转让 ID 和授权密钥

    Download transfer credentials 按钮下载一个 .txt 文件,它包括了 transfer name, transfer ID, 和 authorization key

    注意

    授权密钥仅在卷转让 屏幕中可用。如果丢失了授权密钥,您必须取消转让并创建另一个转让来生成新的授权密钥。

  5. 关闭 卷转让屏幕,返回卷列表。

    对一个 waiting-transfer 的卷状态会改变,直到接收者项目接受转让

从仪表板接受卷转让

  1. 以接收者项目所有者身份登录到控制面板。
  2. 选择 Projects > Volumes
  3. 单击 Accept Transfer
  4. Accept Volume Transfer 对话框中,输入您从卷所有者收到的 转让 ID 和授权密钥,然后单击 Accept Volume Transfer

    卷现在显示在 active 项目的卷列表中。

3.10. 使用 CLI 更改卷所有者

要更改卷的所有者,您必须执行卷转让。卷转让由卷的所有者启动,在卷的新所有者接受转让后,卷的所有权的更改就会完成。

流程

  1. 以卷的当前所有者身份登录。
  2. 列出可用的卷:

    $ cinder list
  3. 启动卷转让:

    $ cinder transfer-create <volume>

    <volume > 替换为您要转让的卷的名称或 ID。例如:

      +------------+--------------------------------------+
      |  Property  |                Value                 |
      +------------+--------------------------------------+
      |  auth_key  |           f03bf51ce7ead189           |
      | created_at |      2014-12-08T03:46:31.884066      |
      |     id     | 3f5dc551-c675-4205-a13a-d30f88527490 |
      |    name    |                 None                 |
      | volume_id  | bcf7d015-4843-464c-880d-7376851ca728 |
      +------------+--------------------------------------+

    cinder transfer-create 命令清除卷的所有权,并为转让创建一个 idauth_key。这些值可以被提供给,以供其他用户接受转让并成为卷的新所有者。

  4. 新用户现在可以声明卷的所有权。要做到这一点,用户应首先从命令行登录并运行:

    $ cinder transfer-accept <transfer_id> <transfer_key>
    • <transfer_id > 替换为 cinder transfer-create 命令返回的 id 值。
    • <transfer_key > 替换为 cinder transfer-create 命令返回的 auth_key 值。

      例如:

      $ cinder transfer-accept 3f5dc551-c675-4205-a13a-d30f88527490 f03bf51ce7ead189
注意

您可以使用以下命令查看所有可用卷转让:

$ cinder transfer-list

第 4 章 使用块存储服务(cinder)执行高级操作

块存储卷是 overcloud 中计算实例的持久性存储。配置卷的高级功能,例如使用卷快照、创建多附加卷、重新设置卷和迁移卷。

4.1. 创建卷快照

您可以通过创建卷快照,在特定时间点保留卷状态。然后,您可以使用快照克隆新卷。

注意

卷备份与快照不同。备份保留卷中包含的数据,而快照则保留卷在特定时间点的状态。如果存在快照,则无法删除卷。卷备份可防止数据丢失,快照有助于克隆。

因此,快照后端通常与卷后端在一起,以便在克隆过程中最小化延迟。相反,备份存储库通常位于不同的位置,例如,位于不同节点、物理存储甚至典型企业部署中的地理位置。这是为了防止备份存储库不受卷后端可能出现的破坏。

有关卷备份的更多信息,请参阅 块存储备份指南

先决条件

流程

  1. 登录控制面板。
  2. 选择 Project > Compute > Volumes
  3. 为目标卷选择 Create Snapshot 操作。
  4. 快照 提供快照快照名称,再单击 创建卷快照卷快照 选项卡显示所有快照。
注意

对于从快照创建的块存储服务(cinder)的 RADOS 块设备(RBD)卷,您可以使用 CinderRbdFlattenVolumeFromSnapshot heat 参数来扁平化并删除对快照的依赖。将 CinderRbdFlattenVolumeFromSnapshot 设置为 true 时,块存储服务扁平化 RBD 卷,并删除对快照的依赖项,并扁平化所有将来的快照。默认值为 false,这也是 cinder RBD 驱动程序的默认值。

请注意,扁平化快照会删除任何潜在的块共享与父对象共享,并导致后端上的更大快照大小,并增加快照创建的时间。

验证

  • 验证新快照出现在 Volume Snapshots 标签页中,或使用 CLI 列出卷快照,并验证快照是否已创建:

    $ openstack volume snapshot list

4.2. 从快照创建新卷

您可以创建新卷作为卷快照的克隆。这些快照会保留卷在特定时间点的状态。

先决条件

  • 要从中克隆和创建新卷的卷快照。有关创建卷快照的更多信息,请参阅 创建卷快照
  • 访问 Red Hat OpenStack Platform(RHOSP)Dashboard(horizon)。如需更多信息,请参阅 OpenStack 控制面板简介

流程

  1. 登录控制面板。
  2. 选择 Project > Compute > Volumes
  3. Volume Snapshots 表中,选择您要从中创建新卷的快照的 Create Volume 操作。有关卷创建的更多信息,请参阅创建块存储卷
重要

如果要从加密卷的快照创建新卷,请确保新卷至少有 1GB 大于旧卷。

验证

  • 验证新卷出现在 Volumes 标签页中,或使用 CLI 列出卷并验证已创建了新卷:

    $ openstack volume list

4.3. 删除卷快照

Red Hat OpenStack Platform (RHOSP) 17.0 使用 RBD CloneV2 API,这意味着即使有依赖项,也可以删除卷快照。如果您的 RHOSP 部署使用 director 部署的 Ceph 后端,则 director 会正确配置 Ceph 集群。

如果使用外部 Ceph 后端,您必须在 Ceph 集群上配置最小客户端。有关配置外部 Ceph 集群的更多信息,请参阅 Integrating an Overcloud with an Existing Red Hat Ceph Storage Cluster 中的 配置现有的 Red Hat Ceph Storage 集群

先决条件

  • 要删除的卷快照。
  • 访问 Red Hat OpenStack Platform(RHOSP)Dashboard(horizon)。如需更多信息,请参阅 OpenStack 控制面板简介

流程

  1. 登录控制面板。
  2. 选择 Project > Compute > Volumes
  3. Volume Snapshots 表中,为您要删除的快照选择 Delete Volume Snapshot 操作。

如果您的 OpenStack 部署使用 Red Hat Ceph 后端,以了解有关快照安全和故障排除的更多信息,请参阅 Red Hat Ceph Storage 后端中的保护和未保护的快照

验证

  • 验证卷快照选项卡中是否不再存在 快照,或使用 CLI 列出卷快照,并验证快照是否已删除:

    $ openstack volume snapshot list

4.4. 从快照中恢复卷

您可以恢复卷的最新快照。这意味着可以执行卷数据的原位升级到其最新快照。

警告

支持恢复卷的最新快照,但依赖驱动程序。这个功能的正确实现是驱动程序辅助功能。有关这个功能支持的更多信息,请联络您的驱动程序厂商。

限制

  • 使用带有 multi-attach 卷的恢复功能可能会有一些限制。在使用此功能前检查是否应用这些限制。
  • 在创建快照后,您无法恢复调整大小(extend)的卷。
  • 您不能在附加或者使用卷中使用 revert-to-snapshot 功能。

先决条件

  • Block Storage (cinder) REST API 微版本 3.40 或更高版本。
  • 您必须至少为卷创建一个快照。

流程

  1. 提供您的凭据文件。
  2. 分离卷:

    $ nova volume-detach <instance_id> <vol_id>

    <instance_id > 和 <vol_id > 替换为您要恢复的实例的 ID。

  3. 找到您要恢复的快照的 ID 或名称。您只能恢复最新的快照。

    $ cinder snapshot-list
  4. 恢复快照:

    $ cinder --os-volume-api-version=3.40 revert-to-snapshot  <snapshot_id or snapshot_name>

    <snapshot_id 或 snapshot_name > 替换为快照的 ID 或名称。

  5. 可选: 您可以使用 cinder snapshot-list 命令检查您恢复的卷是否处于恢复状态。

    $  cinder snapshot-list
  6. 重新附加卷:

    $  nova volume-attach <instance_id> <vol_id>

    <instance_id & gt; 和 <vol_id > 替换为您恢复的实例和卷的 ID。

验证

  • 要检查这个过程是否成功,您可以使用 cinder list 命令验证您恢复的卷现在处于 available 状态。

    $ cinder list
注意

如果您将 Block Storage(cinder)用作可引导 root 卷,则无法在该卷上使用 restore-to-snapshot 功能,因为它不处于可用状态。要使用这个功能,实例必须使用 delete_on_termination=false (默认)属性引导,以便在实例终止时保留引导卷。当您想要恢复到快照时,必须首先删除初始实例,以便该卷可用。然后,您可以恢复它并从卷中创建新实例。

4.5. 将卷上传到镜像服务(glance)

您可以将现有卷作为镜像直接上传到镜像服务。

先决条件

流程

  1. 登录控制面板。
  2. 选择 Project > Compute > Volumes
  3. 选择目标卷的 Upload to Image 操作。
  4. 为卷提供 Image Name,并从列表中选择 Disk Format
  5. Upload

要查看上传的镜像,请选择 Project > Compute > Images。新镜像会出现在 Images 表中。有关如何使用和配置镜像的详情,请参考 创建和管理镜像

4.6. 可以附加到多个实例的卷

您可以创建一个可附加到多个实例的多附加块存储卷,这些实例可以同时读取和写入它。多附加卷需要多附加卷类型。

警告

您必须使用多附件或集群感知的文件系统来管理多个实例的写操作。否则会导致数据崩溃。

多重附加卷的限制

  • Block Storage(cinder)后端必须支持多附加卷。有关支持后端的信息,请联系红帽支持。
  • 您的 Block Storage(cinder)驱动程序必须支持多附加卷。支持 Ceph RBD 驱动程序。联系红帽支持,验证您的供应商插件是否支持多重附加。有关厂商插件认证的更多信息,请参阅以下位置:

  • 只读多重附加卷不受支持。
  • 多重附加卷的实时迁移不可用。
  • 不支持加密 multi-attach 卷。
  • Bare Metal Provisioning 服务(ironic)virt 驱动程序不支持 multi-attach 卷。只有 libvirt virt 驱动程序才支持多重附加卷。
  • 您不能将附加的卷从 multi-attach 类型重新输入到非多重附加类型,您无法将非多重附加类型重新输入到 multi-attach 类型。
  • 在附加的卷迁移过程中,您无法使用具有多个读写附件作为源或目标卷的 multi-attach 卷。
  • 您不能将多附件卷附加到被卸载的实例中。

4.6.1. 创建 multi-attach 卷类型

要将卷附加到多个实例,请在卷额外规格中将 multiattach 标志设置为 & lt;is> True。当您创建 multi-attach 卷类型时,卷会继承 标志并成为多附加卷。

先决条件

  • 您必须是一个项目管理员来创建卷类型。

流程

  1. 查找 overcloud 凭证文件:

    $ source ~/<credentials_file>
    • <credentials_file > 替换为凭证文件的名称,如 overcloudrc
  2. 为 multi-attach 卷创建新卷类型:

    $ cinder type-create multiattach
  3. 为这个 multi-attach 卷类型启用 multiattach 属性:

    $ cinder type-key multiattach set multiattach="<is> True"
  4. 运行以下命令来指定后端:

    $ cinder type-key multiattach set volume_backend_name=<backend_name>

4.6.2. multi-attach 卷重新键入

您可以重新键入一个卷,使其具有多重附加功能,或重新键入一个多附加功能的卷,使其可以附加到多个实例。但是,您只能在卷没有被使用时重新输入卷,其状态是 available

附加多附加卷时,一些虚拟机监控程序需要特殊考虑,例如禁用缓存时。目前,无法安全地更新附加的卷,同时保留整个卷。如果您试图重新输入附加到多个实例的卷,则重新命名会失败。

4.6.3. 创建多附加卷

您可以创建一个可以附加到多个实例的块存储卷,这些实例可以同时读取和写入它。

注意

这个过程在支持 multiattach 的任何后端中创建卷。因此,如果支持 multiattach 的两个后端,调度程序会决定使用哪个后端。如需更多信息,请参阅多个后端的卷分配

先决条件

  • 项目中提供了一个 multi-attach 卷类型。

流程

  1. 提供您的凭据文件。
  2. 运行以下命令来创建 multi-attach 卷:

    $ cinder create <volume_size> --name <volume_name> --volume-type multiattach
  3. 运行以下命令,以验证卷是否为 multi-attach 功能。如果卷是多重附加功能,multiattach 字段则等于 True

    $ cinder show <vol_id> | grep multiattach
    
    | multiattach | True |

后续步骤

4.7. 在后端间移动卷

将卷从一个存储后端移到另一个,例如:

  • 停用不再支持的存储系统。
  • 更改卷的存储类或层。
  • 更改卷的可用区。

使用块存储服务(cinder),您可以使用以下方法在后端间移动卷:

限制

红帽支持在可用区(AZ)内和跨可用区(AZ)之间移动卷,但有以下限制:

  • 卷必须具有 available 或 in-use 状态才能移动。
  • 对使用中的卷的支持取决于驱动程序。
  • 卷不能有快照。
  • 卷不能属于组或一致性组。

4.7.1. 移动可用卷

您可以在所有后端间移动可用卷,但性能取决于您所使用的后端。许多后端支持协助迁移。有关协助迁移的后端支持的更多信息,请联系供应商。

辅助迁移可用于卷重新输入和卷迁移。通过协助的迁移,后端可以优化将数据从源后端移动到目标后端,但两个后端都必须来自同一供应商。

注意

红帽只支持使用多池后端进行后端迁移,或者当您将 cinder 迁移操作用于单池后端(如 RBD)时。

当无法在后端间进行迁移时,块存储服务会执行通用卷迁移。

通用卷迁移要求两个后端的卷在块存储(cinder)服务将数据从源卷移动到 Controller 节点以及从 Controller 节点移动到目标卷之前连接。无论源和目标后端的存储类型如何,块存储服务都无缝执行进程。

重要

在执行通用卷迁移前,请确定您有足够的带宽。通用卷迁移的持续时间与卷的大小直接成比例,这比迁移过程要慢。

4.7.2. 在使用卷中移动

不使用卷时没有优化或辅助选项。当您移动使用的卷时,计算服务(nova)必须使用虚拟机监控程序从源后端卷将数据传输到目标后端的卷。这要求与运行卷使用的实例的虚拟机监控程序协调。

Block Storage 服务(cinder)和计算服务可协同工作来执行此操作。计算服务管理大多数工作,因为数据从一个卷通过 Compute 节点复制到另一个卷。

重要

确保在移动卷前有足够的带宽。此操作的持续时间与卷的大小直接成比例,这比迁移过程要慢。

限制

  • 当它们附加到多个 nova 实例时,无法移动使用 multi-attach 卷。
  • 不支持非块设备,将目标后端上的存储协议限制为 iSCSI、光纤通道(FC)和 RBD。

4.8. 块存储卷重新设置

当您重新输入卷时,您要将卷类型及其设置应用到现有卷。有关卷类型的更多信息,请参阅使用 卷类型 对卷配置进行分组

注意

只有卷所有者和管理员可以重新键入卷。

您可以重新输入卷,只要新卷类型的额外规格可以应用到现有卷。您可以重新输入卷来将预定义的设置或存储属性应用到现有卷,例如:

  • 将卷移动到不同的后端。
  • 更改卷的存储类或层。
  • 启用或禁用复制等功能。

卷重新命名是将卷从一个后端移到另一个后端的标准方法。但重新输入卷不一定意味着您必须将卷从一个后端移到另一个后端。然而,在有些情况下,您必须移动卷来完成重新输入:

  • 新卷类型定义了不同的 volume_backend_name
  • 当前卷类型的 volume_backend_name 是未定义的,卷存储在由新卷类型的 volume_backend_name 指定的后端中。

将卷从一个后端移到另一个后端,可能需要大量时间和资源。因此,当重新类型需要移动数据时,块存储服务不会默认移动数据。除非将迁移策略指定为重新类型请求的一部分,否则操作会失败。如需更多信息,请参阅从 控制面板重新删除卷, 或通过 CLI 重新输入卷

限制

  • 您无法重新输入所有卷。有关在后端之间移动卷的更多信息,请参阅 在后端间移动卷
  • 未加密的卷无法重新输入加密卷类型,但加密卷可以重新输入到未加密的卷。
  • 不支持将未加密的卷重新调整为相同大小的加密卷,因为加密卷需要额外的空间来存储加密数据。有关加密未加密的卷的详情,请参考 加密未加密的卷
  • 没有管理特权的用户只能重新键入他们拥有的卷。

4.8.1. 从仪表板重新输入卷

重新输入卷,以将卷类型及其设置应用到现有卷。

重要

不支持将未加密的卷重新调整为相同大小的加密卷,因为加密卷需要额外的空间来存储加密数据。有关加密未加密的卷的详情,请参考 加密未加密的卷

先决条件

  • 只有卷所有者和管理员可以重新键入卷。
  • 访问 Red Hat OpenStack Platform(RHOSP)Dashboard(horizon)。如需更多信息,请参阅 OpenStack 控制面板简介

流程

  1. 以 admin 用户或卷所有者登录控制面板。
  2. 选择 Project > Compute > Volumes
  3. 在您要迁移的卷的 Actions 列中,选择 Change Volume Type
  4. Change Volume Type 对话框中,选择目标卷类型并从 Type 列表定义新后端。
  5. 如果要将卷迁移到另一个后端,请从 Migration Policy 列表中选择 On Demand。如需更多信息,请参阅 在后端间移动卷
  6. Change Volume Type 以开始迁移。

4.8.2. 通过 CLI 重新输入卷

重新输入卷,以将卷类型及其设置应用到现有卷。

重要

不支持将未加密的卷重新调整为相同大小的加密卷,因为加密卷需要额外的空间来存储加密数据。有关加密未加密的卷的详情,请参考 加密未加密的卷

先决条件

  • 只有卷所有者和管理员可以重新键入卷。

流程

  1. 提供您的凭据文件。
  2. 输入以下命令重新输入卷:

    $ cinder retype <volume name or id> <new volume type name>
  3. 如果 retype 操作需要将卷从一个后端移到另一个后端,块存储服务需要特定的标志:

    $ cinder retype --migration-policy on-demand <volume name or id> <new volume type name>

4.9. 使用 Dashboard 在后端间迁移卷

使用块存储服务(cinder),您可以在内部和外部可用区(AZ)内和后端迁移卷。这是将卷从一个后端移动到另一个后端的最常见方式。

在高度定制的部署中,或者在必须停用存储系统的情况下,管理员可迁移卷。在这两种用例中,多个存储系统共享相同的 volume_backend_name,或者未定义。

限制

  • 无法复制该卷。
  • 目标后端必须与卷的当前后端不同。
  • 对于新的后端,现有卷类型必须有效,这意味着必须满足以下条件:

    • 卷类型不能在其 extra specs 中定义 backend_volume_name,或者两个块存储后端必须使用相同的 backend_volume_name 进行配置。
    • 两个后端都必须支持卷类型中配置的相同功能,如对精简配置的支持、对厚置备或其他功能配置的支持。
注意

将卷从一个后端移到另一个后端可能需要大量时间和资源。如需更多信息,请参阅 在后端间移动卷

先决条件

  • 您必须是一个项目管理员才能迁移卷。
  • 访问 Red Hat OpenStack Platform(RHOSP)Dashboard(horizon)。如需更多信息,请参阅 OpenStack 控制面板简介

流程

  1. 以 admin 用户身份登录控制面板。
  2. 选择 Admin > Volumes
  3. 在您要迁移的卷的 Actions 列中,选择 Migrate Volume
  4. Migrate Volume 对话框中,从 Destination Host 下拉列表中选择目标主机。

    注意

    要绕过主机迁移的任何驱动程序优化,请选择 Force Host Copy 复选框。

  5. Migrate 以开始迁移。

4.10. 使用 CLI 在后端间迁移卷

使用块存储服务(cinder),您可以在内部和外部可用区(AZ)内和后端迁移卷。这是将卷从一个后端移动到另一个后端的最常见方式。

在高度定制的部署中,或者在必须停用存储系统的情况下,管理员可迁移卷。在这两种用例中,多个存储系统共享相同的 volume_backend_name,或者未定义。

限制

  • 无法复制该卷。
  • 目标后端必须与卷的当前后端不同。
  • 对于新的后端,现有卷类型必须有效,这意味着必须满足以下条件:

    • 卷类型不能在其 extra specs 中定义 backend_volume_name,或者两个块存储后端必须使用相同的 backend_volume_name 进行配置。
    • 两个后端都必须支持卷类型中配置的相同功能,如对精简配置的支持、对厚置备或其他功能配置的支持。
注意

将卷从一个后端移到另一个后端可能需要大量时间和资源。如需更多信息,请参阅 在后端间移动卷

先决条件

  • 您必须是一个项目管理员才能迁移卷。

流程

  1. 查找 overcloud 凭证文件:

    $ source ~/<credentials_file>
    • <credentials_file > 替换为凭证文件的名称,如 overcloudrc
  2. 输入以下命令来检索目标后端的名称:

    $ cinder get-pools --detail
    
    Property                      | Value
    
    ...
    
    | name                        | localdomain@lvmdriver-1#lvmdriver-1
    | pool_name                   | lvmdriver-1
    
    ...
    
    | volume_backend_name         | lvmdriver-1
    
    ...
    
    Property                      | Value
    
    ...
                                                          |
    | name                        | localdomain@lvmdriver-2#lvmdriver-1
    | pool_name                   | lvmdriver-1
    
    ...
    
    | volume_backend_name         | lvmdriver-1
    
    ...

    目标后端名称使用此语法: host@volume_backend_name114pool

    在示例输出中,块存储服务中有两个 LVM 后端:localdomain@lvmdriver-1#lvmdriver-1localdomain@lvmdriver-2#lvmdriver-1。请注意,两个后端共享相同的 volume_backend_name,lvmdriver-1

  3. 输入以下命令将卷从一个后端迁移到另一个后端:

    $ cinder migrate <volume id or name> <new host>

4.11. 加密未加密的卷

您可以加密未加密的卷。

如果 cinder-backup 服务可用,则备份未加密的卷,然后将其恢复到新的加密卷。

如果 cinder-backup 服务不可用,请从未加密的卷创建一个 glance 镜像,并从此镜像创建一个新的加密卷。

先决条件

  • 您必须是一个项目管理员来创建加密的卷。
  • 要加密的未加密的卷。

流程

cinder-backup 服务可用:

  1. 查找 overcloud 凭证文件:

    $ source ~/<credentials_file>
    • <credentials_file > 替换为凭证文件的名称,如 overcloudrc
  2. 备份当前的未加密的卷:

    cinder backup-create <unencrypted_volume>
    • <unencrypted_volume > 替换为未加密的卷的名称或 ID。
  3. 创建新加密卷:

    cinder create <encrypted_volume_size> --volume-type <encrypted_volume_type>
    • <encrypted_volume_size > 替换为以 GB 为单位的新卷的大小。这个值必须大于 1GB 的未加密卷的大小,以适应加密元数据。
    • <encrypted_volume_type > 替换为您需要的加密类型。
  4. 将未加密的卷的备份恢复到新加密卷中:

    cinder backup-restore <backup> --volume <encrypted_volume>
    • <backup > 替换为未加密的卷备份的名称或 ID。
    • <encrypted_volume > 替换为新加密卷的 ID。

cinder-backup 服务不可用:

  1. 查找 overcloud 凭证文件:

    $ source ~/<credentials_file>
    • <credentials_file > 替换为凭证文件的名称,如 overcloudrc
  2. 为未加密的卷创建一个 glance 镜像:

    cinder upload-to-image <unencrypted_volume> <new_image>
    • <unencrypted_volume > 替换为未加密的卷的名称或 ID。
    • <new_image > 替换为新镜像的名称。
  3. 从比镜像大 1 GB 的镜像创建一个新卷:

    cinder volume create --size <size> --volume-type luks --image <new_image> <encrypted_volume_name>
    • < size> 替换为新卷的大小。这个值必须比旧的未加密的卷大 1GB。
    • <new_image > 替换为从未加密的卷创建的镜像的名称。
    • <encrypted_volume_name > 替换为新加密卷的名称。

4.12. 在 Red Hat Ceph Storage 后端中保护且未受保护的快照

当您使用 Red Hat Ceph Storage(RHCS)作为 Red Hat OpenStack Platform(RHOSP)部署的后端时,您可以在后端中将快照设置为 protected。不要通过 RHOSP 仪表板或 cinder snapshot-delete 命令删除受保护的快照,因为删除失败。

发生这种情况时,首先将快照设置为在 RHCS 后端中 取消保护。然后,您可以正常通过 RHOSP 来删除快照。

有关保护快照的更多信息,请参阅 Red Hat Ceph Storage 块设备指南中的 保护块设备快照 和取消保护块设备快照。https://access.redhat.com/documentation/zh-cn/red_hat_ceph_storage/5/html/block_device_guide/snapshot-management#unprotecting-a-block-device-snapshot_block

第 5 章 配置 Object Storage 服务 (swift)

Red Hat OpenStack Platform (RHOSP) Object Storage 服务(swift)将其对象或数据存储在容器中。容器与文件系统中的目录类似,虽然它们无法嵌套。容器为用户提供了存储任何种类的非结构化数据的简单方法。例如,对象可以包含照片、文本文件或镜像。存储的对象不会被压缩。

5.1. Object Storage 环

Object Storage 服务(swift)使用名为 ring 的数据结构来在集群中分发分区空间。这个分区空间是对象存储服务中数据持久性引擎的核心。借助环,对象存储服务可以快速轻松地在集群中进行每个分区。

Ring 包含有关对象存储分区的信息,以及如何在不同节点和磁盘间分发分区。当任何对象存储组件与数据交互时,会在环中在本地执行一个快速查找,以确定每个对象的可能分区。

对象存储服务有三个 ring,用于存储以下数据类型:

  • 帐户信息
  • 容器,方便在帐户下组织对象
  • 对象副本

5.1.1. 检查集群健康状况

Object Storage 服务(swift)在后台运行多个进程,以确保长期数据可用性、持久性和持久性。例如:

  • 审核员会不断重新读取数据库和对象文件,并使用校验和进行比较,以确保没有静默位。任何不再与其校验和匹配的数据库或对象文件都会被量化,且在该节点上不可读取。然后复制其中一个副本,以使本地副本再次可用。
  • 在替换磁盘或节点或对象被定时,对象和文件可能会消失。发生这种情况时,复制缺少的对象或数据库文件到其他节点之一。

对象存储服务包括一个称为 swift-recon 的工具,该工具从所有节点收集数据并检查集群的整体健康状况。

流程

  1. 登录到其中一个 Controller 节点。
  2. 运行以下命令:

    [tripleo-admin@overcloud-controller-2 ~]$ sudo podman exec -it -u swift swift_object_server /usr/bin/swift-recon -arqlT --md5
    
    ======================================================================--> Starting reconnaissance on 3 hosts (object)
    ======================================================================[2018-12-14 14:55:47] Checking async pendings
    [async_pending] - No hosts returned valid data.
    ======================================================================[2018-12-14 14:55:47] Checking on replication
    [replication_failure] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
    [replication_success] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
    [replication_time] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
    [replication_attempted] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
    Oldest completion was 2018-12-14 14:55:39 (7 seconds ago) by 172.16.3.186:6000.
    Most recent completion was 2018-12-14 14:55:42 (4 seconds ago) by 172.16.3.174:6000.
    ======================================================================[2018-12-14 14:55:47] Checking load averages
    [5m_load_avg] low: 1, high: 2, avg: 2.1, total: 6, Failed: 0.0%, no_result: 0, reported: 3
    [15m_load_avg] low: 2, high: 2, avg: 2.6, total: 7, Failed: 0.0%, no_result: 0, reported: 3
    [1m_load_avg] low: 0, high: 0, avg: 0.8, total: 2, Failed: 0.0%, no_result: 0, reported: 3
    ======================================================================[2018-12-14 14:55:47] Checking ring md5sums
    3/3 hosts matched, 0 error[s] while checking hosts.
    ======================================================================[2018-12-14 14:55:47] Checking swift.conf md5sum
    3/3 hosts matched, 0 error[s] while checking hosts.
    ======================================================================[2018-12-14 14:55:47] Checking quarantine
    [quarantined_objects] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
    [quarantined_accounts] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
    [quarantined_containers] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
    ======================================================================[2018-12-14 14:55:47] Checking time-sync
    3/3 hosts matched, 0 error[s] while checking hosts.
    ======================================================================
  3. 可选: 使用 --all 选项返回额外输出。

    此命令查询环上的所有服务器以获取以下数据:

    • async 待处理:如果集群负载太高,且进程无法足够快地更新数据库文件,则一些更新会异步进行。这些数量会随时间推移而减少。
    • 复制指标:查看复制时间戳;经常发生完全复制通过,但出现错误。例如,一个从六个月前带有时间戳的旧条目表示节点上的复制在最后的六个月内没有完成。
    • Ring md5sums:这样可确保所有环文件在所有节点上都一致。
    • Swift.conf md5sums:这样可确保所有配置文件在所有节点上都是一致的。
    • Quarantined 文件:所有节点必须没有或非常少的文件。
    • time-sync:必须同步所有节点。

5.1.2. 提高环分区电源

Ring power 决定将资源(如帐户、容器或对象)映射到的分区。该分区包含在存储在后端文件系统中的路径中。因此,更改分区电源需要将资源重新定位到后端文件系统中的新路径。

在大量填充的集群中,重新分配过程会消耗大量时间。为避免停机,可在集群仍在运行时重新定位资源。您必须在不临时丢失数据访问或损害进程性能(如复制和审计)的情况下执行此操作。如需增加环分区电源的帮助,请联系红帽支持。

5.1.3. 对象存储服务分区电源建议

当使用单独的 Red Hat OpenStack Platform (RHOSP) Object Storage 服务(swift)节点时,使用更高的分区电源值。

对象存储服务使用修改 的哈希环 在磁盘和节点之间分发数据。默认有三个环:一个用于帐户,一个用于容器,另一个用于对象。每个环都使用一个固定的参数,称为分区 power。此参数设置可以创建的最大分区数。

分区 power 参数非常重要,只能为新容器及其对象更改。因此,在初始部署 之前,务必要设置此值。

对于 RHOSP director 部署的环境,默认分区 power 值为 10。这是用于较小部署的合理值,特别是当您只计划将 Controller 节点上的磁盘用于对象存储服务时。

如果您使用三个副本,下表可帮助您选择适当的分区电源:

表 5.1. 每个可用磁盘数量适当分区电源值

分区 Power

磁盘的最大数量

10

~ 35

11

~ 75

12

~ 150

13

~ 250

14

~ 500

重要

设置过量高分区电源值(例如,最多 14 个磁盘)对复制时间造成负面影响。

要设置分区电源,请使用以下资源:

parameter_defaults:
  SwiftPartPower: 11
提示

您还可以为新容器配置额外的对象服务器 ring。如果要向最初使用较低分区电源的对象存储服务部署添加更多磁盘,这将非常有用。

其他资源

5.1.4. 自定义环

随着技术的提升和对存储容量的增加需求,创建自定义环是更新现有对象存储集群的一种方法。

当您向集群添加新节点时,它们的特征可能与原始节点的不同。如果没有自定义调整,则新节点的容量可能会被使用不足。或者,如果环中的权重发生变化,数据分布可能会变得不均匀,这降低了安全性。

自动化可能无法跟上未来技术趋势的步伐。例如,现在使用中的一些旧的 Object Storage 集群在 SSD 可用之前源自。

随着集群的增长和技术不断发展,ring 构建器可帮助管理对象存储。如需有关创建自定义环的帮助,请联系红帽支持。

5.2. 自定义对象存储服务

根据 Red Hat OpenStack Platform(RHOSP)环境的要求,您可能需要自定义 Object Storage 服务(swift)的一些默认设置以优化部署性能。

5.2.1. 配置 fast-post

默认情况下,Object Storage 服务(swift)会在任何部分元数据更改时复制整个对象。您可以使用 fast-post 功能来防止这种情况。当更改多个大型对象的内容类型时,fast-post 功能可节省时间。

要启用 fast-post 功能,请在 Object Storage 代理服务中禁用 object_post_as_copy 选项。

流程

  1. 编辑 swift_params.yaml

    cat > swift_params.yaml << EOF
    parameter_defaults:
        ExtraConfig:
          swift::proxy::copy::object_post_as_copy: False
    EOF
  2. 在部署或更新 overcloud 时包括参数文件:

    openstack overcloud deploy [... previous args ...] -e swift_params.yaml

5.2.2. 启用 at-rest 加密

默认情况下,上传到对象存储服务(swift)的对象是未加密的。因此,可以直接从文件系统访问对象。如果磁盘在丢弃前没有正确清除磁盘,这可能会存在安全风险。对象存储对象.如需更多信息,请参阅使用 OpenStack Key Manager 管理 Secret 中的 加密 Object Storage (swift) at-rest 对象

5.2.3. 部署独立对象存储服务集群

您可以使用可组合角色概念来部署独立 Object Storage 服务(swift)集群,且最少使用 OpenStack Identity Service (keystone)或 HAProxy。

流程

  1. /usr/share/openstack-tripleo-heat-templates 复制 roles_data.yaml
  2. 编辑新文件。
  3. 删除不需要的控制器角色,如 Aodh*, Ceilometer*, Ceph*, Cinder*, Glance*, Heat*, Ironic*, Manila*, Nova*, Octavia*, Swift*.
  4. roles_data.yaml 中找到 ObjectStorage 角色。
  5. 将此角色复制到同一文件中的新角色,并将它命名为 ObjectProxy
  6. SwiftStorage 替换为此角色中的 SwiftProxy

    以下 roles_data.yaml 文件示例显示了示例角色。

    - name: Controller
      description: |
    	Controller role that has all the controller services loaded and handles
    	Database, Messaging and Network functions.
      CountDefault: 1
      tags:
    	- primary
    	- controller
      networks:
    	- External
    	- InternalApi
    	- Storage
    	- StorageMgmt
    	- Tenant
      HostnameFormatDefault: '%stackname%-controller-%index%'
      ServicesDefault:
    	- OS::TripleO::Services::AuditD
    	- OS::TripleO::Services::CACerts
    	- OS::TripleO::Services::CertmongerUser
    	- OS::TripleO::Services::Clustercheck
    	- OS::TripleO::Services::Docker
    	- OS::TripleO::Services::Ec2Api
    	- OS::TripleO::Services::Etcd
    	- OS::TripleO::Services::HAproxy
    	- OS::TripleO::Services::Keepalived
    	- OS::TripleO::Services::Kernel
    	- OS::TripleO::Services::Keystone
    	- OS::TripleO::Services::Memcached
    	- OS::TripleO::Services::MySQL
    	- OS::TripleO::Services::MySQLClient
    	- OS::TripleO::Services::Ntp
    	- OS::TripleO::Services::Pacemaker
    	- OS::TripleO::Services::RabbitMQ
    	- OS::TripleO::Services::Securetty
    	- OS::TripleO::Services::Snmp
    	- OS::TripleO::Services::Sshd
    	- OS::TripleO::Services::Timezone
    	- OS::TripleO::Services::TripleoFirewall
    	- OS::TripleO::Services::TripleoPackages
    	- OS::TripleO::Services::Vpp
    
    - name: ObjectStorage
      CountDefault: 1
      description: |
    	Swift Object Storage node role
      networks:
    	- InternalApi
    	- Storage
    	- StorageMgmt
      disable_upgrade_deployment: True
      ServicesDefault:
    	- OS::TripleO::Services::AuditD
    	- OS::TripleO::Services::CACerts
    	- OS::TripleO::Services::CertmongerUser
    	- OS::TripleO::Services::Collectd
    	- OS::TripleO::Services::Docker
    	- OS::TripleO::Services::FluentdClient
    	- OS::TripleO::Services::Kernel
    	- OS::TripleO::Services::MySQLClient
    	- OS::TripleO::Services::Ntp
    	- OS::TripleO::Services::Securetty
    	- OS::TripleO::Services::SensuClient
    	- OS::TripleO::Services::Snmp
    	- OS::TripleO::Services::Sshd
    	- OS::TripleO::Services::SwiftRingBuilder
    	- OS::TripleO::Services::SwiftStorage
    	- OS::TripleO::Services::Timezone
    	- OS::TripleO::Services::TripleoFirewall
    	- OS::TripleO::Services::TripleoPackages
    
    - name: ObjectProxy
      CountDefault: 1
      description: |
    	Swift Object proxy node role
      networks:
    	- InternalApi
    	- Storage
    	- StorageMgmt
      disable_upgrade_deployment: True
      ServicesDefault:
    	- OS::TripleO::Services::AuditD
    	- OS::TripleO::Services::CACerts
    	- OS::TripleO::Services::CertmongerUser
    	- OS::TripleO::Services::Collectd
    	- OS::TripleO::Services::Docker
    	- OS::TripleO::Services::FluentdClient
    	- OS::TripleO::Services::Kernel
    	- OS::TripleO::Services::MySQLClient
    	- OS::TripleO::Services::Ntp
    	- OS::TripleO::Services::Securetty
    	- OS::TripleO::Services::SensuClient
    	- OS::TripleO::Services::Snmp
    	- OS::TripleO::Services::Sshd
    	- OS::TripleO::Services::SwiftRingBuilder
    	- OS::TripleO::Services::SwiftProxy
    	- OS::TripleO::Services::Timezone
    	- OS::TripleO::Services::TripleoFirewall
    	- OS::TripleO::Services::TripleoPackages
  7. 使用常规的 openstack deploy 命令部署 overcloud,包括新角色。

    $ openstack overcloud deploy --templates -r roles_data.yaml -e [...]

5.2.4. 使用外部 SAN 磁盘

默认情况下,当 Red Hat OpenStack Platform (RHOSP) director 部署 Object Storage 服务(swift)时,将配置并优化对象存储以使用独立的本地磁盘。此配置可确保工作负载在所有磁盘间分布,这有助于最大程度降低节点故障或其他系统问题期间的性能影响。

在性能影响的事件中,使用单个 SAN 的环境可以降低所有 LUN 的性能。对象存储服务无法缓解使用 SAN 磁盘的环境中出现性能问题。因此,对象存储使用额外的本地磁盘来满足性能和磁盘空间要求。如需更多信息,请参阅 Object Storage 服务的磁盘建议

将外部 SAN 用于对象存储需要根据具体情况进行评估。如需更多信息,请联系红帽支持团队。

重要

如果您选择将外部 SAN 用于 Object Storage,请注意以下条件:

  • 红帽不支持将外部 SAN 用于 Object Storage 的性能与性能相关的问题。
  • 红帽不提供对核心对象存储服务之外出现的问题提供支持。如需支持高可用性和性能,请联系您的存储供应商。
  • 红帽没有使用对象存储服务测试 SAN 解决方案。有关兼容性、指南和支持第三方产品的更多信息,请联络您的存储厂商。
  • 红帽建议您使用部署评估和测试性能需求。要确认您的 SAN 部署经过测试、支持并满足您的性能要求,请联系您的存储厂商。

流程

  • 此模板是一个示例,它如何将两个设备(/dev/mapper/vdb/dev/mapper/vdc)用于对象存储:

    parameter_defaults:
      SwiftMountCheck: true
      SwiftUseLocalDir: false
      SwiftRawDisks: {"vdb": {"base_dir":"/dev/mapper/"}, "vdc": {"base_dir":"/dev/mapper/"}}

5.2.5. 对象存储服务的磁盘建议

将一个或多个单独的本地磁盘用于 Red Hat OpenStack Platform (RHOSP) Object Storage 服务(swift)。

默认情况下,RHOSP director 将系统磁盘上的目录 /srv/node/d1 用于对象存储服务。在 Controller 上,此磁盘也被其他服务使用,磁盘可能会成为性能瓶颈。

以下示例是 RHOSP 编排服务(heat)自定义环境文件摘录。在每个 Controller 节点上,对象存储服务使用两个独立的磁盘。两个磁盘的整个磁盘都包含一个 XFS 文件系统:

parameter_defaults:
  SwiftRawDisks: {"sdb": {}, "sdc": {}}

SwiftRawDisks 定义节点上的每个存储磁盘。这个示例在每个 Controller 节点上定义 sdbsdc 磁盘。

重要

在配置多个磁盘时,请确保 Bare Metal 服务(ironic)使用预期的根磁盘。

其他资源

5.3. 添加或删除对象存储节点

要在集群中添加新的 Object Storage(swift)节点,您必须提高节点数,更新环,并同步更改。您可以通过添加节点到 overcloud 或扩展裸机节点来增加节点数。

要从集群中删除 Object Storage 节点,您可以根据集群中的数据数量来执行简单删除或增量删除。

5.3.1. 向 overcloud 添加节点

您可以将更多节点添加到 overcloud。

注意

全新安装的 Red Hat OpenStack Platform 不包括某些更新,如安全勘误和程序错误修复。因此,如果您要扩展使用红帽客户门户网站或 Red Hat Satellite Server 的连接的环境,则 RPM 更新不会应用到新节点。要将最新的更新应用到 overcloud 节点,您必须执行以下操作之一:

流程

  1. 创建一个名为 newnodes.json 的新 JSON 文件,其中包含您要注册的新节点的详情:

    {
      "nodes":[
        {
            "mac":[
                "dd:dd:dd:dd:dd:dd"
            ],
            "cpu":"4",
            "memory":"6144",
            "disk":"40",
            "arch":"x86_64",
            "pm_type":"ipmi",
            "pm_user":"admin",
            "pm_password":"p@55w0rd!",
            "pm_addr":"192.168.24.207"
        },
        {
            "mac":[
                "ee:ee:ee:ee:ee:ee"
            ],
            "cpu":"4",
            "memory":"6144",
            "disk":"40",
            "arch":"x86_64",
            "pm_type":"ipmi",
            "pm_user":"admin",
            "pm_password":"p@55w0rd!",
            "pm_addr":"192.168.24.208"
        }
      ]
    }
  2. 注册新节点:

    $ source ~/stackrc
    (undercloud)$ openstack overcloud node import newnodes.json
  3. 为每个新节点启动内省进程:

    (undercloud)$ openstack overcloud node introspect \
     --provide <node_1> [node_2] [node_n]
    • 使用 --provide 选项在内省后将所有指定节点重置为 available 状态。
    • <node_ 1> , [node_2], 以及所有节点(直到 [node_n ])替换为您要内省的每个节点的 UUID。
  4. 配置每个新节点的镜像属性:

    (undercloud)$ openstack overcloud node configure <node>

5.3.2. 扩展裸机节点

要增加现有 overcloud 中的裸机节点计数,请在 overcloud-baremetal-deploy.yaml 文件中递增节点数并重新部署 overcloud。

先决条件

流程

  1. 查找 stackrc undercloud 凭据文件:

    $ source ~/stackrc
  2. 打开用于置备裸机节点的 overcloud-baremetal-deploy.yaml 节点定义文件。
  3. 为您要扩展的角色增加 count 参数。例如,以下配置将 Object Storage 节点数增加到 4:

    - name: Controller
      count: 3
    - name: Compute
      count: 10
    - name: ObjectStorage
      count: 4
  4. 可选:为新节点配置预测节点放置。例如,使用以下配置在 node03 上置备新的 Object Storage 节点:

    - name: ObjectStorage
      count: 4
      instances:
      - hostname: overcloud-objectstorage-0
        name: node00
      - hostname: overcloud-objectstorage-1
        name: node01
      - hostname: overcloud-objectstorage-2
        name: node02
      - hostname: overcloud-objectstorage-3
        name: node03
  5. 可选:定义您要分配给新节点的任何其他属性。有关您可以在节点定义文件中配置节点属性的属性的更多信息,请参阅 裸机节点置备属性
  6. 如果您使用对象存储服务(swift)和整个磁盘 overcloud 镜像,overcloud-hardened-uefi-full,根据您的磁盘大小和 /var/srv 的存储要求配置 /srv 分区的大小。如需更多信息,请参阅为对象存储服务配置整个磁盘分区
  7. 置备 overcloud 节点:

    (undercloud)$ openstack overcloud node provision \
    --stack <stack> \
    --output <deployment_file> \
    /home/stack/templates/overcloud-baremetal-deploy.yaml
    • & lt;stack> 替换为置备裸机节点的堆栈的名称。如果未指定,则默认为 overcloud
    • <deployment_file> 替换为用于部署命令生成的 heat 环境文件的名称,如 /home/stack/templates/overcloud-baremetal-deployed.yaml
  8. 在单独的终端中监控调配进度。当置备成功后,节点状态会从 available 改为 active

    (undercloud)$ watch openstack baremetal node list
  9. 将生成的 overcloud-baremetal-deployed.yaml 文件添加到与其他环境文件的堆栈中,并部署 overcloud:

    (undercloud)$ openstack overcloud deploy --templates \
      -e [your environment files] \
      -e /home/stack/templates/overcloud-baremetal-deployed.yaml \
      --deployed-server \
      --disable-validations \
      ...

5.3.3. 定义专用对象存储节点

将其他节点专用于 Red Hat OpenStack Platform (RHOSP)对象存储服务,以提高性能。

如果您要将其他节点专用于 Object Storage 服务,请编辑自定义 roles_data.yaml 文件,从 Controller 节点中删除 Object Storage 服务条目。具体来说,从 Controller 角色的 ServicesDefault 列表中删除以下行:

    - OS::TripleO::Services::SwiftStorage

5.3.4. 更新并重新平衡对象存储环

Object Storage 服务(swift)需要所有 Controller 和 Object Storage 节点上的相同的环文件。如果替换、添加或删除 Controller 节点或 Object Storage 节点,必须在 overcloud 更新后同步这些节点以确保功能正确。

流程

  1. stack 用户身份登录 undercloud 并创建一个临时目录:

    $ mkdir temp && cd temp/
  2. 将 overcloud ring 文件从之前的现有节点之一(本例中为 0)下载到新目录中:

    $ ssh tripleo-admin@overcloud-controller-0.ctlplane 'sudo tar -czvf - /var/lib/config-data/puppet-generated/swift_ringbuilder/etc/swift/{*.builder,*.ring.gz,backups/*.builder}' > swift-rings.tar.gz
  3. 提取 ring 并更改到 ring 子目录中:

    $ tar xzvf swift-rings.tar.gz && cd var/lib/config-data/puppet-generated/swift_ringbuilder/etc/swift/
  4. 根据您的设备详情收集以下变量的值:

    • <device_name>:

      $ openstack baremetal introspection data save <node_name> | jq ".inventory.disks"
    • <node_ip>:

      $ metalsmith <node_name> show
    • <port >:默认端口为 600x。如果您更改了默认值,请使用适用的端口。
    • <builder_file >:第 3 步中的构建器文件名。
    • <weight &gt ; 和 <zone > 变量是用户定义的。
  5. 使用 swift-ring-builder 将新节点添加到现有环中。根据设备详情替换变量。

    注意

    您必须安装 python3-swift RPM 才能使用 swift-ring-builder 命令。

    $ swift-ring-builder etc/swift/<builder_file> add <zone>-<node_ip>:<port>/<device_name> <weight>
  6. 重新平衡环以确保使用新设备:

    $ swift-ring-builder etc/swift/<builder_file> rebalance
  7. 将修改后的 ring 文件上传到 Controller 节点,并确保使用这些 ring 文件。使用类似以下示例的脚本,以分发 ring 文件:

    #!/bin/sh
    set -xe
    
    ALL="tripleo-admin@overcloud-controller-0.ctlplane tripleo-admin@overcloud-controller-1.ctlplane tripleo-admin@overcloud-controller-2.ctlplane"
    • 将 ring 上传到所有节点并重启 Object Storage 服务:

      for DST in ${ALL}; do
        cat swift-rings.tar.gz | ssh "${DST}" 'sudo tar -C / -xvzf -'
        ssh "${DST}" 'sudo podman restart swift_copy_rings'
        ssh "${DST}" 'sudo systemctl restart tripleo_swift*'
      done

5.3.5. 同步节点更改和迁移数据

在复制新 ring 文件复制到其正确的文件夹后,您必须将更改的 ring 文件发送到 Object Storage(swift)容器。

重要的
  • 不要同时迁移所有数据。以 10% 增量迁移数据。例如,将源设备的权重配置为等于 90.0,目标设备等于 10.0.然后,将源设备的权重配置为等于 80.0 和 20.0。继续逐步迁移数据,直到完成整个过程。在迁移过程中,如果您同时移动所有数据,则旧数据位于源设备上,但环指向所有副本的新目标设备。在复制器将所有数据移动到目标设备之前,数据就无法访问。
  • 在迁移过程中,对象存储环重新分配数据位置,然后复制器会将数据移到新位置。随着集群活动的增加,因为负载增加,复制的过程会下降。集群越大,复制通过的时间越长。这是预期的行为,但如果客户端访问当前正在重新定位的数据,则可能会导致日志文件中的 404 错误。当代理尝试从新位置检索数据时,但数据还没有在新位置中,swift-proxy 会在日志文件中报告 404 错误。

    当迁移逐渐时,代理会访问没有移动的副本,且不会发生错误。当代理尝试从替代副本检索数据时,日志文件中的 404 错误将得到解决。要确认复制进程正在进行,请参阅复制日志。Object Storage 服务(swift)每五分钟发出复制日志。

流程

  1. 使用类似以下示例的脚本,将之前存在的 Controller 节点中的环文件分发到所有 Controller 节点,并重启这些节点上的 Object Storage 服务容器:

    #!/bin/sh
    set -xe
    
    SRC="tripleo-admin@overcloud-controller-0.ctlplane"
    ALL="tripleo-admin@overcloud-controller-0.ctlplane tripleo-admin@overcloud-controller-1.ctlplane tripleo-admin@overcloud-controller-2.ctlplane"
    • 获取当前的 ring 文件集合:

      ssh "${SRC}" 'sudo tar -czvf - /var/lib/config-data/puppet-generated/swift_ringbuilder/etc/swift/{*.builder,*.ring.gz,backups/*.builder}' > swift-rings.tar.gz
    • 将 ring 上传到所有节点并重启 Object Storage 服务:

      for DST in ${ALL}; do
        cat swift-rings.tar.gz | ssh "${DST}" 'sudo tar -C / -xvzf -'
        ssh "${DST}" 'sudo podman restart swift_copy_rings'
        ssh "${DST}" 'sudo systemctl restart tripleo_swift*'
      done
  2. 要确认数据正在移到新磁盘,请在新存储节点上运行以下命令:

    $  sudo grep -i replication  /var/log/container/swift/swift.log

5.3.6. 删除 Object Storage 节点

删除 Object Storage (swift)节点的方法有两种:

  • 简单删除:此方法以一个操作中移除节点,并适用于使用较小数量的数据有效地驱动集群。
  • 增量删除:选择环,以减少您要删除的节点上的磁盘的权重。如果您要最小化对存储网络用量的影响,或者集群是否包含大量数据,则此方法适合此方法。

对于这两种方法,您可以 遵循扩展裸机节点 的步骤。但是,对于递增删除,请完成这些先决条件,以更改存储环,以减少您要删除的节点上的磁盘的权重:

先决条件

有关替换对象存储节点的详情,请查看 扩展裸机节点 开始的先决条件。

5.3.7. 缩减裸机节点

要缩减 overcloud 中的裸机节点数量,请标记您要从节点定义文件中的堆栈删除的节点,重新部署 overcloud,然后从 overcloud 中删除裸机节点。

先决条件

  • 成功安装 undercloud。如需更多信息,请参阅在 undercloud 上安装 director
  • 成功部署 overcloud。如需更多信息,请参阅 使用预置备节点配置基本 overcloud
  • 如果您要替换 Object Storage 节点,请将要删除的节点中的数据复制到新的替换节点。等待新节点上完成复制传递。在 /var/log/swift/swift.log 文件中检查复制传递进度。当传递完成后,Object Storage 服务(swift)会将条目添加到类似以下示例的日志中:

    Mar 29 08:49:05 localhost object-server: Object replication complete.
    Mar 29 08:49:11 localhost container-server: Replication run OVER
    Mar 29 08:49:13 localhost account-server: Replication run OVER

流程

  1. 查找 stackrc undercloud 凭据文件:

    $ source ~/stackrc
  2. 为您要缩减的角色减少 overcloud-baremetal-deploy.yaml 文件中的 count 参数。
  3. 定义您要从堆栈中删除的每个节点的 主机名和 名称 (如果尚未在角色的 instances 属性中定义)。
  4. 将属性 provisioned: false 添加到您要删除的节点。例如,要从堆栈中删除节点 overcloud-objectstorage-1,请在 overcloud-baremetal-deploy.yaml 文件中包含以下代码片段:

    - name: ObjectStorage
      count: 3
      instances:
      - hostname: overcloud-objectstorage-0
        name: node00
      - hostname: overcloud-objectstorage-1
        name: node01
        # Removed from cluster due to disk failure
        provisioned: false
      - hostname: overcloud-objectstorage-2
        name: node02
      - hostname: overcloud-objectstorage-3
        name: node03

    重新部署 overcloud 后,堆栈中不再存在使用 provisioned: false 属性定义的节点。但是,这些节点仍然以置备状态运行。

    注意

    若要临时从堆栈中删除节点,可使用 provisioned: false 属性部署 overcloud,然后使用 provisioned: true 属性重新部署 overcloud,以将节点返回到堆栈。

  5. 从 overcloud 删除节点:

    (undercloud)$ openstack overcloud node delete \
    --stack <stack> \
    --baremetal-deployment /home/stack/templates/overcloud-baremetal-deploy.yaml
    • & lt;stack> 替换为置备裸机节点的堆栈的名称。如果未指定,则默认为 overcloud

      注意

      不要将您要从堆栈中删除的节点作为命令参数包括在 openstack overcloud node delete 命令中。

  6. 置备 overcloud 节点以生成更新的 heat 环境文件,以包含在部署命令中:

    (undercloud)$ openstack overcloud node provision \
    --stack <stack> \
    --output <deployment_file> \
    /home/stack/templates/overcloud-baremetal-deploy.yaml
    • <deployment_file> 替换为用于部署命令生成的 heat 环境文件的名称,如 /home/stack/templates/overcloud-baremetal-deployed.yaml
  7. 将 provisioning 命令生成的 overcloud-baremetal-deployed.yaml 文件添加到与其他环境文件的堆栈中,并部署 overcloud:

    (undercloud)$ openstack overcloud deploy \
      ...
      -e /usr/share/openstack-tripleo-heat-templates/environments/deployed-server-environment.yaml \
      -e /home/stack/templates/overcloud-baremetal-deployed.yaml \
      --deployed-server \
      --disable-validations \
      ...

5.4. 对象存储服务中的容器管理

为了协助 Object Storage 服务(swift)中的机构,您可以使用伪文件夹。这些文件夹是可包含对象和嵌套的逻辑设备。例如,您可以创建一个 镜像 文件夹,在其中存储照片和要存储视频的 Media 文件夹。

您可以在各个项目中创建一个或多个容器,以及每个容器的一个或多个对象或伪文件夹。

5.4.1. 创建私有和公共容器

使用控制面板在对象存储服务(swift)中创建容器。

流程

  1. 在仪表板中,选择 Project > Object Store > Containers
  2. Create Container
  3. 指定 Container Name,并在 Container Access 字段中选择以下之一。

    类型描述

    private

    限制当前项目中用户的访问权限。

    公开

    允许 API 访问具有公共 URL 的任何人。但是,在仪表板中,项目用户无法看到来自其他项目的公共容器和数据。

  4. Create Container
  5. 可选:新容器使用默认存储策略。如果定义了多个存储策略,例如,默认策略和其他支持纠删代码的策略,您可以将容器配置为使用非默认存储策略:

    $ swift post -H "X-Storage-Policy:<policy>" <container_name>
    • 将 & lt;policy > 替换为您希望容器使用的策略的名称或别名。
    • <container_name > 替换为容器的名称。

5.4.2. 为容器创建伪文件夹

使用控制面板在 Object Storage 服务(swift)中为容器创建一个伪文件夹。

流程

  1. 在仪表板中,选择 Project > Object Store > Containers
  2. 单击要添加伪文件夹的容器的名称。
  3. Create Pseudo-folder
  4. Pseudo-folder Name 字段中指定名称,然后单击 Create

5.4.3. 从对象存储服务中删除容器

使用仪表板从 Object Storage 服务(swift)中删除容器。

流程

  1. 在仪表板中,选择 Project > Object Store > Containers
  2. Containers 部分中浏览容器,并确保删除所有对象。如需更多信息,请参阅从对象存储服务中删除对象
  3. 在容器箭头菜单中选择 Delete Container
  4. 单击 Delete Container 以确认容器被删除。

5.4.4. 将对象上传到容器

如果您没有将实际文件上传到 Object Storage 服务(swift),则对象仍会创建为占位符,稍后您可以用于上传该文件。

流程

  1. 在仪表板中,选择 Project > Object Store > Containers
  2. 单击您要放置上传对象的容器的名称。如果容器中已存在伪文件夹,您可以点击其名称。
  3. 浏览 文件,然后单击 Upload Object
  4. Object Name 字段中指定一个名称:

    • 您可以使用 / 字符(如 Images/myImage.jpg )指定伪文件夹。如果指定的文件夹尚不存在,则在对象上传时会创建它。
    • 不是位置没有唯一的名称,即对象已存在,覆盖对象的内容。
  5. Upload Object

5.4.5. 在容器间复制对象

使用控制面板在对象存储服务(swift)中复制对象。

流程

  1. 在仪表板中,选择 Project > Object Store > Containers
  2. 单击对象容器或文件夹的名称(以显示对象)。
  3. Upload Object
  4. 浏览要复制的文件,然后在其箭头菜单中选择 Copy
  5. 指定以下内容:

    字段描述

    目标容器

    新对象的目标容器。

    路径

    目标容器中的伪文件夹 ; 如果文件夹尚不存在,则创建它。

    目的地对象名称

    新对象的名称。如果您使用位置没有唯一的名称(即对象已存在),它会覆盖对象的上一内容。

  6. Copy Object

5.4.6. 从对象存储服务中删除对象

使用控制面板从对象存储服务(swift)中删除对象。

流程

  1. 在仪表板中,选择 Project > Object Store > Containers
  2. 浏览对象,然后在其箭头菜单中选择 Delete Object
  3. 单击 Delete Object 以确认对象已被删除。

第 6 章 配置共享文件系统服务(manila)

使用共享文件系统服务(manila),您可以置备多个计算实例、裸机节点或容器可以消耗的共享文件系统。云管理员创建共享类型,以准备共享服务,并使最终用户能够创建和管理共享。

先决条件

  • 最终用户至少需要一种共享类型才能使用共享文件系统服务。
  • 对于 driver_handles_share_servers=False 的后端,云管理员提前配置必要的网络,而不是在共享文件系统后端进行动态配置。
  • 对于通过 NFS 后端的 CephFS,云管理员使用隔离的网络和环境参数部署 Red Hat OpenStack Platform(RHOSP)director,使用自定义 network_data 文件为 NFS 导出创建隔离的 StorageNFS 网络。在使用 overcloud 之前,管理员会创建对应的网络服务(neutron)StorageNFS 共享提供商网络,映射到数据中心的隔离存储NFS 网络。
  • 要让计算实例连接到此共享提供商网络,用户必须添加额外的 neutron 端口。

6.1. 配置共享文件系统服务后端

当云管理员使用 Red Hat OpenStack Platform (RHOSP) director 部署共享文件系统服务(manila)时,他们可以选择一个或多个支持的后端,如原生 CephFS、CephFS-NFS、NetApp、Dell EMC unity 等。

有关原生 CephFS 和 CephFS-NFS 的更多信息,请参阅 部署 Red Hat Ceph Storage 和 Red Hat OpenStack Platform

有关支持的后端设备和驱动程序的完整列表,请参阅 Red Hat OpenStack Platform 中的红帽知识库文章、组件、插件和驱动程序支持的 Manila 部分。

6.1.1. 配置多个后端

后端是一个存储系统或技术,与共享文件系统服务(manila)驱动程序搭配使用,用于导出文件系统。共享文件系统服务需要至少一个后端才可运行。在很多情况下,一个后端已经足够了。但是,您还可以在单一共享文件系统服务安装中使用多个后端。

重要

Red Hat OpenStack Platform (RHOSP)不支持到共享文件系统服务部署的同一后端的多个实例。例如,您无法在同一部署中添加两个 Red Hat Ceph Storage 集群作为后端。CephFS 原生和 CephFS-NFS 被视为具有不同协议的后端。

共享文件系统服务的调度程序决定共享创建请求的目标后端。共享文件系统服务中的一个后端可以公开多个存储池。

当您配置多个后端时,调度程序会选择一个存储池,从所有配置的后端公开的所有池中创建一个资源。这个过程是从最终用户中提取的。最终用户只能看到由云管理员公开的功能。

6.1.2. 部署多个后端

默认情况下,标准共享文件系统服务(manila)部署环境文件只有一个后端。使用以下示例步骤,在共享文件系统服务中添加多个后端,并使用 CephFS-NFS 和 NetApp 后端部署环境。

先决条件

  • 至少两个后端。
  • 如果后端需要自定义容器,则必须使用 红帽生态系统目录 中的一个,而不是标准共享文件系统服务容器。例如,如果要使用带有 Ceph 的 Dell EMC Unity 存储系统后端,请从目录中选择 Dell EMC unity 容器。

流程

  1. 创建一个存储自定义 YAML 文件。您可以使用此文件提供适合您的环境的任何值或覆盖:

    $ vi /home/stack/templates/storage_customizations.yaml
  2. 配置存储自定义 YAML 文件以包含任何覆盖,包括启用多个后端:

    parameter_defaults:
      ManilaEnabledShareProtocols:
        - NFS
      ManilaNetappLogin: '<login_name>'
      ManilaNetappPassword: '<password>'
      ManilaNetappServerHostname: '<netapp-hostname>'
      ManilaNetappVserver: ‘<netapp-vserver>’
      ManilaNetappDriverHandlesShareServers: 'false'
    • 将尖括号 &lt ;& gt; 中的值替换为 YAML 文件的正确值。
  3. 使用 openstack overcloud deploy 命令指定后端模板。示例配置启用带有 NetApp 后端和 CephFS-NFS 后端的共享文件系统服务。

    注意

    在发出 openstack overcloud deploy 命令前执行 源 ~/stackrc

    [stack@undercloud ~]$ source ~/stackrc
    $ openstack overcloud deploy \
      --timeout 100 \
      --stack overcloud \
      --templates /usr/share/openstack-tripleo-heat-templates \
      -n /usr/share/openstack-tripleo-heat-templates/network_data_ganesha.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-mds.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml \
      -r /home/stack/templates/roles/roles_data.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/environments/manila-cephfsganesha-config.yaml \
    -e /usr/share/openstack-tripleo-heat-templates/environments/manila-netapp-config.yaml \
    -e /home/stack/templates/storage_customizations.yaml \
    ...

其他资源

6.1.3. 确认部署多个后端

使用 manila service-list 命令验证后端部署成功。如果您在多个后端中使用健康检查,ping 测试会返回响应,即使其中一个后端没有响应,因此这不是验证部署的一种可靠方法。

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 overcloudrc 凭证文件:

    $ source ~/overcloudrc
  3. 确认共享文件系统服务后端列表:

    $ manila service-list
    
    +----+--------+--------+------+---------+-------+----------------------------+
    | Id | Binary | Host | Zone | Status | State | Updated_at |
    +----+--------+--------+------+---------+-------+----------------------------+
    | 2 | manila-scheduler | hostgroup | nova | enabled | up | 2021-03-24T16:49:09.000000 |
    | 5 | manila-share | hostgroup@cephfs | nova | enabled | up | 2021-03-24T16:49:12.000000 |
    | 8 | manila-share | hostgroup@tripleo_netapp | nova | enabled | up | 2021-03-24T16:49:06.000000 |

    各个成功部署后端的状态都显示为 enabled,状态显示为 up

6.1.4. 覆盖允许的 NAS 协议

共享文件系统服务可以在许多网络连接存储(NAS)协议之一中导出共享,如 NFS、CIFS 或 CEPHFS。默认情况下,共享文件系统服务启用部署中后端支持的所有 NAS 协议。

作为 Red Hat OpenStack Platform(RHOSP)管理员,您可以覆盖 ManilaEnabledShareProtocols 参数,并只列出您要在云中允许的协议。

例如,如果部署中的后端同时支持 NFS 和 CIFS,您可以覆盖默认值并只启用一个协议。

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 查找 overcloudrc 凭证文件:

    $ source ~/overcloudrc
  3. 创建一个存储自定义 YAML 文件。此文件可用于提供适合您的环境的任何值或覆盖:

    $ vi /home/stack/templates/storage_customizations.yaml
  4. 使用您想要的值配置 ManilaEnabledShareProtocols 参数:

    parameter_defaults:
      ManilaEnabledShareProtocols:
        - NFS
        - CEPHFS
  5. 使用 -e 选项,包括 openstack overcloud deploy 命令中包含新内容的环境文件。确保包含与部署相关的所有其他环境文件。

    $ openstack overcloud deploy \
    ...
    -e /home/stack/templates/storage_customizations.yaml
    注意

    部署不会验证设置。您分配的 NAS 协议必须由共享文件系统服务部署的后端支持。

6.1.5. 查看后端功能

共享文件系统服务(manila)的调度程序组件根据几个因素(如容量、置备配置、放置提示以及后端存储系统驱动程序检测到和公开)来做出明智的放置决策。

流程

  • 运行以下命令来查看可用功能:

    $ manila pool-list --detail
    +------------------------------------+----------------------------+
    | Property                           | Value                      |
    +------------------------------------+----------------------------+
    | name                               | hostgroup@cephfs#cephfs    |
    | pool_name                          | cephfs                     |
    | total_capacity_gb                  | 1978                       |
    | free_capacity_gb                   | 1812                       |
    ...
    | driver_handles_share_servers       | False                      |
    | snapshot_support                   | True                       |
    | create_share_from_snapshot_support | False                      |
    | revert_to_snapshot_support         | False                      |
    | mount_snapshot_support             | False                      |
    ...
    +------------------------------------+----------------------------+
    +------------------------------------+-----------------------------------+
    | Property                           | Value                             |
    +------------------------------------+-----------------------------------+
    | name                               | hostgroup@tripleo_netapp#aggr1_n1 |
    | pool_name                          | aggr1_n1                          |
    | total_capacity_gb                  | 6342.1                            |
    | free_capacity_gb                   | 6161.99                           |
    ...
    | driver_handles_share_servers       | False                             |
    | mount_snapshot_support             | False                             |
    | replication_type                   | None                              |
    | replication_domain                 | None                              |
    | sg_consistent_snapshot_support     | host                              |
    | ipv4_support                       | True                              |
    | ipv6_support                       | False                             |
    +------------------------------------+-----------------------------------+
    +------------------------------------+-----------------------------------+
    | Property                           | Value                             |
    +------------------------------------+-----------------------------------+
    | name                               | hostgroup@tripleo_netapp#aggr1_n2 |
    | pool_name                          | aggr1_n2                          |
    | total_capacity_gb                  | 6342.1                            |
    | free_capacity_gb                   | 6209.26                           |
    ...
    | snapshot_support                   | True                              |
    | create_share_from_snapshot_support | True                              |
    | revert_to_snapshot_support         | True                              |
    | driver_handles_share_servers       | False                             |
    | mount_snapshot_support             | False                             |
    | replication_type                   | None                              |
    | replication_domain                 | None                              |
    | sg_consistent_snapshot_support     | host                              |
    | ipv4_support                       | True                              |
    | ipv6_support                       | False                             |
    +------------------------------------+-----------------------------------+

相关信息

要影响放置决策,作为管理员,您可以使用共享类型和额外规格。有关共享类型的更多信息,请参阅创建共享类型

6.2. 创建共享类型

共享类型充当对共享文件系统服务调度程序的提示,以执行放置决策。Red Hat OpenStack Platform(RHOSP)director 使用名为 default 的默认共享类型配置共享文件系统服务,但不创建共享类型。

重要

最终用户至少需要一种共享类型才能使用共享文件系统服务。

流程

  1. 部署 overcloud 后,作为云管理员运行以下命令以创建共享类型:

    $ manila type-create default <spec_driver_handles_share_servers>

    & lt;spec_driver_handles_share_servers > 参数是一个布尔值:

    • 对于通过 NFS 或原生 CephFS 的 CephFS,其值为 false。
    • 对于其他后端,值可以是 true 或 false。将 <spec_driver_handles_share_servers& gt; 设置为与 Manila<backend>DriverHandlesShareServers 参数的值 匹配。例如,如果您使用 NetApp 后端,该参数名为 ManilaNetappDriverHandlesShareServers
  2. 将规格添加到默认共享类型,或创建共享类型以用于多个配置的后端。例如,配置默认共享类型以选择 CephFS 后端和一个使用 NetApp driver_handles_share_servers=True 后端的额外共享类型:

    (overcloud) [stack@undercloud-0 ~]$ manila type-create default false --extra-specs share_backend_name='cephfs'
    (overcloud) [stack@undercloud-0 ~]$ manila type-create netapp true --extra-specs share_backend_name='tripleo_netapp'
注意

默认情况下,共享类型是公共类型,这意味着它们对所有云项目可见并由所有云项目使用。但是,您可以创建私有共享类型,以便在特定项目中使用。

其他资源

  • 有关如何制作私有共享类型或设置其他共享类型选项的更多信息,请参阅 安全性和强化指南

6.3. 共享类型的常用功能比较

共享类型定义共享的通用功能。查看共享类型的常见功能,以了解您可以对共享执行的操作。

表 6.1. 共享类型的功能

功能描述

driver_handles_share_servers

true 或 false

授予使用共享网络创建共享的权限。

snapshot_support

true 或 false

授予创建共享快照的权限。

create_share_from_snapshot_support

true 或 false

授予创建共享快照克隆的权限。

revert_to_snapshot_support

true 或 false

授予将共享恢复到最新快照的权限。

mount_snapshot_support

true 或 false

授予导出和挂载快照的权限。

replication_type

dr

授予为灾难恢复创建副本的权限。每次只允许一个活跃的导出。

可读

授予创建只读副本的权限。每次只允许一个可写的主动导出。

writable

授予创建读取/写入副本的权限。每个共享允许任意数量活跃的导出。

availability_zones

一个或多个可用区列表

授予对仅在列出的可用区中创建共享的权限。

6.4. 为共享文件系统规划网络

共享文件系统通过网络访问。务必要规划云上的网络,以确保最终用户客户端可以将其共享连接到在 Red Hat OpenStack Platform(RHOSP)虚拟机、裸机服务器和容器上运行的工作负载。

根据最终用户所需的安全性和隔离级别,作为管理员,您可以将 driver_handles_share_servers 参数设置为 true 或 false。

如果将 driver_handles_share_servers 参数设置为 true,这可让服务将共享导出到最终用户定义的共享网络,并带有隔离共享服务器的帮助。

driver_handles_share_servers 参数等于 true 时,用户可以在自助服务共享网络上置备其工作负载。这样可确保通过在专用网络段中完全隔离的 NAS 文件服务器导出其共享。

最终用户使用的共享网络可能与他们可以创建的私有项目网络相同。作为管理员,您必须确保将这些隔离网络映射到您的存储基础架构。

您还需要确保项目网络的网络分段风格受使用的存储系统支持。存储系统(如 NetApp ONTAP 和 Dell EMC PowerMax、Unity 和 VNX)不支持 GENEVE 或 VXLAN 等虚拟覆盖分段风格。

作为替代方案,您可以在顶级的交换机上终止覆盖网络,并为项目网络(如 VLAN)使用更原始的网络形式。另一种替代方法是允许共享提供商网络上的 VLAN 网段,或者提供对已连接到您的存储系统的预先存在的网络的访问权限。

如果将 driver_handles_share_servers 参数设置为 false,则用户无法在其自己的共享网络上创建共享。相反,它们必须将客户端连接到由云管理员配置的网络。

driver_handles_share_servers 参数等于 false 时,director 可以为您创建一个专用的共享存储网络。例如,当您使用标准 director 模板部署原生 CephFS 后端时,director 会创建一个共享提供商网络,名为 Storage。当您通过 NFS 后端部署 CephFS 时,共享提供商网络名为 StorageNFS。您的最终用户必须将其客户端连接到共享存储网络才能访问其共享。

并非所有共享文件系统存储驱动程序都支持这两种操作模式。无论您选择哪种模式,服务可确保硬数据路径多租户隔离保证。

如果要提供硬盘路径多租户隔离保证,作为自助服务模型的一部分,则必须部署支持 driver_handles_share_servers 驱动程序模式的后端。

有关到共享的网络连接的详情,请参考 第 6.5 节 “确保到共享的网络连接”

6.5. 确保到共享的网络连接

需要连接到文件共享的客户端必须具有与共享的一个或多个导出位置的网络连接。

使用共享文件系统服务配置网络的方法包括使用网络插件。

当共享类型的 driver_handles_share_servers 参数等于 true 时,云用户可以创建一个共享网络,其中包含计算实例连接的网络详情,然后在创建共享时引用它。

当共享类型的 driver_handles_share_servers 参数等于 false 时,云用户必须将其计算实例连接到共享存储网络。

有关如何配置和验证与共享网络的网络连接的更多信息,请参阅 第 7.5 节 “连接到共享网络以访问共享”

6.6. 更改共享文件系统服务中的默认配额

为了防止系统容量在没有通知的情况下被用尽,云管理员可以配置配额。配额是操作限制。共享文件系统服务(manila)默认强制实施一些可识别的限制。这些限制称为默认配额。云管理员可以覆盖默认配额,使各个项目具有不同的消耗限值。

6.6.1. 更新项目、用户和共享类型的配额

作为云管理员,您可以使用 manila quota-show 命令列出项目或用户的配额。

您可以为项目中的所有用户或特定项目用户更新配额,或者项目用户使用的共享类型。您可以为您选择的目标更新以下配额:

  • 共享 :您可以创建的共享数。
  • 快照 :您可以创建的快照数。
  • 千兆字节 :您可以为所有共享分配的总大小(以 GB 为单位)。
  • snapshot-gigabytes: 以 GB 为单位,您可以为所有共享快照分配总大小。
  • share-networks :您可以创建的共享网络总数。
  • share_groups :您可以创建的共享组总数。
  • share_group_snapshots: 您可以创建的共享组快照总数。
  • share-replicas :您可以创建的共享副本总数。
  • replica-gigabytes :可在所有共享副本间分配的总大小(以 GB 为单位)。
注意

您只能在项目级别指定 共享类型 配额。您不能 为特定项目用户设置共享类型 配额。

重要

在以下步骤中,仔细输入值。共享文件系统服务不会检测或报告不正确的值。

流程

  1. 您可以使用下列命令来查看配额。如果包含 --user 选项,您可以查看指定项目中特定用户的配额。如果省略 --user 选项,您可以查看应用到指定项目的所有用户的配额。

    同样,如果包含可选的 --share-type,您可以查看特定共享类型的配额,因为它与项目相关。--user--share-type 选项是互斥的。

    $ manila quota-show
    • 项目示例:

      $ manila quota-show --project af2838436f3f4cf6896399dd97c4c050
      +-----------------------+----------------------------------+
      | Property              | Value                            |
      +-----------------------+----------------------------------+
      | gigabytes             | 1000                             |
      | id                    | af2838436f3f4cf6896399dd97c4c050 |
      | replica_gigabytes     | 1000                             |
      | share_group_snapshots | 50                               |
      | share_groups          | 49                               |
      | share_networks        | 10                               |
      | share_replicas        | 100                              |
      | shares                | 50                               |
      | snapshot_gigabytes    | 1000                             |
      | snapshots             | 50                               |
      +-----------------------+----------------------------------+
    • 项目用户示例:

      $ manila quota-show --project af2838436f3f4cf6896399dd97c4c050 --user 81ebb491dd0e4c2aae0775dd564e76d1
      +-----------------------+----------------------------------+
      | Property              | Value                            |
      +-----------------------+----------------------------------+
      | gigabytes             | 500                              |
      | id                    | af2838436f3f4cf6896399dd97c4c050 |
      | replica_gigabytes     | 1000                             |
      | share_group_snapshots | 50                               |
      | share_groups          | 49                               |
      | share_networks        | 10                               |
      | share_replicas        | 100                              |
      | shares                | 25                               |
      | snapshot_gigabytes    | 1000                             |
      | snapshots             | 50                               |
      +-----------------------+----------------------------------+
    • 特定共享类型的项目示例:

      $ manila quota-show --project af2838436f3f4cf6896399dd97c4c050 --share-type dhss_false
      +---------------------+----------------------------------+
      | Property            | Value                            |
      +---------------------+----------------------------------+
      | gigabytes           | 1000                             |
      | id                  | af2838436f3f4cf6896399dd97c4c050 |
      | replica_gigabytes   | 1000                             |
      | share_replicas      | 100                              |
      | shares              | 15                               |
      | snapshot_gigabytes  | 1000                             |
      | snapshots           | 50                               |
      +---------------------+----------------------------------+
  2. 使用 manila quota-update 命令更新配额。您可以为所有项目用户、特定项目用户或项目中的共享类型更新配额:

    • 为项目中的所有用户更新配额:

      $ manila quota-update <id> [--shares <share_quota> --gigabytes <share_gigabytes_quota> …]

      将 & lt;id& gt; 替换为项目 ID。这个值必须是项目 ID,而不是项目名称。

    • 为项目中的特定用户更新配额:

      $  manila quota-update <id> --user <user_id> [--shares <new_share_quota> --gigabytes <new_share_gigabytes_quota> …]
      • 将 & lt;id& gt; 替换为项目 ID。这个值必须是项目 ID,而不是项目名称。
      • <user_id& gt; 替换为用户 ID。该值必须是用户 ID,而不是用户名。
    • 为使用特定共享类型的所有用户更新配额:

      $ manila quota-update <id> --share-type <share_type> [--shares <new_share_quota>30 --gigabytes <new-share_gigabytes_quota> …]
      • 将 & lt;id& gt; 替换为项目 ID。这个值必须是项目 ID,而不是项目名称。
      • 将 < share_type > 替换为您要应用配额的共享类型的名称或 ID。

验证

  • quota-update 命令不会产生任何输出。使用 quota-show 命令,验证已成功更新配额。

6.6.2. 为项目、用户和共享类型重置配额

您可以删除配额覆盖,以将配额返回至默认值。目标实体受应用到所有项目的默认配额的限制。

流程

  • 使用 manila quota-delete 命令,将配额返回到默认值。您可以将配额返回到所有项目用户、特定项目用户或项目中的共享类型的默认值:

    • 重置项目配额:

      $ manila quota-delete --project <id>

      将 & lt;id& gt; 替换为项目 ID。这个值必须是项目 ID,而不是项目名称。

    • 为特定用户重置配额:

      $ manila quota-delete --project <id> --user <user_id>
      • 将 & lt;id& gt; 替换为项目 ID。这个值必须是项目 ID,而不是项目名称。
      • <user_id& gt; 替换为用户 ID。该值必须是用户 ID,而不是用户名。
    • 为项目用户使用的共享类型重置配额:

      $ manila quota-delete --project <id> --share-type <share_type>
      • 将 & lt;id& gt; 替换为项目 ID。这个值必须是项目 ID,而不是项目名称。
      • <share_type > 替换为必须重置配额类型的名称或 ID。

验证

  1. quota-delete 命令不会产生任何输出。使用 quota-show 命令验证配额是否已成功重置。
  2. 列出所有项目的默认配额。默认配额适用于没有覆盖的项目。

    $ manila quota-class-show default

6.6.3. 更新共享文件系统服务项目的默认配额值

作为云管理员,您可以更新应用于还没有配额覆盖的所有项目的默认配额。

流程

  1. 查看 manila quota-class-update 命令的 usage 声明:

    $ manila help quota-class-update
    usage: manila quota-class-update [--shares <shares>] [--snapshots <snapshots>]
                                     [--gigabytes <gigabytes>]
                                     [--snapshot-gigabytes <snapshot_gigabytes>]
                                     [--share-networks <share_networks>]
                                     [--share-replicas <share_replicas>]
                                     [--replica-gigabytes <replica_gigabytes>]
                                     <class_name>
    注意

    参数 & lt;class_name > 是一个位置参数。它标识了设置配额配额类。将此参数设置为 default。不支持其他配额类。

    您可以更新以下任何参数的值:

    • --shares <shares > 为 共享 配额添加新值。
    • --snapshots <snapshots > 会为 快照 配额添加新值。
    • --gigabytes <gigabytes> 添加一个新的 gigabytes 配额。
    • --snapshot-gigabytes <snapshot_gigabytes&gt; 或 --snapshot_gigabytes <snapshot_gigabytes& gt; Adds a new value for the snapshot_gigabytes 配额。
    • --share-networks <share_networks&gt; 或 --share_networks <share_networks& gt; Adds a new value for the share_networks quota.
    • --share-replicas <share_replicas > 、--share_replicas&gt; 或 --replicas <share_replicas > 为 share_replicas 配额添加新值。
    • --replica-gigabytes <replica_gigabytes& gt ; 或 --replica_gigabytes <replicabytes&gt; Adds a new value for the replica_gigabytes 配额。
  2. 使用 usage 语句中的信息来更新默认配额。以下示例为 sharesgigabytes 更新默认配额:

    $ manila quota-class-update default --shares 30 --gigabytes 512
    $ manila quota-class-show default
    +-----------------------+---------+
    | Property              | Value   |
    +-----------------------+---------+
    | gigabytes             | 512     |
    | id                    | default |
    | replica_gigabytes     | 1000    |
    | share_group_snapshots | 50      |
    | share_groups          | 50      |
    | share_networks        | 10      |
    | share_replicas        | 100     |
    | shares                | 30      |
    | snapshot_gigabytes    | 1000    |
    | snapshots             | 50      |
    +-----------------------+---------+

第 7 章 使用共享文件系统服务(manila)执行操作

云用户可以通过共享文件系统服务(manila)中的可用共享类型创建和管理共享。

7.1. 发现共享类型

作为云用户,在创建共享时必须指定共享类型。

流程

  • 发现可用的共享类型:

    $ manila type-list

    命令输出列出了共享类型的名称和 ID。

7.2. 创建 NFS 或原生 CephFS 共享

创建 NFS 或原生 CephFS 共享来读取和写入数据。

要创建 NFS 或原生 CephFS 共享,请使用类似如下的命令:

$ manila create [--share-type <sharetype>] [--name <sharename>] proto GB

替换以下值:

  • sharetype 应用与指定共享类型关联的设置。

    • 可选: 如果没有提供,则使用 default 共享类型。
  • sharename 是共享的名称。

    • 可选: 共享不需要具有名称,也不是必需的。
  • proto 是您要使用的共享协议。

    • 对于带有 NFS 的 CephFS,protonfs
    • 对于原生 CephFS,您 最好是 cephfs
    • 对于 NetApp 和 Dell EMC 存储后端,protonfscifs
  • GB 是以 GB 为单位的共享的大小。

例如,在 第 6.2 节 “创建共享类型” 中,云管理员创建了一个 默认共享类型,其 CephFS 后端,另一个共享类型为 netapp,并带有 NetApp 后端。

流程

  1. 创建一个名为 share-01 的 10 GB NFS 共享。本例不指定可选的共享类型,因为它使用了云管理员创建的可用 默认 共享类型。它还使用由云管理员配置的共享存储网络:

    (user) $ manila create --name share-01 nfs 10
  2. 创建一个名为 share-02 的 15 GB 原生 CephFS 共享:

    (user) $ manila create --name share-02 cephfs 15
  3. 创建一个名为 share-03 的 20 GB NFS 共享,并指定自定义共享类型和共享网络:

    (user) $ manila create --name share-03 --share-type netapp --share-network mynet nfs 20

7.3. 列出共享和导出信息

要验证您是否已成功创建共享,请完成以下步骤。

流程

  1. 列出共享:

    (user) $ manila list
    
    +--------------------------------------+----------+-----+-----------+           | ID                                   | Name     | ... | Status    ...
    +--------------------------------------+----------+-----+-----------+
    | 8c3bedd8-bc82-4100-a65d-53ec51b5fe81 | share-01 | ... | available ...
    +--------------------------------------+----------+-----+-----------+
  2. 查看共享的导出位置:

    (user) $ manila share-export-location-list share-01
    
     +------------------------------------------------------------------
     | Path
     |  172.17.5.13:/volumes/_nogroup/e840b4ae-6a04-49ee-9d6e-67d4999fbc01
     +------------------------------------------------------------------
  3. 查看共享的参数:

    (user) $ manila share-export-location-show <id>
    注意

    您可以使用导出位置在 第 7.8.2 节 “挂载 NFS 或原生 CephFS” 中挂载共享。

7.4. 在共享文件系统中创建数据快照

快照是共享中数据的只读、时间点副本。您可以通过意外删除数据或者文件系统崩溃,使用快照来恢复丢失的数据。快照比备份效率更高,它们不会影响共享文件系统服务(manila)的性能。

先决条件

  • 在父共享上,snapshot_support 参数必须是 true。您可以运行以下命令来验证:

    $ manila show | grep snapshot_support

流程

  1. 作为云用户,创建共享的快照:

    $ manila snapshot-create [--name <snapshot_name>] <share>
    • 将 & lt;share > 替换为您要为其创建快照的共享的名称和 ID。
    • 可选:将 <snapshot_name > 替换为快照的名称。

      输出示例

      +-------------------+--------------------------------------+
      | Property      	| Value                            	|
      +-------------------+--------------------------------------+
      | id            	| dbdcb91b-82ba-407e-a23d-44ffca4da04c |
      | share_id      	| ee7059aa-5887-4b87-b03e-d4f0c27ed735 |
      | share_size    	| 1                                	|
      | created_at    	| 2022-01-07T14:20:55.541084       	|
      | status        	| creating                         	|
      | name          	| snapshot_name                    	|
      | description   	| None                             	|
      | size          	| 1                                	|
      | share_proto   	| NFS                              	|
      | provider_location | None                             	|
      | user_id       	| 6d414c62237841dcbe63d3707c1cdd90 	|
      | project_id    	| 041ff9e24eba469491d770ad8666682d 	|
      +-------------------+--------------------------------------+

  2. 确认您创建了快照:

    $ manila snapshot-list --share-id <share>

    将 & lt;share > 替换为创建快照的共享的名称或 ID。

7.4.1. 从快照创建共享

您可以从快照创建共享。如果从 创建的快照共享具有 driver_handles_share_servers共享类型,则在与父共享网络上创建新共享。

注意

如果父共享的共享类型将 driver_handles_share_servers 设置为 true,则无法更改您从快照创建的共享网络。

先决条件

  • create_share_from_snapshot_support share 属性设为 true

    有关共享类型的更多信息,请参阅 比较共享类型的通用功能

  • 快照的 status 属性设置为 available

流程

  1. 检索包含新共享所需数据的共享快照的 ID:

    $ manila snapshot-list
  2. 从快照创建的共享可能大于快照。检索快照的大小:

    $ manila snapshot-show <snapshot-id>
  3. 从快照创建共享:

    $ manila create <share_protocol> <size> \
       --snapshot-id <snapshot_id> \
       --name <name>
    • <share_protocol > 替换为协议,如 NFS。
    • < size> 替换为要创建的共享的大小,以 GiB 为单位。
    • <snapshot_id > 替换为快照的 ID。
    • <name > 替换为新共享的名称。
  4. 列出共享,以确认共享已创建成功:

    $ manila list
  5. 查看新共享的属性:

    $ manila show <name>

验证

创建快照后,确认快照可用。

  • 列出快照以确认它们可用:

    $ manila snapshot-list

7.4.2. 删除快照

当您创建共享的快照时,您无法删除共享,直到您删除从该共享创建的所有快照。

流程

  1. 确定您要删除的快照并检索其 ID:

    $ manila snapshot-list
  2. 删除快照:

    $ manila snapshot-delete <snapshot>
    注意

    对您要删除的每个快照重复此步骤。

  3. 删除快照后,运行以下命令确认您删除了快照:

    $ manila snapshot-list

7.5. 连接到共享网络以访问共享

driver_handles_share_servers 参数等于 false 时,共享将导出到管理员可用的共享提供商网络。作为最终用户,您必须将客户端(如 Compute 实例)连接到共享提供商网络以访问您的共享。

在本例中,共享提供商网络名为 StorageNFS。当 director 通过 NFS 后端使用 CephFS 部署共享文件系统服务时,会配置 StorageNFS。按照类似步骤连接到您的云管理员提供的网络。

注意

在示例中,客户端的 IP 地址系列版本不重要。此流程中的步骤使用 IPv4 地址,但步骤与 IPv6 相同。

流程

  1. 为 StorageNFS 端口创建一个安全组,允许数据包出站端口,但不允许来自未建立的连接的入站数据包:

    (user) $ openstack security group create no-ingress -f yaml
    created_at: '2018-09-19T08:19:58Z'
    description: no-ingress
    id: 66f67c24-cd8b-45e2-b60f-9eaedc79e3c5
    name: no-ingress
    project_id: 1e021e8b322a40968484e1af538b8b63
    revision_number: 2
    rules: 'created_at=''2018-09-19T08:19:58Z'', direction=''egress'', ethertype=''IPv4'',
     id=''6c7f643f-3715-4df5-9fef-0850fb6eaaf2'', updated_at=''2018-09-19T08:19:58Z''
    
     created_at=''2018-09-19T08:19:58Z'', direction=''egress'', ethertype=''IPv6'',                                                          id=''a8ca1ac2-fbe5-40e9-ab67-3e55b7a8632a'', updated_at=''2018-09-19T08:19:58Z'''
    updated_at: '2018-09-19T08:19:58Z'
  2. 在 StorageNFS 网络中创建一个端口,其安全性由 no-ingress 安全组强制使用。

    (user) $ openstack port create nfs-port0 --network StorageNFS --security-group no-ingress -f yaml
    
    admin_state_up: UP
    allowed_address_pairs: ''
    binding_host_id: null
    binding_profile: null
    binding_vif_details: null
    binding_vif_type: null
    binding_vnic_type: normal
    created_at: '2018-09-19T08:03:02Z'
    data_plane_status: null
    description: ''
    device_id: ''
    device_owner: ''
    dns_assignment: null
    dns_name: null
    extra_dhcp_opts: ''
    fixed_ips: ip_address='172.17.5.160', subnet_id='7bc188ae-aab3-425b-a894-863e4b664192'
    id: 7a91cbbc-8821-4d20-a24c-99c07178e5f7
    ip_address: null
    mac_address: fa:16:3e:be:41:6f
    name: nfs-port0
    network_id: cb2cbc5f-ea92-4c2d-beb8-d9b10e10efae
    option_name: null
    option_value: null
    port_security_enabled: true
    project_id: 1e021e8b322a40968484e1af538b8b63
    qos_policy_id: null
    revision_number: 6
    security_group_ids: 66f67c24-cd8b-45e2-b60f-9eaedc79e3c5
    status: DOWN
    subnet_id: null
    tags: ''
    trunk_details: null
    updated_at: '2018-09-19T08:03:03Z'
    注意

    StorageNFSSubnet 将 IP 地址 172.17.5.160 分配给 nfs-port0

  3. nfs-port0 添加到 Compute 实例。

    (user) $ openstack server add port instance0 nfs-port0
    (user) $ openstack server list -f yaml
    - Flavor: m1.micro
      ID: 0b878c11-e791-434b-ab63-274ecfc957e8
      Image: manila-test
      Name: demo-instance0
      Networks: demo-network=172.20.0.4, 10.0.0.53; StorageNFS=172.17.5.160
      Status: ACTIVE

    除了私有和浮动地址外,计算实例还在 StorageNFS 网络上分配一个 IP 地址 172.17.5.160 的端口,您可以在访问 NFS 共享时用于挂载该地址以供共享使用。

    注意

    您可能需要调整 Compute 实例上的网络配置,并重启 Compute 实例的服务来使用此地址激活接口。

7.6. 在网络和实例之间配置 IPv6 接口

当共享导出的共享使用 IPv6 寻址时,您可能会在二级接口上遇到 DHCPv6 的问题。如果发生此问题,请在实例上手动配置 IPv6 接口。

先决条件

  • 连接到共享以访问共享

流程

  1. 登录实例。
  2. 配置 IPv6 接口地址:

    $ sudo ip address add fd00:fd00:fd00:7000::c/64 dev eth1
  3. 激活接口:

    $ sudo ip link set dev eth1 up
  4. Ping 共享的导出位置中的 IPv6 地址测试接口连接:

    $ ping -6  fd00:fd00:fd00:7000::21
  5. 或者,验证您是否可以通过 Telnet 访问 NFS 服务器:

    $ sudo dnf install -y telnet
    $ telnet fd00:fd00:fd00:7000::21 2049

7.7. 为最终用户客户端授予共享访问权限

您必须授予最终用户对共享的客户端访问,以便用户可以在共享中读取数据并写入数据。

您可以通过实例的 IP 地址授予客户端计算实例访问权限。CIFS 共享 的用户 规则和 CephFS 共享的 cephx 规则遵循类似的模式。使用 用户和 cephx 访问类型,如果需要,您可以在 多个客户端间使用相同的客户端识别符

在客户端上挂载共享(如计算实例)前,您必须使用类似如下的命令授予客户端对共享的访问权限:

$ manila access-allow <share> <accesstype> --access-level <accesslevel>  <clientidentifier>

替换以下值:

  • 共享 :在 第 7.2 节 “创建 NFS 或原生 CephFS 共享” 中创建共享的共享名称或 ID。
  • ACCESSTYPE :共享上要请求的访问权限类型。有些类型包括:

    • 用户 :使用 通过用户或组名称进行身份验证。
    • IP :使用 通过其 IP 地址验证实例。
    • cephx :使用,通过原生 CephFS 客户端用户名进行身份验证。

      注意

      访问的类型取决于共享的协议。对于 CIFS,您可以使用 用户。对于 NFS 共享,您必须使用 ip。对于原生 CephFS 共享,您必须使用 cephx

  • 访问级别 :可选;默认值为 rw

    • rw :对共享的读写访问.
    • ro :对共享的只读权限.
  • 客户端识别符 :根据 访问类型.

    • ip accesstype 使用 IP 地址。
    • 使用一个 CIFS 用户或组作为 user accesstype
    • 使用 cephx accesstype 的用户名字符串。

7.7.1. 授予对 NFS 共享的访问权限

您可以通过 IP 地址访问 NFS 共享。

注意

在示例中,客户端的 IP 地址系列版本不重要。此流程中的步骤使用 IPv4 地址,但步骤与 IPv6 相同。

流程

  1. 检索您要挂载共享的客户端计算实例的 IP 地址。请确定您选择与可访问共享的网络对应的 IP 地址。在本例中,它是 StorageNFS 网络的 IP 地址:

    (user) $ openstack server list -f yaml
    - Flavor: m1.micro
      ID: 0b878c11-e791-434b-ab63-274ecfc957e8
      Image: manila-test
      Name: demo-instance0
      Networks: demo-network=172.20.0.4, 10.0.0.53;
      StorageNFS=172.17.5.160
      Status: ACTIVE
    
    (user) $ manila access-allow share-01 ip 172.17.5.160
    注意

    对共享的访问权限具有自己的 ID(accessid)。

    +-----------------+---------------------------------------+
    | Property        | Value                                 |
    +-----------------+---------------------------------------+
    | access_key      | None
    | share_id        | db3bedd8-bc82-4100-a65d-53ec51b5cba3
    | created_at      | 2018-09-17T21:57:42.000000
    | updated_at      | None
    | access_type     | ip
    | access_to       | 172.17.5.160
    | access_level    | rw
    | state           | queued_to_apply
    | id              | 875c6251-c17e-4c45-8516-fe0928004fff
    +-----------------+---------------------------------------+
  2. 验证访问配置是否成功:

    (user) $ manila access-list share-01
    
    +--------------+-------------+--------------+--------------+--------+ ...
    | id           | access_type | access_to    | access_level | state  | ...
    +--------------+-------------+--------------+--------------+--------+
    | 875c6251-... | ip          | 172.17.5.160 | rw       	   | active | ...
    +--------------+------------+--------------+--------------+---------+ ...

7.7.2. 授予对原生 CephFS 共享的访问权限

您可以通过 Ceph 客户端用户名提供对原生 CephFS 共享的访问。共享文件系统服务(manila)可防止使用预先存在的 Ceph 用户,因此您必须创建唯一的 Ceph 客户端用户名。

要挂载共享,您需要 Ceph 客户端用户名和访问密钥。您可以使用共享文件系统服务 API 检索访问密钥。默认情况下,访问密钥对项目命名空间中的所有用户可见。您可以让同一用户能够访问项目命名空间中的不同共享。然后,用户可以通过在客户端计算机上使用 CephFS 内核客户端来访问共享。

重要

仅将原生 CephFS 驱动程序与可信客户端一起使用。有关原生 CephFS 后端安全性的信息,请参阅 Deploying Red Hat Ceph Storage and Red Hat OpenStack Platform with director 中的 原生 CephFS 后端安全性

流程

  1. 授予用户对原生 CephFS 共享的访问权限:

    $ manila access-allow <share-02> cephx <user-01>
    • <share-02 > 替换为共享名称或共享 ID。
    • <user-01& gt; 替换为 cephx 用户。
  2. 为用户收集访问密钥:

    $ manila access-list <share-02>

7.7.3. 撤销对共享的访问权限

共享的所有者可能会因为任何原因撤销对共享的访问。完成以下步骤以撤销之前对共享的访问。

流程

  • 撤销对共享的访问权限:

    $ manila access-deny <share> <accessid>
    • <share > 替换为共享名称或共享 ID。

      例如:

(user) $ manila access-list share-01
+--------------+-------------+--------------+--------------+--------+
| id           | access_type | access_to    | access_level | state  | ...
+--------------+-------------+--------------+--------------+--------+ ...
| 875c6251-... | ip          | 172.17.5.160 | rw       	   | active | ...
+--------------+-------------+--------------+--------------+--------+

(user) $ manila access-deny share-01 875c6251-c17e-4c45-8516-fe0928004fff

(user) $ manila access-list share-01

+--------------+------------+--------------+--------------+--------+ ...
| id           | access_type| access_to    | access_level | state  | ...
+--------------+------------+--------------+--------------+--------+ ...
+--------------+------------+--------------+--------------+--------+ ...
注意

如果您有一个具有读写权限的现有客户端,则必须撤销其对共享的访问权限,并在您希望客户端具有只读权限时添加只读规则。

7.8. 在计算实例上挂载共享

向客户端授予共享访问权限后,客户端就可以挂载并使用共享。只要有与客户端有网络连接,任何类型的客户端就可以访问共享。

在虚拟计算实例上挂载 NFS 共享的步骤与在裸机计算实例上挂载 NFS 共享的步骤类似。有关如何在 OpenShift 容器上挂载共享的更多信息,请参阅 OpenShift Container Platform 产品文档

注意

必须在挂载共享的 Compute 实例中安装不同协议的客户端软件包。例如,对于使用 CephFS 的共享文件系统服务,NFS 客户端软件包必须支持 NFS 4.1。

7.8.1. 列出共享导出位置

检索共享的导出位置,以便您可以挂载共享。

流程

  • 检索共享的导出位置:

    (user) $ manila share-export-location-list share-01

    当存在多个导出位置时,选择一个来代表 首选 metadata 字段的值等于 True。如果没有首选位置,您可以使用任何导出位置。

7.8.2. 挂载 NFS 或原生 CephFS

创建 NFS 或原生 CephFS 共享并授予对最终用户客户端的共享访问权限后,用户可以将共享挂载到客户端上,以启用对数据的访问权限。只要有与客户端有网络连接,任何类型的客户端就可以访问共享。

先决条件

  • 要挂载 NFS 共享,客户端计算机上必须安装 nfs-utils 软件包。
  • 若要挂载原生 CephFS 共享,客户端计算机上必须安装 ceph-common 软件包。用户通过使用客户端计算机上的 CephFS 内核客户端访问原生的 CephFS 共享。

流程

  1. 登录到实例:

    (user) $ openstack server ssh demo-instance0 --login user
  2. 要挂载 NFS 共享,请参考以下示例语法:

    $ mount -t nfs -v <172.17.5.13:/volumes/_nogroup/e840b4ae-6a04-49ee-9d6e-67d4999fbc01> /mnt
  3. 要挂载原生 CephFS 共享,请参考以下示例语法:

    $  mount -t ceph \ <192.168.1.7:6789,192.168.1.8:6789,192.168.1.9:6789:/volumes/_nogroup/4c55ad20-9c55-4a5e-9233-8ac64566b98c> \
    -o name=<user-01>,secret='<AQA8+ANW/<4ZWNRAAOtWJMFPEihBA1unFImJczA==>'

验证

  • 验证挂载命令是否成功:

    $ df -k

7.9. 删除共享

共享文件系统服务(manila)不提供保护,以防止您删除数据。共享文件系统服务不检查客户端是否已连接或者工作负载是否正在运行。当您删除共享时,您无法检索它。

警告

在删除共享前备份您的数据。

先决条件

  • 如果从共享创建快照,则必须删除所有快照和副本,然后才能删除共享。如需更多信息,请参阅 删除快照

流程

  • 删除共享:

    $ manila delete <share>
  • <share > 替换为共享名称或共享 ID。

7.10. 列出共享文件系统服务的资源限值

作为云用户,您可以列出当前的资源限值。这可帮助您规划工作负载,并根据资源消耗准备任何操作。

流程

  • 列出项目的资源限值和当前资源消耗:

    $ manila absolute-limits
    +------------------------------+-------+
    | Name                         | Value |
    +------------------------------+-------+
    | maxTotalReplicaGigabytes     | 1000  |
    | maxTotalShareGigabytes       | 1000  |
    | maxTotalShareGroupSnapshots  | 50    |
    | maxTotalShareGroups          | 49    |
    | maxTotalShareNetworks        | 10    |
    | maxTotalShareReplicas        | 100   |
    | maxTotalShareSnapshots       | 50    |
    | maxTotalShares               | 50    |
    | maxTotalSnapshotGigabytes    | 1000  |
    | totalReplicaGigabytesUsed    | 22    |
    | totalShareGigabytesUsed      | 25    |
    | totalShareGroupSnapshotsUsed | 0     |
    | totalShareGroupsUsed         | 9     |
    | totalShareNetworksUsed       | 2     |
    | totalShareReplicasUsed       | 9     |
    | totalShareSnapshotsUsed      | 4     |
    | totalSharesUsed              | 12    |
    | totalSnapshotGigabytesUsed   | 4     |
    +------------------------------+-------+

7.11. 操作失败的故障排除

如果共享文件系统服务(manila)操作(如创建共享或创建共享组)以最终用户身份失败,您可以从命令行运行查询以获取有关错误的更多信息。

7.11.1. 修复创建共享或创建共享组失败

在本例中,最终用户的目标是创建在多个虚拟机上托管软件库的共享。示例有意引入了两个共享创建失败,以说明如何使用命令行来检索用户支持信息。

流程

  1. 要创建共享,您可以使用共享类型指定要具有的一些功能。云管理员可以创建共享类型。查看可用共享类型:

    clouduser1@client:~$ manila type-list
    +--------------------------------------+-------------+------------+------------+--------------------------------------+--------------------------------------------+-------------+
    | ID                                   | Name        | visibility | is_default | required_extra_specs                 | optional_extra_specs                       | Description |
    +--------------------------------------+-------------+------------+------------+--------------------------------------+--------------------------------------------+-------------+
    | 1cf5d45a-61b3-44d1-8ec7-89a21f51a4d4 | dhss_false  | public     | YES        | driver_handles_share_servers : False | create_share_from_snapshot_support : True  | None        |
    |                                      |             |            |            |                                      | mount_snapshot_support : False             |             |
    |                                      |             |            |            |                                      | revert_to_snapshot_support : False         |             |
    |                                      |             |            |            |                                      | snapshot_support : True                    |             |
    | 277c1089-127f-426e-9b12-711845991ea1 | dhss_true   | public     | -          | driver_handles_share_servers : True  | create_share_from_snapshot_support : True  | None        |
    |                                      |             |            |            |                                      | mount_snapshot_support : False             |             |
    |                                      |             |            |            |                                      | revert_to_snapshot_support : False         |             |
    |                                      |             |            |            |                                      | snapshot_support : True                    |             |
    +--------------------------------------+-------------+------------+------------+--------------------------------------+--------------------------------------------+-------------+

    在本例中,有两个共享类型可用。

  2. 要使用指定 driver_handles_share_servers=True 功能的共享类型,您必须创建一个共享网络来导出共享。从私有项目网络创建共享网络。

    clouduser1@client:~$ openstack subnet list
    +--------------------------------------+---------------------+--------------------------------------+---------------------+
    | ID                                   | Name                | Network                              | Subnet              |
    +--------------------------------------+---------------------+--------------------------------------+---------------------+
    | 78c6ac57-bba7-4922-ab81-16cde31c2d06 | private-subnet      | 74d5cfb3-5dd0-43f7-b1b2-5b544cb16212 | 10.0.0.0/26         |
    | a344682c-718d-4825-a87a-3622b4d3a771 | ipv6-private-subnet | 74d5cfb3-5dd0-43f7-b1b2-5b544cb16212 | fd36:18fc:a8e9::/64 |
    +--------------------------------------+---------------------+--------------------------------------+---------------------+
    
    clouduser1@client:~$ manila share-network-create --name mynet --neutron-net-id 74d5cfb3-5dd0-43f7-b1b2-5b544cb16212 --neutron-subnet-id 78c6ac57-bba7-4922-ab81-16cde31c2d06
    +-------------------+--------------------------------------+
    | Property          | Value                                |
    +-------------------+--------------------------------------+
    | network_type      | None                                 |
    | name              | mynet                                |
    | segmentation_id   | None                                 |
    | created_at        | 2018-10-09T21:32:22.485399           |
    | neutron_subnet_id | 78c6ac57-bba7-4922-ab81-16cde31c2d06 |
    | updated_at        | None                                 |
    | mtu               | None                                 |
    | gateway           | None                                 |
    | neutron_net_id    | 74d5cfb3-5dd0-43f7-b1b2-5b544cb16212 |
    | ip_version        | None                                 |
    | cidr              | None                                 |
    | project_id        | cadd7139bc3148b8973df097c0911016     |
    | id                | 0b0fc320-d4b5-44a1-a1ae-800c56de550c |
    | description       | None                                 |
    +-------------------+--------------------------------------+
    
    clouduser1@client:~$ manila share-network-list
    +--------------------------------------+-------+
    | id                                   | name  |
    +--------------------------------------+-------+
    | 6c7ef9ef-3591-48b6-b18a-71a03059edd5 | mynet |
    +--------------------------------------+-------+
  3. 创建共享:

    clouduser1@client:~$ manila create nfs 1 --name software_share --share-network mynet --share-type dhss_true
    +---------------------------------------+--------------------------------------+
    | Property                              | Value                                |
    +---------------------------------------+--------------------------------------+
    | status                                | creating                             |
    | share_type_name                       | dhss_true                            |
    | description                           | None                                 |
    | availability_zone                     | None                                 |
    | share_network_id                      | 6c7ef9ef-3591-48b6-b18a-71a03059edd5 |
    | share_server_id                       | None                                 |
    | share_group_id                        | None                                 |
    | host                                  |                                      |
    | revert_to_snapshot_support            | False                                |
    | access_rules_status                   | active                               |
    | snapshot_id                           | None                                 |
    | create_share_from_snapshot_support    | False                                |
    | is_public                             | False                                |
    | task_state                            | None                                 |
    | snapshot_support                      | False                                |
    | id                                    | 243f3a51-0624-4bdd-950e-7ed190b53b67 |
    | size                                  | 1                                    |
    | source_share_group_snapshot_member_id | None                                 |
    | user_id                               | 61aef4895b0b41619e67ae83fba6defe     |
    | name                                  | software_share                       |
    | share_type                            | 277c1089-127f-426e-9b12-711845991ea1 |
    | has_replicas                          | False                                |
    | replication_type                      | None                                 |
    | created_at                            | 2018-10-09T21:12:21.000000           |
    | share_proto                           | NFS                                  |
    | mount_snapshot_support                | False                                |
    | project_id                            | cadd7139bc3148b8973df097c0911016     |
    | metadata                              | {}                                   |
    +---------------------------------------+--------------------------------------+
  4. 查看共享的状态:

    clouduser1@client:~$ manila list
    +--------------------------------------+----------------+------+-------------+--------+-----------+-----------------+------+-------------------+
    | ID                                   | Name           | Size | Share Proto | Status | Is Public | Share Type Name | Host | Availability Zone |
    +--------------------------------------+----------------+------+-------------+--------+-----------+-----------------+------+-------------------+
    | 243f3a51-0624-4bdd-950e-7ed190b53b67 | software_share | 1    | NFS         | error  | False     | dhss_true       |      | None              |
    +--------------------------------------+----------------+------+-------------+--------+-----------+-----------------+------+-------------------+

    在本例中,创建共享期间出现错误。

  5. 要查看用户支持消息,请运行 message-list 命令。使用 --resource-id 过滤到您要找到的特定共享。

    clouduser1@client:~$ manila message-list
    +--------------------------------------+---------------+--------------------------------------+-----------+----------------------------------------------------------------------------------------------------------+-----------+----------------------------+
    | ID                                   | Resource Type | Resource ID                          | Action ID | User Message                                                                                             | Detail ID | Created At                 |
    +--------------------------------------+---------------+--------------------------------------+-----------+----------------------------------------------------------------------------------------------------------+-----------+----------------------------+
    | 7d411c3c-46d9-433f-9e21-c04ca30b209c | SHARE         | 243f3a51-0624-4bdd-950e-7ed190b53b67 | 001       | allocate host: No storage could be allocated for this share request, Capabilities filter didn't succeed. | 008       | 2018-10-09T21:12:21.000000 |
    +--------------------------------------+---------------+--------------------------------------+-----------+----------------------------------------------------------------------------------------------------------+-----------+----------------------------+

    User Message 列中,注意共享文件系统服务无法创建共享,因为功能不匹配。

  6. 要查看更多信息,请运行 message-show 命令,后跟 message-list 命令中的消息 ID:

    clouduser1@client:~$ manila message-show 7d411c3c-46d9-433f-9e21-c04ca30b209c
    +---------------+----------------------------------------------------------------------------------------------------------+
    | Property      | Value                                                                                                    |
    +---------------+----------------------------------------------------------------------------------------------------------+
    | request_id    | req-0a875292-6c52-458b-87d4-1f945556feac                                                                 |
    | detail_id     | 008                                                                                                      |
    | expires_at    | 2018-11-08T21:12:21.000000                                                                               |
    | resource_id   | 243f3a51-0624-4bdd-950e-7ed190b53b67                                                                     |
    | user_message  | allocate host: No storage could be allocated for this share request, Capabilities filter didn't succeed. |
    | created_at    | 2018-10-09T21:12:21.000000                                                                               |
    | message_level | ERROR                                                                                                    |
    | id            | 7d411c3c-46d9-433f-9e21-c04ca30b209c                                                                     |
    | resource_type | SHARE                                                                                                    |
    | action_id     | 001                                                                                                      |
    +---------------+----------------------------------------------------------------------------------------------------------+
  7. 作为云用户,您可以通过共享类型检查功能,以便您可以查看可用的共享类型。两种共享类型之间的区别是 driver_handles_share_servers 的值:

    clouduser1@client:~$ manila type-list
    +--------------------------------------+-------------+------------+------------+--------------------------------------+--------------------------------------------+-------------+
    | ID                                   | Name        | visibility | is_default | required_extra_specs                 | optional_extra_specs                       | Description |
    +--------------------------------------+-------------+------------+------------+--------------------------------------+--------------------------------------------+-------------+
    | 1cf5d45a-61b3-44d1-8ec7-89a21f51a4d4 | dhss_false  | public     | YES        | driver_handles_share_servers : False | create_share_from_snapshot_support : True  | None        |
    |                                      |             |            |            |                                      | mount_snapshot_support : False             |             |
    |                                      |             |            |            |                                      | revert_to_snapshot_support : False         |             |
    |                                      |             |            |            |                                      | snapshot_support : True                    |             |
    | 277c1089-127f-426e-9b12-711845991ea1 | dhss_true   | public     | -          | driver_handles_share_servers : True  | create_share_from_snapshot_support : True  | None        |
    |                                      |             |            |            |                                      | mount_snapshot_support : False             |             |
    |                                      |             |            |            |                                      | revert_to_snapshot_support : False         |             |
    |                                      |             |            |            |                                      | snapshot_support : True                    |             |
    +--------------------------------------+-------------+------------+------------+--------------------------------------+--------------------------------------------+-------------+
  8. 使用其他可用共享类型创建共享:

    clouduser1@client:~$ manila create nfs 1 --name software_share --share-network mynet --share-type dhss_false
    +---------------------------------------+--------------------------------------+
    | Property                              | Value                                |
    +---------------------------------------+--------------------------------------+
    | status                                | creating                             |
    | share_type_name                       | dhss_false                           |
    | description                           | None                                 |
    | availability_zone                     | None                                 |
    | share_network_id                      | 6c7ef9ef-3591-48b6-b18a-71a03059edd5 |
    | share_group_id                        | None                                 |
    | revert_to_snapshot_support            | False                                |
    | access_rules_status                   | active                               |
    | snapshot_id                           | None                                 |
    | create_share_from_snapshot_support    | True                                 |
    | is_public                             | False                                |
    | task_state                            | None                                 |
    | snapshot_support                      | True                                 |
    | id                                    | 2d03d480-7cba-4122-ac9d-edc59c8df698 |
    | size                                  | 1                                    |
    | source_share_group_snapshot_member_id | None                                 |
    | user_id                               | 5c7bdb6eb0504d54a619acf8375c08ce     |
    | name                                  | software_share                       |
    | share_type                            | 1cf5d45a-61b3-44d1-8ec7-89a21f51a4d4 |
    | has_replicas                          | False                                |
    | replication_type                      | None                                 |
    | created_at                            | 2018-10-09T21:24:40.000000           |
    | share_proto                           | NFS                                  |
    | mount_snapshot_support                | False                                |
    | project_id                            | cadd7139bc3148b8973df097c0911016     |
    | metadata                              | {}                                   |
    +---------------------------------------+--------------------------------------+

    在本例中,第二个共享创建尝试失败。

  9. 查看用户支持信息:

    clouduser1@client:~$ manila list
    +--------------------------------------+----------------+------+-------------+--------+-----------+-----------------+------+-------------------+
    | ID                                   | Name           | Size | Share Proto | Status | Is Public | Share Type Name | Host | Availability Zone |
    +--------------------------------------+----------------+------+-------------+--------+-----------+-----------------+------+-------------------+
    | 2d03d480-7cba-4122-ac9d-edc59c8df698 | software_share | 1    | NFS         | error  | False     | dhss_false      |      | nova              |
    | 243f3a51-0624-4bdd-950e-7ed190b53b67 | software_share | 1    | NFS         | error  | False     | dhss_true       |      | None              |
    +--------------------------------------+----------------+------+-------------+--------+-----------+-----------------+------+-------------------+
    
    clouduser1@client:~$ manila message-list
    +--------------------------------------+---------------+--------------------------------------+-----------+----------------------------------------------------------------------------------------------------------+-----------+----------------------------+
    | ID                                   | Resource Type | Resource ID                          | Action ID | User Message                                                                                             | Detail ID | Created At                 |
    +--------------------------------------+---------------+--------------------------------------+-----------+----------------------------------------------------------------------------------------------------------+-----------+----------------------------+
    | ed7e02a2-0cdb-4ff9-b64f-e4d2ec1ef069 | SHARE         | 2d03d480-7cba-4122-ac9d-edc59c8df698 | 002       | create: Driver does not expect share-network to be provided with current configuration.                  | 003       | 2018-10-09T21:24:40.000000 |
    | 7d411c3c-46d9-433f-9e21-c04ca30b209c | SHARE         | 243f3a51-0624-4bdd-950e-7ed190b53b67 | 001       | allocate host: No storage could be allocated for this share request, Capabilities filter didn't succeed. | 008       | 2018-10-09T21:12:21.000000 |
    +--------------------------------------+---------------+--------------------------------------+-----------+----------------------------------------------------------------------------------------------------------+-----------+----------------------------+

    该服务不应该为您使用的共享类型提供共享网络。

  10. 在没有咨询管理员的情况下,您可以发现管理员没有提供支持直接导出到私有 neutron 网络的存储后端。创建没有 share-network 参数的共享:

    clouduser1@client:~$ manila create nfs 1 --name software_share --share-type dhss_false
    +---------------------------------------+--------------------------------------+
    | Property                              | Value                                |
    +---------------------------------------+--------------------------------------+
    | status                                | creating                             |
    | share_type_name                       | dhss_false                           |
    | description                           | None                                 |
    | availability_zone                     | None                                 |
    | share_network_id                      | None                                 |
    | share_group_id                        | None                                 |
    | revert_to_snapshot_support            | False                                |
    | access_rules_status                   | active                               |
    | snapshot_id                           | None                                 |
    | create_share_from_snapshot_support    | True                                 |
    | is_public                             | False                                |
    | task_state                            | None                                 |
    | snapshot_support                      | True                                 |
    | id                                    | 4d3d7fcf-5fb7-4209-90eb-9e064659f46d |
    | size                                  | 1                                    |
    | source_share_group_snapshot_member_id | None                                 |
    | user_id                               | 5c7bdb6eb0504d54a619acf8375c08ce     |
    | name                                  | software_share                       |
    | share_type                            | 1cf5d45a-61b3-44d1-8ec7-89a21f51a4d4 |
    | has_replicas                          | False                                |
    | replication_type                      | None                                 |
    | created_at                            | 2018-10-09T21:25:40.000000           |
    | share_proto                           | NFS                                  |
    | mount_snapshot_support                | False                                |
    | project_id                            | cadd7139bc3148b8973df097c0911016     |
    | metadata                              | {}                                   |
    +---------------------------------------+--------------------------------------+
  11. 确保共享创建成功:

    clouduser1@client:~$ manila list
    +--------------------------------------+----------------+------+-------------+-----------+-----------+-----------------+------+-------------------+
    | ID                                   | Name           | Size | Share Proto | Status    | Is Public | Share Type Name | Host | Availability Zone |
    +--------------------------------------+----------------+------+-------------+-----------+-----------+-----------------+------+-------------------+
    | 4d3d7fcf-5fb7-4209-90eb-9e064659f46d | software_share | 1    | NFS         | available | False     | dhss_false      |      | nova              |
    | 2d03d480-7cba-4122-ac9d-edc59c8df698 | software_share | 1    | NFS         | error     | False     | dhss_false      |      | nova              |
    | 243f3a51-0624-4bdd-950e-7ed190b53b67 | software_share | 1    | NFS         | error     | False     | dhss_true       |      | None              |
    +--------------------------------------+----------------+------+-------------+-----------+-----------+-----------------+------+-------------------+
  12. 删除共享和支持信息:

    clouduser1@client:~$ manila message-list
    +--------------------------------------+---------------+--------------------------------------+-----------+----------------------------------------------------------------------------------------------------------+-----------+----------------------------+
    | ID                                   | Resource Type | Resource ID                          | Action ID | User Message                                                                                             | Detail ID | Created At                 |
    +--------------------------------------+---------------+--------------------------------------+-----------+----------------------------------------------------------------------------------------------------------+-----------+----------------------------+
    | ed7e02a2-0cdb-4ff9-b64f-e4d2ec1ef069 | SHARE         | 2d03d480-7cba-4122-ac9d-edc59c8df698 | 002       | create: Driver does not expect share-network to be provided with current configuration.                  | 003       | 2018-10-09T21:24:40.000000 |
    | 7d411c3c-46d9-433f-9e21-c04ca30b209c | SHARE         | 243f3a51-0624-4bdd-950e-7ed190b53b67 | 001       | allocate host: No storage could be allocated for this share request, Capabilities filter didn't succeed. | 008       | 2018-10-09T21:12:21.000000 |
    +--------------------------------------+---------------+--------------------------------------+-----------+----------------------------------------------------------------------------------------------------------+-----------+----------------------------+
    
    clouduser1@client:~$ manila delete 2d03d480-7cba-4122-ac9d-edc59c8df698 243f3a51-0624-4bdd-950e-7ed190b53b67
    clouduser1@client:~$ manila message-delete ed7e02a2-0cdb-4ff9-b64f-e4d2ec1ef069 7d411c3c-46d9-433f-9e21-c04ca30b209c
    
    clouduser1@client:~$ manila message-list
    +----+---------------+-------------+-----------+--------------+-----------+------------+
    | ID | Resource Type | Resource ID | Action ID | User Message | Detail ID | Created At |
    +----+---------------+-------------+-----------+--------------+-----------+------------+
    +----+---------------+-------------+-----------+--------------+-----------+------------+

7.11.2. 调试共享挂载失败

如果您在挂载共享时遇到问题,请使用这些验证步骤来识别根本原因。

流程

  1. 验证共享的访问控制列表,以确保与客户端对应的规则正确,并已成功应用。

    $ manila access-list share-01

    在成功规则中,state 属性等于 active

  2. 如果共享类型参数配置为 driver_handles_share_servers=False,请从导出位置复制主机名或 IP 地址并 ping 来确认到 NAS 服务器的连接:

    $ ping -c 1 172.17.5.13
    PING 172.17.5.13 (172.17.5.13) 56(84) bytes of data.
    64 bytes from 172.17.5.13: icmp_seq=1 ttl=64 time=0.048 ms--- 172.17.5.13 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 7.851/7.851/7.851/0.000 ms
    If using the NFS protocol, you may verify that the NFS server is ready to respond to NFS rpcs on the proper port:
    $ rpcinfo -T tcp -a 172.17.5.13.8.1 100003 4
    program 100003 version 4 ready and waiting
    注意

    IP 地址以通用地址格式(uaddr)编写,它添加了两个额外的 octets(8.1)来代表 NFS 服务端口 2049。

如果这些步骤失败,则可能存在网络连接问题,或者您的共享文件系统后端存储失败。收集日志文件并联系红帽支持。

法律通告

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.