私有云存储系统搭建与应用
上QQ阅读APP看书,第一时间看更新

第2章 初识Swift存储系统

2.1 对象存储系统:OpenStack Swift

OpenStack的对象存储项目Swift用于冗余的、可扩展的数据存储,使用标准化的服务器集群来存储数PB的可访问数据。它是一个长期存储大量静态数据的系统,可以对其进行检索和更新。

对象存储使用分布式体系结构,没有中心控制点,可以提供更大的可伸缩性、冗余性和持久性。对象被写入多个硬件设备,Swift软件负责确保跨集群的数据复制和完整性。存储集群通过添加新节点进行横向扩展。如果一个节点失败,Swift将从其他活动节点复制其内容。由于Swift使用软件逻辑来确保跨不同设备的数据复制和分发,因此可以使用廉价的商品硬盘驱动器和服务器来代替更昂贵的设备。

对象存储是经济高效、可扩展存储的理想选择。它提供了一个完全分布式的、可通过API访问的存储平台,可直接集成到应用程序中,或用于备份、存档和数据保留。

官方文档网址是https://docs.openstack.org/swift/latest/admin/objectstorage-intro.html。

2.1.1 Swift的重要特点

以下是Swift的一些重要特点:

● 利用标准商业硬件,不会形成对固定厂商的依赖,单位成本更低。

● HDD/节点即便发生故障也不会马上感知,因为系统可以自我修复,可靠,通过数据冗余来应对故障。

● 无限存储。大而扁平的命名空间,高度可扩展的读/写访问,能够直接从存储系统提供内容(从而可以减轻Web服务器的负载)。

● 多维可扩展性。支持横向扩展架构(垂直和水平分布的存储扩展);以线性性能备份和存档大量数据。

● 账户/容器/对象结构。没有嵌套,不是传统的文件系统:针对规模进行了优化,可扩展到多个PB和数十亿个对象。

● 内置复制3×+数据冗余(相比RAID的2×)。可配置指定数量的账户、容器和对象副本,以实现高可用性。

● 轻松增加容量(不同于RAID调整大小)。轻松实现弹性数据缩放。

● 没有中央数据库。具备更高的性能,没有瓶颈。

● 不需要RAID。有效地处理许多小的、随机的读写操作。

● 内置管理工具。账户管理:创建、添加、验证和删除用户;容器管理:上传、下载和验证;监视:容量、主机、网络、日志搜集和集群运行状况。

● 驱动审计。检测驱动器故障,预防数据损坏。

● 过期对象。用户可以设置对象的过期时间或TTL来控制访问。

● 直接对象访问。允许浏览器直接访问内容,例如控制面板。

● 实时查看客户端请求。及时了解用户的请求。

● 支持S3[1]API。利用为流行的S3 API设计的工具。

● 限制每个账户的容器。限制访问权限以控制用户的使用。

官方文档网址是https://docs.openstack.org/swift/latest/admin/objectstorage-features.html。

2.1.2 对象存储的主要特征

以下是对象存储系统的一些主要特征。

● 存储在对象存储中的所有对象都有一个URL。

●“存储策略”可用于为集群中存储的对象定义不同级别的持久性。这些策略不仅支持完整的副本,还支持擦除码[2]的片段。

● 对象的所有副本或片段都存储在尽可能唯一的区域中,以提高持久性和可用性。

● 所有对象都有自己的元数据。

● 开发人员通过RESTful HTTP API与对象存储系统进行交互。

● 对象数据可以位于集群中的任何位置。

● 集群可通过添加额外的节点来扩展且不牺牲性能,与叉车式[3]升级相比,它可提供更具成本效益的线性存储扩展。

● 数据不必迁移到全新的存储系统。

● 可以在不停机的情况下将新节点添加到集群中。

● 可以将发生故障的节点和磁盘换出,而无须停机。

● 运行在行业标准的硬件上。

开发人员可以直接编写Swift API,也可以使用主流的客户端库。亚马逊S3和阿里云OSS用户应该非常熟悉对象存储。

官方文档网址是https://docs.openstack.org/swift/latest/admin/objectstorage-characteristics.html。

2.1.3 Swift的衡量结果

表2-1是依据第1章中的评价体系来衡量Swift存储系统的结果。

表2-1 Swift系统的衡量结果

通过表2-1的衡量,Swift系统似乎是完美存储系统的化身。

实际上,从阿里云OSS和亚马逊S3中都可以看到Swift的影子。

2.1.4 Swift的重要概念

以下是Swift体系中的一些重要概念。

● 对象(Object):“账户/容器/对象”三层结构的底层,对象内容即数据本身。

● 容器(Container):三层结构的中间层,为对象定义的命名空间,可以容纳无限数量的对象。

● 账户(Account):三层结构的顶层,为容器定义的命名空间,可以容纳任意数量的容器。

● 分区(Partition):用于存储三层结构内容(数据)的基本单元。

● 对象存储设备(Object-based Storage Device,OSD):逻辑设备,用于存储分区,是定义故障隔离区的最小单元。形式上,对象存储设备是物理设备(分区)中的一个目录。

● 环(Ring):用于维护存储对象的名称和存储位置(分区索引)的映射关系的数据结构。

● 故障隔离区(Zone):为了避免由于设备故障而导致的数据丢失,从部署层面定义的数据存储区域。理论上,某一故障隔离区的数据如破坏,不会导致数据的所有副本丢失(数据副本保存在不同的故障隔离区)。故障隔离区的单位从小到大可以是:设备(OSD)、主机、机柜等。

● 存储策略(Storage Policies):用于定义所存储的对象的持久性级别,例如副本数。

● 副本(Replica):数据的副本,原则上不同的副本将存储在不同的故障隔离区。

● 访问控制列表(ACL):账户的拥有者授权其他用户的访问权限的机制。