内容简介:在开始本节内容的学习之前,我建议你先学习 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 。这里,我们照例给出一份对应的说明截图
3.2 容器
3.2.1 Create container
- 首先,我们使用 OSC 创建容器 'container1'
$ openstack container create container1
- 使用 swift cli 创建容器
container2
swift post container2
3.2.2 list container
- 使用 OSC 查看容器列表
$ openstack container list
- 如上图所示,可以看见刚刚创建的
container1
和container2
容器,我们还可以使用--long
参数显示更多的信息
$ openstack container list --long
- 同理,使用 swift cli 也可以查看容器列表
$ swift list
- 相对于以往的OpenStack 各个子项目的 CLI 来说,如今统一的 OSC 无疑更为简单明了,所以,在接下来的内容中主要描述 OSC 的使用,而不会涉及到 swift cli 的使用
3.2.3 Show container
- 查看容器的详细信息
$ openstack container show container1
3.3.4 Delete container
- 删除容器
container2
$ openstack container delete container2
- 此处,我们再次查看容器列表,就会发现
container2
已经被删除
$ openstack container list --long
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
- 接着上传 object2.txt ,通过
--name
参数,修改对象名为 test2
$ openstack object create container1 object2.txt --name test2
3.3.2 list object
- 查看容器
container1
中对象列表,使用--long
参数,显示详细信息
$ openstack object list container1 --long
3.3.3 Show object
- 查看容器
container1
中对象的详细信息
$ openstack object show container1 object1.txt $ openstack object show container1 test2
3.3.4 Download object
- 下载
container1
容器中的 test2 对象,并将下载的文件名修改为 test2.txt,在这之前,还需要给当前目录添加权限
sudo chmod 777 ~/test openstack object save container1 test2 --file test2.txt
- 除了下载单个对象外,我们还可以下载整个容器中的对象,首先,我们先删除当前目录下已有的同名文件
$ sudo rm object1.txt $ sudo rm test2 $ sudo ls
- 接着,执行下面的下载命令
$ openstack container save container1
3.3.5 Delete object
- 删除
container1
中的object1.txt
和test2
对象
$ openstack object delete container1 object1.txt test2
- 如上图所示,container1 中的两个对象已经被删除
四、实验总结
本节实验的目的仅仅在于让用户对于 OpenStack 的对象存储系统 swift 有一个简单的了解。最好的学习方式永远是动手实践。就如课程中提到的上传和下载对象,swift 中对于大对象的支持(单个对象的下载大小限制为 5GB),限于实验环境,单个设备的存储空间才 1GB,又比如默认的三副本,使用 keystone 验证而不是 temauth,容器和容器之间同步,对象版本控制等,或者更为复杂的 swift 工作原理和架构等,实验环境并不能有一个直观的展示,这些都需要读者花费更多的时间去学习探索。
以上所述就是小编给大家介绍的《OpenStack 对象存储》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 块存储、文件存储、对象存储三者之比较
- 存储助力业务:58对象存储系统WOS研发实践
- 分布式存储ceph对象存储配置zone同步
- OpenStack 对象存储(一)
- 对象存储已死
- 基于 Ceph 对象存储构建实践
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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(中文版)》 这本书的介绍吧!