OpenStack Object Storage(Swift)概述
概述
一、Swift管理的资源
swift管理的资源分三级:Account、Container、Object。一个Tenant拥有一个Account,Account下存放Container,Container下存储Object。

二、Swift架构概述
Swift主要有三个组成部分:Proxy Server、Storage Server和Consistency Server。其中Storage和Consistency服务均运行在Storage Node上。Auth认证服务目前已从Swift中剥离出来,使用OpenStack的认证服务Keystone,目的在于实现统一OpenStack各个项目间的认证管理。

1、Proxy Server
Proxy server 是负责将Swift架构其余的部分整合起来。对于每个客户端的请求,它将在Ring中查询Account、Container或Object的位置,并且相应地路由请求。
Proxy提供了Rest-full API,并且符合标准的HTTP协议规范,这使得开发者可以快捷构建定制的Client与Swift交互。
2、Storage Server
Storage Server提供了磁盘设备上的存储服务。在Swift中有三类存储服务:Account、Container和Object。
1)、Object Server
Object Server 是一个非常简单的二进制对象存储服务器,可以用来存储、检索和删除存储在本地设备上的对象。对象以二进制文件的形式存储在文件系统上,元数据存储在文件的扩展属性中(xattrs)。这需要对象服务器的基本文件系统的选择支持xattrs。
2)、Container Server
Container Server最重要的工作就是处理对象列表。它不知道对象存储在哪里,只是知道什么对象在一个特殊的容器中。这个列表以sqlite数据库文件的形式存储,和对象一样在集群中进行类似的备份。跟踪统计包括对象的总数,容器的存储使用的情况。
3)、Account Server
Account Server 跟 Container Server非常的相似,只是它负责容器的列表,而不是对象。
3、Consistency Servers
在磁盘上存储数据并向外提供Rest-ful API并不是难以解决的问题,最主要的问题在于故障处理。Swift的Consistency Servers的目的是查找并解决由数据损坏和硬件故障引起的错误。主要存在三个服务:Auditor、Updater和Replicator。
1)、Auditor
Auditor运行在每个Swift服务器的后台,持续地扫描磁盘来检测Object、Container和Account的完整性。如果发现数据损坏,Auditor就会将该文件移动到隔离区域,然后由Replicator负责用一个完好的拷贝来替代该数据。如果发现其他的错误,Auditor会把它们记录到日志中。
2)、Replicator
Replication被设计用来面对临时的网络停机或者驱动失败时,保持系统的一致性。
replication比较本地的数据(object,account和container)和每一个远端副本,来确保它们全都包含最新的版本。
replication的操作包括update和remove。
3)、Updaters
有时当容器或者账户数据不能被立即更新时,通常发生在故障的情况下或者高负载的时期。如果一次更新失败,这次更新将会被保存到本地文件系统上的队列里,然后Updater会执行失败的更新。
三、重要概念
1、Ring
Ring是Swift重要的组件,一个ring代表云存储中的实体(Account、Container、Object)到物理位置的映射。Account、Container、Object都有各自分离的ring。当其他的组件需要对Account、Container、Object执行某些操作时,它们都需要和对应的ring交互来确定这些实体在集群中的位置。
Ring使用Zone、Device、Partition和Replica来维护这些映射信息。Ring中每个Partition在集群中都(默认)有3个Replica。每个Partition的位置由Ring来维护,并存储在映射中。
Ring文件在系统初始化时创建,之后每次增减存储节点时,需要重新平衡一下Ring文件中的项目,以保证增减节点时,系统因此而发生迁移的文件数量最少。
2、Zone
如果所有的Node都在一个机架或一个机房中,那么一旦发生断电、网络故障等,都将造成用户无法访问。因此需要一种机制对机器的物理位置进行隔离,以满足分区容忍性(CAP理论中的P)。因此,Ring中引入了Zone的概念,把集群的Node分配到每个Zone中。其中同一个Partition的Replica不能同时放在同一个Node上或同一个Zone内。注意,Zone的大小可以根据业务需求和硬件条件自定义,可以是一块磁盘、一台存储服务器,也可以是一个机架甚至一个IDC。
zone : a group of nodes that is as isolated as possible from other nodes (separate servers, network, power, even geography).The ring guarantees that every replica is stored in a separate zone.
3、Replica
如果集群中的数据在本地节点上只有一份,一旦发生故障就可能会造成数据的永久性丢失。因此,需要有冗余的副本来保证数据安全。Swift中引入了Replica的概念,其默认值为3,理论依据主要来源于NWR策略(也叫Quorum协议)。
NWR是一种在分布式存储系统中用于控制一致性级别的策略。在Amazon的Dynamo云存储系统中,使用了NWR来控制一致性。其中,N代表同一份数据的Replica的份数,W是更新一个数据对象时需要确保成功更新的份数;R代表读取一个数据需要读取的Replica的份数。 公式W+R>N,保证某个数据不被两个不同的事务同时读和写;公式W>N/2保证两个事务不能并发写某一个数据。 在分布式系统中,数据的单点是不允许存在的。即线上正常存在的Replica数量为1的情况是非常危险的,因为一旦这个Replica再次出错,就可能发生数据的永久性错误。假如我们把N设置成为2,那么只要有一个存储节点发生损坏,就会有单点的存在,所以N必须大于2。N越高,系统的维护成本和整体成本就越高。工业界通常把N设置为3。例如,对于MySQL主从结构,其NWR数值分别是N= 2, W = 1, R = 1,没有满足NWR策略。而Swift的N=3, W=2, R=2,完全符合NWR策略,因此Swift系统是可靠的,没有单点故障。
4、Weight
Ring引入Weight的目的是解决未来添加存储能力更大的Node时,分配到更多的Partition。例如,2TB容量的Node的Partition数为1TB的两倍,那么就可以设置2TB的Weight为200,而1TB的为100。
四、原理

OpenStack Object Storage(Swift)概述的更多相关文章
- [译]OpenStack Object Storage Monitoring
		
注:翻译的不完整,主要是有些地方翻译后反而妨碍理解,有些不知道怎么翻,anyway,需要时拿来用用也是可行的,顺便共享啦.欢迎提意见. 一个OpenStack Object Storage(OSOS) ...
 - openStack 对象存储object storage swift
 - Object Storage(Swift)安装过程——Havana
		
自从看了Havana安装文档有关Swift的安装一节,发现H版的安装过程与以前还是有些差别的.不过大致过程还是那些.下面简单介绍下我们安装的过程吧,具体请参考官方文档http://docs.opens ...
 - swift(Object Storage对象存储服务)(单节点)
		
# 在部署对象存储服务(swift)之前,你的环境必须包含身份验证服务(keystone); # keystone需要MySQL数据库,Rabbitmq服务,Memcached服务; # 内存:4G ...
 - OpenStack对象存储——Swift
		
OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性.冗余和持久性.本文将从架构.原理 和实践等几方面讲述S ...
 - 《转》OpenStack对象存储——Swift
		
OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之中的一个.被称为对象存储.提供了强大的扩展性.冗余和持久性.本文将从架构.原理和实践等几方面讲 ...
 - 理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置
		
本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...
 - Openstack object list 一次最多有一万个 object
		
When you request a list of containers or objects, Object Storage returns a maximum of 10,000 names f ...
 - centos6.4 ceph安装部署之ceph object storage
		
preface: ceph-deploy does not provide a rapid installation for Ceph Object Storage install Configura ...
 
随机推荐
- Cesium Language (CZML) 入门2 — CZML Content(CZML的内容)
			
原文:https://github.com/AnalyticalGraphicsInc/cesium/wiki/CZML-Content 以下是描述CZML文档或者流中可能存在的内容.要解释CZML文 ...
 - sharepoint 2013工具
			
caml designer 2013 生成caml工具 http://camlbuilder.codeplex.com/ 设计工具 CamlDesigner2013 爬网工具 HtmlAgilityP ...
 - Tomcat绿色版启动"startup.bat"一闪问题的解决方法!
			
进入DOS窗口,运行"startup.bat",会出现错误提示,我是win7 64位,提示“JRE_HOME”设置不正确.于是进入环境变量配置,设置“JRE_HOME”项,随后保存 ...
 - Java50道经典习题-程序14 求日期
			
题目:输入某年某月某日,判断这一天是这一年的第几天?分析:(1)以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天 (2)特殊情况,闰年2月份的天数是29天,否则是28天 impo ...
 - 467. Unique Substrings in Wraparound String
			
Consider the string s to be the infinite wraparound string of "abcdefghijklmnopqrstuvwxyz" ...
 - Nginx + uWSGI  配置django---终极版
			
好开森,配置了差不多一天的项目,终于成功了,写一篇博客庆祝一下 我们先来了解下nginx与uwsgi的概念,再去配置 磨刀不误砍柴工. nginx 是一个开源的高性能的 HTTP 服务器和反向代理:1 ...
 - 【文文殿下】[BZOJ4008] [HNOI2015] 亚瑟王
			
题解 这是一个经典的概率DP模型 设\(f_{i,j}\)表示考虑到前\(i\)张牌,有\(j\)轮没打出牌的可能性,那么显然\(f_{0,r} = 1\). 考虑第\(i+1\)张牌,他可能在剩下的 ...
 - 【文文殿下】浅谈KMP算法next数组与循环节的关系
			
KMP算法 KMP算法是一种字符串匹配算法,他可以在O(n+m)的时间内求出一个模式串在另一个模式串下出现的次数. KMP算法是利用next数组进行自匹配,然后来进行匹配的. Next数组 Next数 ...
 - PHP中define()和dirname(__FILE__)
			
1,define() 函数定义一个常量.常量类似变量,不同之处在于: (1)在设定以后,常量的值无法更改 (2)常量名不需要开头的美元符号 ($) (3)作用域不影响对常量的访问 (4)常量值只能是字 ...
 - Linux下查找命令
			
在CentOs下查找某个目录下的某个文件,使用如下指令: find /目录 -name 文件名 eg:查找当前目录下关于hadoop的文件 find / -name hadoop