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 对象存储》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Head First HTML5 Programming(中文版)

Head First HTML5 Programming(中文版)

埃里克•弗里曼 (Eric Freeman)、伊丽莎白•罗布森 (Elisabeth Robson) / 中国电力出版社 / 2012-9 / 78.00元

《Head First HTML5 Programming(中文版)》内容简介:你可能想创建具有动态性、交互性、包含丰富数据而且互连的Web页面。先等一下,Web页面?为什么不用HTML5创建成熟的Web应用呢?另外,为什么不使用现代技术,像在移动设备上一样轻松地应用到桌面浏览器呢?当然,你肯定希望使用最新的HTML5技术来完成,比如地理定位、视频、2D绘制、Web存储、Web工作线程等,是不是?......一起来看看 《Head First HTML5 Programming(中文版)》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具