存储指南
了解、使用和管理 OpenStack 中的持久性存储
摘要
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
对红帽文档提供反馈
我们感谢您对文档提供反馈信息。与我们分享您的成功秘诀。
在 JIRA 中提供文档反馈
使用 Create Issue 表单对文档提供反馈。JIRA 问题将在 Red Hat OpenStack Platform Jira 项目中创建,您可以在其中跟踪您的反馈进度。
- 确保您已登录到 JIRA。如果您没有 JIRA 帐户,请创建一个帐户来提交反馈。
- 点击以下链接打开 Create Issue 页面: Create Issue
- 完成 Summary 和 Description 字段。在 Description 字段中,包含文档 URL、章节或章节号以及问题的详细描述。不要修改表单中的任何其他字段。
- 点 Create。
第 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 文档。
本指南记录了使用 slirp
来应用一些自定义服务设置。因此,您需要首先安装 192.168.1.0/24
软件包:
# dnf install crudini -y
RHOSP 识别两种类型的存储: ephemeral 和 persistent。临时存储是仅与特定 Compute 实例关联的存储。实例终止后,它是它的临时存储。这种类型的存储对基本运行时要求很有用,如存储实例的操作系统。
持久性存储 设计为独立于任何正在运行的实例保留(persist)。此存储用于需要在不同实例或特定实例生命周期外重复使用的任何数据。RHOSP 使用以下类型的持久性存储:
- 卷
OpenStack Block Storage 服务(openstack-cinder)允许用户通过 卷 访问块存储设备。用户可以将卷附加到实例,以便使用通用持久性存储来增加其临时存储。卷可以分离并重新附加到实例,只能通过它们所连接的实例访问。
您还可以将实例配置为使用临时存储。您可以配置块存储服务来将镜像写入卷,而不使用临时存储。然后,您可以使用该卷作为实例的可引导根卷。
卷还通过备份和快照提供固有冗余和灾难恢复。另外,您还可以加密卷来添加安全性。
- 容器
OpenStack Object Storage 服务(openstack-swift)提供了一个完全分布式的存储解决方案,用于存储任何类型的静态数据或二进制对象,如介质文件、大数据集和磁盘镜像。Object Storage 服务使用容器组织这些对象。
虽然卷的内容只能通过实例访问,但容器内的对象可以通过 Object Storage REST API 访问。因此,Object Storage 服务可以通过云中的每个服务用作存储库。
- 共享
- 共享文件系统服务(openstack-manila)提供了轻松调配远程、可共享的文件系统 或共享的方法。共享允许云中的项目开放共享存储,并可以被多个实例同时使用。
每个存储类型都设计为满足特定的存储要求。容器是为广泛访问而设计的,因此所有存储类型中吞吐量、访问和容错功能具有最高吞吐量、访问和容错功能。容器使用更用于服务。
另一方面,卷主要用于实例消耗。它们没有与容器具有相同的访问和性能,但它们具有更大的功能集,并且具有比容器更原生的安全功能。共享与在这种情况下的卷类似,但多个实例可以消耗它们。
以下小节在特定的存储标准上下文中详细讨论每种存储类型的架构和功能集。
1.1. 可扩展性和后端存储
通常,集群存储解决方案提供了更大的后端可扩展性。例如,当您将 Red Hat Ceph 用作块存储(cinder)后端时,您可以通过添加更多 Ceph Object Storage Daemon (OSD)节点来扩展存储容量和冗余。Block Storage、Object Storage (swift)和共享文件系统服务(manila)服务支持 Red Hat Ceph Storage 作为后端。
块存储服务可以使用多个存储解决方案作为分散后端。在后端级别,您可以通过添加更多后端并重新启动服务来扩展容量。块存储服务还具有大量支持的后端解决方案列表,其中的一些具有额外的可扩展性功能。
默认情况下,Object Storage 服务使用配置的存储节点上的文件系统,它可以尽可能多地使用可用的空间。Object Storage 服务支持 XFS 和 ext4 文件系统,它们可以扩展为消耗尽可能多的底层存储。您还可以通过向存储节点添加更多存储设备来扩展容量。
共享文件系统服务从指定的存储池置备文件共享,这些池由一个或多个第三方后端存储系统管理。您可以通过增加服务可用的大小或数量或向部署添加更多第三方后端存储系统来扩展此共享存储。
1.2. 存储可访问性和管理
卷仅通过实例消耗,并且一次只能附加到一个实例中。用户可以创建卷快照,可用于克隆或将卷恢复到以前的状态(请参阅 第 1.4 节 “存储冗余和灾难恢复”)。块存储服务还允许您创建卷类型,其中聚合了卷设置(如大小和后端),用户可在创建新卷时可轻松调用。这些类型可以进一步与 服务质量 规格关联,允许您为用户创建不同的存储层。
与卷一样,共享通过实例消耗。但是,共享可以直接挂载到实例中,不需要通过控制面板或 CLI 附加。共享也可以被多个实例同时挂载。共享文件系统服务还支持共享快照和克隆 ; 您还可以创建共享类型来聚合设置(与卷类型类似)。
容器中的对象可以通过 API 访问,并可被云中的实例和服务访问。这使得它们成为服务的对象存储库;例如,镜像服务(openstack-glance)可以将其镜像存储在由对象存储服务管理的容器中。
1.3. 存储安全性
块存储服务(cinder)通过卷加密提供基本数据安全性。因此,您可以将卷类型配置为通过静态密钥加密;然后,密钥用于加密从配置的卷类型创建的所有卷。更多信息请参阅 第 2.7 节 “Block Storage 服务(cinder)卷加密”。
对象和容器安全性在服务和节点级别进行配置。Object Storage 服务(swift)为容器和对象不提供原生加密。相反,Object Storage 服务优先选择云中可访问性,因此这只依赖于云网络安全性来保护对象数据。
共享文件系统服务(manila)可以通过访问限制(如实例 IP、用户或组还是 TLS 证书)来保护共享。此外,一些共享文件系统服务部署可以为单独的共享服务器功能,以管理共享网络和共享之间的关系;一些共享服务器支持甚至需要,额外的网络安全性。例如,CIFS 共享服务器需要部署 LDAP、Active Directory 或 Kerberos 身份验证服务。
有关如何保护镜像服务(glance)的更多信息,如镜像签名和验证和元数据定义(metadef)API 限制,请参阅创建和管理镜像指南中的镜像服务。
1.4. 存储冗余和灾难恢复
块存储服务(cinder)具有卷备份和恢复功能,它提供了用户存储的基本灾难恢复。使用备份来保护卷内容。该服务还支持快照。除了克隆外,您还可以使用快照将卷恢复到以前的状态。
在后端环境中,您还可以在后端之间迁移卷。如果您需要使后端离线进行维护,这非常有用。备份通常存储在独立于其源卷的存储后端中,以帮助保护数据。快照无法实现,因为快照依赖于其源卷。
块存储服务还支持创建一致性组,将卷分组在一起,以便同时创建快照。这在多个卷之间提供了更高的数据一致性。更多信息请参阅 第 2.9 节 “块存储服务(cinder)一致性组”。
Object Storage 服务(swift)不提供内置备份功能。您必须在文件系统或节点级别执行所有备份。对象存储服务具有更强大的冗余和容错功能,甚至多次复制对象存储服务的最基本部署。您可以使用 dm-multipath
等故障转移功能来提高冗余性。
共享文件系统服务没有为共享提供内置备份功能,但它允许您为克隆和恢复创建快照。
第 2 章 配置块存储服务(cinder)
Block Storage 服务(cinder)管理所有卷的管理、安全、调度和总体管理。卷用作计算实例的持久性存储的主要形式。
有关卷备份的更多信息,请参阅 块存储备份指南。
您必须在任何使用块存储服务(cinder)和光纤通道(FC)后端的部署中的所有 Controller 节点和 Compute 节点上安装主机总线适配器(HBA)。
2.1. 块存储服务后端
Red Hat OpenStack Platform (RHOSP)使用 director 部署。这有助于确保每个服务的正确配置,包括块存储服务(cinder),并扩展其后端。director 还有几个集成的后端配置。
Red Hat OpenStack Platform 支持 Red Hat Ceph Storage 和 NFS 作为 Block Storage (cinder)后端。默认情况下,块存储服务使用 LVM 后端作为卷的软件仓库。虽然这个后端适合测试环境,但生产环境不支持 LVM。
有关如何使用 RHOSP 部署 Red Hat Ceph Storage 的说明,请参阅使用容器化 Red Hat Ceph 部署 Overcloud。
有关如何在 overcloud 中设置 NFS 存储的说明,请参阅高级 Overcloud 自定义指南中的 配置 NFS 存储。
您还可以将块存储服务配置为使用受支持的第三方存储设备。director 包括部署不同后端解决方案的必要组件。
有关支持的后端设备和驱动程序的完整列表,请参阅 Red Hat OpenStack Platform 中的组件、插件和驱动程序支持。所有第三方后端设备和驱动程序都有额外的部署指南。查看适当的部署指南,以确定后端设备或驱动程序是否需要插件。有关部署第三方存储设备插件的更多信息,请参阅高级 Overcloud 自定义指南中的 部署供应商插件。
2.2. 块存储卷服务的高可用性
Block Storage 卷服务(cinder-volume
)以主动-被动模式部署到 Controller 节点上。在这种情况下,Pacemaker 维护此服务的高可用性(HA)。
在分布式 Compute 节点(DCN)部署中,块存储服务以主动-被动模式部署到中央站点上。在这种情况下,Pacemaker 维护此服务的 HA。仅在需要存储的边缘站点上部署块存储卷服务。由于 Pacemaker 无法部署到边缘站点,因此块存储卷服务必须以主动-主动模式部署,以确保此服务的 HA。dcn-storage.yaml
heat 模板执行此配置。但是,您需要手动维护此服务。有关在需要存储的边缘站点维护块存储卷服务的更多信息,请参阅 边缘站点的块存储服务维护命令。
如果您在需要存储的边缘站点使用多个存储后端,则所有后端都必须支持主动-主动模式。因为如果您在不支持主动模式的后端中保存数据,所以您将面临丢失数据的风险。
2.2.1. 边缘站点的块存储卷服务的维护命令
在需要存储的边缘站点以主动-主动模式部署块存储卷服务(cinder-volume
)后,您可以使用以下命令管理集群及其服务。
这些命令需要 3.17 或更高版本的 Block Storage (cinder) REST API 微版本。
用户目标 | 命令 |
请参阅服务列表,包括集群名称、主机、区域、状态、状态、禁用原因和后端状态等详情。 注意
Red Hat Ceph Storage 后端的默认集群名称是 |
|
请参阅整个集群的详细和概述信息,而不是单个服务。 |
|
请参阅特定集群的详细信息。 |
|
启用禁用的服务。 |
|
禁用集群服务。 |
|
2.2.2. 卷管理和非受管
取消管理机制有助于使用 X 版本 X 将卷从一个服务移动到使用版本 X+1 的另一个服务。这两个服务都会在此过程中继续运行。
在 API 版本 3.17 或更高版本中,您可以看到在块存储集群中可用于管理的卷和快照列表。要查看这些列表,请使用带有 cinder manageable-list
或 cinder snapshot-manageable-list
的 --cluster
参数。
在 API 版本 3.16 及更高版本中,cinder manage
命令也接受可选的 --cluster
参数,以便您可以将之前非受管卷添加到块存储集群中。
2.2.3. 在集群服务上的卷迁移
使用 API 版本 3.16 及更高版本,cinder migrate
和 cinder-manage
命令接受 --cluster
参数来定义主动-主动部署的目的地。
当您在块存储服务上迁移卷时,传递可选的 --cluster
参数并省略 主机
位置参数,因为参数是互斥的。
2.2.4. 启动块存储服务维护
所有块存储卷服务在启动时执行自己的维护。在一个集群中分组多个卷服务的环境中,您可以清理当前没有运行的服务。
命令 work-cleanup
会触发服务器清理。该命令返回:
- 命令可以清理的服务列表。
- 命令无法清理的服务列表,因为它们目前没有在集群中运行。
work-cleanup
命令仅适用于运行 API 版本 3.24 或更高版本的服务器。
先决条件
- 成功安装 undercloud。如需更多信息,请参阅 Director 安装和使用 中的 在 undercloud 上安装 director。
流程
运行以下命令,以验证集群的所有服务是否正在运行:
$ cinder cluster-list --detailed
或者,运行
cluster show
命令。如果有任何服务没有运行,请运行以下命令来识别这些特定服务:
$ cinder service-list
运行以下命令以触发服务器清理:
$ cinder 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 work-cleanup --cluster tripleo@tripleo_ceph
2.3. 使用卷类型的组卷配置
通过 Red Hat OpenStack Platform,您可以创建卷类型,以便将关联的设置应用到卷类型。您可以在卷创建过程中应用设置,请参阅 第 3.1 节 “创建块存储卷”。您还可以在创建卷后应用设置,请参阅 第 4.5 节 “块存储卷重新处理”。以下列表显示了您可以应用到卷类型的一些关联设置:
- 卷的加密。更多信息请参阅 第 2.7.2 节 “使用 CLI 配置块存储服务卷加密”。
- 卷使用的后端。如需更多信息,请参阅 第 2.10 节 “指定创建卷的后端” 和 第 4.8 节 “使用 CLI 在后端间迁移卷”。
- 服务质量(QoS) Specs
设置使用名为 Extra Specs 的键值对与卷类型关联。当您在卷创建过程中指定卷类型时,块存储调度程序会将这些键值对应用为设置。您可以将多个键值对与同一卷类型关联。
卷类型提供为不同的用户提供存储层的功能。通过将特定性能、弹性和其他设置作为键值对与卷类型关联,您可以将特定于层的设置映射到不同的卷类型。然后,您可以通过指定对应的卷类型来在创建卷时应用层设置。
2.3.1. 列出后端驱动程序功能
可用的 Extra Specs 因后端驱动程序而异。有关有效 Extra Specs 列表,请参阅驱动程序文档。
或者,您可以直接查询块存储主机,以确定其驱动程序支持哪个定义良好的标准 Extra Spec。首先,通过命令行登录到托管块存储服务的节点。
先决条件
- 成功安装 undercloud。如需更多信息,请参阅 Director 安装和使用 中的 在 undercloud 上安装 director。
流程
# 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 properties 列显示您可以设置的 Extra Spec Keys 列表,而 Value 列则提供有关有效对应值的信息。
可用的 Extra Specs 因后端驱动程序而异。有关有效 Extra Specs 列表,请参阅驱动程序文档。
或者,您可以直接查询块存储主机,以确定其驱动程序支持哪个定义良好的标准 Extra Spec。首先,通过命令行登录到托管块存储服务的节点。然后:
# 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 properties 列显示您可以设置的 Extra Spec Keys 列表,而 Value 列则提供有关有效对应值的信息。
2.3.2. 创建并配置卷类型
创建卷类型,以便您可以将关联的设置应用到卷类型。
如果将 Block Storage 服务(cinder)配置为使用多个后端,则必须为每个后端创建一个卷类型。
卷类型提供为不同的用户提供存储层的功能。通过将特定性能、弹性和其他设置作为键值对与卷类型关联,您可以将特定于层的设置映射到不同的卷类型。然后,您可以通过指定对应的卷类型来在创建卷时应用层设置。
先决条件
- 成功安装 undercloud。如需更多信息,请参阅 Director 安装和使用 中的 在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅 Director 安装和使用中的使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Director 安装和使用中的 Overcloud 部署输出。
流程
- 在仪表板中作为 admin 用户,选择 Admin > Volumes > Volume Types。
- 单击 Create Volume Type。
- 在 Name 字段中输入卷类型名称。
- 单击 Create Volume Type。新类型会出现在 卷类型 表中。
- 选择卷类型的 View Extra Specs 操作。
-
点 Create 并指定 Key 和 Value。键值对必须有效;否则,在卷创建过程中指定卷类型将导致错误。例如,要为这个卷类型指定一个后端,请添加
volume_backend_name
Key,并将 Value 设置为所需后端的名称。 - 点 Create。相关的设置(键值对)现在会出现在 Extra Specs 表中。
默认情况下,所有卷类型都可被所有 OpenStack 项目访问。如果需要创建具有受限访问权限的卷类型,则需要通过 CLI 完成此操作。具体说明请查看 第 2.3.4 节 “创建并配置私有卷类型”。
您还可以将 QoS 规格与卷类型关联。更多信息请参阅 第 2.6.3 节 “将服务质量规格与卷类型关联”。
2.3.3. 编辑卷类型
编辑仪表板中的卷类型,以修改卷类型的 Extra Specs 配置。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出。
流程
- 在仪表板中作为 admin 用户,选择 Admin > Volumes > Volume Types。
- 在 卷类型 表中,选择卷类型的 View Extra Specs 操作。
在这个页面的 Extra Specs 表中,您可以:
- 在卷类型中添加新设置。要做到这一点,点 Create 并指定您要与卷类型关联的新设置的键/值对。
- 选择设置的 Edit 操作来编辑与卷类型关联的现有设置。
- 选中额外 specs' 复选框,然后点击 Delete Extra Specs 以及下一个对话框中,来删除与卷类型关联的现有设置。
要删除卷类型,请从卷类型表中选中其对应的复选框,然后点 Delete Volume Types 。
2.3.4. 创建并配置私有卷类型
默认情况下,所有卷类型都可用于所有项目。您可以通过将其标记为 私有 来创建受限卷类型。为此,请将 type 的 is-public
标志设置为 false。
私有卷类型可用于限制对具有特定属性的卷的访问。通常,这些设置应该只能被特定的项目使用;示例包括要测试的新后端或巨等性能配置。
先决条件
- 成功安装 undercloud。如需更多信息,请参阅 Director 安装和使用 中的 在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅 Director 安装和使用中的使用 CLI 工具创建基本 overcloud。
流程
$ cinder type-create --is-public false <TYPE-NAME>
默认情况下,私有卷类型只能被其创建者访问。但是,管理员用户可以使用以下命令查找并查看私有卷类型:
$ cinder type-list
此命令列出公共和私有卷类型,同时还包括每种卷的名称和 ID。您需要卷类型的 ID 来提供对其的访问。
在项目级别授予私有卷类型的访问权限。要授予项目对私有卷类型的访问权限,请运行:
$ cinder type-access-add --volume-type <TYPE-ID> --project-id <TENANT-ID>
要查看哪些项目有权访问私有卷类型,请运行:
$ cinder type-access-list --volume-type <TYPE-ID>
要从私有卷类型的访问列表中删除项目,请运行:
$ cinder type-access-remove --volume-type <TYPE-ID> --project-id <TENANT-ID>
默认情况下,只有具有管理特权的用户才能为私有卷类型创建、查看或配置访问权限。
2.4. 为块存储服务(cinder)创建并配置内部项目
有些块存储功能(例如,Image-Volume 缓存)需要配置 内部租户。块存储服务使用此租户/项目来管理不需要向普通用户公开的块存储项目。此类项目的示例是缓存用于频繁卷克隆或正在迁移的卷临时副本的镜像。
先决条件
- 成功安装 undercloud。如需更多信息,请参阅 Director 安装和使用 中的 在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅 Director 安装和使用中的使用 CLI 工具创建基本 overcloud。
流程
- 要配置内部项目,首先创建一个名为 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 | +----------+----------------------------------+
添加 Extra Config 选项的步骤会创建一个内部项目。更多信息请参阅 第 2.5 节 “配置 image-volume 缓存”。
2.5. 配置 image-volume 缓存
块存储服务具有一个可选的 Image-Volume 缓存,可在从镜像创建卷时使用。此缓存旨在提高从经常使用的镜像创建卷的速度。有关如何从镜像创建卷的详情,请参考 第 3.1 节 “创建块存储卷”。
启用后,Image-Volume 缓存会在从中创建卷时保存镜像的副本。此存储的镜像在本地缓存到块存储后端,以帮助提高镜像下次创建卷时的性能。Image-Volume 缓存的限制可以设置为大小(以 GB 为单位)、镜像数或两者。
Image-Volume 缓存被几个后端支持。如果您使用第三方后端,请参阅其文档来获取有关 Image-Volume 缓存支持的信息。
Image-Volume 缓存要求为块存储服务配置 内部租户。具体说明请查看 第 2.4 节 “为块存储服务(cinder)创建并配置内部项目”。
先决条件
- 成功安装 undercloud。如需更多信息,请参阅 Director 安装和使用 中的 在 undercloud 上安装 director。
流程
要在后端上启用和配置 Image-Volume 缓存(BACKEND),请将值添加到 undercloud 上的环境文件的 ExtraConfig
部分。例如:
parameter_defaults: ExtraConfig: cinder::config::cinder_config: DEFAULT/cinder_internal_tenant_project_id: value: TENANTID DEFAULT/cinder_internal_tenant_user_id: value: USERID BACKEND/image_volume_cache_enabled: 1 value: True BACKEND/image_volume_cache_max_size_gb: value: MAXSIZE 2 BACKEND/image_volume_cache_max_count: value: MAXNUMBER 3
块存储服务数据库使用时间戳来跟踪每个缓存的镜像最后一次用于创建镜像时。如果设置了 MAXSIZE 和 MAXNUMBER,则块存储服务将根据需要删除缓存的镜像,以便为新的镜像提供方法。每当满足 Image-Volume 缓存限制时,首先删除具有最旧的时间戳的缓存镜像。
在 /home/stack/templates/
中创建环境文件后,以 stack 用户身份登录,并通过运行以下命令部署配置:
$ openstack overcloud deploy --templates \ -e /home/stack/templates/<ENV_FILE>.yaml
其中 ENV_FILE.yaml
是之前添加的 ExtraConfig
设置的文件名。
如果您在创建 overcloud 时传递任何额外的环境文件,请使用 -e
选项再次传递它们,以避免对 overcloud 进行不必要的更改。
有关 openstack overcloud deploy
命令的更多信息,请参阅 Director 安装和使用中的部署命令 。
2.6. Block Storage 服务(cinder)服务质量
您可以将多个性能设置映射到单一服务质量规格(QOS Spec)。这样,您可以为不同的用户类型提供性能层。
性能设置作为键值对映射到 QOS Specs,类似于卷设置与卷类型关联的方式。但是,QOS 规格与以下条件中的卷类型不同:
QOS Specs 用于应用性能设置,其中包括限制对磁盘的读/写操作。可用的且支持的性能设置因存储驱动程序而异。
要确定后端支持哪个 QOS Spec,请参阅后端设备卷驱动程序的文档。
- 卷类型直接应用到卷,而 QOS Specs 没有。相反,QOS 规格与卷类型关联。在卷创建过程中,指定卷类型也会应用映射到卷类型关联的 QOS Spec 的性能设置。
您可以使用基本卷 QOS 值为每个卷定义性能限制。块存储服务支持以下选项:
-
read_iops_sec
-
write_iops_sec
-
total_iops_sec
-
read_bytes_sec
-
write_bytes_sec
-
total_bytes_sec
-
read_iops_sec_max
-
write_iops_sec_max
-
total_iops_sec_max
-
read_bytes_sec_max
-
write_bytes_sec_max
-
total_bytes_sec_max
-
size_iops_sec
2.6.1. 创建并配置服务质量规格
作为管理员,您可以通过 QOS Specs 表创建和配置 QOS Spec。您可以将多个键/值对关联到同一 QOS Spec。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出。
流程
- 在仪表板中作为 admin 用户,选择 Admin > Volumes > Volume Types。
- 在 QOS Specs 表中,点 Create QOS Spec。
- 输入 QOS Spec 的名称。
在 Consumer 字段中,指定 QOS 策略应强制执行的位置:
表 2.1. 消费者类型 类型 描述 back-end
QOS 策略将应用到 Block Storage 后端。
front-end
QOS 策略将应用到 Compute。
两者
QOS 策略将应用到 Block Storage 和 Compute。
- 点 Create。新的 QOS Spec 现在应该出现在 QOS Specs 表中。
- 在 QOS Specs 表中,选择新的 spec 的 Manage Specs 操作。
单击 Create,再指定 Key 和 Value。键值对必须有效;否则,在卷创建过程中指定与此 QOS Spec 关联的卷类型将失败。
例如,要将读取限制 IOPS 设置为
500
,请使用以下 Key/Value 对:read_iops_sec=500
- 点 Create。相关的设置(键值对)现在会出现在 Key-Value Pairs 表中。
2.6.2. 设置容量派生的服务质量限制
您可以使用卷类型在卷上实施容量派生的服务质量(QoS)限制。这将允许您根据置备的卷的大小设置确定的 IOPS 吞吐量。这样简化了如何向用户提供存储资源,并根据它们置备的卷大小为用户提供预先确定的(最终、高度可预测的)吞吐量率。
特别是,块存储服务允许您根据实际置备的大小设置分配给卷的 IOPS 量。通过以下 QoS 键,每 GB 根据 IOPS 设置这个吞吐量:
read_iops_sec_per_gb write_iops_sec_per_gb total_iops_sec_per_gb
这些密钥允许您设置读取、写入或总 IOPS,以使用置备的卷的大小进行扩展。例如,如果卷类型使用 read_iops_sec_per_gb=500
,则调配的 3GB 卷将自动具有读取 IOPS 为 1500。
容量派生的 QoS 限制为每个卷类型设置,并配置为任何正常的 QoS spec。另外,底层块存储服务直接支持这些限制,且不依赖于任何特定的驱动程序。
有关卷类型的详情,请参考 第 2.3 节 “使用卷类型的组卷配置” 和 第 2.3.2 节 “创建并配置卷类型”。有关如何设置 QoS 规格的说明 第 2.6 节 “Block Storage 服务(cinder)服务质量”。
当您应用一个卷类型(或重新输入卷),并将容量派生的 QoS 限制分配给附加的卷时,不会应用限制。只有在从实例分离卷后,才会应用这些限制。
有关卷重新处理的详情,请查看 第 4.5 节 “块存储卷重新处理”。
2.6.3. 将服务质量规格与卷类型关联
作为管理员,您可以使用卷类型表将 QOS Spec 与现有卷类型相关联。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出。
流程
- 在仪表板中以管理员身份,选择 Admin > Volumes > Volume Types。
- 在 卷类型 表中,选择类型的 Manage QOS Specsso 操作。
- 从要关联的 QOS Spec 列表中选择 QOS Spec。要从现有卷类型解除 QOS 规格关联,请选择 None。
- 点 关联。所选 QOS Spec 现在会出现在编辑卷类型的 关联 QOS Spec 列中。
2.7. Block Storage 服务(cinder)卷加密
卷加密有助于提供基本数据保护,以防卷后端被入侵,或阻止了正确的数据。计算和块存储服务都集成,以允许实例读取访问和使用加密卷。您必须部署 Barbican 以利用卷加密。
- 基于文件的卷(如 NFS)不支持卷加密。
- 卷加密只支持 LUKS1 而不是 LUKS2。
- 不支持将未加密的卷恢复到相同大小的加密卷,因为加密卷需要额外的空间来存储加密数据。有关加密未加密的卷的更多信息,请参阅 加密未加密的卷。
卷加密通过卷类型应用。有关加密卷类型的详情,请查看 第 2.7.2 节 “使用 CLI 配置块存储服务卷加密”。
2.7.1. 使用仪表板配置块存储服务卷加密
要创建加密的卷,首先需要 加密的卷类型。加密卷类型涉及设置它应使用的供应商类、密码和密钥大小。
先决条件
- 成功安装 undercloud。如需更多信息,请参阅 Installing director on the undercloud Director Installation and Usage。
- 成功部署 overcloud。如需更多信息,请参阅 Director 安装和使用中的使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出 Director 安装和使用。
流程
- 在仪表板中作为 admin 用户,选择 Admin > Volumes > Volume Types。
- 在要加密的卷的 Actions 列中,选择 Create Encryption 来启动 Create Volume Type Encryption 向导。
在这里,配置卷类型加密的 提供程序、控制位置、Cipher 和 Key Size 设置。Description 列描述了每个设置。
重要以下列表的值是 提供程序、Cipher 和 Key Size 唯一支持的选项。
-
为 Provider 输入
luks
。 -
为 Cipher 输入
aes-xts-plain64
。 -
为 Key Size 输入
256
。
-
为 Provider 输入
- 单击 Create Volume Type Encryption。
具有加密卷类型后,您可以调用它来自动创建加密的卷。有关创建卷类型的更多信息,请参阅 第 2.3.2 节 “创建并配置卷类型”。具体来说,从 Create Volume 窗口中的 Type 下拉列表中选择加密卷类型。
要通过 CLI 配置加密的卷类型,请参阅 第 2.7.2 节 “使用 CLI 配置块存储服务卷加密”。
您还可以重新配置加密卷类型的加密设置。
- 从卷类型的 Actions 列中选择 Update Encryption 来启动 Update Volume Type Encryption 向导。
- 在 Project > Compute > Volumes 中,检查 Volumes 表中的 Encrypted 列,以确定卷是否加密。
- 如果卷加密,点该列中的 Yes 来查看加密设置。
2.7.2. 使用 CLI 配置块存储服务卷加密
要创建加密的卷,首先需要 加密的卷类型。加密卷类型涉及设置它应使用的供应商类、密码和密钥大小。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
流程
创建卷类型:
$ cinder type-create encrypt-type
配置密码、密钥大小、控制位置和供应商设置:
$ cinder encryption-type-create --cipher aes-xts-plain64 --key-size 256 --control-location front-end encrypt-type luks
创建加密的卷:
$ cinder --debug create 1 --volume-type encrypt-type --name DemoEncVol
如需更多信息,请参阅使用 OpenStack Key Manager 管理机密 指南。
2.7.3. 自动删除卷镜像加密密钥
当块存储服务(glance)上传到镜像服务(glance)时,块存储服务(cinder)会在密钥管理服务(barbican)中创建一个加密密钥。这会在加密密钥和存储的镜像之间创建一个 1:1 个关系。
加密密钥删除可防止密钥管理服务无限度地消耗资源。Block Storage、Key Management 和 Image 服务会自动管理加密卷的密钥,包括删除密钥。
块存储服务会自动为卷镜像添加两个属性:
-
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_id
或 cinder_encryption_key_deletion_policy
属性。如果您使用 cinder_encryption_key_id
值标识的加密密钥用于任何其他目的,则可能会破坏数据丢失。
2.8. 为块存储卷后端部署可用区
可用域是特定于供应商的,对云实例和服务进行分组的方法。director 使用 CinderXXXAvailabilityZone
参数(其中 XXX
与特定后端关联)来为块存储卷后端配置不同的可用区。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
流程
在环境文件中添加以下参数以创建两个可用区:
parameter_defaults: CinderXXXAvailabilityZone: zone1 CinderYYYAvailabilityZone: zone2
将 XXX 和 YYY 替换为支持的后端值,例如:
CinderISCSIAvailabilityZone CinderNfsAvailabilityZone CinderRbdAvailabilityZone
注意为与后端关联的 heat 模板搜索
/usr/share/openstack-tripleo-heat-templates/deployment/cinder/
目录,以查看正确的后端值。以下示例部署两个后端,其中
rbd
是区域 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 时更改会被覆盖。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
流程
-
编辑环境文件,并将新条目添加到
parameter_defaults
部分。这样可确保容器更新条目,并在 director 使用openstack overcloud deploy
命令重新部署环境时保留。 使用
CinderApiPolicies
添加新部分到环境文件,以设置一致性组设置。带有 JSON 文件中的默认设置的等同的parameter_defaults
部分以以下方式显示: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’ }, \ }
当您在
/home/stack/templates/
中创建环境文件后,以 stack 用户身份登录并部署配置:$ openstack overcloud deploy --templates \ -e /home/stack/templates/<ENV_FILE>.yaml
将
<ENV_FILE.yaml
> 替换为您添加的ExtraConfig
设置。重要如果您在创建 overcloud 时传递任何额外的环境文件,请使用
-e
选项再次传递它们,以避免对 overcloud 进行不必要的更改。
有关 openstack overcloud deploy
命令的更多信息 ,请参阅 Director 安装和使用指南中的部署命令。
2.9.2. 使用仪表板创建块存储一致性组
启用一致性组 API 后,您可以开始创建一致性组。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出。
流程
- 在仪表板中作为 admin 用户,选择 Project > Compute > Volumes > Volume Consistency Groups。
- 点 Create Consistency Group。
- 在向导的 Consistency Group Information 选项卡中,为您的一致性组输入名称和描述。然后,指定其 可用区。
- 您还可以在一致性组中添加卷类型。当您在一致性组中创建卷时,块存储服务会应用来自这些卷类型的兼容设置。要添加卷类型,请点击所有可用卷类型列表中的 + 按钮。
- 点 Create Consistency Group。它会出现在 卷组表中。
2.9.3. 使用控制面板管理块存储服务一致性组
使用 Red Hat OpenStack Platform (RHOSP)控制面板管理块存储卷的一致性组。
先决条件
- 成功安装 undercloud。如需更多信息,请参阅 Director 安装和使用 中的 在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅 Director 安装和使用中的使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Director 安装和使用中的 Overcloud 部署输出。
流程
- 可选:您可以通过从 Action 列中选择 Edit Consistency Group 来更改一致性组的名称或描述。
- 要直接从一致性组中添加或删除卷,作为仪表板中的 admin 用户,请选择 Project > Compute > Volumes > Volume Consistency Groups。
查找您要配置的一致性组。在该一致性组的 Actions 列中,选择 Manage Volumes。这将启动 Add/Remove Consistency Group Volumes 向导。
- 要将卷添加到一致性组中,请点击 所有可用卷 列表中的 + 按钮。
- 要从一致性组中删除卷,请点击所选 卷 列表中的 - 按钮。
- 单击 Edit Consistency Group。
2.9.4. 为块存储服务创建和管理一致性组快照
将卷添加到一致性组后,您现在可以从其中创建快照。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
流程
在托管
openstack-cinder-api
的节点,使用命令行以admin
用户身份登录,并输入:# export OS_VOLUME_API_VERSION=2
这会将客户端配置为使用
openstack-cinder-api
的版本2
。列出所有可用一致性组及其对应的 ID:
# cinder consisgroup-list
使用一致性组创建快照:
# cinder cgsnapshot-create --name <CGSNAPNAME> --description "<DESCRIPTION>" <CGNAMEID>
替换:
-
<CGSNAPNAME
>,带有快照名称(可选)。 -
<DESCRIPTION
>,包含快照的描述(可选)。 -
<CGNAMEID>
带有一致性组的名称或 ID。
-
显示所有可用一致性组快照的列表:
# cinder cgsnapshot-list
2.9.5. 克隆块存储服务一致性组
您还可以使用一致性组同时创建一系列预先配置的卷。您可以通过克隆现有一致性组或恢复一致性组快照来完成此操作。两个进程都使用相同的命令。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
流程
克隆现有的一致性组:
# 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. 指定创建卷的后端
每当配置了多个 Block Storage (cinder)后端时,您还必须为每个后端创建一个卷类型。然后,您可以使用类型来指定要用于创建的卷的后端。有关卷类型的详情,请参考 第 2.3 节 “使用卷类型的组卷配置”。
要在创建卷时指定后端,请从 Type 列表中选择其对应的卷类型(请参阅 第 3.1 节 “创建块存储卷”)。
如果您没有在卷创建过程中指定后端,块存储服务会自动为您选择一个后端。默认情况下,服务选择具有最多可用空间的后端。您还可以配置块存储服务,以便在所有可用后端之间随机选择。更多信息请参阅 第 3.5 节 “将卷分配给多个后端”。
2.11. 在 overcloud 节点上启用 LVM2 过滤
如果您将 LVM2 (逻辑卷管理)卷用于某些块存储服务(cinder)后端,则在 Red Hat OpenStack Platform (RHOSP)客户机中创建的卷可能会在托管 cinder-volume
或 nova-compute
容器的 overcloud 节点上可见。在这种情况下,主机上的 LVM2 工具会扫描 OpenStack 客户机创建的 LVM2 卷,这可能会导致 Compute 或 Controller 节点上的以下一个或多个问题:
- LVM 似乎从客户机中看到卷组
- LVM 报告重复的卷组名称
- 卷分离失败,因为 LVM 正在访问存储
- 由于 LVM 存在问题,客户机无法引导
- 由于实际存在的磁盘,客户机机器上的 LVM 处于部分状态
- 在具有 LVM 的设备中,块存储服务(cinder)操作会失败
- Block Storage 服务(cinder)快照无法正确删除
-
实时迁移过程中的错误:
/etc/multipath.conf
不存在
要防止此错误扫描,以及与主机节点隔离客户机 LVM2 卷,您可以在部署或更新 overcloud 时使用 LVMFilterEnabled
heat 参数启用和配置过滤器。这个过滤器是从托管活跃 LVM2 卷的物理设备列表计算的。您还可以使用 LVMFilterAllowlist
和 LVMFilterDenylist
参数显式允许或拒绝块设备。您可以在全局范围内应用此过滤,或对特定节点角色或特定设备应用。
先决条件
- 成功安装 undercloud。如需更多信息 ,请参阅安装 undercloud。
流程
-
以
stack
用户身份登录 undercloud 主机。 查找 undercloud 凭证文件:
$ source ~/stackrc
创建新环境文件,或修改现有的环境文件。在本例中,创建一个新文件
lvm2-filtering.yaml
:$ touch ~/lvm2-filtering.yaml
在环境文件中包括以下参数:
parameter_defaults: LVMFilterEnabled: true
您可以进一步自定义 LVM2 过滤器的实现。例如,要仅在 Compute 节点上启用过滤,请使用以下配置:
parameter_defaults: ComputeParameters: LVMFilterEnabled: true
这些参数还支持正则表达式。要只在 Compute 节点上启用过滤,并忽略以
/dev/sd
开头的所有设备,请使用以下配置:parameter_defaults: ComputeParameters: LVMFilterEnabled: true LVMFilterDenylist: - /dev/sd.*
运行
openstack overcloud deploy
命令,并包含包含 LVM2 过滤配置的环境文件,以及与 overcloud 部署相关的任何其他环境文件:$ openstack overcloud deploy --templates \ <environment-files> \ -e lvm2-filtering.yaml
2.12. 多路径配置
使用多路径将服务器节点和存储阵列之间的多个 I/O 路径配置为单一设备,以创建冗余并提高性能。
2.12.1. 使用 director 配置多路径
您可以在 Red Hat OpenStack Platform (RHOSP) overcloud 部署中配置多路径,以便提高带宽和网络弹性。
当您在现有部署中配置多路径时,新工作负载会了解多路径。如果您有预先存在的工作负载,则必须 shelve 并取消移除实例,以便在这些实例上启用多路径。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
流程
-
以
stack
用户身份登录 undercloud 主机。 查找
stackrc
凭证文件:$ source ~/stackrc
使用覆盖环境文件或创建新文件,如
multipath_overrides.yaml
。添加和设置以下参数:parameter_defaults: ExtraConfig: cinder::config::cinder_config: backend_defaults/use_multipath_for_image_xfer: value: true
注意默认设置将生成适用于大多数环境的基本多路径配置。但是,检查您的存储厂商是否有建议,因为有些供应商已经优化了特定于其硬件的配置。有关多路径的详情,请参考 配置设备映射器多路径 指南。
可选:如果您有一个用于 overcloud 部署的多路径配置文件,请使用
MultipathdCustomConfigFile
参数指定此文件的位置:您必须将多路径配置文件复制到
/var/lib/mistral
目录中:$ sudo cp <config_file_name> /var/lib/mistral
将
<config_file_name
> 替换为您的文件的名称。将
MultipathdCustomConfigFile
参数设置为多路径配置文件的这个位置:parameter_defaults: MultipathdCustomConfigFile: /var/lib/mistral/<config_file_name>
注意其他 TripleO 多路径参数覆盖本地自定义配置文件中任何对应的值。例如,如果
MultipathdEnableUserFriendlyNames
为False
,则 overcloud 节点上的文件会更新为匹配,即使本地自定义文件中启用了该设置。有关多路径参数的更多信息,请参阅 多路径 heat 模板参数。
在
openstack overcloud deploy
命令中包含环境文件,以及与您的环境相关的任何其他环境文件:$ openstack overcloud deploy \ --templates \ … -e <existing_overcloud_environment_files> \ -e /usr/share/openstack-tripleo-heat-templates/environments/multipathd.yaml -e multipath_overrides.yaml \ …
2.12.1.1. 多路径 heat 模板参数
使用它来了解启用多路径的以下参数。
参数 | 描述 | 默认值 |
---|---|---|
|
定义是否启用多路径守护进程。这个参数通过 |
|
| 定义是否为每个路径分配用户友好名称。 |
|
| 定义是否为每个路径自动创建多路径设备。 |
|
| 定义是否跳过在该设备中自动创建分区。 |
|
|
在 overcloud 节点上包括本地的自定义多路径配置文件。默认情况下会安装最小
注意: 其他 TripleO 多路径参数会覆盖您添加的任何本地自定义配置文件中的任何对应值。例如,如果 |
2.12.2. 验证多路径配置
此流程描述了如何在新的或现有 overcloud 部署中验证多路径配置。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
流程
- 创建虚拟机。
- 将非加密的卷附加到虚拟机。
获取包含实例的 Compute 节点的名称:
$ nova show INSTANCE | grep OS-EXT-SRV-ATTR:host
将 INSTANCE 替换为您要引导的虚拟机的名称。
检索实例的 virsh 名称:
$ nova show INSTANCE | grep instance_name
将 INSTANCE 替换为您要引导的虚拟机的名称。
获取 Compute 节点的 IP 地址:
$ . stackrc $ nova list | grep compute_name
使用
nova show INSTANCE
命令的输出的名称替换 compute_name。SSH 到运行虚拟机的 Compute 节点:
$ ssh heat-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 中的 Compute 服务(nova)启动的实例提供持久性存储。
您可以为项目创建的默认最大卷数量为 10。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出。
流程
- 在控制面板中,选择 Project > Compute > Volumes。
点 创建卷,并编辑以下字段:
字段 描述 卷名称
卷的名称。
描述
可选,卷的简短描述。
类型
可选卷类型(请参阅 第 2.3 节 “使用卷类型的组卷配置”)。
如果您有多个块存储后端,您可以使用此选项选择特定的后端。请参阅 第 2.10 节 “指定创建卷的后端”。
大小(GB)
卷大小(以 GB 为单位)。如果要从未加密的镜像创建加密的卷,您必须确保卷大小大于镜像大小,以便加密数据不会截断卷数据。
可用性区域
可用域(逻辑服务器组)和主机聚合是整合 OpenStack 中资源的通用方法。可用区在安装过程中定义。有关可用区和主机聚合的更多信息,请参阅 为实例创建 指南中的 创建和管理主机聚合。
指定 卷源 :
源 描述 没有源,空卷
卷为空,不包含文件系统或分区表。
Snapshot
使用现有快照作为卷源。如果您选择这个选项,则会打开一个新的 Use snapshot 作为源列表; 您可以从列表中选择快照。如果要从加密卷快照创建新卷,您必须确保新卷至少大于旧卷。有关卷快照的详情,请参考 第 4.1 节 “创建、使用和删除卷快照”。
Image
使用现有镜像作为卷源。如果您选择这个选项,则会打开一个新的 Use snapshot 作为源列表; 您可以从列表中选择一个镜像。
卷
使用现有卷作为卷源。如果您选择这个选项,则会打开一个新的 Use snapshot 作为源列表; 您可以从列表中选择一个卷。
- 点创建卷。创建卷后,其名称会出现在 Volumes 表中。
您还可以稍后更改卷类型。更多信息请参阅 第 4.5 节 “块存储卷重新处理”。
3.2. 编辑卷名称或描述
在 Dashboard (horizon)中编辑卷名称和描述。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出。
流程
- 在控制面板中,选择 Project > Compute > Volumes。
- 选择卷的 编辑卷 按钮。
- 根据需要编辑卷名称或描述。
- 点 Edit Volume 保存您的更改。
要创建加密的卷,您必须首先为卷加密配置卷类型。此外,您必须配置计算和块存储服务,以使用相同的静态密钥。有关如何为卷加密设置要求的详情,请参考 第 2.7 节 “Block Storage 服务(cinder)卷加密”。
3.3. 重新定义块存储服务卷的大小(扩展)
重新定义卷大小以增加卷的存储容量。
支持调整使用中的卷大小,但依赖于驱动程序。RBD 支持。您不能扩展正在使用的多附加卷。有关此功能支持的更多信息,请联系红帽支持。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
流程
列出卷以检索您要扩展的卷 ID:
$ cinder list
要重新定义卷大小,请运行以下命令指定正确的 API 微版本,然后将卷 ID 和新大小(大于旧大小)作为参数传递:
$ OS_VOLUME_API_VERSION=<API microversion> $ cinder extend <volume ID> <size>
将 <API microversion>、<volume ID> 和 <size> 替换为适当的值。使用以下示例作为指南:
$ OS_VOLUME_API_VERSION=3.42 $ cinder extend 573e024d-5235-49ce-8332-be1576d323f8 10
3.4. 删除块存储服务卷
使用仪表板删除您不再需要的卷。
如果卷已有快照,则无法删除它。有关如何删除快照的步骤,请参考 第 4.1 节 “创建、使用和删除卷快照”。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出。
流程
- 在控制面板中,选择 Project > Compute > Volumes。
- 在 Volumes 表中,选择要删除的卷。
- 点删除卷。
3.5. 将卷分配给多个后端
如果块存储服务配置为使用多个后端,您可以使用配置的卷类型来指定应创建卷的位置。更多信息请参阅 第 2.10 节 “指定创建卷的后端”。
如果您在卷创建过程中没有指定后端,块存储服务将自动选择一个后端。块存储将第一个定义的后端设置为默认;将使用此后端直到空间不足为止。此时,块存储会将第二个后端设置为默认后端,以此类推。
如果这不适合您的需要,您可以使用过滤器调度程序来控制块存储应如何选择后端。此调度程序可以使用不同的过滤器来分离合适的后端,例如:
- AvailabilityZoneFilter
- 过滤掉所有不符合所请求卷的可用区要求的后端。
- CapacityFilter
- 仅选择具有足够空间的后端来容纳卷。
- CapabilitiesFilter
- 仅选择支持卷中任何指定设置的后端。
- InstanceLocality
- 配置集群以使用同一节点本地的卷。
先决条件
- 成功安装 undercloud。如需更多信息,请参阅 Director 安装和使用指南。
流程
在部署命令中添加包含以下参数的环境文件:
parameter_defaults: ControllerExtraConfig: # 1 cinder::config::cinder_config: DEFAULT/scheduler_default_filters: value: 'AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter,InstanceLocality'
- 1
- 您还可以将
ControllerExtraConfig:
hook 及其嵌套部分添加到现有环境文件的parameter_defaults:
部分。
3.6. 将卷附加到实例
实例可以将卷用于持久性存储。卷一次只能附加到一个实例。有关实例的更多信息,请参阅创建和管理镜像指南中的镜像服务。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出。
流程
- 在控制面板中,选择 Project > Compute > Volumes。
- 选择 EditLocator 操作。如果卷没有附加到实例,则可以看到 Attach To Instance 下拉列表。
- 从 Attach To Instance 列表中,选择您要将卷附加到的实例。
- 点 Attach Volume。
3.7. 从实例中分离卷
实例可以将卷用于持久性存储。卷一次只能附加到一个实例。有关实例的更多信息,请参阅创建和管理镜像指南中的镜像服务。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出。
流程
- 在控制面板中,选择 Project > Compute > Volumes。
- 选择卷的 ManageLocator 操作。如果卷附加到一个实例,则实例的名称会显示在面的 表中。
- 单击此中的 Detach Volume,以及下一个对话框屏幕。
3.8. 配置对卷的访问权限
卷的默认状态是读写的,允许从其写入数据并从中读取数据。您可以将卷标记为只读,以防止其数据被意外覆盖或删除。
将卷更改为只读后,您可以再次将其改回到读写。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
流程
- 如果卷已附加到一个实例,则分离这个卷。更多信息请参阅 第 3.7 节 “从实例中分离卷”。
为这个卷设置所需的访问权限:
将卷的访问权限设置为只读:
# cinder readonly-mode-update <VOLUME-ID> true
将卷的访问权限设置为读写:
# cinder readonly-mode-update <VOLUME-ID> false
- 如果您从实例分离这个卷以更改访问权限,则重新附加该卷。更多信息请参阅 第 3.6 节 “将卷附加到实例”。
3.9. 使用 CLI 更改卷所有者
要更改卷的所有者,您必须执行卷传输。卷的所有者由卷的所有者启动,在卷的新所有者接受转让后,对所有权的改变已完成。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
流程
- 以卷的当前所有者身份登录。
列出可用的卷:
# 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 TRANSFERID TRANSFERKEY
其中
TRANSFERID
和TRANSFERKEY
是cinder transfer-create
命令返回的id
和auth_key
值。例如,# cinder transfer-accept 3f5dc551-c675-4205-a13a-d30f88527490 f03bf51ce7ead189
您可以使用以下方法查看所有可用的卷传输:
# cinder transfer-list
3.10. 使用仪表板更改卷所有者
要更改卷的所有者,您必须执行卷传输。卷的所有者由卷的所有者启动,在卷的新所有者接受转让后,对所有权的改变已完成。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出。
流程
- 在仪表板中作为卷所有者,选择 Projects > Volumes。
- 在要传输的卷的 Actions 列中,选择 Create Transfer。
在 Create Transfer 对话框中,输入传输的名称,再点 创建卷传输。
卷传输已创建,在卷传输 屏幕中,您可以捕获要发送到接收者项目的
传输 ID
和授权密钥
。点 Download transfer credentials 按钮下载一个
.txt
文件,它包括了transfer name
,transfer ID
, 和authorization key
。注意授权密钥仅在 卷传输 屏幕中可用。如果丢失授权密钥,您必须取消转让并创建另一个传输来生成新的授权密钥。
关闭 卷传输 屏幕以返回到卷列表。
卷状态更改为
waiting-transfer
,直到接收者项目接受转让
从仪表板接受卷传输
- 在仪表板中作为接收者项目所有者,选择 Projects > Volumes。
- 点 Accept Transfer。
在 Accept Volume Transfer 对话框中,输入
传输 ID
和您从卷所有者收到的授权密钥,然后单击 Accept Volume Transfer。卷现在会出现在活跃项目的卷列表中。
第 4 章 使用块存储服务(cinder)执行高级操作
块存储卷为您的 overcloud 中的 Compute 实例形成持久性存储。配置卷的高级功能,例如使用卷快照、迁移卷、重新设置卷和配置多路径。
4.1. 创建、使用和删除卷快照
您可以通过创建卷快照来保留卷的状态。然后,您可以使用快照克隆新卷。
卷备份与快照不同。备份保留卷中包含的数据,而快照则保留在特定时间点上保留卷的状态。如果卷已有快照,则无法删除它。卷备份可防止数据丢失,而快照有助于克隆。
因此,快照后端通常与卷后端在一起,以最小化克隆期间的延迟。相反,备份存储库通常位于不同的位置,例如位于典型的企业部署中的不同节点、物理存储甚至地理位置。这是为了防止备份存储库免受卷后端可能出现的任何损坏。
有关卷备份的更多信息,请参阅 块存储备份指南。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出。
流程
- 在控制面板中,选择 Project > Compute > Volumes。
- 选择目标卷的 Create Snapshot 操作。
- 为 快照 提供快照名称,然后单击 Create a Volume Snapshot。Volume Snapshots 选项卡显示所有快照。
当快照出现在 Volume Snapshots 表中时,您可以从快照中克隆它。为此,请选择快照的 创建卷 操作。有关卷创建的更多信息,请参阅 第 3.1 节 “创建块存储卷”。
如果要从加密卷快照创建新卷,请确保新卷至少大于旧卷。
要删除快照,请选择其 Delete Volume Snapshot 操作。
如果您的 OpenStack 部署使用 Red Hat Ceph 后端,请参阅 第 4.10 节 “在 Red Hat Ceph Storage 后端中保护和未保护的快照” 以了解有关快照安全性和故障排除的更多信息。
对于从快照创建的块存储服务(cinder)的 RADOS 块设备(RBD)卷,您可以使用 CinderRbdFlattenVolumeFromSnapshot
heat 参数扁平化并删除对快照的依赖项。当您将 CinderRbdFlattenVolumeFromSnapshot
设置为 true
时,块存储服务扁平化 RBD 卷并删除对快照的依赖项,并扁平化所有将来的快照。默认值为 false,这也是 cinder RBD 驱动程序的默认值。
请注意,扁平化快照会删除任何潜在的块共享,并在后端上产生更大的快照大小,并增加快照创建的时间。
4.2. 从快照恢复卷
您可以恢复卷的最新快照。这意味着,您可以对卷数据进行原位升级到其最新的快照。
支持恢复卷的最新快照,但依赖于驱动程序。此功能的正确实现是驱动程序辅助。有关对这个功能的支持的更多信息,请联系您的驱动程序供应商。
限制
- 在多附加卷中使用 restore-to-snapshot 功能可能会有限制。在使用此功能前,请检查是否适用这些限制。
- 在进行快照后,您无法恢复大小(扩展)的卷。
- 您不能在附加或正在使用的卷中使用 restore-to-snapshot 功能。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出。
- Block Storage (cinder) API 微版本 3.40 或更高版本。
- 您必须已为卷创建一个快照。
流程
-
以
stack
用户身份登录 undercloud。 获取
overcloudrc
文件:[stack@undercloud ~] $ source overcloudrc
分离卷:
$ 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> 替换为快照的名称或快照的名称。
可选: 您可以使用
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)作为可引导的根卷,则无法在该卷中使用 restore-to-snapshot 功能,因为它没有处于 available 状态。要使用这个功能,必须使用 delete_on_termination=false
(默认)属性引导实例,以便在实例终止时保留引导卷。当您要恢复到快照时,您必须首先删除初始实例,以便该卷可用。然后您可以恢复它并从卷创建新实例。
4.3. 将卷上传到镜像服务(glance)
您可以将现有卷作为镜像直接上传到镜像服务。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出。
流程
- 在控制面板中,选择 Project > Compute > Volumes。
- 选择目标卷的 Upload to Image 操作。
- 为卷提供镜像名称,然后从列表中选择 磁盘格式。
- 点 Upload。
要查看上传的镜像,请选择 Project > Compute > Images。新镜像会出现在 Images 表中。有关如何使用和配置镜像的详情,请参考 创建和管理镜像 指南中的 镜像服务。
4.4. 在后端间移动卷
将卷从一个存储后端移动到另一个存储后端的原因有很多,例如:
- 重新停用不再被支持的存储系统。
- 更改卷的存储类或层。
- 更改卷的可用区。
使用块存储服务(cinder),您可以使用以下方法在后端间移动卷:
- retype :默认策略允许卷所有者和管理员重新输入卷。retype 操作是在后端之间移动卷的最常见方法。
- migrate :默认策略只允许管理员迁移卷。卷迁移是为特定用例保留的,因为它有限制性,需要明确了解部署的工作原理。更多信息请参阅 第 4.8 节 “使用 CLI 在后端间迁移卷”。
限制
红帽支持在可用区(AZ)内和跨后端间移动卷,但有以下限制:
- 卷必须具有 available 或 in-use 状态才能移动。
- 对正在使用的卷的支持依赖于驱动程序。
- 卷不能有快照。
- 卷不能属于组或一致性组。
4.4.1. 移动可用卷
您可以在所有后端之间移动可用卷,但性能取决于您使用的后端。许多后端支持辅助迁移。有关辅助迁移的后端支持的更多信息,请联系供应商。
辅助迁移可与卷重新类型和卷迁移一起工作。通过辅助迁移,后端可优化数据从源后端迁移到目标后端的移动,但两个后端都必须来自同一供应商。
红帽支持只支持后端支持的迁移,或者当您将 cinder migrate 操作用于单池后端(如 RBD)时。
当无法在后端间进行辅助迁移时,块存储服务会执行通用卷迁移。
通用卷迁移需要在 Block Storage (cinder)服务将数据从源卷移到 Controller 节点之前连接两个后端上的卷,并从 Controller 节点移到目标卷。块存储服务无论源和目标后端的存储类型如何,都会无缝执行该过程。
在执行通用卷迁移前,请确保您有足够的带宽。通用卷迁移的持续时间直接与卷的大小成比例,从而使操作比辅助迁移慢。
4.4.2. 移动使用的卷
没有优化或辅助选项来移动使用的卷。当您移动使用的卷时,计算服务(nova)必须使用虚拟机监控程序将源后端中的卷传输到目标后端中的一个卷。这要求与运行卷正在使用的实例的虚拟机监控程序协调。
块存储服务(cinder)和计算服务协同工作,以执行此操作。Compute 服务管理大多数工作,因为数据通过 Compute 节点从一个卷复制到另一个卷。
在移动使用卷前,请确保您有足够的带宽。此操作的持续时间直接与卷的大小成比例,从而使操作比辅助迁移慢。
限制
- 当它们附加到多个 nova 实例时,无法使用的多附加卷无法移动。
- 不支持非块设备,这会将目标后端上的存储协议限制为 iSCSI、光纤通道(FC)和 RBD。
4.5. 块存储卷重新处理
卷恢复是将卷从一个后端移动到另一个后端的标准方法。此操作要求管理员为不同的后端定义适当的卷类型。默认策略允许卷所有者和管理员重新键入卷。
当您重新输入卷时,您可以将卷类型及其设置应用到已存在的卷中。有关卷类型的详情,请参考 第 2.3 节 “使用卷类型的组卷配置”。
您可以重新输入卷,只要新卷类型的额外规格可以应用到现有卷。您可以重新键入卷以将预定义的设置或存储属性应用到现有卷,例如:
- 将卷移动到不同的后端。
- 更改卷的存储类或层。
- 启用或禁用复制等功能。
重新设置卷不一定意味着您必须将卷从一个后端移动到另一个后端。然而,在有些情况下,您必须移动卷来完成重新类型:
-
新卷类型定义了不同的
volume_backend_name
。 -
当前卷类型的
volume_backend_name
是未定义的,卷存储在与新卷类型的volume_backend_name
指定的不同后端。
将卷从一个后端移动到另一个后端可能需要大量时间和资源。因此,当重新类型需要移动数据时,块存储服务不会默认移动数据。除非在重新类型请求中指定迁移策略,否则操作会失败。更多信息请参阅 第 4.5.2 节 “从命令行调整卷”。
限制
- 您无法重新键入所有卷。有关在后端间移动卷的详情,请参考 第 4.4 节 “在后端间移动卷”。
- 未加密的卷无法重新输入成加密的卷类型,但可以将加密的卷重新输入为未加密的卷。
- 不支持将未加密的卷恢复到相同大小的加密卷,因为加密卷需要额外的空间来存储加密数据。有关加密未加密的卷的更多信息,请参阅 加密未加密的卷。
- 没有管理特权的用户只能重新键入他们拥有的卷。
4.5.1. 从仪表板 UI 调整卷
使用仪表板 UI 重新键入卷。
不支持将未加密的卷恢复到相同大小的加密卷,因为加密卷需要额外的空间来存储加密数据。有关加密未加密的卷的更多信息,请参阅 加密未加密的卷。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出。
流程
- 在控制面板中,选择 Project > Compute > Volumes。
- 在您要迁移的卷的 Actions 列中,选择 Change Volume Type。
- 在 Change Volume Type 对话框中,选择目标卷类型,然后从 Type 列表中选择新的后端。
- 如果您要将卷迁移到另一个后端,请从 Migration Policy 列表中选择 On Demand。更多信息请参阅 第 4.4 节 “在后端间移动卷”。
- 点 Change Volume Type 启动迁移。
4.5.2. 从命令行调整卷
与仪表板 UI 过程类似,您可以从命令行重新输入卷。
不支持将未加密的卷恢复到相同大小的加密卷,因为加密卷需要额外的空间来存储加密数据。有关加密未加密的卷的更多信息,请参阅 加密未加密的卷。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
流程
输入以下命令重新输入卷:
$ 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.6. 将卷附加到多个实例
卷多附加为多个实例提供对块存储卷的读写访问。支持 Ceph RBD 驱动程序。
您必须使用多附件或集群感知文件系统来管理来自多个实例的写入操作。如果不这样做会导致数据崩溃。
多附加卷的限制
- Block Storage (cinder)后端必须支持多附加卷。有关支持的后端的信息,请联系红帽支持。
您的块存储(cinder)驱动程序必须支持多附加卷。联系红帽支持以验证您的供应商插件是否支持多附件。有关您的供应商插件认证的更多信息,请参阅以下位置:
- 不支持只读多附加卷。
- 多附加卷的实时迁移不可用。
- 不支持对多附加卷的加密。
- Bare Metal Provisioning 服务(ironic) virt 驱动程序不支持多附加卷。仅 libvirt virt 驱动程序支持多附加卷。
- 您不能将附加卷从 multi-attach 类型重新输入为非多附加类型,您无法将非多附件类型重新输入为 multi-attach 类型。
- 您不能在附加卷迁移过程中使用多个读写附加作为源或目标卷的多附加卷。
- 您不能将多附加卷附加到 shelved 卸载实例。
4.6.1. 创建 multi-attach 卷类型
要将卷附加到多个实例,请在卷额外规格中将 multiattach
标志设置为 & lt;is> True
。当您创建多附件卷类型时,卷会继承标志并成为多附加卷。
默认情况下,创建新卷类型是一个仅管理员操作。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
流程
运行以下命令来创建 multi-attach 卷类型:
$ cinder type-create multiattach $ cinder type-key multiattach set multiattach="<is> True"
注意此流程在任何支持多附加的后端上创建卷。因此,如果有两个支持 multiattach 的后端,调度程序会根据创建时的可用空间决定使用哪个后端。
运行以下命令以指定后端:
$ cinder type-key multiattach set volume_backend_name=<backend_name>
4.6.2. 多附加卷重新附加
您可以重新键入卷,使其能够多附加功能,或者重新键入多附加功能的卷,使其能够附加到多个实例。但是,您只能在不使用卷并且其状态为 可用时
重新键入卷。
当您附加多附加卷时,一些虚拟机监控程序需要特殊考虑,比如当您禁用缓存时。目前,无法安全地更新附加的卷,同时保留整个卷。如果您试图重新输入附加到多个实例的卷,则重新设置失败。
4.6.3. 创建多附加卷
创建 multi-attach 卷类型后,创建一个 multi-attach 卷。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
流程
运行以下命令来创建 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),您可以在可用区(AZ)内部和外部迁移卷。这是将卷从一个后端移动到另一个后端的最常见方法。默认策略只允许管理员迁移卷。不要更改默认策略。
在高度自定义部署中,或者您必须停用存储系统,管理员可以迁移卷。在这两种情况下,多个存储系统共享相同的 volume_backend_name
,或者未定义。
限制
- 卷无法复制。
- 目标后端必须与卷的当前后端不同。
现有卷类型对于新后端必须有效,这意味着必须满足以下条件:
-
卷类型不能在其额外规格中定义
backend_volume_name
,或者两个块存储后端都必须使用相同的backend_volume_name
配置。 - 两个后端都必须支持卷类型中配置的相同功能,如支持精简配置、支持密集置备或其他功能配置。
-
卷类型不能在其额外规格中定义
将卷从一个后端移动到另一个后端可能需要大量时间和资源。更多信息请参阅 第 4.4 节 “在后端间移动卷”。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 访问 Red Hat OpenStack Platform (RHOSP) Dashboard (horizon)。有关更多信息,请参阅 Overcloud 部署输出。
流程
- 在控制面板中,选择 Admin > Volumes。
- 在您要迁移的卷的 Actions 列中,选择 Migrate Volume。
在 Migrate Volume 对话框中,从 Destination Host 下拉列表中选择目标主机。
注意要绕过主机迁移的任何驱动程序优化,请选择 Force Host Copy 复选框。
- 点 Migrate 启动迁移。
4.8. 使用 CLI 在后端间迁移卷
使用块存储服务(cinder),您可以在可用区(AZ)内部和外部迁移卷。这是将卷从一个后端移动到另一个后端的最常见方法。默认策略只允许管理员迁移卷。不要更改默认策略。
在高度自定义部署中,或者您必须停用存储系统,管理员可以迁移卷。在这两种情况下,多个存储系统共享相同的 volume_backend_name
,或者未定义。
限制
- 卷无法复制。
- 目标后端必须与卷的当前后端不同。
现有卷类型对于新后端必须有效,这意味着必须满足以下条件:
-
卷类型不能在其额外规格中定义
backend_volume_name
,或者两个块存储后端都必须使用相同的backend_volume_name
配置。 - 两个后端都必须支持卷类型中配置的相同功能,如支持精简配置、支持密集置备或其他功能配置。
-
卷类型不能在其额外规格中定义
将卷从一个后端移动到另一个后端可能需要大量时间和资源。更多信息请参阅 第 4.4 节 “在后端间移动卷”。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
流程
输入以下命令来检索目标后端的名称:
$ 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-1
和localdomain@lvmdriver-2#lvmdriver-1
。请注意,两个后端共享相同的volume_backend_name
,lvmdriver-1
。输入以下命令将卷从一个后端迁移到另一个后端:
$ cinder migrate <volume id or name> <new host>
4.9. 加密未加密的卷
要加密未加密的卷,您必须备份未加密的卷,然后将其恢复到新的加密卷,或者从未加密的卷中创建一个 glance 镜像,然后从镜像创建一个新的加密卷。
先决条件
- 要加密的未加密的卷。
流程
如果
cinder-backup
服务可用,备份当前的未加密的卷: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
服务不可用,请使用 upload-to-image
命令来创建未加密的卷的镜像,然后从镜像创建一个新的加密卷。
创建未加密的卷的 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.10. 在 Red Hat Ceph Storage 后端中保护和未保护的快照
当您使用 Red Hat Ceph Storage(RHCS)作为 Red Hat OpenStack Platform(RHOSP)部署的后端时,您可以在后端中将快照设置为 protected。不要通过 RHOSP dashboard 或 cinder snapshot-delete
命令删除受保护的快照,因为删除失败。
发生这种情况时,首先在 RHCS 后端中将快照设置为 unprotected。然后,您可以正常地通过 RHOSP 删除快照。
其他资源
- 有关保护快照的更多信息,请参阅 保护块设备快照 和保护块设备快照。
第 5 章 配置 Object Storage 服务 (swift)
Red Hat OpenStack Platform Object Storage (swift)将其对象存储在容器中。容器与文件系统中的目录类似,尽管它们无法嵌套。容器为用户提供了一种简单的方式来存储任何类型的数据。例如,对象可以包含取消部署、文本文件或镜像。存储的对象没有压缩。
5.1. 对象存储环
Object Storage 服务(swift)使用名为环的数据结构来在集群中分发分区空间。此分区空间是对象存储服务中数据持久性引擎的核心。使用环时,对象存储服务可以快速轻松地在集群中同步每个分区。
环环包含有关对象存储分区的信息,以及分区如何在不同的节点和磁盘间分布。当任何对象存储组件与数据交互时,会在环中本地执行快速查找,以确定每个对象的可能分区。
Object Storage 服务有三个环来存储以下数据类型:
- 帐户信息
- 容器,便于在帐户下组织对象
- 对象副本
5.1.1. 检查集群健康状况
对象存储服务在后台运行许多进程,以确保长期数据可用性、持久性和持久性。例如:
- 审核员持续重新读取数据库和对象文件,并使用校验和进行比较,以确保没有恶意位。任何不再与其校验和匹配的数据库或对象文件都会被量化,且在该节点上变得不可读取。然后,副本器复制其中一个其他副本,以便本地副本再次可用。
- 当您替换磁盘或节点或节点时,对象和文件可能会消失。发生这种情况时,副本器会将缺少的对象或数据库文件复制到另一个节点。
Object Storage 服务包括一个名为 swift-recon
的工具,用于从所有节点收集数据并检查整个集群运行状况。
流程
- 登录到其中一个 Controller 节点。
运行以下命令:
[root@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 pendings :如果集群负载太大,且进程无法快速更新数据库文件,则一些更新会异步进行。这些数字随着时间的推移会减少。
- 复制指标:检查复制时间戳;完整复制传递经常发生,并显示几个错误。例如,一个旧条目(例如,自 6 个月前的时间戳的条目)表示节点上的复制还没有在最后的 6 个月内完成。
- 环形 md5sums :这样可确保所有环文件在所有节点上都一致。
-
Swift.conf
md5sums :这样可确保所有配置文件在所有节点上都一致。 - Quarantined 文件:所有节点必须无或非常少。
- Time-sync :所有节点都必须同步。
5.1.2. 增加环分区电源
环电决定资源(如帐户、容器或对象)被映射到的分区。该分区包含在资源存储在后端文件系统中的路径中。因此,更改分区电源需要在后端文件系统中将资源重新定位到新路径。
在大量填充的集群中,重新定位过程会耗时。为避免停机,在集群仍然运行时重新定位资源。您必须在不暂时丢失对数据的访问或影响进程性能(如复制和审核)的情况下执行此操作。如需增加环级分区功能的帮助,请联系红帽支持。
5.1.3. 自定义环
随着存储容量的增长和需求,创建自定义环是更新现有对象存储集群的方法。
当您向集群添加新节点时,它们的特征可能与原始节点的不同。如果没有自定义调整,可能会消耗新节点的更大的容量。或者,如果环的权重发生变化,数据分布可能会变得不均匀,从而降低安全性。
自动化可能不会与未来技术趋势保持同步。例如,一些旧的 Object Storage 集群现在源自在 SSD 可用之前使用。
环形构建器有助于在集群增长和技术时管理对象存储。有关创建自定义环的帮助,请联系红帽支持。
5.2. 自定义对象存储服务
根据 Red Hat OpenStack Platform (RHOSP)环境的要求,您可能想要自定义 Object Storage 服务(swift)的一些默认设置来优化部署性能。
5.2.1. 配置 fast-post
默认情况下,Object Storage 服务会在其元数据的任何部分更改时复制对象整个。您可以使用 fast-post 功能来防止这种情况。当您更改多个大型对象的内容类型时,fast-post 功能会节省时间。
要启用 fast-post 功能,请在 Object Storage 代理服务中禁用 object_post_as_copy
选项。
流程
Edit
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. 启用静态加密
默认情况下,上传到 Object Storage 服务(swift)的对象是未加密的。因此,可以直接从文件系统访问对象。如果磁盘在丢弃前没有正确清除磁盘,则可能会造成安全风险。
您可以使用 OpenStack Key Manager (barbican)来加密 at-rest swift 对象。如需更多信息,请参阅 加密 at-rest swift 对象。
5.2.3. 部署独立对象存储集群
您可以使用可组合角色概念,使用最少的其他服务(如 Keystone、HAProxy)部署独立 Object Storage 服务(swift)集群。创建 roles_data
文件 部分包含角色的相关信息。
流程
-
复制
/usr/share/openstack-tripleo-heat-templates
中的roles_data.yaml
。 - 编辑新文件。
- 删除不需要的控制器角色,如 Aodh047、Chcter、Ceph、Ceph、Cinder、Glance、Heat、Ironic、Manila、Mistral 过程、Nova114、Octct、Octavia、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 磁盘的环境中的性能问题。
因此,红帽强烈建议您为对象存储使用额外的本地磁盘来满足性能和磁盘空间要求。如需更多信息,请参阅 Deployment Recommendations for Specific Red Hat OpenStack Platform Services 中的 Configuration recommendations for the Telemetry service 部分。
将外部 SAN 用于对象存储需要基于每个情况进行评估。如需更多信息,请联系红帽支持团队。
如果您选择将外部 SAN 用于对象存储,请注意以下条件:
- 默认情况下,Object Storage 服务存储遥测数据和镜像服务(glance)镜像。Glance 镜像需要更多磁盘空间,但从性能角度来说,存储 glance 镜像的影响比存储遥测数据的影响要小。存储和处理遥测数据需要提高性能。红帽不支持将外部 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.3. 添加新对象存储节点
要在集群中添加新的 Object Storage (swift)节点,您必须增加节点数、更新环并同步更改。以下示例流程将三个节点增加到四个节点。
流程
以
stack
用户身份登录 undercloud 节点,并提供stackrc
凭证文件:$ source ~/stackrc
使用
ObjectStorageCount
参数将 Object Storage 数增加到 1。此参数通常位于node-info.yaml
文件中,这是包含节点数的环境文件:parameter_defaults: ObjectStorageCount: 4
将新节点的 IP 地址添加到
node-info.yaml
文件中的ObjectStorageIPs
参数中:ObjectStorageIPs: <ip_address>
创建一个环境文件,如
hostname-map.yaml
,并将新存储节点的主机名添加,如overcloud-objectstorage-4
到HostnameMap
参数中:parameter_defaults: HostnameMap: overcloud-objectstorage-4: overcloud-objectstorage-4
将新节点的硬件和电源管理信息添加到节点定义模板。节点定义模板是手动创建的文件,用于在初始 overcloud 配置期间注册 overcloud 节点。例如,模板可以是:
/home/stack/nodes.json
。以下示例使用 JSON 格式,但如果模板是 YAML 文件,但根据 YAML 格式和属性添加信息。有关节点定义模板的更多信息,请参阅 Director 安装和使用指南中的 为 overcloud 注册节点。"ports":[ "bb:bb:bb:bb:bb:bb" ], "name":"node01", "cpu":"4", "memory":"6144", "disk":"40", "arch":"x86_64", "pm_type":"pxe_ipmitool", "pm_user":"admin", "pm_password":"p@55w0rd!", "pm_addr":"192.168.24.205"
将新节点的功能信息添加到节点定义模板中:
"capabilities": "profile:swift-storage,boot_option:local,boot_mode:uefi,node:objectstorage-4",
将节点导入到 overcloud,并在节点上执行内省:
$ openstack overcloud node import ~/nodes.yaml $ openstack overcloud node introspect objectstorage-4 --provide
在新节点中添加根磁盘序列号:
$ openstack baremetal introspection data save objectstorage-4 | jq ".inventory.disks" $ openstack baremetal node set --property root_device='{"serial": "<disk_serial_num>"}' <node_UUID>
根据您的新节点替换 <
disk_serial_num
> 和 <node_UUID
>。在部署命令中包括您创建的文件,其中包含与您的环境相关的任何其他环境文件:
$ openstack overcloud deploy \ --templates \ … -e <existing_overcloud_environment_files> \ -e node-info.yaml \ -e hostname-map.yaml \
5.3.1. 更新和重新平衡对象存储环
Object Storage 服务(swift)在 undercloud 上存储环文件副本,以部署新的存储节点并替换现有的 Controller 和 Object Storage 节点。使用此副本修改 overcloud 环文件,并将它们分发到节点之间。
流程
以
stack
用户身份登录 undercloud,再提供stackrc
凭证文件:$ source ~/stackrc
创建以下目录:
$ mkdir temp && cd temp/
将 overcloud 环构建器文件下载到新目录中:
$ openstack object save overcloud-swift-rings swift-rings.tar.gz
提取环:
$ tar xzvf swift-rings.tar.gz
创建一个目录来备份环的原始版本:
$ mkdir backup && cp swift-rings.tar.gz backup/
对象存储环文件位于
etc/swift
文件夹中。根据您的设备详情收集以下变量的值:
<device_name>
:$ openstack baremetal introspection data save <node_name> | jq ".inventory.disks"
<node_ip>
:openstack server show <node_name>
-
<port
> 默认端口为600x
。如果更改了默认值,请使用适用的端口。 -
<builder_file
> 第 3 步中的构建器文件名。 -
<weight
> 和 <zone
> 变量是用户定义的。
使用
swift-ring-builder
将新节点添加到现有环。根据设备详情替换变量。$ swift-ring-builder etc/swift/<builder_file> add <zone>-<node_ip>:<port>/<device_name> <weight>
将修改后的环文件上传到 undercloud 上的对象存储服务:
$ tar cvzf swift-rings.tar.gz etc/ $ openstack object create overcloud-swift-rings swift-rings.tar.gz
5.3.2. 同步节点更改和迁移数据
在将新环文件复制到其正确文件夹后,您必须将更改的环文件复制到 Object Storage (swift)容器。
- 重要的
- 不要同时迁移所有数据。以 10% 递增迁移数据。例如,将源设备的权重配置为等于 90.0,目标设备配置为等于 10.0。然后,将源设备的权重配置为等于 80.0 和 20.0。继续逐步迁移数据,直到您完成这个过程。在迁移过程中,如果您同时移动所有数据,旧的数据位于源设备上,但环指向所有副本的新目标设备。在副本将所有数据移到目标设备之前,数据无法访问。
- 重要的
在迁移过程中,Object Storage 环重新分配数据的位置,然后副本器将数据移到新位置。当集群活动增加时,复制的过程会因为负载增加而减慢。集群越大,复制通过更长的时间才能完成。这是预期的行为,但如果客户端访问当前重新定位的数据,则可能会导致日志文件中出现 404 错误。当代理尝试从新位置检索数据时,但数据还没有位于新位置,
swift-proxy
会在日志文件中报告 404 错误。当迁移逐渐时,代理会访问没有移动的副本,且不会发生错误。当代理尝试从备用副本检索数据时,日志文件中的 404 错误会解析。要确认复制过程正在进行,请参阅复制日志。Object Storage 服务每 5 分钟发布复制日志。
流程
使用类似以下示例的脚本,将 undercloud 节点中的环文件分发到指定的 Controller 节点,并重启这些节点上的对象存储服务容器:
cd etc/swift/ for j in 8 11 23; do ssh heat-admin@192.168.24."$j" "rm *.ring.gz" for i in account.ring.gz container.ring.gz object.ring.gz; do scp $i heat-admin@192.168.24."$j":~/ ssh heat-admin@192.168.24."$j" "sudo cp -f "$i" /var/lib/config-data/puppet-generated/swift/etc/swift/" ssh heat-admin@192.168.24."$j" "sudo chown root:root /var/lib/config-data/puppet-generated/swift/etc/swift/"$i"" ssh heat-admin@192.168.24."$j" "sudo restorecon /var/lib/config-data/puppet-generated/swift/etc/swift/"$i"" done ssh heat-admin@192.168.24."$j" "rm *.builder" for i in account.builder container.builder object.builder; do scp $i heat-admin@192.168.24."$j":~/ ssh heat-admin@192.168.24."$j" "cat "$i" | sudo tee /var/lib/config-data/puppet-generated/swift/etc/swift/"$i" >/dev/null" done ssh heat-admin@192.168.24."$j" 'for k in `sudo podman ps --format "{{.Names}}" | grep swift`; do sudo podman restart $k; done' done cd ../../
要确认数据正在移至新磁盘,请在新存储节点上运行以下命令:
$ sudo grep -i replication /var/log/container/swift/swift.log
5.4. 删除 Object Storage 节点
删除 Object Storage (swift)节点的方法有两种。根据集群的复杂性或其包含的数据数量,选择以下选项之一:
- 简单移除:此方法在一个操作中移除节点,并适合具有较小数据数量的有效集群。请参阅在一个操作中删除对象存储节点。
- 增量删除:粘贴您要删除的节点上的磁盘权重的环。如果要最大程度降低对存储网络使用量的影响,或者集群包含更大的数据数量,则此方法是合适的。请参阅 Altering rings 以逐步删除对象存储节点。
5.4.1. 在一个操作中删除对象存储节点
使用此方法,删除具有少量数据的有效集群中节点。以下示例流程将四个节点减少到三个节点。
流程
以
stack
用户身份登录 undercloud,再提供stackrc
凭证文件:$ source ~/stackrc
使用
ObjectStorageCount
参数将 Object Storage 数减少为 1。此参数通常位于node-info.yaml
中,这是包含节点数的环境文件:parameter_defaults: ObjectStorageCount: 3
删除您从
node-info.yaml
文件中的ObjectStorageIPs
参数中删除的节点的 IP 地址:ObjectStorageIPs: <ip_address>
创建一个环境文件,如
remove-object-node.yaml
。此文件标识并删除您指定的 Object Storage 节点。以下示例内容指定overcloud-objectstorage-1
的移除:parameter_defaults: ObjectStorageRemovalPolicies: [{'resource_list': ['1']}]
在部署命令中包含
node-info.yaml
和remove-object-node.yaml
文件:$ openstack overcloud deploy \ --templates \ … -e <existing_overcloud_environment_files> \ -e node-info.yaml \ -e remove-object-node.yaml \ …
director 从 overcloud 中删除 Object Storage 节点,并更新 overcloud 中的其他节点来使删除生效。
列出活跃节点以验证您删除了正确的节点:
$ openstack server list
在 undercloud 节点上,删除
remove-object-node.yaml
文件,使其不包含在将来的重新部署中:$ rm <file_path>/remove-object-node.yaml
5.4.2. 更改环以逐步删除对象存储节点
如果您需要在删除节点时最小化对存储网络的影响,或者集群包含大量数据,则使用此方法。要更改存储环,以减少您要删除的节点上的磁盘的权重,首先完成先决条件中列出的步骤。以下示例将节点从四个减少到三个。
先决条件
- 更新和重新平衡对象存储环。请参阅更新和重新平衡对象存储环。
- Object Storage 环中的更改会被同步。请参阅 同步更改并迁移数据。
流程
以
stack
用户身份登录 undercloud,再提供stackrc
凭证文件:$ source ~/stackrc
使用
ObjectStorageCount
参数将 Object Storage 数减少为 1。此参数通常位于node-info.yaml
中,这是包含节点数的环境文件:parameter_defaults: ObjectStorageCount: 3
删除您从
node-info.yaml
文件中的ObjectStorageIPs
参数中删除的节点的 IP 地址:ObjectStorageIPs: <ip_address>
创建一个环境文件,如
remove-object-node.yaml
。此文件标识并删除您指定的 Object Storage 节点。以下示例内容指定overcloud-objectstorage-1
的移除:parameter_defaults: ObjectStorageRemovalPolicies: [{'resource_list': ['1']}]
在部署命令中包含
node-info.yaml
和remove-object-node.yaml
文件:$ openstack overcloud deploy \ --templates \ … -e <existing_overcloud_environment_files> \ -e node-info.yaml \ -e remove-object-node.yaml \ …
director 从 overcloud 中删除 Object Storage 节点,并更新 overcloud 中的其他节点来使删除生效。
列出活跃节点以验证您删除了正确的节点:
$ openstack server list
在 undercloud 节点上,删除
remove-object-node.yaml
文件,使其不包含在将来的重新部署中:$ rm <file_path>/remove-object-node.yaml
5.5. 替换 Object Storage 节点
参考本节中的说明,了解如何在不影响集群完整性的情况下替换 Object Storage 节点。此示例涉及您要替换 overcloud-objectstorage-1
节点的三节点 Object Storage 集群。此操作过程的目标是添加一个节点,然后删除 overcloud-objectstorage-1
节点。新节点替换 overcloud-objectstorage-1
节点。
步骤
通过
ObjectStorageCount
参数增加 Object Storage 数量。此参数通常位于node-info.yaml
中,这是包含节点数的环境文件:parameter_defaults: ObjectStorageCount: 4
ObjectStorageCount
参数定义环境中 Object Storage 节点的数量。在本例中,将 Object Storage 节点的数量从3
扩展到4
。使用更新的
ObjectStorageCount
参数,运行部署命令:$ source ~/stackrc (undercloud) $ openstack overcloud deploy --templates -e node-info.yaml <environment_files>
部署命令完成后,overcloud 将包含新增的 Object Storage 节点。
将数据复制到新节点。在删除节点(本例中为
overcloud-objectstorage-1
)前,先等待新节点上完成复制传递。在/var/log/swift/swift.log
文件中检查复制传递进度。当传递完成时,Object Storage 服务应该会记录类似于以下示例的日志条目: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*
若要从环中删除旧节点,可减小
ObjectStorageCount
参数来省略旧节点。在本例中,将ObjectStorageCount
参数减小到3
:parameter_defaults: ObjectStorageCount: 3
创建一个新环境文件,命名为
remove-object-node.yaml
。此文件将确认并移除指定的 Object Storage 节点。以下内容指定了overcloud-objectstorage-1
的移除:parameter_defaults: ObjectStorageRemovalPolicies: [{'resource_list': ['1']}]
在部署命令中包含
node-info.yaml
和remove-object-node.yaml
文件:(undercloud) $ openstack overcloud deploy --templates -e node-info.yaml <environment_files> -e remove-object-node.yaml
director 从 overcloud 中删除 Object Storage 节点,并更新 overcloud 中的其他节点来使删除生效。
请包含初始 overcloud 创建中的所有环境文件和选项。这包括非 Compute 节点的相同缩放参数。
5.6. Object Storage 服务中的基本容器管理
为了帮助使用对象存储服务(swift)中的机构,您可以使用伪文件夹。这些文件夹是可包含对象和嵌套的逻辑设备。例如,您可以创建一个 Images 文件夹来存储图片和一个 Media 文件夹,在其中存储视频。
您可以在每个项目中创建一个或多个容器,以及每个容器中的一个或多个对象或伪文件夹。
5.6.1. 在对象存储服务中创建容器
使用控制面板创建容器。
流程
- 在控制面板中,选择 Project > Object Store > Containers。
- 点 Create Container。
指定 Container Name,并在 Container Access 字段中选择以下之一。
类型 描述 private
限制对当前项目中的用户的访问权限。
公开
允许使用公共 URL 对任何人的 API 访问。但是,在仪表板中,项目用户无法查看其他项目中的公共容器和数据。
- 点 Create Container。
可选:新容器使用默认存储策略。如果您定义了多个存储策略,例如,默认策略和另一个策略启用纠删代码,您可以将容器配置为使用非默认存储策略:
# swift post -H "X-Storage-Policy:<policy>" <container_name>
将 &
lt;policy
> 替换为您要使用容器的策略的名称或别名,并将 <container_name
> 替换为容器的名称。
5.6.2. 在对象存储服务中为容器创建伪文件夹
使用控制面板为容器创建一个伪文件夹。
流程
- 在控制面板中,选择 Project > Object Store > Containers。
- 单击您要添加伪文件夹的容器名称。
- 单击 Create Pseudo-folder。
- 在 Pseudo-folder Name 字段中指定名称,然后单击 Create。
5.6.3. 删除对象存储服务中的容器
使用控制面板删除容器。
流程
- 在控制面板中,选择 Project > Object Store > Containers。
- 在 Containers 部分中浏览容器,并确保删除所有对象。如需更多信息,请参阅 删除对象。
- 在容器箭头菜单中选择 Delete Container。
- 点 Delete Container 确认容器被删除。
5.6.4. 上传对象到对象存储服务
如果您没有上传实际的文件,则对象仍然作为占位符创建,您可以稍后使用它来上传该文件。
流程
- 在控制面板中,选择 Project > Object Store > Containers。
- 单击您要放置上传对象的容器的名称。如果容器中已存在伪文件夹,您可以点击其名称。
- 浏览您的文件,然后单击 Upload Object。
在 Object Name 字段中指定名称:
- 您可以使用 / 字符在名称中指定伪文件夹,例如 Images/myImage.jpg。如果指定的文件夹尚不存在,则会在上传对象时创建它。
- 对位置不是唯一的名称(即对象已存在)会覆盖对象的内容。
- 单击 Upload Object。
5.6.5. 在对象存储服务中复制对象
使用控制面板复制对象。
流程
- 在控制面板中,选择 Project > Object Store > Containers。
- 单击对象容器或文件夹的名称(以显示对象)。
- 单击 Upload Object。
- 浏览要复制的文件,然后在箭头菜单中选择 Copy。
指定以下内容:
字段 描述 目标容器
新对象的目标容器。
路径
目标容器中的伪文件夹;如果文件夹尚不存在,则创建它。
目标对象名称
新对象的名称。如果您使用对位置没有唯一的名称(即对象已存在),它会覆盖对象之前的内容。
- 单击 Copy Object。
5.6.6. 从对象存储服务中删除对象
使用控制面板删除对象。
流程
- 在控制面板中,选择 Project > Object Store > Containers。
- 浏览对象,然后在其箭头菜单中选择 Delete Object。
- 单击 Delete Object 以确认对象已被删除。