1.Swift介绍
1.1. Swift架构概述
官方给出的标准架构进行分析,如图,分别为存储节点(Storage node)、代理节点(Proxy node)和认证节点(Auth node)三部分。
1.1.1. 代理节点
代理节点可以说是Swift的核心,运行着swift-proxy-server进程。它提供Swift API的服务,负责Swift其余组件间的相互通信。对于每个客户端的请求,它在Ring中查询相应Account、Container以及Object的位置,并且转发这些请求。从安全的角度来说,很少有直接暴露底层服务接口的实现方式,这个代理可以做集群。
它提供了Rest-full API,开发者可以通过这个接口快捷构建定制的客户端与Swift交互。
大量的存储错误也由Proxy Server处理:当一个服务器无法对一个对象的PUT操作进行响应,它将从Ring中查询一个可以接手的服务器并将请求传递给它。
² Ring
Ring是数据到物理设备映射的集合,通过Zone(区域)、Device(设备)、Partition(分区)和Replica(副本)来维护映射信息。
1.1.2. 存储节点
存储节点需要运行account和容器、对象存储等服务。
² Object Server
对象服务是一个简单的二进制大对象存储服务,可以用来存储、检索和删除本地设备上的对象。在文件系统上,对象以二进制文件的形式存储,它的元数据存储在文件系统的扩展属性(xattrs)中。这要求用于对象服务的文件系统需要支持文件有扩展属性。
² Container Server
容器服务的首要工作是处理对象的列表。容器服务并不知道对象存在哪,只知道指定容器里存的哪些对象。 这些对象信息以sqlite数据库文件的形式存储,和对象一样在集群上做类似的备份。容器服务也做一些跟踪统计,比如对象的总数,容器的使用情况。
帐号服务与容器服务非常相似,除了它是负责处理容器的列表而不是对象。1.3. 认证节点
在存储节点和代理节点接入外网之前,首先要通过一个附加的认证节点对用户进行比对认证。在早期,Swift使用单独的认证服务对用户进行核对,随着OpenStack项目的逐渐发展,目前Swift以及结合了OpenStack的认证Keystone,形成统一的云认证体系。
在官方文档中建议至少使用5个zone,一个zone就是一组独立节点,官方给出的标配例图如图所示:
1.3. 组件间的通信
Swift代理节点与存储节点间的通信方式如下:
1.4. 存储原理
Swift利用一致性哈希算法构建了一个冗余的可扩展的分布式对象存储集群,但一致性哈希算法不能保证绝对的平衡,当节点较少的时候,需要存储的对象不能被均匀地映射到节点上,这样每个节点的存储压力不平衡。为了解决这个问题,swift在一致性哈希算法的基础上,引入虚拟节点(partition)的概念。
虚拟节点是实际节点在环形空间的复制品,一个实际节点对应了若干个虚拟节点,通过中间一层虚拟节点的存储再分配,数据可以比较均匀得分布在各个节点上了。如图所示:
由此可见,Storage node与partition,partition与object间的映射关系如下:
在Storage node上运行着Linux系统并使用了XFS文件系统,逻辑上使用一致性哈希算法将固定总数的partition映射到每个Storage node上,每个object也使用同样的哈希算法映射到Partition上。
安装规划
通过上面对Swift的原理解释,我们在原有的控制节点、计算节点的基础上,新增加了三个存储节点,关于Swift的代理服务器和授权服