第 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 构建器有助于管理对象存储。如需创建自定义环的帮助,请联系红帽支持。