第 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 文件中定义纠删代码策略,并创建,配置关联的对象环。有关如何设置纠删代码策略示例,如下所示:
下表描述了存储策略中的术语:
术语 | 描述 |
---|---|
名称 | 这是一个标准存储策略参数。 |
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
swift-ring-builder object-1.builder create 10 3 1
其中 3 是副本数量。
要创建纠删代码对象环,您需要使用片段数量来代替副本数,例如:
swift-ring-builder object-1.builder create 10 14 1
swift-ring-builder object-1.builder create 10 14 1
其中 14 对于 10 个数据片段和 4 个奇偶校验片段的 10+4 配置。
在决定在纠删代码策略的对象环中使用的设备时,请考虑性能影响。我们建议您在部署前在配置的测试环境中运行一些性能基准。在 swift.conf 中配置了纠删代码策略并创建对象 ring 后,通过创建具有指定策略名称的容器并照常交互,应用就可以开始使用纠删代码。
3.1.2. 将 Object Storage 设置为镜像服务的后端 复制链接链接已复制到粘贴板!
默认情况下,OpenStack 镜像服务将镜像和实例快照保存到 /var/lib/glance/images/
中的本地文件系统。或者,您可以将镜像服务配置为将镜像和快照保存到对象存储服务(可用时)。
要做到这一点,请执行以下步骤:
以 root 身份登录运行镜像服务(控制器节点也运行身份)的节点,再提供 OpenStack 凭据(通常是一个名为
openrc
的文件)。source ~/openrc
# source ~/openrc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证镜像服务是租户服务的一部分,其具有
admin
角色。keystone user-role-list --user glance --tenant service
# keystone user-role-list --user glance --tenant service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 返回的其中一个角色应当是
admin
。打开
/etc/glance/glance.conf
文件并注释掉以下行:##### DEFAULT OPTIONS ##### #default_store = file #filesystem_store_datadir = /var/lib/glance/images/
##### DEFAULT OPTIONS ##### #default_store = file #filesystem_store_datadir = /var/lib/glance/images/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在同一文件中,将以下行添加到
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
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 Copied! Toggle word wrap Toggle overflow 其中:
-
KEYSTONEIP
是 Identity 服务的 IP 地址,以及 -
ADMINPW
是/etc/glance/glance-api.conf
文件中的 admin password 属性的值。
-
通过重启镜像服务来应用更改:
systemctl restart openstack-glance-api systemctl restart openstack-glance-registry
# systemctl restart openstack-glance-api # systemctl restart openstack-glance-registry
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
从此时,上传到镜像服务(无论是通过控制面板还是 glance
的镜像)现在都应保存到名为 glance
的对象存储容器中。此容器存在于服务帐户中。
要验证新创建的镜像是否已保存到镜像服务中,请运行:
ls /var/lib/glance/images
# ls /var/lib/glance/images
当 Dashboard 或 glance 镜像列表
报告镜像处于活跃状态后,您可以通过运行以下命令来验证它是否在对象存储中:
swift --os-auth-url http://KEYSTONEIP:5000/v2.0 --os-tenant-name service --os-username glance --os-password ADMINPW list glance
# swift --os-auth-url http://KEYSTONEIP:5000/v2.0 --os-tenant-name service --os-username glance --os-password ADMINPW list glance