存储指南
了解、使用和管理 OpenStack 中的持久性存储
摘要
第 1 章 Red Hat OpenStack Platform (RHOSP)中的持久性存储简介 复制链接链接已复制到粘贴板!
在 Red Hat OpenStack Platform 中,存储由三个主要服务提供:
-
块存储(
openstack-cinder) -
Object Storage (
openstack-swift) -
共享文件系统存储(
openstack-manila)
这些服务提供不同类型的持久性存储,每种存储在不同的用例中都有自己的一组优点。本指南讨论了用于一般企业存储要求的适用性。
您可以使用 RHOSP 仪表板或命令行客户端管理云存储。您可以使用任何方法执行大多数流程。但是,您只能在命令行中完成一些更高级的步骤。本指南尽可能为仪表板提供流程。
有关 Red Hat OpenStack Platform 文档的完整套件,请参阅 Red Hat OpenStack Platform 文档。
本指南记录了使用 crudini 应用一些自定义服务设置。因此,您需要首先安装 crudini 软件包:
# dnf install crudini -y
RHOSP 识别两种类型的存储: 临时和持久 。临时存储是仅与特定 Compute 实例关联的存储。该实例终止后,是其临时存储。这种类型的存储可用于基本运行时要求,如存储实例的操作系统。
持久性存储 被设计为独立于任何正在运行的实例来存活(持久性)。此存储用于需要被不同实例或特定实例生命周期之外的任何数据。RHOSP 使用以下类型的持久性存储:
- 卷
OpenStack 块存储服务(openstack-cinder)允许用户通过 卷 访问块存储设备。用户可以将卷附加到实例,以便使用通用持久性存储来增强其临时存储。卷可以在实例上分离和重新附加,只能通过它们所连接的实例访问。
您还可以将实例配置为不使用临时存储。您可以配置块存储服务来将镜像写入卷,而不使用临时存储。然后,您可以使用卷作为实例的可引导根卷。
卷还通过备份和快照提供固有冗余和灾难恢复。另外,您还可以加密卷以提高安全性。
- 容器
OpenStack Object Storage 服务(openstack-swift)提供完全分布式的存储解决方案,用于存储任何类型的静态数据或二进制对象,如介质文件、大型数据集和磁盘镜像。对象存储服务通过使用容器来组织这些对象。
虽然卷的内容只能通过实例访问,但容器内的对象可以通过 Object Storage REST API 访问。因此,对象存储服务可以通过接近云中的每个服务用作存储库。
- 共享
- 共享文件系统服务(openstack-manila)提供了轻松调配远程、可共享的文件系统 或共享的方法。共享允许云中的项目开放共享存储,并同时被多个实例使用。
每个存储类型都设计为满足特定的存储要求。容器是为广泛访问而设计的,例如,所有存储类型之间吞吐量、访问和容错能力的功能。对于服务,容器使用量更多。
另一方面,卷主要用于实例消耗。它们不享受与容器相同的访问和性能级别,但它们的功能集更大,并且具有比容器更多的原生安全功能。共享与卷类似,但可由多个实例使用。
以下章节会在特定存储标准的情况下详细讨论每种存储类型的架构和功能集。
1.1. 可扩展性和后端存储 复制链接链接已复制到粘贴板!
通常,集群存储解决方案提供更大的后端可扩展性。例如,当您将 Red Hat Ceph 用作 Block Storage (cinder)后端时,您可以通过添加更多 Ceph Object Storage Daemon (OSD)节点来扩展存储容量和冗余。块存储、Object Storage (swift)和共享文件系统服务(manila)服务支持 Red Hat Ceph Storage 作为后端。
块存储服务可以将多个存储解决方案用作离散后端。在后端级别,您可以通过添加更多后端并重启服务来扩展容量。块存储服务也具有大量受支持的后端解决方案列表,其中的一些解决方案具有额外的可扩展性功能。
默认情况下,对象存储服务使用配置的存储节点上的文件系统,并可使用尽可能多的空间。对象存储服务支持 XFS 和 ext4 文件系统,可以同时扩展为消耗尽可能多的底层块存储。您还可以通过向存储节点添加更多存储设备来扩展容量。
共享文件系统服务从由一个或多个第三方后端存储系统管理的指定存储池中置备文件共享。您可以通过增加服务可用的大小或多个第三方后端存储系统来扩展此共享存储。
1.2. 存储可访问性和管理 复制链接链接已复制到粘贴板!
卷只能通过实例使用,一次只能附加到一个实例内并挂载。用户可以创建卷快照,它们可用于克隆或将卷恢复到以前的状态。如需更多信息,请参阅 第 1.4 节 “存储冗余和灾难恢复”。作为项目管理员,您可以使用块存储服务 创建卷类型,以聚合卷设置,如大小和后端。您可以将卷类型与 服务质量(QoS) 规格相关联,为您的云用户提供不同级别的性能。您的用户可以指定创建新卷时所需的卷类型。例如,使用高性能 QoS 规格的卷可能会为用户提供更多的 IOPS,或者您的用户可以为使用较低性能 QoS 规格的卷分配更轻的工作负载来节省资源。
与卷一样,通过实例使用共享。但是,可以将共享直接挂载到实例中,不需要通过控制面板或 CLI 连接。共享也可以同时由多个实例挂载。共享文件系统服务还支持共享快照和克隆 ; 您还可以创建共享类型来聚合设置(与卷类型类似)。
容器中的对象可以通过 API 访问,并可供云内的实例和服务访问。这使得他们选择作为服务的对象存储库;例如,镜像服务(openstack-glance)可以将其镜像存储在由对象存储服务管理的容器中。
1.3. 存储安全性 复制链接链接已复制到粘贴板!
块存储服务(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)不提供内置备份功能。您必须在文件系统或节点级别执行所有备份。对象存储服务具有更强大的冗余和容错功能,甚至是对象存储服务的最基本的部署多次复制对象。您可以使用 dm-multipath 等故障转移功能来增强冗余。
共享文件系统服务不提供共享的内置备份功能,但它允许您创建快照以进行克隆和恢复。
第 2 章 配置块存储服务(cinder) 复制链接链接已复制到粘贴板!
块存储服务(cinder)管理所有卷的管理、安全、调度和整体管理。卷用作计算实例的主要形式。
有关卷备份的更多信息,请参阅 块存储备份指南。
您必须在所有使用块存储服务和光纤通道(FC)后端的部署中的所有 Controller 节点和 Compute 节点上安装主机总线适配器(HBA)。
块存储使用 Block Storage REST API 配置。
确保您在使用 Block Storage REST API 版本 3,因为 Block Storage 不再支持版本 2。默认的 overcloud 部署为您设置环境变量 OS_VOLUME_API_VERSION=3.0 来执行此操作。
块存储 REST API 通过使用微版本来添加改进来保持向后兼容性。cinder CLI 使用 3.0 的 REST API 版本,除非您指定了特定的微版本。例如,若要为 cinder 命令指定 3.17 微版本,可添加 --os-volume-api-version 3.17 参数。
openstack CLI 只能使用 Block Storage 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 的说明,请参阅 与 director 一起部署 Red Hat Ceph Storage 和 OpenStack Platform。
您还可以将块存储服务配置为使用受支持的第三方存储设备。director 包括部署不同后端解决方案所需的组件。
有关支持的块存储服务后端设备和驱动程序的完整列表,请参阅 Red Hat OpenStack Platform 中的组件、插件和驱动程序支持 中的 Cinder。所有第三方后端设备和驱动程序都有额外的部署指南。查看适当的部署指南,以确定后端设备或驱动程序是否需要插件。
如果将 Block Storage 配置为使用多个后端,则必须为每个后端创建一个卷类型。如果您在创建卷时没有指定后端,则块存储调度程序将使用过滤器来选择合适的后端。如需更多信息,请参阅配置默认块存储调度程序过滤器。
其他资源
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 是一个全局块存储参数。因此,您不能在同一部署中包括集群(主动)和非集群后端。
目前,块存储的主动配置仅适用于 Ceph RADOS 块设备(RBD)后端。如果您计划使用多个后端,则所有后端都必须支持主动-主动配置。如果部署中包含了不支持主动配置的后端,则该后端将不适用于存储。在主动部署中,如果您在不支持主动配置的后端中保存数据,则会出现数据丢失的风险。
先决条件
流程
-
以
stack用户身份登录 undercloud 主机。 查找
stackrcundercloud 凭证文件:$ source ~/stackrc要启用主动块存储服务卷,请将此环境文件添加到带有其他环境文件的堆栈中,并部署 overcloud:
/usr/share/openstack-tripleo-heat-templates/environments/cinder-volume-active-active.yaml
2.2.2. 用于主动块存储配置的维护命令 复制链接链接已复制到粘贴板!
部署主动块存储配置后,您可以使用以下命令管理集群及其服务。
这些命令需要 Block Storage (cinder) REST API 微版本 3.17 或更高版本。
| 用户目标 | 命令 |
| 要查看所有服务的详细信息,如:二进制、主机、区域、状态、集群、禁用原因和集群名称。 |
|
| 要查看所有集群的详细信息,如名称、二进制、状态和状态。
注意 :在 director 为 Ceph 后端部署时,默认的集群名称为 |
|
| 查看特定集群服务的详细信息。 |
|
| 启用集群服务。 |
|
| 要禁用集群服务,请执行以下操作: |
|
2.2.3. 卷管理和取消管理 复制链接链接已复制到粘贴板!
unmanage 和 manage 机制可帮助使用版本 X 将卷从一个服务移动到另一个服务,使用版本 X+1。两种服务在此过程中保持运行。
在 Block Storage (cinder) REST API 微版本 3.17 或更高版本中,您可以列出可在 Block Storage 集群中管理的卷和快照。要查看这些列表,请使用带有 cinder manageable-list 或 cinder snapshot-manageable-list 的-- cluster 参数。
在 Block Storage REST API microversion 3.16 及更高版本中,您可以使用 cinder manage 命令的 optional- cluster 参数将非受管卷添加到块存储集群中。
2.2.4. 集群服务上的卷迁移 复制链接链接已复制到粘贴板!
使用 Block Storage (cinder) REST API 微版本 3.16 及更高版本时,cinder migrate 和 cinder-manage 命令使用- cluster 参数来定义主动-主动部署的目的地。
当您在块存储服务中迁移卷时,请使用 optional- cluster 参数并省略 host positional 参数,因为这些参数是互斥的。
2.2.5. 启动块存储服务维护 复制链接链接已复制到粘贴板!
所有块存储卷服务在启动时执行自己的维护。
在集群中分组的多个卷服务的环境中,您可以清理当前运行的服务。
命令 work-cleanup 会触发服务器清理。该命令返回:
- 命令可以清理的服务列表。
- 命令无法清理的服务列表,因为它们目前没有在集群中运行。
先决条件
- 您必须是一个项目管理员才能启动块存储服务维护。
- Block Storage (cinder) REST API microversion 3.24 或更高版本。
流程
提供 overcloud 凭证文件:
$ source ~/<credentials_file>-
将
<credentials_file> 替换为您的凭证文件的名称,如overcloudrc。
-
将
运行以下命令验证集群的所有服务是否正在运行:
$ cinder cluster-list --detailed或者,运行
cluster show命令。如果有任何服务没有运行,请运行以下命令来识别这些特定的服务:
$ cinder service-list运行以下命令以触发服务器清理:
$ 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,您可以创建卷类型,以便您可以将相关的设置应用到每种卷类型。您可以在创建卷前和之后分配所需的卷类型。如需更多信息,请参阅创建块存储卷和 块存储卷 重新清理。以下列表显示了您可以应用到卷类型的一些相关设置:
- 卷的加密。如需更多信息,请参阅 块存储服务(cinder)卷加密。
- 卷使用的后端。如需更多信息,请参阅多个后端上的卷分配 和在后端间移动卷。
- 卷的相关服务质量(QoS)性能限制或 QoS 规格列表。如需更多信息,请参阅 块存储服务(cinder)服务质量规格。
使用名为 Extra Specs 的键值对与卷类型关联设置。当您在卷创建过程中指定卷类型时,块存储调度程序会将这些键值对作为设置应用。您可以将多个键值对与同一卷类型关联。
您可以创建卷类型来为云用户提供不同级别的性能:
- 为每个卷类型添加特定的性能、弹性和其他 Extra Specs 作为键值对。
- 将不同的 QoS 性能限制或 QoS 规格列表与您的卷类型关联。
当您的用户创建卷时,他们可以选择适当的卷类型来满足其性能要求。
如果您创建卷且没有指定卷类型,则块存储将使用默认卷类型。您可以使用 Block Storage (cinder)配置文件定义适用于所有项目(租户)的一般默认卷类型。但是,如果您的部署使用特定于项目的卷类型,请确保为各个项目定义默认卷类型。在这种情况下,块存储使用特定于项目的卷类型,而不是常规的默认卷类型。如需更多信息,请参阅 定义特定于项目的默认卷类型。
2.3.1. 列出后端驱动程序属性 复制链接链接已复制到粘贴板!
与卷类型关联的属性使用键值对,称为 Extra Specs。每个卷类型后端驱动程序都支持自己的一组 Extra Specs。有关驱动程序支持的 Extra Specs 的更多信息,请参阅后端驱动程序文档。
或者,您可以直接查询块存储主机,以列出其后端驱动程序的定义明确的标准 Extra Spec。
先决条件
- 您必须是项目管理员,才能直接查询块存储主机。
流程
提供 overcloud 凭证文件:
$ source ~/<credentials_file>-
将
<credentials_file> 替换为您的凭证文件的名称,如overcloudrc。
-
将
确定 cinder-volume 的主机:
$ cinder service-list此命令将返回一个包含每个块存储服务的主机的列表(cinder-backup、cinder-scheduler 和 cinder-volume)。例如:
+------------------+---------------------------+------+--------- | Binary | Host | Zone | Status ... +------------------+---------------------------+------+--------- | cinder-backup | localhost.localdomain | nova | enabled ... | cinder-scheduler | localhost.localdomain | nova | enabled ... | cinder-volume | *localhost.localdomain@lvm* | nova | enabled ... +------------------+---------------------------+------+---------显示驱动程序功能以确定块存储服务支持的 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 属性 列显示您可以设置的 Extra Spec Keys 列表,而 Value 列提供了有关有效对应值的信息。
2.3.2. 创建并配置卷类型 复制链接链接已复制到粘贴板!
您可以创建卷类型,以便您可以将关联的设置应用到每种卷类型。例如,您可以创建卷类型来为云用户提供不同级别的性能:
- 为每个卷类型添加特定的性能、弹性和其他 Extra Specs 作为键值对。
- 将不同的 QoS 性能限制或 QoS 规格列表与您的卷类型关联。如需更多信息,请参阅 块存储服务(cinder)服务质量规格。
当您的用户创建卷时,他们可以选择适当的卷类型来满足其性能要求。
先决条件
- 您必须是一个项目管理员,才能创建和配置卷类型。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 以 admin 用户身份登录控制面板。
- 选择 Admin > Volumes > Volume Types。
- 单击 Create Volume Type。
- 在 Name 字段中输入卷类型名称。
- 单击 Create Volume Type。新类型会出现在 卷类型 表中。
- 选择卷类型的 View Extra Specs 操作。
- 点 Create 并指定 Key 和 Value。键值对必须有效;否则,在卷创建过程中指定卷类型将导致错误。
- 点 Create。关联的设置(键值对)现在会出现在 Extra Specs 表中。
默认情况下,所有 OpenStack 项目都可以访问所有卷类型。如果您需要创建具有受限访问权限的卷类型,则需要通过 CLI 完成此操作。具体步骤请参阅创建和配置私有卷类型。
后续步骤
2.3.3. 编辑卷类型 复制链接链接已复制到粘贴板!
在仪表板中编辑卷类型,以修改卷类型的 Extra Specs 配置。您还可以删除卷类型。
先决条件
- 您必须是项目管理员才能编辑或删除卷类型。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 以 admin 用户身份登录控制面板。
- 选择 Admin > Volumes > Volume Types。
- 在 卷类型 表中,选择卷类型的 View Extra Specs 操作。
在这个页面的 Extra Specs 表中,您可以:
- 向卷类型添加新设置。要做到这一点,点 Create 并指定您要与卷类型关联的新设置的键/值对。
- 选择 设置的 Edit 操作,以编辑与卷类型关联的现有设置。
- 选择额外 specs 复选框并点 Delete Extra Specs 以及下一个对话框屏幕,删除与卷类型关联的现有设置。
要删除卷类型,请从卷类型表中选中其对应的复选框,然后点 Delete Volume Types 。
2.3.4. 创建并配置私有卷类型 复制链接链接已复制到粘贴板!
默认情况下,所有卷类型都可用于所有项目(租户)。您可以通过标记 私有 来创建受限卷类型。为此,请将卷类型的 is-public 标志设为 false,因为此标志的默认值为 true。
私有卷类型可用于限制对具有特定属性的卷的访问。通常,这些设置应该只可供特定项目使用。例如,要测试的新后端或巨型性能配置。
先决条件
- 您必须是创建、查看或配置私有卷类型访问权限的项目管理员。
流程
提供 overcloud 凭证文件:
$ source ~/<credentials_file>-
将
<credentials_file> 替换为您的凭证文件的名称,如overcloudrc。
-
将
创建新的 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>
-
将 <
;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.conf 的 default_volume_type 选项定义应用到所有项目的通用默认卷类型。
但是,如果您的 Red Hat OpenStack Platform (RHOSP)部署使用特定于项目的卷类型,请确保为每个项目定义默认卷类型。在这种情况下,块存储使用特定于项目的卷类型,而不是常规的默认卷类型。以下 RHOSP 部署示例需要特定于项目的默认卷类型:
- 跨越多个可用区(AZ)的分布式 RHOSP 部署。每个 AZ 都位于自己的项目中,且具有自己的卷类型。
- 一个 RHOSP 部署,用于公司的三个不同部门。每个部门都在自己的项目中,且具有自己的专用卷类型。
先决条件
- 每个项目中至少有一个卷类型,它将是特定于项目的默认卷类型。如需更多信息,请参阅 创建和配置卷类型。
- 块存储 REST API 微版本 3.62 或更高版本。
- 只有项目管理员才能为其项目定义、清除或列出默认卷类型。
流程
提供 overcloud 凭证文件:
$ source ~/<credentials_file>-
将
<credentials_file> 替换为您的凭证文件的名称,如overcloudrc。
-
将
定义、清除或列出项目的默认卷类型:
注意您必须将这些命令中的 <
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 缓存)需要配置 内部租户。块存储服务使用此租户/项目来管理块存储项目,这不一定需要向普通用户公开。此类项目的示例是缓存的镜像,用于频繁迁移的卷克隆或临时副本。
流程
- 若要配置内部项目,首先要创建一个通用项目和用户,两者均为 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 缓存支持的信息。
先决条件
- 为块存储服务配置了 内部租户。如需更多信息,请参阅 为块存储服务(cinder)创建和配置内部项目。
- 已安装 undercloud。有关更多信息,请参阅 Director 安装和使用中的安装 director。https://access.redhat.com/documentation/zh-cn/red_hat_openstack_platform/17.0/html/director_installation_and_usage/assembly_installing-director-on-the-undercloud#proc_installing-director_installing-director-on-the-undercloud
流程
-
以
stack用户身份登录 undercloud 主机。 查找
stackrcundercloud 凭证文件:$ source ~/stackrc要在后端上启用和配置 Image-Volume 缓存,您必须将以下值添加到 overcloud 部署命令中包含的环境文件的
ExtraConfig部分:parameter_defaults: ExtraConfig: cinder::config::cinder_config: DEFAULT/cinder_internal_tenant_project_id: value: TENANTID1 DEFAULT/cinder_internal_tenant_user_id: value: USERID2 BACKEND/image_volume_cache_enabled:3 value: True BACKEND/image_volume_cache_max_size_gb: value: MAXSIZE4 BACKEND/image_volume_cache_max_count: value: MAXNUMBER5 块存储服务数据库使用时间戳来跟踪每个缓存的镜像最近用于创建镜像的时间。如果设置了 MAXSIZE 和 MAXNUMBER,则块存储服务将根据需要删除缓存的镜像,以便使新镜像成为新的镜像。当满足 Image-Volume 缓存限制时,会首先删除带有最旧时间戳的镜像。
- 将更新保存到环境文件。
- 使用其他环境文件将环境文件添加到堆栈中,并部署 overcloud。
2.6. 块存储服务(cinder)服务质量规格 复制链接链接已复制到粘贴板!
您可以通过创建与每种卷类型关联服务质量(QoS)规格,将性能限制应用到云用户创建的卷。例如,使用高性能 QoS 规格的卷可能会为用户提供更多的 IOPS 或用户可以为使用较低性能 QoS 规格的卷分配更轻的工作负载,以节省资源。
您必须是一个项目管理员,才能创建、配置、关联和解除关联 QoS 规格。
创建 QoS 规格时,您必须选择所需的消费者。消费者决定您要应用 QoS 限制的位置,并确定哪些 QoS 属性键可用于定义 QoS 限值。有关可用消费者的更多信息,请参阅 QoS 规格 的 Consumers。
您可以通过将所需的 QoS 属性键设置为部署特定值来创建卷性能限制。有关块存储服务(cinder)提供的 QoS 属性键的更多信息,请参阅 块存储 QoS 属性键。
要创建 QoS 规格并将其与卷类型关联,请完成以下任务:
- 创建并配置 QoS 规格。
- 将 QoS 规格与卷类型关联。
您可以使用控制面板或使用 CLI 创建、配置和关联 QoS 规格。
2.6.1. QoS 规格的消费者 复制链接链接已复制到粘贴板!
创建 QoS 规格时,您必须选择所需的消费者。消费者决定您要应用 QoS 限制的位置,并确定哪些 QoS 属性键可用于定义 QoS 限值。块存储服务(cinder)支持以下 QoS 规范使用者:
-
前端:当卷附加到实例时,计算服务(nova)将应用 QoS 限制。计算服务支持块存储服务提供的所有 QoS 属性键。 后端:关联卷类型的后端驱动程序应用 QoS 限制。每个后端驱动程序都支持自己的一组 QoS 属性键。如需有关驱动程序支持的 QoS 属性键的更多信息,请参阅后端驱动程序文档。在不支持
front-end消费者的情况下,应使用back-end消费者。例如,在通过裸机置备服务(ironic)将卷附加到裸机节点时。两者: 使用者尽可能应用 QoS 限制。因此,这个消费者类型支持以下 QoS 属性键:- 当卷附加到实例时,您可以使用计算服务和后端驱动程序都支持的每个 QoS 属性键。
- 当卷未附加到实例时,您只能使用后端驱动程序支持的 QoS 属性键。
2.6.2. 块存储 QoS 属性键 复制链接链接已复制到粘贴板!
块存储服务为您提供了 QoS 属性键,以便您可以限制云用户创建的卷的性能。这些限制使用以下两个行业标准存储卷性能:
- 每秒输入/输出操作(IOPS)
- 数据传输率(以字节/秒为单位)
QoS 规格的使用者决定支持哪些 QoS 属性键。如需更多信息,请参阅 QoS 规格的消费者。
块存储无法对 QoS 属性键执行错误检查,因为有些 QoS 属性键是由后端驱动程序在外部定义的。因此,块存储会忽略任何无效的或不受支持的 QoS 属性键。
确保正确拼写 QoS 属性键。包含错误拼写属性键的卷性能限制将被忽略。
对于 IOPS 和数据传输速率测量,您可以配置以下性能限制:
- 修复了限制
- 通常,固定的限制应该定义卷性能测量的平均使用量。
- 突发限制
通常,突发限制应该定义卷性能测量的严格活动。突发限制可以增加特定时间的活动速率,同时保持固定限制降低平均值。
注意burst 限制全部使用突发长度为 1 秒。
- 总限值
使用
totalPPK QoS 属性键为所需性能限制的 read 和 write 操作指定一个全局限制。注意您可以将单独的限制应用到读和写操作,或者选择仅限制 read 或 write 操作,而不是使用总限制。
- 读取限制
使用 readGRESS QoS 属性键,指定只适用于所需性能限制的
读取操作的限制。注意当您指定总限值时,会忽略这个限制。
- 写入限制
使用 writeoverlayfs QoS 属性键,指定只适用于所需性能限制
的写操作的限制。注意当您指定总限值时,会忽略这个限制。
您可以使用以下 Block Storage QoS 属性键为您的部署创建卷性能限制:
所有 QoS 属性键 的默认值为 0,这意味着限制是不受限制。
| 性能限制 | 测量单位 | QoS 属性键 |
|---|---|---|
| 修复了 IOPS | IOPS |
|
| 修复了根据卷的大小计算的 IOPS。 有关这些限制的使用限制的更多信息,请参阅 根据卷大小扩展的 QoS 限制。 | 每个 GB 的 IOPS |
|
| burst IOPS | IOPS |
|
| 修复了数据传输率 | 每秒字节数 |
|
| Burst 数据传输率 | 每秒字节数 |
|
| 计算 IOPS 限制时 IO 请求的大小。 如需更多信息,请参阅为 IOPS 限制设置 IO 请求大小。 | Bytes |
|
2.6.2.1. 为 IOPS 限制设置 IO 请求大小 复制链接链接已复制到粘贴板!
如果您实现 IOPS 卷性能限制,您还应指定典型的 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 限值为 500 per GB 的卷大小,则此卷类型的置备 3 GB 卷将读取 IOPS 限制 1500。
卷的大小决定了卷何时附加到实例。因此,如果在实例附加到实例时更改了卷大小,则只有在此卷分离后,才会为新卷大小重新计算这些限制,然后重新附加到实例。
您可以使用以下 QoS 属性键(按 GB 指定)来创建可扩展的卷性能限制:
total_iops_sec_per_gb:为读取和写入操作指定每 GB 的卷大小的一个全局 IOPS 限制。注意您可以将单独的限制应用到读和写操作,或者选择仅限制 read 或 write 操作,而不是使用总限制。
read_iops_sec_per_gb:指定每个 GB 的卷大小的 IOPS 限制,该限值仅适用于读取操作。注意当您指定总限值时,会忽略这个限制。
write_iops_sec_per_gb:指定每个 GB 的卷大小的 IOPS 限制,该限值仅适用于写入操作。注意当您指定总限值时,会忽略这个限制。
包含这些 QoS 限制的 QoS 规格的使用者可以是 前端 ,但不能是 或两个 后端。如需更多信息,请参阅 QoS 规格的消费者。
2.6.3. 使用仪表板创建和配置 QoS 规格 复制链接链接已复制到粘贴板!
Quality of Service (QoS)规格是卷性能 QoS 限制列表。您可以通过将 QoS 属性键设置为您的部署特定值来创建每个 QoS 限制。要将 QoS 性能限制应用到卷,您必须将 QoS 规格与所需的卷类型关联。
先决条件
- 您必须是一个项目管理员,才能创建、配置、关联和解除关联 QoS 规格。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 以 admin 用户身份登录控制面板。
- 选择 Admin > Volumes > Volume Types。
- 在 QoS Specs 表中,点 Create QoS Spec。
- 为 QoS Spec 输入一个名称。
- 在 Consumer 字段中,选择此 QoS 规格的消费者。如需更多信息,请参阅 QoS 规格的消费者。
- 点 Create。新的 QoS 规格显示在 QoS Specs 表中。
- 在 QoS Specs 表中,选择新 QoS 规格的 Manage Specs 操作来打开 Specs 窗口,在其中添加 QoS 性能限制。
- 点 Specs 窗口中的 Create 打开 Create Extra Specs 窗口。
在 Key 字段中为 QoS 性能限制指定 QoS 属性键,并在 Value 中设置性能限制值。有关可用属性键的更多信息,请参阅 块存储 QoS 属性键。
重要确保正确拼写 QoS 属性键。包含错误拼写属性键的卷性能限制将被忽略。
- 点 Create 将 QoS 限值添加到您的 QoS 规格中。
- 对于您要添加到 QoS 规格的每个 QoS 限制,重复步骤 7 到 10。
后续步骤
2.6.4. 使用 CLI 创建和配置 QoS 规格 复制链接链接已复制到粘贴板!
Quality of Service (QoS)规格是卷性能 QoS 限制列表。您可以通过将 QoS 属性键设置为您的部署特定值来创建每个 QoS 限制。要将 QoS 性能限制应用到卷,您必须将 QoS 规格与所需的卷类型关联。
先决条件
- 您必须是一个项目管理员,才能创建、配置、关联和解除关联 QoS 规格。
流程
提供 overcloud 凭证文件:
$ source ~/<credentials_file>-
将
<credentials_file> 替换为您的凭证文件的名称,如overcloudrc。
-
将
创建 QoS 规格:
$ openstack volume qos create [--consumer <qos_spec_consumer>] <qos_spec_name>-
可选:将
<qos_spec_consumer> 替换为此 QoS 规格所需的使用者。如果未指定,则消费者将默认为两个。如需更多信息,请参阅 QoS 规格的消费者。 -
将
<qos_spec_name> 替换为 QoS 规格的名称。
-
可选:将
通过为每个要添加的 QoS 限制指定 separate-
property <key=value> 参数,为 QoS 规格添加性能限制:$ openstack volume qos set --property <key>=<value> <qos_spec_name>将
<key> 替换为所需性能约束的 QoS 属性键。如需更多信息,请参阅块存储 QoS 属性键。重要确保正确拼写 QoS 属性键。包含错误拼写属性键的卷性能限制将被忽略。
-
在 QoS 属性键所需的测量单元中,将 <
value> 替换为此性能约束的特定部署限制。 将
<qos_spec_name> 替换为 QoS 规格的名称或 ID。Example:
$ openstack volume qos set \ --property read_iops_sec=5000 \ --property write_iops_sec=7000 \ myqoslimits
查看 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 限制仅在卷分离时应用到这个卷,然后重新附加到这个实例。
先决条件
- 您必须是一个项目管理员,才能创建、配置、关联和解除关联 QoS 规格。
- 创建所需的卷类型。如需更多信息,请参阅 创建和配置卷类型。
- 创建所需的 QoS 规格。如需更多信息,请参阅 使用控制面板创建和配置 QoS 规格。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 以 admin 用户身份登录控制面板。
- 选择 Admin > Volumes > Volume Types。
- 在 卷类型 表中,选择所需卷类型的 Manage QoS Spec Association 操作。
- 从 要关联的 QoS Spec 中选择所需的 QoS 规格。
- 单击 关联。QoS 规格添加到 编辑的卷类型的关联 QoS Spec 列中。
2.6.6. 使用 CLI 将 QoS 规格与卷类型关联 复制链接链接已复制到粘贴板!
您必须将服务质量(QoS)规格与现有卷类型关联,才能将 QoS 限值应用到卷。
如果卷已附加到实例,则 QoS 限制仅在卷分离时应用到这个卷,然后重新附加到这个实例。
先决条件
- 您必须是一个项目管理员,才能创建、配置、关联和解除关联 QoS 规格。
- 创建所需的卷类型。如需更多信息,请参阅 创建和配置卷类型。
- 创建所需的 QoS 规格。如需更多信息,请参阅使用 CLI 创建和配置 QoS 规格。
流程
提供 overcloud 凭证文件:
$ source ~/<credentials_file>-
将
<credentials_file> 替换为您的凭证文件的名称,如overcloudrc。
-
将
将所需的 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。
-
将
验证 QoS 规格是否已关联:
$ openstack volume qos list输出表中的 关联 列显示哪些卷类型与此 QoS 规格相关联。
2.6.7. 使用 Dashboard 从卷类型中分离 QoS 规格 复制链接链接已复制到粘贴板!
当您不再需要将 QoS 限制应用到该卷类型的卷时,您可以将服务质量(QoS)规格与卷类型中解除关联。
如果卷已附加到实例,则只有卷分离后,QoS 限制才会从这个卷中删除,然后重新附加到这个实例。
先决条件
- 您必须是一个项目管理员,才能创建、配置、关联和解除关联 QoS 规格。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 以 admin 用户身份登录控制面板。
- 选择 Admin > Volumes > Volume Types。
- 在 卷类型 表中,选择所需卷类型的 Manage QoS Spec Association 操作。
- 从 QoS Spec to be associated 列表中选择 None。
单击 关联。
QoS 规格应该从编辑 的卷类型的关联 QoS Spec 列中删除。
2.6.8. 使用 CLI 从卷类型取消关联 QoS 规格 复制链接链接已复制到粘贴板!
当您不再需要将 QoS 限制应用到该卷类型的卷时,您可以将服务质量(QoS)规格与卷类型中解除关联。
如果卷已附加到实例,则只有卷分离后,QoS 限制才会从这个卷中删除,然后重新附加到这个实例。
先决条件
- 您必须是一个项目管理员,才能创建、配置、关联和解除关联 QoS 规格。
流程
提供 overcloud 凭证文件:
$ source ~/<credentials_file>-
将
<credentials_file> 替换为您的凭证文件的名称,如overcloudrc。
-
将
解除关联与 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
验证 QoS 规格是否已解除关联:
$ openstack volume qos list此 QoS 规范的 关联 列不应指定卷类型或为空。
2.7. Block Storage 服务(cinder)卷加密 复制链接链接已复制到粘贴板!
卷加密有助于提供基本数据保护,以防卷后端被泄露或盘盘。计算和块存储服务都已集成,允许实例读取和使用加密卷。您必须部署 Barbican 才能利用卷加密。
- 基于文件的卷(如 NFS)不支持卷加密。
- 不支持将未加密的卷重新指向相同大小的加密卷,因为加密卷需要额外的空间来存储加密数据。有关加密未加密的卷的更多信息,请参阅 加密未加密的卷。
卷加密通过卷类型应用。有关加密卷类型的详情,请参考 使用控制面板配置块存储服务卷加密,或使用 CLI 配置块存储服务卷加密。
如需更多信息,请参阅使用 OpenStack Key Manager (barbican)来管理块存储(cinder)加密密钥,请参阅加密块存储(cinder)卷。
2.7.1. 使用仪表板配置块存储服务卷加密 复制链接链接已复制到粘贴板!
要创建加密卷,首先需要 加密的卷类型。加密卷类型涉及设置应使用的供应商类、密码和密钥大小。您还可以重新配置加密卷类型的加密设置。
您可以调用加密的卷类型来自动创建加密的卷。
先决条件
- 您必须是创建加密卷的项目管理员。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 以 admin 用户身份登录控制面板。
- 选择 Admin > Volumes > Volume Types。
- 在要加密的卷的 Actions 列中,选择 Create Encryption 来启动 Create Volume Type Encryption 向导。
从那里,配置卷类型的 Provider、controlLocation、Cipher 和 Key Size 设置。Description 列描述了每个设置。
重要以下列出的值是 Provider、Cipher 和 Key Size 唯一支持的选项。
-
为 Provider 输入
luks。 -
为 Cipher 输入
aes-xts-plain64。 -
为 Key Size 输入
256。
-
为 Provider 输入
- 单击 Create Volume Type Encryption。
您还可以重新配置加密卷类型的加密设置。
- 从卷类型的 Actions 列中选择 Update Encryption,以启动 Update Volume Type Encryption 向导。
- 在 Project > Compute > Volumes 中,检查 Volumes 表中的 Encrypted 列,以确定卷是否加密。
- 如果卷已加密,请单击该列中的 Yes 来查看加密设置。
其他资源
2.7.2. 使用 CLI 配置块存储服务卷加密 复制链接链接已复制到粘贴板!
要创建加密卷,首先需要 加密的卷类型。加密卷类型涉及设置应使用的供应商类、密码和密钥大小。
先决条件
- 您必须是创建加密卷的项目管理员。
流程
提供 overcloud 凭证文件:
$ source ~/<credentials_file>-
将
<credentials_file> 替换为您的凭证文件的名称,如overcloudrc。
-
将
创建卷类型:
$ cinder type-create myEncType配置密码、密钥大小、控制位置和供应商设置:
$ cinder encryption-type-create --cipher aes-xts-plain64 --key-size 256 --control-location front-end myEncType luks创建加密的卷:
$ cinder --debug create 1 --volume-type myEncType --name myEncVol
2.7.3. 自动删除卷镜像加密密钥 复制链接链接已复制到粘贴板!
当块存储服务(barbican)将加密卷上传到镜像服务(glance)时,块存储服务(cinder)会在密钥管理服务(barbican)中创建一个加密密钥。这会在加密密钥和存储的镜像之间创建一个 1:1 的关系。
加密密钥删除可防止密钥管理服务无限度地消耗资源。块存储、密钥管理和镜像服务会自动管理加密密钥,包括删除密钥。
块存储服务会自动为卷镜像添加两个属性:
-
cinder_encryption_key_id- 加密密钥的标识符,用于特定镜像的密钥管理服务。 -
cinder_encryption_key_deletion_policy- 告知镜像服务指示密钥管理服务是否删除与此镜像关联的密钥。
这些属性的值会自动分配。为避免意外数据丢失,请不要调整这些值。
当您创建卷镜像时,块存储服务会将 cinder_encryption_key_deletion_policy 属性设置为 on_image_deletion。当您删除卷镜像时,如果 cinder_encryption_key_deletion_policy 等于 on_image_deletion,则镜像服务会删除对应的加密密钥。
红帽不推荐手动操作 cinder_encryption_key_id 或 cinder_encryption_key_deletion_policy 属性。如果您使用由 cinder_encryption_key_id 值标识的加密密钥用于任何其他目的,则可能会造成数据丢失。
2.8. 为块存储卷后端部署可用区 复制链接链接已复制到粘贴板!
可用域是特定于供应商的,对云实例和服务进行分组的方法。director 使用 CinderXXXAvailabilityZone 参数(其中 XXX 与特定的后端关联)为块存储卷后端配置不同的可用区。
先决条件
流程
-
以
stack用户身份登录 undercloud 主机。 查找
stackrcundercloud 凭证文件:$ source ~/stackrc在环境文件中添加以下参数来创建两个可用区:
parameter_defaults: CinderXXXAvailabilityZone: zone1 CinderYYYAvailabilityZone: zone2使用支持的后端值替换 XXX 和 YYY,例如:
CinderISCSIAvailabilityZone CinderNfsAvailabilityZone CinderRbdAvailabilityZone注意在
/usr/share/openstack-tripleo-heat-templates/deployment/cinder/目录中搜索与后端关联的 heat 模板,以获取正确的后端值。以下示例部署两个后端,其中
rbd是 zone 1,iSCSI是区域 2:parameter_defaults: CinderRbdAvailabilityZone: zone1 CinderISCSIAvailabilityZone: zone2
- 将更新保存到环境文件。
- 使用其他环境文件将环境文件添加到堆栈中,并部署 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 时更改会被覆盖。
先决条件
流程
-
以
stack用户身份登录 undercloud 主机。 查找
stackrcundercloud 凭证文件:$ source ~/stackrc-
编辑环境文件,并在
parameter_defaults部分中添加新条目。这样可确保条目在容器中更新,并在 director 使用openstack overcloud deploy命令重新创建环境时保留。 使用
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' }, \ }-
值
'group:nobody'确定没有组可以使用此功能,以便有效地禁用它。要启用它,请将组更改为另一个值。 为提高安全性,将一致性组 API 和卷类型管理 API 的权限设置为相同。默认情况下,卷类型管理 API 会在同一个
/etc/cinder/policy.json_ file文件中设置为"rule:admin_or_owner"。"volume_extension:types_manage": "rule:admin_or_owner",要使一致性组功能可供所有用户使用,请设置 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’ }, \ }- 将更新保存到环境文件。
- 使用其他环境文件将环境文件添加到堆栈中,并部署 overcloud。
2.9.2. 使用仪表板创建块存储一致性组 复制链接链接已复制到粘贴板!
启用一致性组 API 后,您可以开始创建一致性组。
先决条件
- 您必须是项目管理员或卷所有者才能创建一致性组。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 以 admin 用户或卷所有者身份登录控制面板。
- 选择 Project > Compute > Volumes > Volume Consistency Groups。
- 单击 Create Consistency Group。
- 在向导的 Consistency Group Information 选项卡中,为您的一致性组输入一个名称和描述。然后,指定其 可用区。
- 您还可以在一致性组中添加卷类型。当您在一致性组中创建卷时,块存储服务将应用来自这些卷类型的兼容设置。要添加卷类型,请点击所有可用卷类型列表中的 + 按钮。
- 单击 Create Consistency Group。它会出现在 Volume Consistency Groups 表中。
2.9.3. 使用控制面板管理块存储服务一致性组 复制链接链接已复制到粘贴板!
您可以在仪表板中管理块存储卷的一致性组。
先决条件
- 您必须是管理一致性组的项目管理员。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 以 admin 用户身份登录控制面板。
- 选择 Project > Compute > Volumes > Volume Consistency Groups。
- 可选: 您可以通过从 Action 列中选择 Edit Consistency Group 来更改一致性组的名称或描述。
要直接从一致性组中添加或删除卷,请找到您要配置的一致性组。在该一致性组的 Actions 列中,选择 Manage Volumes。这将启动 Add/Remove Consistency Group Volumes 向导。
- 若要向一致性组添加卷,可从所有可用卷 列表中单击其 + 按钮。
- 要从一致性组中删除卷,可从 Selected volumes 列表中单击其按钮。
- 单击 Edit Consistency Group。
2.9.4. 为块存储服务创建和管理一致性组快照 复制链接链接已复制到粘贴板!
将卷添加到一致性组后,您可以从其创建快照。
先决条件
- 您必须是项目管理员,才能创建和管理一致性组快照。
流程
提供 overcloud 凭证文件:
$ source ~/<credentials_file>-
将
<credentials_file> 替换为您的凭证文件的名称,如overcloudrc。
-
将
列出所有可用的一致性组及其对应的 ID:
$ cinder consisgroup-list使用一致性组创建快照:
$ cinder cgsnapshot-create [--name <cgsnapname>] [--description "<description>"] <cgnameid>-
将
<cgsnapname> 替换为快照的名称。 -
将
<description> 替换为快照的描述。 -
将
<cgnameid>替换为一致性组的名称或 ID。
-
将
显示所有可用一致性组快照的列表:
# cinder cgsnapshot-list
2.9.5. 克隆块存储服务一致性组 复制链接链接已复制到粘贴板!
您还可以使用一致性组同时创建整个预先配置的卷集合。您可以通过克隆现有的一致性组或恢复一致性组快照来实现此目的。两个进程都使用相同的命令。
先决条件
- 您必须是项目管理员,才能克隆一致性组和恢复一致性组快照。
流程
提供 overcloud 凭证文件:
$ source ~/<credentials_file>-
将
<credentials_file> 替换为您的凭证文件的名称,如overcloudrc。
-
将
克隆现有的一致性组:
$ cinder consisgroup-create-from-src --source-cg <cgnameid> [--name <cgname>] [--description "<description>"]-
将
<cgnameid> 替换为您要克隆的一致性组的名称或 ID。 -
将
<cgname> 替换为您的一致性组的名称。 -
将
<description> 替换为您的一致性组的描述。
-
将
从一致性组快照创建一致性组:
$ cinder consisgroup-create-from-src --cgsnapshot <cgsnapname> [--name <cgname>] [--description "<description>"]-
将 <
cgsnapname> 替换为您要用于创建一致性组的快照的名称或 ID。
-
将 <
2.10. 配置默认块存储调度程序过滤器 复制链接链接已复制到粘贴板!
如果在卷创建过程中没有指定卷后端,则块存储调度程序将使用过滤器来选择合适的后端。确保配置以下默认过滤器:
- AvailabilityZoneFilter
- 过滤掉所有不符合所请求卷的可用区要求的后端。
- CapacityFilter
- 仅选择具有足够空间的后端来容纳卷。
- CapabilitiesFilter
- 仅选择可以支持卷中任何指定设置的后端。
- InstanceLocality
- 将集群配置为使用到同一节点的 volumes local。
先决条件
流程
-
以
stack用户身份登录 undercloud 主机。 查找
stackrcundercloud 凭证文件:$ source ~/stackrc将环境文件添加到 overcloud 部署命令中,其中包含以下参数:
parameter_defaults: ControllerExtraConfig: #1 cinder::config::cinder_config: DEFAULT/scheduler_default_filters: value: 'AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter,InstanceLocality'- 1
- 您还可以将
ControllerExtraConfig:hook 及其嵌套部分添加到现有环境文件的parameter_defaults:部分。
- 将更新保存到环境文件。
- 使用其他环境文件将环境文件添加到堆栈中,并部署 overcloud。
2.11. 在 overcloud 节点上启用 LVM2 过滤 复制链接链接已复制到粘贴板!
如果您使用带有某些块存储服务(cinder)后端的 LVM2 (逻辑卷管理)卷,则您在 Red Hat OpenStack Platform (RHOSP)客户机中创建的卷可能会在托管 cinder-volume 或 nova-compute 容器的 overcloud 节点上可见。在这种情况下,主机上的 LVM2 工具会扫描 OpenStack guest 创建的 LVM2 卷,这可能会导致 Compute 或 Controller 节点上的一个或多个问题:
- LVM 看似查看客户机中的卷组
- LVM 报告重复的卷组名称
- 卷分离失败,因为 LVM 正在访问存储
- 由于 LVM 出现问题,客户机无法引导
- 由于实际存在的磁盘,客户机机器上的 LVM 处于部分状态
- 在具有 LVM 的设备中,块存储服务(cinder)操作会失败
- 块存储服务(cinder)快照无法正确删除
-
实时迁移过程中的错误:
/etc/multipath.conf不存在
要防止这种错误扫描,并将客户机 LVM2 卷与主机节点隔离,您可以在部署或更新 overcloud 时启用并配置带有 LVMFilterEnabled heat 参数的过滤器。这个过滤器是从托管活跃 LVM2 卷的物理设备列表中计算的。您还可以使用 LVMFilterAllowlist 和 LVMFilterDenylist 参数明确允许或拒绝块设备。您可以在全局范围内将此过滤应用到特定的节点角色,或应用到特定的设备。
先决条件
流程
-
以
stack用户身份登录 undercloud 主机。 查找
stackrcundercloud 凭证文件:$ source ~/stackrc将环境文件添加到 overcloud 部署命令中,其中包含以下参数:
parameter_defaults: LVMFilterEnabled: true您可以进一步自定义 LVM2 过滤器的实现。例如,要只在 Compute 节点上启用过滤,请使用以下配置:
parameter_defaults: ComputeParameters: LVMFilterEnabled: true这些参数还支持正则表达式。要只在 Compute 节点上启用过滤,并忽略所有以
/dev/sd开头的设备,请使用以下配置:parameter_defaults: ComputeParameters: LVMFilterEnabled: true LVMFilterDenylist: - /dev/sd.*- 将更新保存到环境文件。
- 使用其他环境文件将环境文件添加到堆栈中,并部署 overcloud。
2.12. 多路径配置 复制链接链接已复制到粘贴板!
使用多路径将服务器节点和存储阵列之间的多个 I/O 路径配置为单一设备,以创建冗余并提高性能。
2.12.1. 使用 director 配置多路径 复制链接链接已复制到粘贴板!
您可以在 Red Hat OpenStack Platform (RHOSP) overcloud 部署中配置多路径,以实现更大的带宽和网络弹性。
当您在现有部署中配置多路径时,新的工作负载会了解。如果您有任何已存在的工作负载,则必须删除实例并取消连接这些实例以便在这些实例上启用多路径。
先决条件
流程
-
以
stack用户身份登录 undercloud 主机。 查找
stackrcundercloud 凭证文件:$ source ~/stackrc使用覆盖环境文件或创建新文件,如
multipath_overrides.yaml。添加并设置以下参数:parameter_defaults: ExtraConfig: cinder::config::cinder_config: backend_defaults/use_multipath_for_image_xfer: value: true注意默认设置将生成适用于大多数环境的基本多路径配置。但是,检查您的存储厂商以了解建议,因为有些供应商具有特定于硬件的优化配置。有关多路径的更多信息,请参阅配置设备映射器多路径。
可选: 如果您的 overcloud 部署有多路径配置文件,您可以使用
MultipathdCustomConfigFile参数指定此文件的位置:parameter_defaults: MultipathdCustomConfigFile: <config_file_directory>/<config_file_name>在以下示例中,
/home/stack是多路径配置文件的目录,multipath.conf是此文件的名称:parameter_defaults: MultipathdCustomConfigFile: /home/stack/multipath.conf注意其他 TripleO 多路径参数覆盖本地自定义配置文件中任何对应的值。例如,如果
MultipathdEnableUserFriendlyNames为False,则 overcloud 节点上的文件会被更新以匹配,即使本地自定义文件中启用了该设置。有关多路径参数的更多信息,请参阅 多路径 heat 模板参数。
- 将更新保存到覆盖环境文件中。
使用其他环境文件,将您的环境文件添加到堆栈中,例如:
---- /usr/share/openstack-tripleo-heat-templates/environments/multipathd.yaml ----- 部署 overcloud。
其他资源
2.12.1.1. 多路径 heat 模板参数 复制链接链接已复制到粘贴板!
使用此选项了解启用多路径的以下参数。
| 参数 | 描述 | 默认值 |
|---|---|---|
|
|
定义是否启用多路径守护进程。这个参数通过 |
|
|
| 定义是否启用对每个路径的用户友好名称分配。 |
|
|
| 定义是否为每个路径自动创建多路径设备。 |
|
|
| 定义是否跳过该设备中自动创建分区。 |
|
|
|
在 overcloud 节点上包括本地的自定义多路径配置文件。默认情况下会安装最小的
注意: 其他 TripleO 多路径参数覆盖您添加的任何本地自定义配置文件中对应的值。例如,如果 |
2.12.2. 验证多路径配置 复制链接链接已复制到粘贴板!
您可以在新的或现有 overcloud 部署中验证多路径配置。
流程
- 创建实例。
- 将非加密卷连接到实例。
获取包含实例的 Compute 节点的名称:
$ nova show <instance> | grep OS-EXT-SRV-ATTR:host将
<instance> 替换为您创建的实例的名称。检索实例的 virsh 名称:
$ nova show <instance> | grep instance_name获取 Compute 节点的 IP 地址:
$ . stackrc $ metalsmith list | grep <compute_name>将
<compute_name> 替换为nova show <instance> 命令的输出中的名称,以显示两个行,来自六个列。在第四列中找到 <
;compute_name> 所在的行。<compute_name> 的 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 |SSH 到运行实例的 Compute 节点:
$ ssh tripleo-admin@<compute_node_ip>将
<compute_node_ip> 替换为 Compute 节点的 IP 地址。登录到运行 virsh 的容器:
$ podman exec -it nova_libvirt /bin/bash在 Compute 节点实例上输入以下命令,以验证它是否在 cinder 卷主机位置中使用多路径:
virsh domblklist <virsh_instance_name> | grep /dev/dm将
<virsh_instance_name> 替换为nova show <instance> | grep instance_name命令的输出。如果实例显示
/dev/dm-以外的值,则连接是非多路径,您需要使用nova shelve和nova unshelve命令刷新连接信息:$ nova shelve <instance> $ nova unshelve <instance>注意如果您有多个后端类型,您必须验证所有后端上的实例和卷,因为每个后端返回的连接信息可能会有所不同。
第 3 章 使用块存储服务(cinder)执行基本操作. 复制链接链接已复制到粘贴板!
创建块存储卷,并将它配置为 overcloud 中计算实例的主要形式。创建卷,将卷附加到实例,编辑和调整卷的大小,以及修改卷所有权。
3.1. 创建块存储卷 复制链接链接已复制到粘贴板!
创建卷,为您在 overcloud 中使用计算服务(nova)启动的实例提供持久存储。
要创建加密卷,您必须首先为卷加密配置卷类型。另外,您必须配置 Compute 和 Block Storage 服务,以使用相同的静态密钥。有关如何为卷加密设置要求的详情,请参考 块存储服务(cinder)卷加密。
您可以为项目创建的默认最大卷数为 10。
先决条件
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 登录控制面板。
- 选择 Project > Compute > Volumes。
点 Create Volume 并编辑以下字段:
Expand 字段 描述 卷名称
卷的名称。
描述
卷的可选、简短描述。
类型
可选的卷类型。如需更多信息,请参阅使用 卷类型组卷配置。
如果您创建卷且没有指定卷类型,则块存储将使用默认卷类型。有关定义默认卷类型的更多信息,请参阅 定义特定于项目的默认卷类型。
如果没有指定后端,则块存储调度程序会尝试为您选择合适的后端。如需更多信息,请参阅在 多个后端上的卷分配。
注意如果没有合适的后端,则不会创建卷。
您还可以在卷创建后更改卷类型。如需更多信息,请参阅 块存储卷重试。
大小(GB)
卷大小(以 GB 为单位)。
如果要从未加密的镜像创建加密卷,您必须确保卷大小大于镜像大小,以便加密数据不会截断卷数据。
可用性区域
可用性区域(逻辑服务器组)和主机聚合是 OpenStack 中隔离资源的通用方法。可用区在安装过程中定义。如需有关可用区和主机聚合的更多信息,请参阅配置实例创建指南中的 创建和管理主机聚合 。
指定 卷源 :
Expand 源 描述 没有源,空卷
卷为空,不包含
文件系统或分区表。
Snapshot
使用现有快照作为卷源。如果选择了这个选项,则会打开一个新的 Use snapshot 作为 源列表,然后从列表中选择快照。如果要从加密卷快照创建新卷,您必须确保新卷至少大于旧卷。有关卷快照的更多信息,请参阅从快照创建新卷。
Image
使用现有镜像作为卷源。如果选择了这个选项,则会打开一个新的 Use snapshot 作为 源列表,然后从列表中选择一个镜像。
卷
使用现有卷作为卷源。如果选择这个选项,则会打开一个新的 Use snapshot 作为源列表 ;然后,您可以从列表中选择一个卷。
- 点创建卷。创建卷后,其名称将显示在 卷表中。
3.2. 编辑卷名称或描述 复制链接链接已复制到粘贴板!
您可以在仪表板中更改卷的名称和描述。
先决条件
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 登录控制面板。
- 选择 Project > Compute > Volumes。
- 选择卷的 编辑卷 按钮。
- 根据需要编辑卷名称或描述。
- 点 Edit Volume 以保存您的更改。
3.3. 调整大小(扩展)块存储服务卷 复制链接链接已复制到粘贴板!
调整卷的大小以增加卷的存储容量。
支持重新定义卷大小使用的能力,但依赖于驱动程序。RBD 支持。您不能扩展正在使用的多重附加卷。有关支持此功能的更多信息,请联系红帽支持。
流程
- 提供您的凭据文件。
列出卷以检索您要扩展的卷 ID:
$ cinder list增加卷的大小:
$ cinder extend <volume_id> <size>-
将
<volume_id>替换为您要扩展的卷的 ID。 将
<size>替换为这个卷所需的大小,以 GB 为单位。注意确保指定的大小大于此卷的现有大小。
例如:
$ cinder extend 573e024d-5235-49ce-8332-be1576d323f8 10
-
将
3.4. 删除块存储服务卷 复制链接链接已复制到粘贴板!
您可以删除不再需要的卷。
如果卷存在快照,则无法删除它。有关删除快照的更多信息,请参阅 删除卷快照。
先决条件
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 登录控制面板。
- 选择 Project > Compute > Volumes。
- 在 Volumes 表中,选择要删除的卷。
- 点删除卷。
3.5. 在多个后端上的卷分配 复制链接链接已复制到粘贴板!
当您创建卷时,您可以从 Type 列表中选择所需后端的卷类型。如需更多信息,请参阅创建块存储卷。
如果块存储服务(cinder)配置为使用多个后端,则必须为每个后端创建一个卷类型。
如果您在创建卷时没有指定后端,则块存储调度程序会尝试为您选择合适的后端。
调度程序使用过滤器(用于以下卷的默认关联设置)来选择合适的后端:
- AvailabilityZoneFilter
- 过滤掉所有不符合所请求卷的可用区要求的后端。
- CapacityFilter
- 仅选择具有足够空间的后端来容纳卷。
- CapabilitiesFilter
- 仅选择可以支持卷中任何指定设置的后端。
- InstanceLocality
- 将集群配置为使用到同一节点的 volumes local。
如果有多个合适的后端,调度程序使用权重方法来选择最佳的后端。默认情况下使用 CapacityWeigher 方法,以便选择过滤后的后端与最多可用空间。
如果没有合适的后端,则不会创建卷。
其他资源
3.6. 将卷附加到实例 复制链接链接已复制到粘贴板!
关闭实例时,所有数据都会丢失。您可以为持久性存储附加卷。您可以一次将卷附加到一个实例,除非它具有多重附加卷类型。有关创建多重附加卷的更多信息,请参阅 可附加到多个实例 的卷。
先决条件
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 登录控制面板。
- 选择 Project > Compute > Volumes。
- 选择 Edit Attachments 操作。如果卷没有附加到实例,则可以看到 Attach To Instance 下拉列表。
- 从 Attach To Instance 列表中,选择要将卷附加到的实例。
- 单击 Attach Volume。
3.7. 将卷从实例分离 复制链接链接已复制到粘贴板!
当您要将这个卷附加到另一个实例时,您必须将卷从实例分离,除非它具有多重附加卷类型。您还必须分离卷,以更改卷的访问权限或删除卷。
先决条件
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 登录控制面板。
- 选择 Project > Compute > Volumes。
- 选择卷的 Manage Attachments 操作。如果卷附加到实例,则实例的名称将显示在 Attachments 表中。
- 单击此中的 Detach Volume 以及下一个对话框屏幕。
后续步骤
3.8. 配置对卷的访问权限 复制链接链接已复制到粘贴板!
卷的默认状态是读写的,允许写入数据并从中读取数据。您可以将卷标记为只读,以防止其数据被意外覆盖或删除。
将卷更改为只读后,您可以将其更改回读写。
先决条件
- 如果卷已附加到实例,则分离这个卷。如需更多信息 ,请参阅从实例分离卷。
流程
- 提供您的凭据文件。
列出卷以检索您要配置的卷 ID:
$ cinder list为此卷设置所需的访问权限:
将卷的访问权限设置为只读:
$ cinder readonly-mode-update <volume_id> true-
将
<volume_id> 替换为所需卷的 ID。
-
将
将卷的访问权限设置为读写:
$ cinder readonly-mode-update <volume_id> false
- 如果您从实例将此卷分离以更改访问权限,则重新连接该卷。如需更多信息,请参阅 将卷附加到实例。
3.9. 使用仪表板更改卷所有者 复制链接链接已复制到粘贴板!
要更改卷的所有者,您必须执行卷转让。卷转让由卷的所有者发起,在卷的新所有者接受转让后,卷更改会完成。
先决条件
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 以卷所有者身份登录控制面板。
- 选择 Projects > Volumes。
- 在要转让的卷的 Actions 列中,选择 Create Transfer。
在 Create Transfer 对话框中,输入转让的名称,再单击 Create Volume Transfer。
卷转让已创建,在 Volume Transfer 屏幕中,您可以捕获要发送到接收者项目的
转让 ID和授权密钥。点 Download transfer credentials 按钮下载一个
.txt文件,它包括了transfer name,transfer ID, 和authorization key。注意授权密钥仅在 Volume Transfer 屏幕中可用。如果丢失授权密钥,您必须取消转让并创建另一个转让来生成新的授权密钥。
关闭 Volume Transfer 屏幕,以返回到卷列表。
卷状态更改为
waiting-transfer,直到接收者项目接受转让
接受来自仪表板的卷转让
- 以接收者项目所有者身份登录到控制面板。
- 选择 Projects > Volumes。
- 单击 Accept Transfer。
在 Accept Volume Transfer 对话框中,输入您从卷所有者接收的
转让 ID和授权密钥,然后单击 Accept Volume Transfer。该卷现在显示在活动项目的卷列表中。
3.10. 使用 CLI 更改卷所有者 复制链接链接已复制到粘贴板!
要更改卷的所有者,您必须执行卷转让。卷转让由卷的所有者发起,在卷的新所有者接受转让后,卷更改会完成。
流程
- 作为卷的当前所有者登录。
列出可用的卷:
$ cinder list启动卷转让:
$ 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命令清除卷的所有权,并为转让创建一个id和auth_key。这些值可以提供给,并供另一个用户接受转让并成为卷的新所有者。新用户现在可以声明卷的所有权。要做到这一点,用户应首先从命令行登录并运行:
$ 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. 创建卷快照 复制链接链接已复制到粘贴板!
您可以通过创建卷快照来保留卷在特定时间的状态。然后,您可以使用快照克隆新卷。
卷备份与快照不同。备份保留卷中包含的数据,而快照则保留卷在特定时间点的状态。如果卷存在快照,则无法删除它。卷备份可防止数据丢失,而快照有助于克隆。
因此,快照后端通常与卷后端在一起,以便在克隆期间最小化延迟。相反,备份存储库通常位于不同的位置,例如在不同节点、物理存储甚至典型的企业部署中地理位置。这是为了防止备份存储库不受卷后端可能出现的损坏的影响。
有关卷备份的更多信息,请参阅 块存储备份指南。
先决条件
- 要快照的卷。有关创建卷的更多信息,请参阅创建块存储卷。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 登录控制面板。
- 选择 Project > Compute > Volumes。
- 为目标卷选择 Create Snapshot 操作。
- 为 快照 提供快照名称,然后单击 创建卷快照。Volume Snapshots 选项卡显示所有快照。
对于从快照创建的块存储服务(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 控制面板简介。
流程
- 登录控制面板。
- 选择 Project > Compute > Volumes。
- 在 Volume Snapshots 表中,为您要从中创建新卷的快照选择 Create Volume action。有关创建卷的更多信息,请参阅创建块存储卷。
如果要从加密卷快照创建新卷,您必须确保新卷至少大于旧卷。
验证
验证新卷出现在 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 集群的更多信息,请参阅将 Overcloud 与现有 Red Hat Ceph Storage 集群集成中的配置现有 Red Hat Ceph Storage 集群。
先决条件
- 要删除的卷快照。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 登录控制面板。
- 选择 Project > Compute > Volumes。
- 在 Volume Snapshots 表中,为您要删除的快照选择 Delete Volume Snapshot 操作。
如果您的 OpenStack 部署使用 Red Hat Ceph 后端,了解有关快照安全性和故障排除的更多信息,请参阅 Red Hat Ceph Storage 后端中的保护和未保护的快照。
验证
验证 Volume Snapshots 选项卡中是否不再存在快照,或使用 CLI 列出卷快照并验证快照是否已删除:
$ openstack volume snapshot list
4.4. 从快照恢复卷 复制链接链接已复制到粘贴板!
您可以恢复卷的最新快照。这意味着您可以对卷数据进行原位将卷数据恢复到其最新的快照。
支持恢复卷的最新快照的功能,但依赖于驱动程序。此功能的正确实现是驱动程序的支持。有关支持此功能的更多信息,请联系您的驱动程序供应商。
限制
- 使用带有多附加卷的 restore-to-snapshot 功能可能会有限制。在使用这个功能前,请查看是否适用此类限制。
- 您不能在创建快照后恢复您重新定义大小(extend)的卷。
- 您不能在附加或正在使用的卷中使用 restore-to-snapshot 功能。
先决条件
- Block Storage (cinder) REST API 微版本 3.40 或更高版本。
- 您必须为该卷创建一个快照。
流程
- 提供您的凭据文件。
分离卷:
$ nova volume-detach <instance_id> <vol_id>将
<instance_id> 和 <vol_id> 替换为您要恢复的实例和卷的 ID。找到您要恢复的快照的 ID 或名称。您只能恢复最新的快照。
$ cinder snapshot-list恢复快照:
$ cinder --os-volume-api-version=3.40 revert-to-snapshot <snapshot_id or snapshot_name>将
<snapshot_id 或 snapshot_name> 替换为快照的 ID 或名称。可选: 您可以使用
cinder snapshot-list命令检查您要恢复的卷是否处于恢复状态。$ cinder snapshot-list重新附加卷:
$ nova volume-attach <instance_id> <vol_id>将
<instance_id> 和 <vol_id> 替换为您恢复的实例和卷的 ID。
验证
要检查该流程是否成功,您可以使用
cinder list命令验证您恢复的卷现在是否处于 available 状态。$ cinder list
如果您使用 Block Storage (cinder)作为可引导的 root 卷,则无法使用该卷上的 restore-to-snapshot 功能,因为它不处于 available 状态。要使用这个功能,实例必须使用 delete_on_termination=false (默认)属性引导,以便在实例终止时保留引导卷。当您要恢复到快照时,您必须首先删除初始实例,以便卷可用。然后,您可以恢复它并从卷创建新实例。
4.5. 上传卷到镜像服务(glance) 复制链接链接已复制到粘贴板!
您可以直接将现有卷作为镜像上传到镜像服务。
先决条件
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 登录控制面板。
- 选择 Project > Compute > Volumes。
- 选择目标卷的 Upload to Image 操作。
- 为卷提供 Image Name,并从列表中选择 Disk Format。
- 点 Upload。
要查看上传的镜像,请选择 Project > Compute > Images。新镜像会出现在 Images 表中。有关如何使用和配置镜像的详情,请参考 创建和管理镜像。
4.6. 可附加到多个实例的卷 复制链接链接已复制到粘贴板!
您可以创建一个多重附加块存储卷,它可以附加到多个实例,这些实例可以同时读取和写入它。多附加卷需要多重附加卷类型。
您必须使用多附件或集群感知的文件系统从多个实例管理写入操作。如果不这样做,会导致数据崩溃。
多重附加卷的限制
- Block Storage (cinder)后端必须支持多附加卷。有关支持的后端的详情,请联系红帽支持。
您的 Block Storage (cinder)驱动程序必须支持多附加卷。支持 Ceph RBD 驱动程序。请联系红帽支持,以验证您的供应商插件是否支持多附加功能。有关 vendor 插件认证的更多信息,请参阅以下位置:
- 不支持只读多重附加卷。
- 多重附加卷的实时迁移不可用。
- 不支持加密多附加卷。
- 裸机置备服务(ironic) virt 驱动程序不支持 multi-attach 卷。只有在 libvirt virt 驱动程序才支持多重附加卷。
- 您无法将附加的卷从 multi-attach 类型重新键入到非 multi-attach 类型,您无法将非 multi-attach 类型重新键入到 multi-attach 类型。
- 在附加卷迁移过程中,您无法使用具有多个读取写入附加的 multi-attach 卷作为源或目标卷。
- 您无法将多重附加卷附加到 shelved 卸载的实例。
4.6.1. 创建多重附加卷类型 复制链接链接已复制到粘贴板!
要将卷附加到多个实例,请在卷额外规格中将 multiattach 标志设置为 & lt;is> True。当您创建 multi-attach 卷类型时,卷将继承 标志并成为 multi-attach 卷。
先决条件
- 您必须是创建卷类型的项目管理员。
流程
提供 overcloud 凭证文件:
$ source ~/<credentials_file>-
将
<credentials_file> 替换为您的凭证文件的名称,如overcloudrc。
-
将
为 multi-attach 卷创建新卷类型:
$ cinder type-create multiattach为此 multi-attach 卷类型启用
multiattach属性:$ cinder type-key multiattach set multiattach="<is> True"运行以下命令来指定后端:
$ cinder type-key multiattach set volume_backend_name=<backend_name>
4.6.2. 多附加卷重试 复制链接链接已复制到粘贴板!
您可以重新键入卷,以便可以多附加功能或者重新键入支持多附加的卷,使其能够附加到多个实例。但是,您只能在使用时重新键入卷,其状态为 可用。
当您附加一个多附加卷时,一些虚拟机监控程序需要特殊考虑,比如当您禁用缓存时。目前,无法安全地更新附加的卷,同时保留整个卷。如果您尝试重新键入附加到多个实例的卷,重试会失败。
4.6.3. 创建多重附加卷 复制链接链接已复制到粘贴板!
您可以创建一个可以附加到多个实例的块存储卷,这些实例可以同时读取和写入它。
此流程在支持 multiattach 的任何后端上创建一个卷。因此,如果有两个支持 multiattach 的后端,调度程序决定使用哪个后端。如需更多信息,请参阅在 多个后端上的卷分配。
先决条件
- 您的项目中提供了一个 multi-attach 卷类型。
流程
- 提供您的凭据文件。
运行以下命令来创建 multi-attach 卷:
$ cinder create <volume_size> --name <volume_name> --volume-type multiattach运行以下命令,以验证卷是否能够多附加功能。如果卷是多重附加功能,则
multiattach字段等于True。$ cinder show <vol_id> | grep multiattach | multiattach | True |
后续步骤
4.7. 在后端之间移动卷 复制链接链接已复制到粘贴板!
将卷从一个存储后端移到另一个存储后端的原因有很多,例如:
- 要停用不再支持的存储系统。
- 要更改卷的存储类或层。
- 更改卷的可用区。
使用块存储服务(cinder),您可以通过以下方式在后端之间移动卷:
- Retype :只有卷所有者,管理员可以重新键入卷。retype 操作是在后端之间移动卷的最常见方法。如需更多信息,请参阅 块存储卷重试。
- migrate:只有管理员才能迁移卷。卷迁移为特定用例保留,因为它有限制性,需要明确了解部署的工作原理。如需更多信息,请参阅 使用控制面板在后端之间迁移卷, 或使用 CLI 在后端之间迁移卷。
限制
红帽支持在位于和跨可用区(AZ)的后端之间移动卷,但有以下限制:
- 卷必须具有 available 或 in-use 状态才能移动。
- 对正在使用的卷的支持取决于驱动程序。
- 卷不能有快照。
- 卷不能属于组或一致性组。
4.7.1. 移动可用卷 复制链接链接已复制到粘贴板!
您可以在所有后端之间移动可用卷,但性能取决于您使用的后端。许多后端支持辅助迁移。有关协助迁移的后端支持的更多信息,请联系该供应商。
辅助迁移可用于卷重新类型和卷迁移。通过协助的迁移,后端优化数据从源后端移动到目标后端,但两个后端都必须来自同一供应商。
红帽只支持带有多池后端的后端的后端支持后端迁移,或者在将 cinder migrate 操作用于单池后端(如 RBD)时支持。
当无法在后端之间进行支持的迁移时,块存储服务会执行通用卷迁移。
通用卷迁移需要在 Block Storage (cinder)服务将数据从源卷移到 Controller 节点之前,后端上的卷连接,并从 Controller 节点移动到目标卷。无论源和目标后端中的存储类型如何,块存储服务都可以无缝执行该过程。
在执行通用卷迁移前,请确保您有足够的带宽。通用卷迁移的持续时间与卷的大小直接成比例,这使得操作比辅助迁移慢。
4.7.2. 移动使用中的卷 复制链接链接已复制到粘贴板!
没有经过优化或辅助选项来移动使用的卷。当您移动使用的卷时,计算服务(nova)必须使用虚拟机监控程序将数据从源后端中的卷传输到目标后端中的卷。这要求与运行正在使用的卷的实例的虚拟机监控程序协调。
块存储服务(cinder)和计算服务协同工作,以执行此操作。计算服务管理大部分工作,因为数据通过 Compute 节点从一个卷复制到另一个卷。
在移动使用卷前,请确保您有足够的带宽。此操作的持续时间与卷的大小直接成比例,这使得操作比辅助迁移慢。
限制
- 在连接到多个 nova 实例时,无法使用的多重附加卷无法移动。
- 不支持非块设备,将目标后端上的存储协议限制为 iSCSI、光纤通道(FC)和 RBD。
4.8. 块存储卷重试 复制链接链接已复制到粘贴板!
当您重新键入卷时,您可以将卷类型及其设置应用到现有卷。有关卷类型的更多信息,请参阅使用 卷类型组卷配置。
只有卷所有者和管理员可以重新键入卷。
您可以重新键入一个卷,即新卷类型的额外规格可以应用到现有卷。您可以重新输入卷,将预定义的设置或存储属性应用到现有卷中,例如:
- 将卷移动到不同的后端。
- 要更改卷的存储类或层。
- 启用或禁用复制等功能。
卷重试是将卷从一个后端移到另一个后端的标准方法。但重试一个卷不一定意味着您必须将卷从一个后端移到另一个后端。然而,在有些情况下,您必须移动卷才能完成重新类型:
-
新卷类型定义了不同的
volume_backend_name。 -
当前卷类型的
volume_backend_name未定义,卷存储在与新卷类型volume_backend_name指定的不同后端。
将卷从一个后端移动到另一个后端可能需要大量时间和资源。因此,当重新类型需要移动数据时,块存储服务默认不会移动数据。操作会失败,除非在 retype 请求中指定迁移策略来明确允许。如需更多信息,请参阅 Retyping a volume from the Dashboard 或 Retyping a volume from the CLI。
限制
其他资源
4.8.1. 从 Dashboard 重试卷 复制链接链接已复制到粘贴板!
重新键入卷以将卷类型及其设置应用到现有卷。
不支持将未加密的卷重新指向相同大小的加密卷,因为加密卷需要额外的空间来存储加密数据。有关加密未加密的卷的更多信息,请参阅 加密未加密的卷。
先决条件
- 只有卷所有者和管理员可以重新键入卷。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 以 admin 用户或卷所有者身份登录控制面板。
- 选择 Project > Compute > Volumes。
- 在您要迁移的卷的 Actions 列中,选择 Change Volume Type。
- 在 Change Volume Type 对话框中,选择目标卷类型,并从 Type 列表定义新后端。
- 如果要将卷迁移到另一个后端,请从 Migration Policy 列表中选择 On Demand。如需更多信息,请参阅在后端间移动卷。
- 点 Change Volume Type 开始迁移。
4.8.2. 通过 CLI 重试卷 复制链接链接已复制到粘贴板!
重新键入卷以将卷类型及其设置应用到现有卷。
不支持将未加密的卷重新指向相同大小的加密卷,因为加密卷需要额外的空间来存储加密数据。有关加密未加密的卷的更多信息,请参阅 加密未加密的卷。
先决条件
- 只有卷所有者和管理员可以重新键入卷。
流程
- 提供您的凭据文件。
输入以下命令重新输入卷:
$ cinder retype <volume name or id> <new volume type name>如果 retype 操作需要将卷从一个后端移到另一个后端,块存储服务需要一个特定的标记:
$ cinder retype --migration-policy on-demand <volume name or id> <new volume type name>
4.9. 使用控制面板在后端之间迁移卷 复制链接链接已复制到粘贴板!
使用块存储服务(cinder),您可以在位于和跨可用区(AZ)的后端之间迁移卷。这是将卷从一个后端移到另一个后端的最低方法。
在高度自定义的部署中,或者在必须停用存储系统的情况下,管理员可以迁移卷。在这两种情况下,多个存储系统共享相同的 volume_backend_name,或者未定义。
限制
- 卷无法复制。
- 目标后端必须与卷的当前后端不同。
现有卷类型对于新后端必须有效,这意味着必须满足以下条件:
-
卷类型不能在其额外 specs 中定义
backend_volume_name,或者两个 Block Storage 后端都必须使用相同的backend_volume_name配置。 - 两个后端都必须支持卷类型中配置的相同功能,如支持精简配置、支持厚配置或其他功能配置。
-
卷类型不能在其额外 specs 中定义
将卷从一个后端移动到另一个后端可能需要大量时间和资源。如需更多信息,请参阅在后端间移动卷。
先决条件
- 您必须是迁移卷的项目管理员。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。如需更多信息,请参阅 OpenStack 控制面板简介。
流程
- 以 admin 用户身份登录控制面板。
- 选择 Admin > Volumes。
- 在您要迁移的卷的 Actions 列中,选择 Migrate Volume。
在 Migrate Volume 对话框中,从 Destination Host 下拉列表中选择目标主机。
注意要绕过主机迁移的任何驱动程序优化,请选择 Force Host Copy 复选框。
- 点 Migrate 开始迁移。
4.10. 使用 CLI 在后端之间迁移卷 复制链接链接已复制到粘贴板!
使用块存储服务(cinder),您可以在位于和跨可用区(AZ)的后端之间迁移卷。这是将卷从一个后端移到另一个后端的最低方法。
在高度自定义的部署中,或者在必须停用存储系统的情况下,管理员可以迁移卷。在这两种情况下,多个存储系统共享相同的 volume_backend_name,或者未定义。
限制
- 卷无法复制。
- 目标后端必须与卷的当前后端不同。
现有卷类型对于新后端必须有效,这意味着必须满足以下条件:
-
卷类型不能在其额外 specs 中定义
backend_volume_name,或者两个 Block Storage 后端都必须使用相同的backend_volume_name配置。 - 两个后端都必须支持卷类型中配置的相同功能,如支持精简配置、支持厚配置或其他功能配置。
-
卷类型不能在其额外 specs 中定义
将卷从一个后端移动到另一个后端可能需要大量时间和资源。如需更多信息,请参阅在后端间移动卷。
先决条件
- 您必须是迁移卷的项目管理员。
流程
提供 overcloud 凭证文件:
$ source ~/<credentials_file>-
将
<credentials_file> 替换为您的凭证文件的名称,如overcloudrc。
-
将
输入以下命令来检索目标后端的名称:
$ 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_name"pool。在示例输出中,块存储服务中有两个 LVM 后端:
localdomain@lvmdriver-1#lvmdriver-1和localdomain@lvmdriver-2#lvmdriver-1。请注意,两个后端共享相同的volume_backend_name、lvmdriver-1。输入以下命令将卷从一个后端迁移到另一个后端:
$ cinder migrate <volume id or name> <new host>
4.11. 加密未加密的卷 复制链接链接已复制到粘贴板!
您可以加密未加密的卷。
如果 cinder-backup 服务可用,则备份未加密的卷,然后将其恢复到新的加密卷。
如果 cinder-backup 服务不可用,则从未加密的卷创建一个 glance 镜像,并从此镜像创建一个新的加密卷。
先决条件
- 您必须是创建加密卷的项目管理员。
- 要加密的未加密的卷。
流程
cinder-backup 服务可用:
提供 overcloud 凭证文件:
$ source ~/<credentials_file>-
将
<credentials_file> 替换为您的凭证文件的名称,如overcloudrc。
-
将
备份当前的未加密的卷:
cinder backup-create <unencrypted_volume>-
将
<unencrypted_volume> 替换为未加密的卷的名称或 ID。
-
将
创建一个新的加密卷:
cinder create <encrypted_volume_size> --volume-type <encrypted_volume_type>-
将
<encrypted_volume_size> 替换为新卷的大小(以 GB 为单位)。这个值必须于未加密卷的大 1 GB,以便容纳加密元数据。 -
将
<encrypted_volume_type> 替换为您需要的加密类型。
-
将
将未加密的卷的备份恢复到新的加密卷:
cinder backup-restore <backup> --volume <encrypted_volume>-
将
<backup> 替换为未加密的卷备份的名称或 ID。 -
将
<encrypted_volume> 替换为新加密卷的 ID。
-
将
cinder-backup 服务不可用:
提供 overcloud 凭证文件:
$ source ~/<credentials_file>-
将
<credentials_file> 替换为您的凭证文件的名称,如overcloudrc。
-
将
创建未加密的卷的 glance 镜像:
cinder upload-to-image <unencrypted_volume> <new_image>-
将
<unencrypted_volume> 替换为未加密的卷的名称或 ID。 -
将
<new_image> 替换为新镜像的名称。
-
将
从比镜像大 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 后端中将快照设置为 unprotected。然后您可以正常通过 RHOSP 删除快照。
有关保护快照的更多信息,请参阅 Red Hat Ceph Storage 块设备指南中的保护块设备快照和取消保护块设备快照。
第 5 章 配置 Object Storage 服务 (swift) 复制链接链接已复制到粘贴板!
Red Hat OpenStack Platform (RHOSP) Object Storage 服务(swift)将其对象或数据存储在容器中。容器与文件系统中的目录类似,但它们无法嵌套。容器为用户提供了一种简单的方式来存储任何种类的非结构化数据。例如,对象可以包含 photos、文本文件或镜像。存储的对象不会被压缩。
5.1. 对象存储环 复制链接链接已复制到粘贴板!
Object Storage 服务(swift)使用名为 ring 的数据结构,在集群中分发分区空间。此分区空间是对象存储服务中数据持久性引擎的核心。通过 ring,对象存储服务可以快速轻松地在集群间同步每个分区。
Ring 包含有关对象存储分区的信息,以及如何在不同节点和磁盘之间分发分区。当任何对象存储组件与数据交互时,会在环本地执行快速查找,以确定每个对象的可能分区。
对象存储服务有三个环来存储以下类型的数据:
- 帐户信息
- 容器,便于在帐户下组织对象
- 对象副本
5.1.1. 检查集群健康状况 复制链接链接已复制到粘贴板!
Object Storage 服务(swift)在后台运行许多进程,以确保长期数据的可用性、持久性和持久性。例如:
- 审核员会持续重新读取数据库和目标文件,并使用 checksum 进行比较,以确保没有静默的位。任何不再与校验和匹配的数据库或目标文件都会被量化,并在该节点上变得不可读。然后复制其中一个副本,使本地副本再次可用。
- 当您替换磁盘或节点时,对象和文件可能会消失,或者对象被量化。当发生这种情况时,replicators 会将缺少的对象或数据库文件复制到其他节点之一。
对象存储服务包括一个名为 swift-recon 的工具,从所有节点收集数据并检查整个集群的健康状态。
流程
- 登录到其中一个 Controller 节点。
运行以下命令:
[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. ======================================================================可选: 使用-
-all选项返回其他输出。这个命令查询环中的所有服务器以获取以下数据:
- async 待处理:如果集群负载过高,进程无法足够快更新数据库文件,则一些更新异步进行。随着时间的推移,这些数字会缩短。
- 复制指标:检查复制时间戳;通常发生完整的复制通过,以及几个错误。旧条目(例如,带有 6 个月前的时间戳的条目)表示节点上的复制还没有在最后的六个月内完成。
- Ring md5sums: 这样可确保所有 ring 文件在所有节点上都一致。
-
swift.confmd5sums :这样可确保所有配置文件在所有节点上都一致。 - Quarantined 文件:所有节点必须不能或非常少、数量非常高的文件。
- time-sync :所有节点必须同步。
5.1.2. 增加环分区电源 复制链接链接已复制到粘贴板!
Ring 电源决定了资源(如帐户、容器或对象)被映射的分区。分区包含在路径中,资源存储在后端文件系统中。因此,更改分区电源需要将资源重新定位到后端文件系统中的新路径中。
在大量填充的集群中,重新定位过程会非常耗时。为避免停机,在集群仍然运行时重新定位资源。您必须在不临时丢失对数据的访问或影响进程性能(如复制和审计)的情况下这样做。如需增加环分区功能的帮助,请联系红帽支持。
5.1.3. 对象存储服务分区电源建议 复制链接链接已复制到粘贴板!
使用单独的 Red Hat OpenStack Platform (RHOSP) Object Storage 服务(swift)节点时,使用更高的分区电源值。
对象存储服务使用修改 的哈希环 将数据分布到磁盘和节点上。默认有三个环:一个用于帐户,一个用于容器,另一个用于对象。每个环使用一个称为 分区电源 的固定参数。此参数设置可创建的最大分区数。
分区 power 参数非常重要,只能为新容器及其对象更改。因此,务必要 在初始部署 之前设置这个值。
RHOSP director 部署的环境的默认分区节能值为 10。这是较小的部署的一个合理的值,特别是如果您只计划将 Controller 节点上的磁盘用于对象存储服务。
如果使用三个副本,下表可帮助您选择适当的分区功能:
| 分区 Power | 最大磁盘数 |
| 10 | ~ 35 |
| 11 | ~ 75 |
| 12 | ~ 150 |
| 13 | ~ 250 |
| 14 | ~ 500 |
设置过高的分区电源值(例如,只有 14 代表 40 个磁盘)对复制时间造成负面影响。
要设置分区电源,请使用以下资源:
parameter_defaults:
SwiftPartPower: 11
您还可以为新容器配置额外的对象服务器 ring。如果要在最初使用低分区电源的对象存储服务部署中添加更多磁盘,这非常有用。
5.1.4. 自定义环 复制链接链接已复制到粘贴板!
随着技术的发展和存储容量需求增加,创建自定义环是更新现有 Object Storage 集群的方法。
当您向集群添加新节点时,它们的特征可能与原始节点的不同。如果没有自定义调整,可能会使用新节点的较大的容量。或者,如果权重在环中改变,则数据分布可能会变得不均匀,这会降低安全性。
自动化可能不会与未来的技术趋势保持同步。例如,当前正在使用的一些较旧的 Object Storage 集群源自于 SSD 可用。
环构建器有助于随着集群的发展和技术来管理对象存储。如需创建自定义环的帮助,请联系红帽支持。
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 选项。
流程
编辑
swift_params.yaml:cat > swift_params.yaml << EOF parameter_defaults: ExtraConfig: swift::proxy::copy::object_post_as_copy: False EOF在部署或更新 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 服务(keystone)或 HAProxy。
流程
-
从
/usr/share/openstack-tripleo-heat-templates复制roles_data.yaml。 - 编辑新文件。
- 删除不需要的控制器角色,如 Aodh*、Ceiloe*、Ceph*、Cinder*、Glance*、Heat*、Ironic*、Manila*、Nova*、Octich、Swift*。
-
在
roles_data.yaml中查找 ObjectStorage 角色。 -
将此角色复制到同一文件中的新角色,并将其命名为
ObjectProxy。 将
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使用常规的
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 中降低性能。Object Storage 服务无法缓解使用 SAN 磁盘的环境中的性能问题。因此,为对象存储使用额外的本地磁盘来满足性能和磁盘空间要求。如需更多信息 ,请参阅对象存储服务的磁盘建议。
将外部 SAN 用于对象存储需要根据具体情况进行评估。如需更多信息,请联系红帽支持团队。
如果您选择将外部 SAN 用于对象存储,请注意以下条件:
- 红帽不对使用外部 SAN 进行对象存储导致的问题提供支持。
- 红帽不对核心对象存储服务产品外出现的问题提供支持。要获得高可用性和性能的支持,请联系您的存储厂商。
- 红帽不测试对象存储服务的 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 节点上定义了 sdb 和 sdc 磁盘。
在配置多个磁盘时,请确保 Bare Metal 服务(ironic)使用预期的根磁盘。
5.3. 添加或删除 Object Storage 节点 复制链接链接已复制到粘贴板!
要向集群添加新的 Object Storage (swift)节点,您必须增加节点数,更新环,并同步更改。您可以通过向 overcloud 添加节点或扩展裸机节点来增加节点数。
要从集群中删除 Object Storage 节点,您可以根据集群中的数据量执行简单的删除或增量移除。
5.3.1. 向 overcloud 添加节点 复制链接链接已复制到粘贴板!
您可以向 overcloud 添加更多节点。
Red Hat OpenStack Platform 的新安装不包括某些更新,如安全勘误和程序错误修复。因此,如果您要扩展使用红帽客户门户网站或 Red Hat Satellite Server 的连接的环境,RPM 更新不会应用到新节点。要将最新的更新应用到 overcloud 节点,您必须执行以下操作之一:
- 在 scale-out 操作后完成节点的 overcloud 更新。
-
使用
virt-customize工具,在横向扩展操作前将软件包修改为基础 overcloud 镜像。有关更多信息,请参阅红帽知识库解决方案 使用 virt-customize 修改 Red Hat Linux OpenStack Platform Overcloud 镜像。
流程
创建名为
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" } ] }注册新节点:
$ source ~/stackrc (undercloud)$ openstack overcloud node import newnodes.json为每个新节点启动内省过程:
(undercloud)$ openstack overcloud node introspect \ --provide <node_1> [node_2] [node_n]-
使用--
provide选项将所有指定节点在内省后重置为available状态。 -
将
<node_1>、[node_2]和所有节点(直到[node_n])替换为您要内省的每个节点的 UUID。
-
使用--
为每个新节点配置镜像属性:
(undercloud)$ openstack overcloud node configure <node>
5.3.2. 扩展裸机节点 复制链接链接已复制到粘贴板!
要增加现有 overcloud 中裸机节点的数量,请在 overcloud-baremetal-deploy.yaml 文件中增加节点数并重新部署 overcloud。
先决条件
- 新的裸机节点已注册、内省,并可用于调配和部署。有关更多信息,请参阅为 overcloud 注册节点,以及创建 裸机节点硬件的清单。
流程
查找
stackrcundercloud 凭据文件:$ source ~/stackrc-
打开用于置备裸机节点的
overcloud-baremetal-deploy.yaml节点定义文件。 增加您要扩展的角色的
count参数。例如,以下配置将 Object Storage 节点数增加到 4:- name: Controller count: 3 - name: Compute count: 10 - name: ObjectStorage count: 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- 可选:定义您要分配给新节点的任何其他属性。有关您可以在节点定义文件中配置节点属性的属性的更多信息,请参阅 裸机节点置备属性。
-
如果您使用 Object Storage 服务(swift)和整个磁盘 overcloud 镜像,
overcloud-hardened-uefi-full,请根据磁盘大小以及/var和/srv的存储要求配置/srv分区大小。如需更多信息,请参阅为对象存储服务配置整个磁盘分区。 置备 overcloud 节点:
(undercloud)$ openstack overcloud node provision \ --stack <stack> \ --output <deployment_file> \ /home/stack/templates/overcloud-baremetal-deploy.yaml-
将
<stack> 替换为置备裸机节点的堆栈的名称。如果未指定,则默认为overcloud。 -
将
<deployment_file>替换为用于部署命令生成的 heat 环境文件的名称,如/home/stack/templates/overcloud-baremetal-deployed.yaml。
-
将
在单独的终端中监控调配进度。当置备成功后,节点状态会从
available改为active:(undercloud)$ watch openstack baremetal node list使用其他环境文件将生成的
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 节点上的相同的 ring 文件。如果替换 Controller 节点或 Object Storage 节点,则必须在 overcloud 更新后同步这些节点,以确保正常工作。
流程
以
stack用户身份登录 undercloud,再创建一个临时目录:$ mkdir temp && cd temp/将 overcloud 环文件从之前存在的节点之一(本例中为Controller 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提取环,并更改到 ring 子目录:
$ tar xzvf swift-rings.tar.gz && cd var/lib/config-data/puppet-generated/swift_ringbuilder/etc/swift/根据您的设备详情收集以下变量的值:
<device_name>:$ openstack baremetal introspection data save <node_name> | jq ".inventory.disks"<node_ip>:$ metalsmith <node_name> show-
<port> : 默认端口为600x。如果您更改了默认值,请使用适用端口。 -
<builder_file> : 第 3 步中的构建器文件名。 -
<weight> 和 <zone> 变量是用户定义的。
使用
swift-ring-builder将新节点添加到现有环中。根据设备详情替换变量。注意您必须安装
python3-swiftRPM 以使用swift-ring-builder命令。$ swift-ring-builder etc/swift/<builder_file> add <zone>-<node_ip>:<port>/<device_name> <weight>重新平衡环,以确保使用新设备:
$ swift-ring-builder etc/swift/<builder_file> rebalance将修改后的环文件上传到 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"将环上传到所有节点并重启对象存储服务:
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 文件复制到其正确的文件夹后,您必须将更改的环文件发送到 Object Storage (swift)容器。
- 重要的
- 不要同时迁移所有数据。以 10% 为单位迁移数据。例如,将源设备的 weight 配置为 90.0,目标设备配置为 equal 10.0。然后,将源设备的权重配置为 80.0 和 20.0。继续逐步迁移数据,直到您完成这个过程。在迁移过程中,如果您同时移动所有数据,旧数据位于源设备上,但环指向所有副本的新目标设备。在 replicators 已将所有数据移至目标设备之前,无法访问数据。
在迁移过程中,对象存储环会重新分配数据的位置,然后复制器将数据移到新位置。随着集群活动增加,因为负载增加,复制过程会减慢。集群越大,复制传递所需的时间越长。这是预期的行为,但如果客户端访问当前被重新定位的数据,则日志文件中可能会导致 404 错误。当代理尝试从新位置检索数据时,但数据还没有在新位置中检索数据时,
swift-proxy会在日志文件中报告 404 错误。当迁移逐渐时,代理会访问没有移动的副本,且不会发生错误。当代理尝试从替代副本检索数据时,日志文件中的 404 错误会被解决。要确认复制过程正在进行,请参阅复制日志。Object Storage 服务(swift)每五分钟发出复制日志。
流程
使用类似以下示例的脚本,将之前存在的 Controller 节点中的环文件分发到所有 Controller 节点,并重启这些节点上的对象存储服务容器:
#!/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将环上传到所有节点并重启对象存储服务:
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
要确认数据正在移到新磁盘中,请在新存储节点上运行以下命令:
$ sudo grep -i replication /var/log/container/swift/swift.log
5.3.6. 删除 Object Storage 节点 复制链接链接已复制到粘贴板!
删除 Object Storage (swift)节点的方法有两种:
- 简单移除:此方法在一个操作中删除节点,并适合以较小的数据量为中心的集群。
- 增量移除:更改环,以降低您要删除的节点上磁盘的权重。如果要最大程度降低对存储网络使用量的影响,或者集群包含更多数量的数据,这个方法是适当的。
对于这两种方法,您遵循 缩减裸机节点 流程。但是,为了进行增量移除,请完成这些先决条件,以更改存储环,以减少您要删除的节点上的磁盘权重:
先决条件
- 对象存储环被更新并重新平衡。如需更多信息,请参阅更新和重新平衡对象存储环。
- Object Storage 环中的更改会被同步。如需更多信息,请参阅 同步节点更改和迁移数据。
有关替换对象存储节点的详情,请查看 缩减裸机节点 开始的先决条件。
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
流程
查找
stackrcundercloud 凭据文件:$ source ~/stackrc-
为您要缩减的角色减少
overcloud-baremetal-deploy.yaml文件中的count参数。 -
定义您要从堆栈中删除的每个节点的
主机名和名称(如果尚未在角色的instances属性中定义)。 将属性
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,以将节点返回到堆栈。从 overcloud 中删除节点:
(undercloud)$ openstack overcloud node delete \ --stack <stack> \ --baremetal-deployment /home/stack/templates/overcloud-baremetal-deploy.yaml将
<stack> 替换为置备裸机节点的堆栈的名称。如果未指定,则默认为overcloud。注意不要将您要从堆栈中删除的节点作为命令参数包括在
openstack overcloud node delete命令中。
置备 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。
-
将
使用其他环境文件,将 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. 对象存储服务中的容器管理 复制链接链接已复制到粘贴板!
为了帮助使用对象存储服务(swift)中的组织,您可以使用伪文件夹。这些文件夹是可包含对象和嵌套的逻辑设备。例如,您可以创建一个 Images 文件夹来存储图片和用于存储视频的 Media 文件夹。
您可以在各个项目中创建一个或多个容器,以及每个容器中的一个或多个对象或伪文件夹。
5.4.1. 创建私有和公共容器 复制链接链接已复制到粘贴板!
使用控制面板在 Object Storage 服务(swift)中创建容器。
流程
- 在控制面板中,选择 Project > Object Store > Containers。
- 单击 Create Container。
指定 Container Name,并在 Container Access 字段中选择以下之一。
Expand 类型 描述 私有限制对当前项目中的用户的访问权限。
公开允许 API 访问具有公共 URL 的任何人。但是,在仪表板中,项目用户无法看到来自其他项目的公共容器和数据。
- 单击 Create Container。
可选:新容器使用默认存储策略。如果您定义了多个存储策略,例如,默认策略和启用纠删代码的另一个策略,您可以将容器配置为使用非默认存储策略:
$ swift post -H "X-Storage-Policy:<policy>" <container_name>-
将 &
lt;policy> 替换为您要使用容器的策略的名称或别名。 -
将
<container_name> 替换为容器的名称。
-
将 &
5.4.2. 为容器创建伪文件夹 复制链接链接已复制到粘贴板!
使用控制面板为对象存储服务(swift)中的容器创建伪文件夹。
流程
- 在控制面板中,选择 Project > Object Store > Containers。
- 单击您要添加伪文件夹的容器的名称。
- 单击 Create Pseudo-folder。
- 在 Pseudo-folder Name 字段中指定名称,然后单击 Create。
5.4.3. 从对象存储服务删除容器 复制链接链接已复制到粘贴板!
使用控制面板从 Object Storage 服务(swift)中删除容器。
流程
- 在控制面板中,选择 Project > Object Store > Containers。
- 浏览 Containers 部分中的容器,并确保所有对象都已删除。如需更多信息 ,请参阅从对象存储服务中删除对象。
- 在容器箭头菜单中选择 Delete Container。
- 单击 Delete Container 以确认移除容器。
5.4.4. 将对象上传到容器 复制链接链接已复制到粘贴板!
如果您没有将实际文件上传到对象存储服务(swift),则对象仍会创建为稍后可用于上传该文件的占位符。
流程
- 在控制面板中,选择 Project > Object Store > Containers。
- 单击您要放置上传对象的容器的名称。如果容器中已存在伪文件夹,您可以单击其名称。
- 浏览您的文件,然后单击 Upload Object。
在 Object Name 字段中指定名称:
- 您可以使用 / 字符(如 Images/myImage.jpg )在名称中指定伪文件夹。如果指定的文件夹尚不存在,则在上传对象时会创建它。
- 对位置不唯一的名称,即对象已存在,覆盖对象的内容。
- 单击 Upload Object。
5.4.5. 在容器间复制对象 复制链接链接已复制到粘贴板!
使用控制面板在 Object Storage 服务(swift)中复制对象。
流程
- 在控制面板中,选择 Project > Object Store > Containers。
- 单击对象的容器或文件夹的名称(以显示对象)。
- 单击 Upload Object。
- 浏览要复制的文件,然后在其箭头菜单中选择 Copy。
指定以下内容:
Expand 字段 描述 目标容器
新对象的目标容器。
路径
目标容器中的伪文件夹;如果文件夹尚不存在,则会创建它。
目标对象名称
新对象的名称。如果您使用对位置不唯一的名称(即对象已存在),它会覆盖对象之前的内容。
- 单击 Copy Object。
5.4.6. 从对象存储服务中删除对象 复制链接链接已复制到粘贴板!
使用控制面板从 Object Storage 服务(swift)中删除对象。
流程
- 在控制面板中,选择 Project > Object Store > Containers。
- 浏览对象,并在其箭头菜单中选择 Delete Object。
- 单击 Delete Object 以确认对象已被删除。