分布式存储在云计算及容器技术中将广泛使用,本文仅简单介绍了下几个主流的开源分布式技术,整个分布式存储系列相当复杂,文中介绍略微粗浅且当引子。


1、集中式存储和分布式存储
1.1 存储类型

常见的存储类型有三种:块存储、文件存储和对象存储

  • 块存储是基于Block块的存储模式,直接挂在主机上,一般用于主机上直接存储数据空间和数据库的应用,这类应用要求很高的随机读写性能和高可靠性。块存储有两种常见的存储方式:DAS(Direct Attached Storage)-直连主机存储方式和SAN(Storage Area Network)-高速网络链接主机存储方式
  • 文件存储(NAS)是依附网络提供文件存储服务,相对来说更能兼顾多个应用和更多用户访问,同时提供方便的数据共享手段。但是从性能上相对SAN来说就要低一些
  • 对象存储构建于键值存储,核心是将数据和控制分离,并且基于对象存储设备构建存储系统,对外以RESTful API形式服务。对象存储主要是解决海量数据的并发访问需求,适用于互联网类的应用

块存储、文件存储和对象存储的层次关系如下图所示:

在这里插入图片描述

  1. 从底层往上看,最底层就是硬盘,多个硬盘可以做成RAID组,无论是单个硬盘还是RAID组,都可以做成PV,多个PV物理卷捏在一起构成VG卷组。
  2. 接下来,VG卷组划分为很多块LV逻辑卷。到这一层为止,数据一直都是以Block块的形式存在的,这时候提供出来的服务就是块存储服务。
  3. 通过FC协议或者iSCSI协议对卷访问,映射到主机端本地,成为一个裸设备。在主机端可以直接在上面安装数据库,也可以格式化成文件系统后交给应用程序使用,这时候就是一个标准的SAN存储设备的访问模式,网络间传送的是块。
  4. 也可以在本地做文件系统,之后以NFS/CIFS协议挂载,映射到本地目录,直接以文件形式访问,这就成了NAS访问的模式,在网络间传送的是文件。
  5. 如果不走NAS,在本地文件系统上面部署OSD服务端,把整个设备做成一个OSD,这样的节点多来几个,再加上必要的MDS节点,互联网另一端的应用程序再通过HTTP协议直接进行访问,这就变成了对象存储的访问模式。
  6. 系统层级上来说,这三种存储是按照块->文件->对象逐级向上的。文件一定是基于块上面去做,不管是远端还是本地。而对象存储的底层或者说后端存储通常是基于一个本地文件系统(XFS/Ext4)。
1.2 集中式和分布式存储对比

集中式存储的发展经历了机械盘、SSD固态硬盘、融合存储、NVMe接口全闪存,其发展趋势主要依赖于性能的稳步提升,目前延时几乎可降至0.02ms以下,当前全闪存存储仍然是市场的主流。分布式存储,从IBM的GPFS产品到如今,已经经历了20余年的发展,现在形成了SDS(软件定义存储)的全新模式。随着金融业非结构化数据占比的不断增长,传统的集中式存储无法满足数据服务的灵活性,所以对分布式存储也有了更多的需求。

传统集中式存储的IT架构存在诸多瓶颈,包括采购成本高昂、维护操作繁琐、风险相对集中、性能扩展受限等,难以应对日渐庞杂的金融业务数据以及日益复杂的业务需求。而分布式架构通过虚拟化实现计算、存储、网络的融合部署,可以构建起高可用、易扩展、低成本的适应如今金融数字化的发展体系,建设分布式存储成为金融行业数字化转型的重要方向。

集中式和分布式存储在实际需求中,成本、扩展性(容量及性能)、软件功能、维护性及兼容性这六方面成为行业重点关注的维度,如下表所示:

在这里插入图片描述

随着互联网类业务的迅猛发展,分布式存储的实践需要结合实际的业务使用场景,在多模态和混合信息架构下,主要分为几个应用方向:

  • 大数据分析类业务,在线交易、数据分析和实时查询等不同场景既对数据存储存在一定性能需求,又需要数据存储动态扩展,分布式存储的线性扩容优势完美契合
  • 多元化的系统架构,主要是混合云和容器,容器与主流分布式存储对接十分便捷,同时分布式存储也提供了ISCSI/NFS/S3等多种协议更好的与业务适配
2、分布式存储技术
2.1 分布式存储架构
2.1.1 中间控制节点架构

以HDFS (Hadoop Distribution File System)为代表的架构,在这种架构中,一部分节点 NameNode 是存放管理数据(元数据),另一部分节点DataNode存放业务数据,这种类型的服务器负责管理具体数据。

在这里插入图片描述

在上图中, 如果客户端需要从某个文件读取数据,首先从NameNode获取该文件的位置(具体在哪个DataNode),然后从该DataNode获取具体的数据。在该架构中NameNode通常是主备部署( Secondary NameNode ),而DataNode则是由大量节点构成一个集群。由于元数据的访问频度和访问量相对数据都要小很多,因此NameNode通常不会成为性能瓶颈,而DataNode集群中的数据可以有副本,既可以保证高可用性,可以分散客户端的请求。因此,通过这种分布式存储架构可以通过横向扩展datanode的数量来增加承载能力,也即实现了动态横向扩展的能力。

2.1.2 完全无中心架构—计算模式

以Ceph为代表的架构,在该架构中与HDFS不同的地方在于该架构中没有中心节点。客户端是通过一个设备映射关系计算出来其写入数据的位置,这样客户端可以直接与存储节点通信,从而避免中心节点的性能瓶颈。
在这里插入图片描述

如上图所示,在Ceph存储系统架构中核心组件有MON服务、OSD服务和MDS服务等。

  1. MON 服务用于维护存储系统的硬件逻辑关系,主要是服务器和硬盘等在线信息。MON 服务通过集群的方式保证其服务的可用性。
  2. OSD服务用于实现对磁盘的管理,实现真正的数据读写,通常一个磁盘对应一个OSD服务
  3. MDS只为CephFS文件存储系统跟踪文件的层次机构和存储元数据。Ceph 块设备和 RADOS 并不需要元数据,因此也不需要Ceph MDS守护进程
  4. CRUSH:CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的位置。
  5. RADOS:RADOS 就是包含上述三种服务的ceph存储集群。在Ceph中所有的数据都以对象形式存在的,并且无论哪种数据类型RADOS对象存储都将负责保存这些对象。RADOS层可以确保数据始终保持一致性。要做到这一点必须执行数据复制、故障检测和恢复,以及数据迁移和所在集群节点实现在平衡
  6. RBD (块设备):原名RADOS块设备,提供可靠的分布式和高性能块存储磁盘给客户端。
  7. CephFS:Ceph文件系统提供了一个使用 Ceph 存储集群存储用户数据的与 POSIX 兼容的文件系统
  8. Librados:libRADOS库为PHP 、 RUBY 、 Java 、 Python 、 C++等语言提供 了方便的访问 RADOS 接口的方式
  9. RADOS GW:RGW提供对象存储服务,它允许应用程序和Ceph对象存储建立连接, RGW 提供了与Amazon S3和openstack Swift兼容的RUSTFUL API
2.1.3 完全无中心架构—一致性哈希

以swift为代表的架构,与Ceph的通过计算方式获得数据位置的方式不同,另外一种方式是通过一致性哈希的方式获得数据位置。一致性哈希的方式就是将设备做成一个哈希环,然后根据数据名称计算出的哈希值映射到哈希环的某个位置,从而实现数据的定位。
在这里插入图片描述
Swift 中存在两种映射关系,对于一个文件,通过哈希算法(MD5)找到对应的虚节点(一对一的映射关系),虚节点再通过映射关系(ring文件中二维数组)找到对应的设备(多对多的映射关系),这样就完成了一个文件存储在设备上的映射。

2.2 主流开源分布式存储技术

目前比较热门的开源分布式存储系统有以下几种:Ceph、Swift、HDFS和GlusterFS
在这里插入图片描述

开源协议说明:

  • GPL:不允许修改后和衍生的代码做为闭源的商业软件发布和销售,修改后该软件产品必须也采用GPL协议;
  • GPLV2:修改文本的整体就必须按照GPL流通,不仅该修改文本的源码必须向社会公开,而且对于这种修改文本的流通不准许附加修改者自己作出的限制;
  • GPLV3:要求用户公布修改的源代码,还要求公布相关硬件;
  • LGPL:更宽松的GPL
2.2.1 Ceph

Ceph是个开源的分布式存储,底层是RADOS,这是个标准的对象存储。以RADOS为基础,Ceph能够提供文件,块和对象三种存储服务,旨在提供一个扩展性强大、性能优越且无单点故障的分布式存储系统。
在这里插入图片描述
目前应用最广泛的开源分布式存储系统,已得到众多厂商的支持,许多超融合系统的分布式存储都是基于Ceph深度定制,而且Ceph已经成为LINUX系统和OpenStack的 “ 标配 ” ,用于支持各自的存储系统。Ceph可以提供对象存储、块设备存储和文件系统存储服务。

  1. Ceph没有采用HDFS的元数据寻址的方案,而且采用CRUSH算法,数据分布均衡,并行度高,而且在支持块存储特性上,数据可以具有强一致性,可以获得传统集中式存储的使用体验。
  2. 对象存储服务, Ceph支持Swift和S3的API接口。在块存储方面,支持精简配置、快照、克隆。在文件系统存储服务方面,支持Posix接口,支持快照。但是目前Ceph支持文件的性能相当其他分布式存储系统,部署稍显复杂,性能也稍弱,一般都将Ceph应用于块和对象存储。
  3. Ceph是去中心化的分布式解决方案,需要提前做好规划设计,对技术团队的要求能力比较高。特别是在Ceph扩容时,由于其数据分布均衡的特性,会导致整个存储系统性能的下降
2.2.2 Swift

Swift是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性、冗余和持久性。构筑在比较便宜的标准硬件存储基础设施之上,无需采用RAID(磁盘冗余阵列),通过在软件层面引入一致性散列技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性和可伸缩性,支持多租户模式、容器和对象读写操作,适合解决互联网的应用场景下非结构化数据存储问题。

1) Swift架构

Swift采用完全对称、面向资源的分布式系统架构设计,所有组件都可扩展,避免因单点失效而影响整个系统的可用性。
在这里插入图片描述

2)Swift 组件

  • 代理服务(Proxy Server):对外提供对象服务 API,会根据环的信息来查找服务地址并转发用户请求至相应的账户、容器或者对象服务;由于采用无状态的 REST 请求协议,可以进行横向扩展来均衡负载。
  • 认证服务(Authentication Server):验证访问用户的身份信息,并获得一个对象访问令牌(Token),在一定的时间内会一直有效;验证访问令牌的有效性并缓存下来直至过期时间。
  • 缓存服务(Cache Server):缓存的内容包括对象服务令牌,账户和容器的存在信息,但不会缓存对象本身的数据;缓存服务可采用 Memcached 集群,Swift 会使用一致性散列算法来分配缓存地址。
  • 账户服务(Account Server):提供账户元数据和统计信息,并维护所含容器列表的服务,每个账户的信息被存储在一个 SQLite 数据库中。
  • 容器服务(Container Server):提供容器元数据和统计信息,并维护所含对象列表的服务,每个容器的信息也存储在一个 SQLite 数据库中。
  • 对象服务(Object Server):提供对象元数据和内容服务,每个对象的内容会以文件的形式存储在文件系统中,元数据会作为文件属性来存储,建议采用支持扩展属性的 XFS 文件系统。
  • 复制服务(Replicator):会检测本地分区副本和远程副本是否一致,具体是通过对比散列文件和高级水印来完成,发现不一致时会采用推式(Push)更新远程副本,例如对象复制服务会使用远程文件拷贝工具 rsync 来同步;另外一个任务是确保被标记删除的对象从文件系统中移除。
  • 更新服务(Updater):当对象由于高负载的原因而无法立即更新时,任务将会被序列化到在本地文件系统中进行排队,以便服务恢复后进行异步更新;例如成功创建对象后容器服务器没有及时更新对象列表,这个时候容器的更新操作就会进入排队中,更新服务会在系统恢复正常后扫描队列并进行相应的更新处理。
  • 审计服务(Auditor):检查对象,容器和账户的完整性,如果发现比特级的错误,文件将被隔离,并复制其他的副本以覆盖本地损坏的副本;其他类型的错误会被记录到日志中。
  • 账户清理服务(Account Reaper):移除被标记为删除的账户,删除其所包含的所有容器和对象。
2.2.3 HDFS

Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统,是Hadoop的核心子项目,是基于流数据模式访问和处理超大文件的需求而开发的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。

在这里插入图片描述
HDFS采用Master/Slave的架构来存储数据,这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode。

  • HDFS Client(客户端):从NameNode获取文件的位置信息,再从DataNode读取或者写入数据。此外,client在数据存储时,负责文件的分割;
  • NameNode(元数据节点):管理名称空间、数据块(Block)映射信息、配置副本策略、处理客户端读写请求;
  • DataNode(存储节点):负责执行实际的读写操作,存储实际的数据块,同一个数据块会被存储在多个DataNode上
  • Secondary NameNode:定期合并元数据,推送给NameNode,在紧急情况下,可辅助NameNode的HA恢复。

1)HDFS的特点

  • 分块更大,每个数据块默认128MB;
  • 不支持并发,同一时刻只允许一个写入者或追加者;
  • 过程一致性,写入数据的传输顺序与最终写入顺序一致;
  • Master HA,2.X版本支持两个NameNode,(分别处于Active和Standby状态),故障切换时间一般几十秒到数分钟

2)HDFS使用的应用场景:

  • 适用于大文件、大数据处理,处理数据达到GB、TB、甚至PB级别的数据。适合流式文件访问,一次写入,多次读取。文件一旦写入不能修改,只能追加。
  • HDFS不适合的场景:低延时数据访问、小文件存储、并发写入、文件随机修改
2.2.4 GlusterFS

GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBand RDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。GlusterFS基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。
在这里插入图片描述
GlusterFS是一个具有高扩展性、高性能、高可用性、可横向扩展的弹性分布式文件系统,它主要由存储服务器(Brick Server)、客户端以及NFS/Samba存储网关组成。不难发现,GlusterFS架构中没有元数据服务器组件,这是其最大的设计这点,对于提升整个系统的性能、可靠性和稳定性都有着决定性的意义。GlusterFS支持TCP/IP和InfiniBand RDMA高速网络互联,客户端可通过原生Glusterfs协议访问数据,其他没有运行GlusterFS客户端的终端可通过NFS/CIFS标准协议通过存储网关访问数据。

3、结束语

分布式存储在云计算及容器技术中将广泛使用,本文仅简单了解了下几个主流的开源分布式技术,作为分布式体系架构中的基础数据存储组件至关重要,接下去将进行深入的探索。


参考资料:

  1. https://blog.csdn.net/zzq900503/article/details/80020725
  2. https://www.jianshu.com/p/e04e45e9f8da
  3. https://www.talkwithtrend.com/Article/260181
  4. https://www.talkwithtrend.com/Article/244687
  5. https://www.cnblogs.com/hukey/p/11899710.html
  6. 《大规模分布式存储系统原理解析与架构实战》
  7. https://www.talkwithtrend.com/Article/260151
  8. https://www.51cto.com/article/616378.html?mobile

转载请注明原文地址:https://blog.csdn.net/solihawk/article/details/122853361
文章会同步在公众号“牧羊人的方向”更新,感兴趣的可以关注公众号,谢谢!
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐