OpenStack 对象存储

栏目: 服务器 · 发布时间: 6年前

内容简介:在开始本节内容的学习之前,我建议你先学习 OpenStack Identity manage 课程:首先我们看看百度百科的定义:由于各种不可预知的错误或者灾难,对于分布式存储系统来说,往往会将数据冗余存储多份,而每一份称为一个副本。

swift

在开始本节内容的学习之前,我建议你先学习 OpenStack Identity manage 课程: https://www.shiyanlou.com/courses/911 。部分内容本节实验中将不再提到。

一、 对象 存储

1.1 非结构化数据

  • 非结构化数据是数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。包括所有格式的办公文档、文本、图片、XML, HTML、各类报表、图像和音频/视频信息等等。

  • 对于非结构化数据来说,组织一个层次分明,结构清晰的逻辑表来说是非常困难的,对象存储应运而生。

1.2对象存储

首先我们看看百度百科的定义:

  • 对象存储是用来描述解决和处理离散单元的方法的通用术语。对象在一个层结构中不会再有层级结构,是以扩展元数据为特征的。
  • 对象存储,也叫做基于对象的存储,是用来描述解决和处理离散单元的方法的通用术语,这些离散单元被称作为对象。

  • 对象是对象存储系统的数据存储的基本单位,一个对象实际上就是文件数据和一些属性信息(metadata)

1.3 账户,容器,对象

  • 账户

    • 账户通常代表一个使用存储系统的用户
  • 容器

    • 容器类似于文件系统中的目录,但是不同的是,容器只有一级。容器用来将账户所属的对象进行分组
    • 一个账户可以创建的容器数目没有限制,对于不同账户间的容器来说,名称可以不同,但是对于同一账户下的容器,不能存在同名容器。
  • 对象

    • 对象就是 swift 存储系统中真正存储的数据。如文件,照片等。

二、CAP 理论

  • Consistency(一致性)
  • Availability(可用性)
  • Partition tolerance(分区容错性)

2.1 一致性

由于各种不可预知的错误或者灾难,对于分布式存储系统来说,往往会将数据冗余存储多份,而每一份称为一个副本。

而在 swift 中,一般是三副本(默认缺省值为3)。所以,在上一节安装配置的内容中,你可以看见,我创建了三个文件代表三个不同的存储设备,用于满足 swift 默认三副本的环境需求。

从客户端的角度来说,在多进程并发访问时,对于更新过的数据是否都能获取到最新值有着不同的策略,而对于 swift 来说,使用的是最终一致性,即经过一段时间后,最终都能访问到最新的值。

2.2 可用性

每一个操作总是能在一定时间内返回结果。这儿的一定时间内是指系统给定的时间,如果没有时间限制,那么这儿的可用性也就没有意义了。

2.3 分区容错性

在这里给出网络上一个知乎用户的理解,链接: https://www.zhihu.com/question/54105974/answer/139037688

一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域。数据就散布在了这些不连通的区域中。这就叫分区。

当你一个数据项只在一个节点中保存,那么分区出现后,和这个节点不连通的部分就访问不到这个数据了。这时分区就是无法容忍的。

提高分区容忍性的办法就是一个数据项复制到多个节点上,那么出现分区之后,这一数据项就可能分布到各个区里。容忍性就提高了。

然而,要把数据复制到多个节点,就会带来一致性的问题,就是多个节点上面的数据可能是不一致的。

要保证一致,每次写操作就都要等待全部节点写成功,而这等待又会带来可用性的问题。

总的来说就是,数据存在的节点越多,分区容忍性越高,但要复制更新的数据就越多,一致性就越难保证。为了保证一致性,更新所有节点数据所需要的时间就越长,可用性就会降低。

一般来说,CAP 只能同时满足其中的两个,而对于 swift 来讲,牺牲了 “一致性”,采用了“最终一致性”而不是“强一致性”,从而提高了可用性和分区容错性。

三、swift 的简单操作

3.1 认证

swift 有两种认证机制,一个是自身提供的 Tempauth,一个是 OpenStack 提供的 keystone。

  • 在上一节的内容中我们配置了 /etc/swift/proxy-server.conf 文件中的部分内容,选择使用 keystone。关于 keystone 的详细内容请参考 OpenStack Identity manage

  • 而通过 Keystone 认证机制,我们则需要提交部分认证信息,而这些信息在实验环境中已经有对应的内容,仅仅只需要运行命令

$ . ~/admin-openrc
  • 关于更多 keystone 的内容可以参考课程链接: https://www.shiyanlou.com/courses/911

  • 在之前的内容中我们提到过,OpenStack 提供一个统一的 OSC 来代替Openstack 各个子项目的 CLI 。这里,我们照例给出一份对应的说明截图

OpenStack 对象存储

3.2 容器

3.2.1 Create container

  • 首先,我们使用 OSC 创建容器 'container1'
$ openstack container create container1

OpenStack 对象存储

  • 使用 swift cli 创建容器 container2
swift post container2

OpenStack 对象存储

3.2.2 list container

  • 使用 OSC 查看容器列表
$ openstack container list

OpenStack 对象存储

  • 如上图所示,可以看见刚刚创建的 container1container2 容器,我们还可以使用 --long 参数显示更多的信息
$ openstack container list --long

OpenStack 对象存储

  • 同理,使用 swift cli 也可以查看容器列表
$ swift list

OpenStack 对象存储

  • 相对于以往的OpenStack 各个子项目的 CLI 来说,如今统一的 OSC 无疑更为简单明了,所以,在接下来的内容中主要描述 OSC 的使用,而不会涉及到 swift cli 的使用

3.2.3 Show container

  • 查看容器的详细信息
$ openstack container show container1

OpenStack 对象存储

3.3.4 Delete container

  • 删除容器 container2
$ openstack container delete container2

OpenStack 对象存储

  • 此处,我们再次查看容器列表,就会发现 container2 已经被删除
$ openstack container list --long

OpenStack 对象存储

3.3 对象

3.3.1 create object

  • 首先,我们需要创建一个文件,为了方便展示,首先我们先创建一个目录,进入到目录中进行操作
$ sudo mkdir test
$ cd test
  • 创建两个文件,你也可以向文件中写入一些内容用以区别
sudo touch object1.txt
sudo touch object2.txt
  • 这时我们上传 object1.txt 到 container1 容器中
$ openstack object create container1 object1.txt

OpenStack 对象存储

  • 接着上传 object2.txt ,通过 --name 参数,修改对象名为 test2
$ openstack object create container1 object2.txt --name test2

OpenStack 对象存储

3.3.2 list object

  • 查看容器 container1 中对象列表,使用 --long 参数,显示详细信息
$ openstack object list container1 --long

OpenStack 对象存储

3.3.3 Show object

  • 查看容器 container1 中对象的详细信息
$ openstack object show container1 object1.txt
$ openstack object show container1 test2

OpenStack 对象存储

3.3.4 Download object

  • 下载 container1 容器中的 test2 对象,并将下载的文件名修改为 test2.txt,在这之前,还需要给当前目录添加权限
sudo chmod 777 ~/test
openstack object save container1 test2 --file test2.txt

OpenStack 对象存储

  • 除了下载单个对象外,我们还可以下载整个容器中的对象,首先,我们先删除当前目录下已有的同名文件
$ sudo rm object1.txt
$ sudo rm test2
$ sudo ls 

OpenStack 对象存储

  • 接着,执行下面的下载命令
$ openstack container save container1

OpenStack 对象存储

3.3.5 Delete object

  • 删除 container1 中的 object1.txttest2 对象
$ openstack object delete container1 object1.txt test2

OpenStack 对象存储

  • 如上图所示,container1 中的两个对象已经被删除

四、实验总结

本节实验的目的仅仅在于让用户对于 OpenStack 的对象存储系统 swift 有一个简单的了解。最好的学习方式永远是动手实践。就如课程中提到的上传和下载对象,swift 中对于大对象的支持(单个对象的下载大小限制为 5GB),限于实验环境,单个设备的存储空间才 1GB,又比如默认的三副本,使用 keystone 验证而不是 temauth,容器和容器之间同步,对象版本控制等,或者更为复杂的 swift 工作原理和架构等,实验环境并不能有一个直观的展示,这些都需要读者花费更多的时间去学习探索。


以上所述就是小编给大家介绍的《OpenStack 对象存储》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Impractical Python Projects

Impractical Python Projects

Lee Vaughan / No Starch Press / 2018-11 / USD 29.95

Impractical Python Projects picks up where the complete beginner books leave off, expanding on existing concepts and introducing new tools that you’ll use every day. And to keep things interesting, ea......一起来看看 《Impractical Python Projects》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具