第 3 章 对象存储服务


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

3.1. 对象存储环

对象存储使用名为 Ring 的数据结构来跨集群分布分区空间。这个分区空间是对象存储服务中的数据持久性引擎的核心。它允许对象存储服务快速轻松地在集群间同步每个分区。

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

对象存储服务有三个环来存储不同类型的数据:一个用于帐户信息,另一个用于容器(有助于组织帐户下的对象),另一个用于对象副本。

3.1.1. 重新平衡环

当您通过添加或删除存储容量、节点或磁盘来更改对象存储环境时,您必须重新平衡环。您可以运行 openstack overcloud deploy 来重新平衡环,但此方法重新部署整个 overcloud。这很繁琐,特别是当您有大型 overcloud 时。或者,在 undercloud 上运行以下命令以重新平衡环:

source ~/stackrc
ansible-playbook -i /usr/bin/tripleo-ansible-inventory
/usr/share/openstack-tripleo-common/playbooks/swift_ring_rebalance.yaml

3.1.2. 检查集群健康状况

对象存储服务在后台运行多个进程,以确保长期数据可用性、持久性和持久性。例如:

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

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

要使用 swift-recon,请登录其中一个控制器节点并运行以下命令:

[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 选项返回其他输出。

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

  • async pendings :如果集群负载过高,且进程无法快速更新数据库文件,一些更新会异步进行。这些数字应该会随时间减少。
  • 复制指标 :注意复制时间戳;应经常出现完整复制通过,应该会有一些错误。旧条目(例如,带有 6 个月前的时间戳的条目)表示节点上的复制还没有在最后的六个月内完成。
  • Ring md5sums:这样可确保所有环文件在所有节点上都一致。
  • swift.conf md5sums:这样可确保所有环文件在所有节点上都一致。
  • Quarantined 文件:对于所有节点,应该没有(或很少)四倍的文件。
  • time-sync :所有节点必须同步。

3.1.3. 增加环分区电源

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

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

3.1.4. 创建自定义环

随着技术进步和存储容量的增加,创建自定义环是更新现有 Object Storage 集群的方法。

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

自动化可能无法与未来的技术趋势保持同步。例如,现在使用的一些较旧的 Object Storage 集群以前源自在 SSD 可用之前。

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.