金鱼哥RHCA回忆录:CL210管理存储--对象存储

举报
金鱼哥 发表于 2022/07/25 12:56:11 2022/07/25
【摘要】 第五章 管理存储--对象存储

🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家,阿里云社区·专家博主
📚个人资质:CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥

🎈支持我:可点赞👍、可收藏⭐️、可留言📝


📜OPENSTACK对象存储体系结构

OpenStack对象存储服务体系结构有一个前端服务,即代理服务器swift_proxy,它充当到OpenStack对象存储的其他组件的网关。代理服务器维护对象存储API。其他后端服务包括帐户服务器(swift_account server)、容器服务器(swift_container_server)、对象服务器(swift_object_server)用于在对象存储系统中执行实际的存储操作。还有额外的计划内务管理过程,以确保适当的数据复制、更新和错误纠正。

在这里插入图片描述

图5.3:OpenStack对象存储架构

当用户调用对象存储服务APl时,代理服务器要求用户使用身份验证令牌来判断其访问对象存储的权利。身份服务生成令牌,并将其与对象存储服务端点(URL)一起返回,以供用户访问。用户使用令牌向对象存储服务标识自己。身份验证成功后,代理服务器与每个帐户、容器和对象服务器通信,以确定列出/创建对象容器(容器)或对象的适当物理位置。帐户、容器和对象服务器使用它们对应的环来向代理服务器提供所需的信息。代理服务器执行最后的操作,并将操作的状态返回给最终用户。


📜比较CEPH和SWIFT的对象存储

Swift和Ceph都是开源的对象存储系统。它们都使用标准硬件,允许向外扩展存储,并且易于在各种规模的企业中部署。

也许这就是两者的共同点。Ceph适用于块访问存储、事务性存储,推荐用于单站点。Swift使用对象APl访问存储,推荐用于非结构化数据和地理分布。通常使用块访问存储的应用程序与使用对象访问存储的应用程序构建方式不同。决定可以归结为哪些应用程序需要对象存储以及它们如何访问它。

Swift首先保护写入数据,因此需要额外的时间来更新整个集群。Ceph没有做到这一点,这使得它更适合数据库和实时数据,而Swift对于大规模的、地理上分散的、非结构化数据来说是更好的选择。这意味着你可能需要或者想要Ceph和Swift。这一决定将取决于应用程序的类型、数据中心的地理结构、需要存储的对象的类型、复制的数据的一致性、事务性性能需求以及要存储的对象的数量。

OpenStack对象存储(Swift)和Red Hat Ceph存储在架构上有很多不同之处,这使得它们都适合不同的需求。下表概述了其中的一些差异。

Swift和Ceph对象存储的比较

区别 OPENSTACK对象存储 红帽CEPH存储
访问方法 仅有REST API REST API (RADOSGW), Cephfs,RBD围绕着Ceph本机 API(librados)
一致性模型 最终 全部
可用的存储格式 仅有对象存储 文件存储、块存储和对象存储
速度和延迟 通过代理服务器的流量会导致更多的开销,从而导致更高的延迟。 将流量直接发送到存储节点可以提高传输速度和降低延迟。

重要的是要理解,没有一个存储解决方案,无论是OpenStack对象存储还是Red Hat Ceph存储,可以互相替换。它们每个都有其适用的用例。Red Hat Ceph存储更适合处理更多事务性数据的单站点环境,而OpenStack对象存储在处理大量数据的大型环境中工作得很好


📜扩展阅读文章

https://www.redhat.com/zh/topics/data-storage/file-block-object-storage

https://blog.csdn.net/sinat_27186785/article/details/52032431


📜最终的一致性是一种优势

最终的一致性是在相当短的时间内在集群中维护相同版本的对象的能力。将其与强一致性或完全一致性进行比较,强一致性指的是同时跨集群维护对象的相同版本的能力。没有存储解决方案可以满足基础设施的所有需求。非结构化数据,如照片、视频、文本文件、文档文件等,internet正在经历着沉重的增长,要求存储系统能够确保数据具有高持久性、可用性和可管理性,且具有成本效益。成本效益基于成本/GB和管理数据的工作量等因素。根据Eric Brewer的CAP(一致性、可用性和分区容忍度)定理,您可以同时在数据一致性、可用性和分区容忍度中实现其中的两个。OpenStack对象存储及时地以一致性换取可用性和分区容忍度的组合。


📜环

在理解环之前,理解OpenStack对象存储系统中数据的层次结构是至关重要的。OpenStack对象存储系统在帐户、容器和对象的层次结构安排中容纳数据。下面描述了帐户、容器和对象层次结构级别。

  • Account是容器和对象的整个层次结构的起点。它可以与Red Hat OpenStack平台环境中的项目或租户进行比较。它根据用户标识的帐户对特定用户具有访问权限的一组容器进行分组。多个容器可能以相同的名称存在于不同的帐户中。

  • 容器存储和隔离对象。访问控制列表在容器级别强制执行,而不是在对象级别强制执行。存储策略也应用于容器。最终用户能够创建或删除容器。没有访问控制列表的容器不会强制任何安全限制。

  • 对象的元数据存储实际数据内容。最终用户可以上传多达5GB的数据。在不同容器中具有相同名称的对象可能表示不同的数据。

下面的示例描述了帐户、容器和对象层次结构。OpenStack对象存储APl以特殊格式表示资源路径,如下所示。

在这里插入图片描述

如果将一个名为object1的对象上传到654321帐户内的container1容器,则得到的对象的HTTPS URL将为https://myobjectserver.example.com:8080/v1/654321/container1/object1。您需要使用相同的URL与对象存储API交互。请注意,如果对象名称包含斜杠字符(/),比如category1/object1,那么对象存储将创建另一个层次结构级别,名称为category1。相反,它将使您能够创建一个伪文件夹来进一步隔离对象。在本例中,生成的HTTPS URL将为https://myobjectserver.example.com:8080/v1/654321/container1/category1/object1。

对象的分层路径在其上执行MD5哈希,生成的哈希存储在哈希表中。散列表包含在分区中。下面讨论关于分区的详细信息。

OpenStack对象存储系统使用ring数据库来计算集群中应该存储特定数据的物理位置。环使用元素(如区域、区域、设备、分区和副本)之间的关系来维护记录。区域是OpenStack对象存储实现的地理隔离。每个区域都有一个单独的服务器端点。一个区域可以代表一组设备、服务器,甚至是整个数据中心。使用一组可能独立的故障域来声明区域是很重要的,这样在发生故障时对象存储系统中的数据就可以保存下来。设备是一个存储单元,它具有后端文件系统,通常挂载在/srv/node目录下。分区是对象存储服务操作以确保数据完整性和持久性的最小单元。所有帐户、容器和对象数据都被放置到分区中。然后在集群中分布和复制这些分区。

在使用swift-ring-builder构建帐户、容器和对象环时,您需要指定分区容量、副本和分区重新分配的最小时间间隔(以小时为单位)。2的分区幂(2^分区幂)给出了分区的数量(分区数)。分区能力是从MD5哈希中保留的位数派生出来的对象的路径。Red Hat建议对分区计数使用一个乐观值,以确保有效的数据分布和更好的可伸缩性。例如,如果在集群中单个区域和区域中有两个设备的一个环境中分区数为64,那么每个设备将得到32个分区。如果环境获得两个额外的设备,那么每个设备将获得16个分区,因为分区的数目保持不变。副本决定集群中分区的副本数量。OpenStack对象存储系统的默认副本数是3,这意味着集群中将有一个对象的3个副本。因此,Red Hat建议集群中至少有三个设备,以便有效地分发。min_part_hours(等待重新分配分区的最小小时数)使集群在分区移动时锁定对象的其他副本。在向集群添加新设备或替换集群中的故障设备等情况下会发生这种情况。min part_hours选项允许在移动分区时对象保持最新版本的可用性。这就是OpenStack对象存储系统提供数据持久性、容错性和最终一致性的方式。

环形数据结构的字段中有如下数组:

  • 设备,表示设备id、设备名称、区域、区域、设备的重量、存储服务器的IP地址、存储服务器侦听的端口以及其他元数据。

  • 设备id列出表示分区到设备的分配。


📜好处、用例和推荐的实践

📑比较对象存储和块存储

块存储和对象存储之间的一个主要区别是,一个卷只能通过实例访问,并且一次只能通过一个实例访问,而任何实例或服务都可以访问存储在容器中的对象,因为Swift中存储的所有对象都有一个可访问的URL。Swift还支持Amazon简单存储服务(S3) API。


📑使用Swift的好处

与卷存储相比,对象存储有几个明显的优势。如前所述,可以从任何OpenStack服务访问它,它支持Amazon S3 API,并且是完全分布式的。

降低成本也是对象存储的一个优势,你只需要为你使用的存储量付费;也就是说,如果你上传了5GB,那么你只需要为5GB付费。使用卷存储,您需要为所创建的磁盘的大小付费。如果您创建了一个50 GB的卷,您将为所有50 GB的卷付费,无论是否全部使用。但是,请注意,如果您在多个数据中心使用Swift,那么成本可能会急剧上升,因为您需要在internet上移动大量数据。

Swift最适合用于大的小对象池。它易于扩展,而卷则不能。


📑用例

一所主要大学使用Swift存储所有男性和女性体育赛事的视频。全年的所有事件都存储在一个无处不在且易于访问的存储解决方案中。学生、校友和体育迷可以使用任何互联网浏览器访问学校的网站,并点击链接观看他们想观看的体育赛事。


📑推荐实践:磁盘故障

今天是周五晚上,一个驱动器出现故障。Swift通过向交接节点写入副本来启动一个自动的、自愈的解决方案。到了星期一,你就得更换坏掉的驱动器,格式,然后挂载它。当然,驱动器是空的。Swift自动开始复制该区域内的数据。在这种情况下,您甚至不必对环做任何事情,因为物理驱动器被替换了;区域不会改变,所以没有必要再平衡环。

注意:如果你要改变物理驱动器的大小,那么你就必须重新平衡环。


📜移除和再平衡区域

在生产之前,理解存储系统背后的概念、理解策略、仔细设计和计划是很重要的。

创建区域是为了确保不会出现故障。每个数据副本应该驻留在不同的区域中。区域配置确保,如果一个区域失败,仍然有两个区域启动并运行,它们可以接受新对象或检索存储的对象。

推荐的区域数量为5个,分布在5个单独的节点上。如前所述,默认情况下,Swift会写入三个副本。如果只有三个区域,其中一个不可用,Swift就不能将副本移交给另一个节点。由于有5个节点,Swift有多个选项,可以自动将副本写入另一个节点,从而确保最终会有3个副本。

在Swift设置和配置后,可以纠正或更改存储策略。可以在任何时候添加额外的设备。

存储环可以构建在任何安装了适当Swift版本的硬件上,在构建或重新平衡(更改)环结构时,必须重新分配环以包括集群中的所有服务器。swift-ring-builder工具用于构建和管理环。

要为account、object和container构建三个环,可以使用以下语法向环中添加一个新设备:

在这里插入图片描述

专区包含一个数字,作为服务器所属机架的ID。ipaddress是服务器的IP地址。该设备是要添加的设备分区。重量包括该设备分区的大小。

注意:在OpenStack的Newton发布之前,对象服务使用了帐户、容器和对象服务的端口6002、6001和6000。这些早期默认的Swift端口与IANA已经为X-Server注册的端口重叠,导致SELinux策略冲突和安全风险。Red Hat OpenStack平台在Juno发布时切换到新的端口,而上游的Swift项目在Newton完成了切换。


📜Swift命令

Swift有两套命令,较早版本和较晚版本。仍然支持以前的命令,如swift post、swift list和swift stat。但是,OpenStack正在向下面描述的OpenStack统一CLl移动。

注意:默认情况下,以下命令要求OpenStack用户具有admin或swiftoperator角色。


openstack容器命令用于管理openstack中的对象。openstack容器创建命令用于创建容器:

在这里插入图片描述

openstack container list命令显示用户可用的所有容器:

在这里插入图片描述

openstack container delete命令删除指定的容器:

在这里插入图片描述

openstack object create命令上传一个现有的对象到指定的容器:

在这里插入图片描述

openstack container save命令将现有容器的内容保存到本地:

在这里插入图片描述

openstack object list命令列出指定容器中存储的所有对象:

在这里插入图片描述

openstack object delete命令从指定的容器中删除一个对象:

在这里插入图片描述


📜配置和日志文件

/var/log/containers/swift和/var/log/containers/httpd/swift-*

所有日志条目的默认位置。

/var/log/messages

所有与HAProxy和Swift 配置和Swift CLI工具请求相关的消息的位置。

/var/lib/config-data/swift/etc/swift/object-server.conf

持有支持复制(对象-复制器)、容器中的对象信息管理(对象-更新器)和对象完整性(对象-审计器)的不同后端Swift服务的配置。


📜使用对象存储的OPENSTACK服务

下面将描述一些使用OpenStack对象存储作为后端存储提供程序的服务。

OpenStack镜像服务使用OpenStack对象存储作为存储后端,以容纳作为对象的实例镜像。将镜像存储在对象存储中而不是本地文件存储中提供了镜像的高可用性和可靠性。OpenStack镜像服务也可以使用Red Hat Ceph存储作为后端存储提供商。

OpenStack块存储服务有几个组件,比如API服务器、卷服务器、卷调度器和卷备份服务器。卷备份服务器组件维护可用于构建相同卷的卷备份。OpenStack块存储服务的备份组件使用OpenStack对象存储作为存储后端,以容纳充当卷备份的持久卷的存档。这个组件也可以使用Red Hat Ceph存储作为后端存储提供程序。

OpenStack工作流服务在Red Hat OpenStack平台环境中充当工作流管理系统。按特定顺序执行的任务集合称为工作流。当OpenStack工作流服务使用OpenStack对象存储作为后端存储提供程序时,可以将这些工作流存储为对象。这些工作流可以包括部署或确认实例这样简单的任务,也可以包括完整的堆栈部署计划这样复杂的任务。

在部署overcloud之前,undercloud的OpenStack裸机配置服务在overcloud节点上执行缺省。此缺省收集关于云上节点的硬件特征的数据,以便特定类别的节点可以被分配到特定的角色。缺省数据存储在undercloud的OpenStack对象存储系统中。

Red Hat OpenStack平台有一个新的多租户消息和通知服务,称为Zagar。尽管Zagar的功能和特性与其他消息传递系统(如RabbitMQ、ActiveMQ和Qpid)类似,但它不会取代它们中的任何一个。相反,对于应用程序开发人员来说,它是一种易于使用的选择,他们可以使用它来使其应用程序的组件进行通信。传统上,MongoDB和Redis是Zagar支持的后端数据存储。现在,Zagar已经发展到可以使用OpenStack对象存储作为存储消息的后端数据存储。

OpenStack度量服务基于一个时间序列数据库,该数据库存储由OpenStack数据收集服务发布的度量和资源。对时间序列数据库进行了优化,用于处理包含按时间戳索引的数字数组的数据。OpenStack度量服务提供了一个REST API来创建或编辑度量数据。度量服务的gnocchi-metricd组件实时计算所接收数据的统计信息。这些计算后的数据被存储和索引,以便更快地检索。该指标支持存储指标数据和索引数据的各种后端。OpenStack对象存储是用于存储度量数据的受支持的存储后端之一。默认的存储驱动程序是file。overcloud部署使用ceph存储驱动程序作为度量数据的存储。度量服务使用PostgreSQL或MySQL数据库存储索引数据和任何相关元数据。索引数据的默认存储驱动程序是PostgreSQL。


📜课本练习

在OpenStack obiect中创建对象存储并查找磁盘上的实际位。

[student@workstation ~]$ lab storage-swift setup 
Setting up workstation for lab exercise work:

 • Verifying project: finance..................................  SUCCESS
 • Creating user env file: developer1-finance-rc...............  SUCCESS
 • Creating storage unit: /srv/node/d2.........................  SUCCESS
 • Creating local file: finance-object1........................  SUCCESS
 • Creating local file: finance-object2........................  SUCCESS

📑1. 验证与OpenStack对象存储相关的Docker容器的运行状况。

[root@controller0 ~]# docker ps --format="table {{.Names}}\t{{.Status}}" | grep swift
swift_proxy                        Up 7 days (healthy)
swift_container_auditor            Up 7 days
swift_object_expirer               Up 7 days
swift_object_updater               Up 7 days
swift_container_replicator         Up 7 days
swift_account_auditor              Up 7 days
swift_account_server               Up 7 days (healthy)
swift_object_replicator            Up 7 days
swift_container_server             Up 7 days (healthy)
swift_rsync                        Restarting (11) 2 days ago
swift_account_reaper               Up 7 days
swift_account_replicator           Up 7 days
swift_object_auditor               Up 7 days
swift_object_server                Up 7 days (healthy)
swift_container_updater            Up 7 days

**注意:**在前面的输出中,可以忽略swift_rsync容器的重新启动状态。


📑2. 添加/srv/node/d2作为OpenStack对象存储的附加设备。更新ring文件以确保OpenStack对象存储中的每个设备都能够容纳相同对象的副本。

**注意:**由于教室的限制,您使用一个目录(/srv/node/d2)来放置一个磁盘设备,以支持OpenStack对象存储。实际上,您将使用实际的磁盘设备,通常使用XFS之类的文件系统进行格式化。


2.1.确认当前有一个设备是OpenStack对象存储的环文件能够识别的。

[root@controller0 ~]# cd /var/lib/config-data/puppet-generated/swift/etc/swift/
[root@controller0 swift]# swift-ring-builder account.ring.gz 
Note: using account.builder instead of account.ring.gz as builder file
account.builder, build version 2, id 5ef67cb074a0430ebc5d25f1ce51f329
1024 partitions, 1.000000 replicas, 1 regions, 1 zones, 1 devices, 0.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 1 (0:00:00 remaining)
The overload factor is 0.00% (0.000000)
Ring file account.ring.gz is up-to-date
Devices:   id region zone ip address:port replication ip:port  name weight partitions balance flags meta
            0      1    1 172.24.4.1:6002     172.24.4.1:6002    d1 100.00       1024    0.00       
[root@controller0 swift]# swift-ring-builder container.ring.gz 
Note: using container.builder instead of container.ring.gz as builder file
container.builder, build version 2, id 66dcd204b5f44375b5d4e1dd677a962b
1024 partitions, 1.000000 replicas, 1 regions, 1 zones, 1 devices, 0.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 1 (0:00:00 remaining)
The overload factor is 0.00% (0.000000)
Ring file container.ring.gz is up-to-date
Devices:   id region zone ip address:port replication ip:port  name weight partitions balance flags meta
            0      1    1 172.24.4.1:6001     172.24.4.1:6001    d1 100.00       1024    0.00       
[root@controller0 swift]# swift-ring-builder object.ring.gz 
Note: using object.builder instead of object.ring.gz as builder file
object.builder, build version 2, id 8a94f604449f4d83aeb2c18b0bd47f79
1024 partitions, 1.000000 replicas, 1 regions, 1 zones, 1 devices, 0.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 1 (0:00:00 remaining)
The overload factor is 0.00% (0.000000)
Ring file object.ring.gz is up-to-date
Devices:   id region zone ip address:port replication ip:port  name weight partitions balance flags meta
            0      1    1 172.24.4.1:6000     172.24.4.1:6000    d1 100.00       1024    0.00  

2.2 更新OpenStack对象存储环构建器文件,以添加/srv/node/d2作为附加设备。将新设备的重量设置为100。

[root@controller0 swift]# swift-ring-builder account.builder add z1-172.24.4.1:6002/d2 100
WARNING: No region specified for z1-172.24.4.1:6002/d2. Defaulting to region 1.
Device d1r1z1-172.24.4.1:6002R172.24.4.1:6002/d2_"" with 100.0 weight got id 1
[root@controller0 swift]# swift-ring-builder container.builder add z1-172.24.4.1:6001/d2 100
WARNING: No region specified for z1-172.24.4.1:6001/d2. Defaulting to region 1.
Device d1r1z1-172.24.4.1:6001R172.24.4.1:6001/d2_"" with 100.0 weight got id 1
[root@controller0 swift]# swift-ring-builder object.builder add z1-172.24.4.1:6000/d2 100
WARNING: No region specified for z1-172.24.4.1:6000/d2. Defaulting to region 1.
Device d1r1z1-172.24.4.1:6000R172.24.4.1:6000/d2_"" with 100.0 weight got id 1

2.3 在环构建器文件中将副本数设置为2。

[root@controller0 swift]# swift-ring-builder account.builder set_replicas 2
The replica count is now 2.000000.
The change will take effect after the next rebalance.
[root@controller0 swift]# swift-ring-builder container.builder set_replicas 2
The replica count is now 2.000000.
The change will take effect after the next rebalance.
[root@controller0 swift]# swift-ring-builder object.builder set_replicas 2
The replica count is now 2.000000.
The change will take effect after the next rebalance.

2.4 在环构建器文件中验证新设备和副本计数。

[root@controller0 swift]# swift-ring-builder account.builder 
account.builder, build version 3, id 5ef67cb074a0430ebc5d25f1ce51f329
1024 partitions, 2.000000 replicas, 1 regions, 1 zones, 2 devices, 100.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 1 (0:00:00 remaining)
The overload factor is 0.00% (0.000000)
Ring file account.ring.gz is obsolete
Devices:   id region zone ip address:port replication ip:port  name weight partitions balance flags meta
            0      1    1 172.24.4.1:6002     172.24.4.1:6002    d1 100.00       1024    0.00       
            1      1    1 172.24.4.1:6002     172.24.4.1:6002    d2 100.00          0 -100.00       
[root@controller0 swift]# swift-ring-builder container.builder 
container.builder, build version 3, id 66dcd204b5f44375b5d4e1dd677a962b
1024 partitions, 2.000000 replicas, 1 regions, 1 zones, 2 devices, 100.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 1 (0:00:00 remaining)
The overload factor is 0.00% (0.000000)
Ring file container.ring.gz is obsolete
Devices:   id region zone ip address:port replication ip:port  name weight partitions balance flags meta
            0      1    1 172.24.4.1:6001     172.24.4.1:6001    d1 100.00       1024    0.00       
            1      1    1 172.24.4.1:6001     172.24.4.1:6001    d2 100.00          0 -100.00       
[root@controller0 swift]# swift-ring-builder object.builder 
object.builder, build version 3, id 8a94f604449f4d83aeb2c18b0bd47f79
1024 partitions, 2.000000 replicas, 1 regions, 1 zones, 2 devices, 100.00 balance, 0.00 dispersion
The minimum number of hours before a partition can be reassigned is 1 (0:00:00 remaining)
The overload factor is 0.00% (0.000000)
Ring file object.ring.gz is obsolete
Devices:   id region zone ip address:port replication ip:port  name weight partitions balance flags meta
            0      1    1 172.24.4.1:6000     172.24.4.1:6000    d1 100.00       1024    0.00       
            1      1    1 172.24.4.1:6000     172.24.4.1:6000    d2 100.00          0 -100.00

2.5 重新平衡OpenStack对象存储环文件。

[root@controller0 swift]# swift-ring-builder account.builder rebalance
Reassigned 1024 (100.00%) partitions. Balance is now 0.00.  Dispersion is now 0.00
[root@controller0 swift]# swift-ring-builder container.builder rebalance
Reassigned 1024 (100.00%) partitions. Balance is now 0.00.  Dispersion is now 0.00
[root@controller0 swift]# swift-ring-builder object.builder rebalance
Reassigned 1024 (100.00%) partitions. Balance is now 0.00.  Dispersion is now 0.00

2.6 重新启动swift_proxy、swift_account_server、swift_container_server和swift_object_server容器。

[root@controller0 swift]# docker restart swift_proxy swift_account_server swift_container_server swift_object_server 
swift_proxy
swift_account_server
swift_container_server
swift_object_server

📑3. 在finance项目中创建对象容器finance-container1。将/home/student/finance-object1上传到finance-container1作为finance-object1对象。在OpenStack对象存储的后端存储设备中找到表示finance-object1对象的文件。

[student@workstation ~(developer1-finance)]$ openstack container create finance-container1
+---------------------------------------+--------------------+-------------------------+
| account                               | container          | x-trans-id                         |
+---------------------------------------+--------------------+-------------------------+
| AUTH_3c003f65d8d64914a053f178fbbf953c | finance-container1 | txfc82843c47634bb094db5-005f944599 |
+---------------------------------------+--------------------+-------------------------+

[student@workstation ~(developer1-finance)]$ openstack object create finance-container1 finance-object1
+-----------------+--------------------+----------------------------------+
| object          | container          | etag                             |
+-----------------+--------------------+----------------------------------+
| finance-object1 | finance-container1 | 740580d95587be0197cf16e2d96f4931 |
+-----------------+--------------------+----------------------------------+

在OpenStack对象存储的后端存储设备中找到finance-object1。

[root@controller0 swift]# find /srv/node -name *.data
/srv/node/d1/objects/211/7d6/34cdbfff8aab40e59f592241defeb7d6/1603552740.64497.data
/srv/node/d2/objects/211/7d6/34cdbfff8aab40e59f592241defeb7d6/1603552740.64497.data

注意,作为OpenStack对象的存储设备的/srv/node/d1和/srv/node/ d2目录下的数据文件的两个副本存储在教室环境中。这些数据文件返回finance-container1对象容器中的finance-obiect1对象。

确认前面输出中显示的数据文件的内容与finance-object1对象的内容匹配。

[student@workstation ~(developer1-finance)]$ cat finance-object1
This is to test the OpenStack Object Store service
[student@workstation ~(developer1-finance)]$ cat finance-object2
This is the second file to test the OpenStack Object Store service

[root@controller0 swift]# find /srv/node -iname *.data 
/srv/node/d1/objects/211/7d6/34cdbfff8aab40e59f592241defeb7d6/1603552740.64497.data
/srv/node/d2/objects/211/7d6/34cdbfff8aab40e59f592241defeb7d6/1603552740.64497.data
[root@controller0 swift]# find /srv/node -iname *.data -exec cat {} \;
This is to test the OpenStack Object Store service
This is to test the OpenStack Object Store service

📑4. 将另一个对象/home/student/finance-object2作为finance-object2上传到finance-container1。跟踪后端数据文件以验证对象的副本,确定每个对象的适当副本。

[student@workstation ~(developer1-finance)]$ openstack object create finance-container1 finance-object2
+-----------------+--------------------+----------------------------------+
| object          | container          | etag                             |
+-----------------+--------------------+----------------------------------+
| finance-object2 | finance-container1 | 5fbd479cb11b287640aa6b45f11b54f1 |
+-----------------+--------------------+----------------------------------+

[root@controller0 swift]# find /srv/node -name *.data 
/srv/node/d1/objects/211/7d6/34cdbfff8aab40e59f592241defeb7d6/1603552740.64497.data
/srv/node/d1/objects/884/78a/dd0af661563ef6767969bf55e364e78a/1603553477.32265.data
/srv/node/d2/objects/211/7d6/34cdbfff8aab40e59f592241defeb7d6/1603552740.64497.data
/srv/node/d2/objects/884/78a/dd0af661563ef6767969bf55e364e78a/1603553477.32265.data

📑清除实验

[student@workstation ~]$ lab storage-swift cleanup

💡总结

RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。

以上就是【金鱼哥】对 第五章 管理存储–对象存储 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。

💾红帽认证专栏系列:
RHCSA专栏:戏说 RHCSA 认证
RHCE专栏:戏说 RHCE 认证
此文章收录在RHCA专栏:RHCA 回忆录

如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。

如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。