第 3 章 Object Storage 和容器


OpenStack Object Storage (openstack-swift)将其对象(数据)存储在容器中,这与文件系统中的目录类似,尽管它们无法嵌套。容器为用户提供了一种简单的方式,供用户存储任何种类的非结构化数据;例如,对象可能包括 photos、文本文件或镜像。存储的对象既不加密或压缩。

3.1. 对象存储服务管理

以下流程解释了如何进一步自定义对象存储服务以满足您的需要。

3.1.1. 对象存储服务的纠删代码

纠删代码(EC)是一种数据保护方法,其中数据分割为片段,使用冗余数据片段扩展并编码,并存储在一组不同的位置或存储介质中。它使用较小的存储卷来实现所需的持久性,而不是传统的复制。与 3 的复制因素相比,可以谨慎部署实现 50% 的节省。但是,根据工作负载,纠删代码可能会降低性能损失。

随着 Red Hat OpenStack Platform 8 的发布,纠删代码支持作为对象存储服务的一个技术预览提供。有关技术预览功能的支持范围的更多信息,请参阅 https://access.redhat.com/support/offerings/techpreview/

纠删代码支持对象存储服务作为存储策略。Storage Policy 允许通过创建多个对象环来分段集群以实现各种目的。红帽建议分离由纠删代码和复制存储策略使用的设备。通过这种方式,集群的行为更容易分析。

您选择的方向取决于您部署纠删代码策略的原因。以下是一些主要注意事项:

  • 现有基础架构布局。
  • 添加专用纠删代码节点(或只是专用纠删代码设备)的成本。
  • 预期的使用模型。

3.1.1.1. 配置 Erasure Coding

要使用纠删代码策略,请在 swift.conf 文件中定义纠删代码策略,并创建,配置关联的对象环。有关如何设置纠删代码策略示例,如下所示:

[storage-policy:2]
name = ec104
policy_type = erasure_coding
ec_type = jerasure_rs_vand
ec_num_data_fragments = 10
ec_num_parity_fragments = 4
ec_object_segment_size = 1048576
Copy to Clipboard Toggle word wrap

下表描述了存储策略中的术语:

Expand
术语描述

名称

这是一个标准存储策略参数。

policy_type

把它设置为 erasure_coding 以表示这是一个纠删代码策略。

ec_type

根据所选 PyECLib 后端中的可用选项设置这个值。这将指定要使用的纠删代码方案。例如,这里显示的选项选择 Vandermonde Reed-Solomon 编码,而 flat_xor_hd_3 选项则选择基于 Flat-XOR 的 HD 组合代码。详情请查看 PyECLib 页面。

ec_num_data_fragments

将由数据组成的片段总数。

ec_num_parity_fragments

由奇偶校验组成的片段总数。

ec_object_segment_size

在将片段放入编码器/解码器前缓冲的数据量。默认值为 1048576。

当 PyECLib 对对象进行编码时,它会将它分成 N 片段。在配置期间,务必要知道这些片段有多少数据,以及多少奇偶校验。因此,在上面的示例中,PyECLib 将破坏 14 个不同片段中的对象,其中 10 个由实际对象数据组成,其中 4 个将由奇偶校验数据(根据 ec_type 计算)组成。通过这种配置,系统可在数据丢失前保持 4 个磁盘故障。其他常用的配置有 4+2 (4 个数据片段和 2 个部分片段)或 8+3 (具有 8 个数据片段和 3 个奇偶校验片段)。

注意

请注意,在部署了策略并使用该策略创建了对象后,这些配置选项无法更改。如果需要更改配置,您必须创建新策略并将数据迁移到新容器。但是,一旦定义,策略索引将无法被丢弃。如果要停用策略,则可能会禁用它们,但不会删除它们。实质上,存在旧策略的性能损失,但管理成本较小。

3.1.1.2. 配置对象存储 Ring

对象存储使用名为 Ring 的数据结构,在集群中分发分区空间。此分区空间是对象存储服务复制系统的核心。它允许对象存储服务快速轻松地同步集群中的每个分区。当 Swift 中的任何组件需要与数据交互时,会在 Ring 本地进行快速查找,以确定每个副本可能的分区。

对象存储服务已有三个环,用于存储不同类型的数据。还有一种用于帐户信息,另一个用于容器(因此,在帐户下组织对象)以及另一个用于对象副本的对象。为了支持纠删代码,将创建一个额外的环来存储纠删代码区块。

要创建典型的复制环,例如,您可以使用以下命令:

swift-ring-builder object-1.builder create 10 3 1
Copy to Clipboard Toggle word wrap

其中 3 是副本数量。

要创建纠删代码对象环,您需要使用片段数量来代替副本数,例如:

swift-ring-builder object-1.builder create 10 14 1
Copy to Clipboard Toggle word wrap

其中 14 对于 10 个数据片段和 4 个奇偶校验片段的 10+4 配置。

在决定在纠删代码策略的对象环中使用的设备时,请考虑性能影响。我们建议您在部署前在配置的测试环境中运行一些性能基准。在 swift.conf 中配置了纠删代码策略并创建对象 ring 后,通过创建具有指定策略名称的容器并照常交互,应用就可以开始使用纠删代码。

3.1.2. 将 Object Storage 设置为镜像服务的后端

默认情况下,OpenStack 镜像服务将镜像和实例快照保存到 /var/lib/glance/images/ 中的本地文件系统。或者,您可以将镜像服务配置为将镜像和快照保存到对象存储服务(可用时)。

要做到这一点,请执行以下步骤:

  1. 以 root 身份登录运行镜像服务(控制器节点也运行身份)的节点,再提供 OpenStack 凭据(通常是一个名为 openrc的文件)。

    # source ~/openrc
    Copy to Clipboard Toggle word wrap
  2. 验证镜像服务是租户服务的一部分,其具有 admin 角色。

    # keystone user-role-list --user glance --tenant service
    Copy to Clipboard Toggle word wrap

    返回的其中一个角色应当是 admin

  3. 打开 /etc/glance/glance.conf 文件并注释掉以下行:

    ##### DEFAULT OPTIONS #####
    #default_store = file
    #filesystem_store_datadir = /var/lib/glance/images/
    Copy to Clipboard Toggle word wrap
  4. 在同一文件中,将以下行添加到 DEFAULT OPTIONS 部分:

    default_store = swift
    swift_store_auth_address = http://KEYSTONEIP:35357/v2.0/
    swift_store_user = service:glance
    swift_store_key = ADMINPW
    swift_store_create_container_on_put = True
    Copy to Clipboard Toggle word wrap

    其中:

    • KEYSTONEIP 是 Identity 服务的 IP 地址,以及
    • ADMINPW/etc/glance/glance-api.conf 文件中的 admin password 属性的值。
  5. 通过重启镜像服务来应用更改:

    # systemctl restart openstack-glance-api
    # systemctl restart openstack-glance-registry
    Copy to Clipboard Toggle word wrap

从此时,上传到镜像服务(无论是通过控制面板还是 glance的镜像)现在都应保存到名为 glance 的对象存储容器中。此容器存在于服务帐户中。

要验证新创建的镜像是否已保存到镜像服务中,请运行:

# ls /var/lib/glance/images
Copy to Clipboard Toggle word wrap

当 Dashboard 或 glance 镜像列表 报告镜像处于活跃状态后,您可以通过运行以下命令来验证它是否在对象存储中:

# swift --os-auth-url http://KEYSTONEIP:5000/v2.0 --os-tenant-name service --os-username glance --os-password ADMINPW list glance
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat