分布式存储在云计算及容器技术中将广泛使用,本文仅简单介绍了下几个主流的开源分布式技术,整个分布式存储系列相当复杂,文中介绍略微粗浅且当引子。顺祝新年快乐,虎年大吉!
1、集中式存储和分布式存储
1.1 存储类型
-
块存储是基于Block块的存储模式,直接挂在主机上,一般用于主机上直接存储数据空间和数据库的应用,这类应用要求很高的随机读写性能和高可靠性。块存储有两种常见的存储方式:DAS(Direct Attached Storage)-直连主机存储方式和SAN(Storage Area Network)-高速网络链接主机存储方式
-
文件存储(NAS)是依附网络提供文件存储服务,相对来说更能兼顾多个应用和更多用户访问,同时提供方便的数据共享手段。但是从性能上相对SAN来说就要低一些
-
对象存储构建于键值存储,核心是将数据和控制分离,并且基于对象存储设备构建存储系统,对外以RESTful API形式服务。对象存储主要是解决海量数据的并发访问需求,适用于互联网类的应用
块存储、文件存储和对象存储的层次关系如下图所示:
-
从底层往上看,最底层就是硬盘,多个硬盘可以做成RAID组,无论是单个硬盘还是RAID组,都可以做成PV,多个PV物理卷捏在一起构成VG卷组。 -
接下来,VG卷组划分为很多块LV逻辑卷。到这一层为止,数据一直都是以Block块的形式存在的,这时候提供出来的服务就是块存储服务。
-
通过FC协议或者iSCSI协议对卷访问,映射到主机端本地,成为一个裸设备。在主机端可以直接在上面安装数据库,也可以格式化成文件系统后交给应用程序使用,这时候就是一个标准的SAN存储设备的访问模式,网络间传送的是块。
-
也可以在本地做文件系统,之后以NFS/CIFS协议挂载,映射到本地目录,直接以文件形式访问,这就成了NAS访问的模式,在网络间传送的是文件。
-
如果不走NAS,在本地文件系统上面部署OSD服务端,把整个设备做成一个OSD,这样的节点多来几个,再加上必要的MDS节点,互联网另一端的应用程序再通过HTTP协议直接进行访问,这就变成了对象存储的访问模式。
-
系统层级上来说,这三种存储是按照块->文件->对象逐级向上的。文件一定是基于块上面去做,不管是远端还是本地。而对象存储的底层或者说后端存储通常是基于一个本地文件系统(XFS/Ext4)。
1.2 集中式和分布式存储对比
集中式存储的发展经历了机械盘、SSD固态硬盘、融合存储、NVMe接口全闪存,其发展趋势主要依赖于性能的稳步提升,目前延时几乎可降至0.02ms以下,当前全闪存存储仍然是市场的主流。分布式存储,从IBM的GPFS产品到如今,已经经历了20余年的发展,现在形成了SDS(软件定义存储)的全新模式。随着金融业非结构化数据占比的不断增长,传统的集中式存储无法满足数据服务的灵活性,所以对分布式存储也有了更多的需求。
传统集中式存储的IT架构存在诸多瓶颈,包括采购成本高昂、维护操作繁琐、风险相对集中、性能扩展受限等,难以应对日渐庞杂的金融业务数据以及日益复杂的业务需求。而分布式架构通过虚拟化实现计算、存储、网络的融合部署,可以构建起高可用、易扩展、低成本的适应如今金融数字化的发展体系,建设分布式存储成为金融行业数字化转型的重要方向。
随着互联网类业务的迅猛发展,分布式存储的实践需要结合实际的业务使用场景,在多模态和混合信息架构下,主要分为几个应用方向:
-
大数据分析类业务,在线交易、数据分析和实时查询等不同场景既对数据存储存在一定性能需求,又需要数据存储动态扩展,分布式存储的线性扩容优势完美契合
-
多元化的系统架构,主要是混合云和容器,容器与主流分布式存储对接十分便捷,同时分布式存储也提供了ISCSI/NFS/S3等多种协议更好地与业务适配
2、分布式存储技术
2.1 分布式存储架构
2.1.1 中间控制节点架构
2.1.2 完全无中心架构—计算模式
以Ceph为代表的架构,在该架构中与HDFS不同的地方在于该架构中没有中心节点。客户端是通过一个设备映射关系计算出来其写入数据的位置,这样客户端可以直接与存储节点通信,从而避免中心节点的性能瓶颈。
如上图所示,在Ceph存储系统架构中核心组件有MON服务、OSD服务和MDS服务等。
-
MON 服务用于维护存储系统的硬件逻辑关系,主要是服务器和硬盘等在线信息。MON 服务通过集群的方式保证其服务的可用性。
-
OSD服务用于实现对磁盘的管理,实现真正的数据读写,通常一个磁盘对应一个OSD服务
-
MDS只为CephFS文件存储系统跟踪文件的层次机构和存储元数据。Ceph 块设备和 RADOS 并不需要元数据,因此也不需要Ceph MDS守护进程
-
CRUSH:CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的位置。
-
RADOS:RADOS 就是包含上述三种服务的ceph存储集群。在Ceph中所有的数据都以对象形式存在的,并且无论哪种数据类型RADOS对象存储都将负责保存这些对象。RADOS层可以确保数据始终保持一致性。要做到这一点必须执行数据复制、故障检测和恢复,以及数据迁移和所在集群节点实现再平衡
-
RBD (块设备):原名RADOS块设备,提供可靠的分布式和高性能块存储磁盘给客户端。
-
CephFS:Ceph文件系统提供了一个使用 Ceph 存储集群存储用户数据的与 POSIX 兼容的文件系统
-
Librados:libRADOS库为PHP 、 RUBY 、 Java 、 Python 、 C++等语言提供 了方便访问 RADOS 接口的方式
-
RADOS GW:RGW提供对象存储服务,它允许应用程序和Ceph对象存储建立连接, RGW 提供了与Amazon S3和openstack Swift兼容的RUSTFUL API
2.1.3 完全无中心架构—一致性哈希
Swift 中存在两种映射关系,对于一个文件,通过哈希算法(MD5)找到对应的虚节点(一对一的映射关系),虚节点再通过映射关系(ring文件中二维数组)找到对应的设备(多对多的映射关系),这样就完成了一个文件存储在设备上的映射。
2.2 主流开源分布式存储技术
开源协议说明:
-
GPL:不允许修改后和衍生的代码作为闭源的商业软件发布和销售,修改后该软件产品必须也采用GPL协议;
-
GPLV2:修改文本的整体就必须按照GPL流通,不仅该修改文本的源码必须向社会公开,而且对于这种修改文本的流通不准许附加修改者自己作出的限制;
-
GPLV3:要求用户公布修改的源代码,还要求公布相关硬件;
-
LGPL:更宽松的GPL
2.2.1 Ceph
-
Ceph没有采用HDFS的元数据寻址的方案,而且采用CRUSH算法,数据分布均衡,并行度高,而且在支持块存储特性上,数据可以具有强一致性,可以获得传统集中式存储的使用体验。
-
对象存储服务, Ceph支持Swift和S3的API接口。在块存储方面,支持精简配置、快照、克隆。在文件系统存储服务方面,支持Posix接口,支持快照。但是目前Ceph支持文件的性能相当其他分布式存储系统,部署稍显复杂,性能也稍弱,一般都将Ceph应用于块和对象存储。
-
Ceph是去中心化的分布式解决方案,需要提前做好规划设计,对技术团队的要求能力比较高。特别是在Ceph扩容时,由于其数据分布均衡的特性,会导致整个存储系统性能的下降
2.2.2 Swift
Swift是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性、冗余和持久性。构筑在比较便宜的标准硬件存储基础设施之上,无需采用RAID(磁盘冗余阵列),通过在软件层面引入一致性散列技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性和可伸缩性,支持多租户模式、容器和对象读写操作,适合解决互联网的应用场景下非结构化数据存储问题。
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
3、结束语
分布式存储在云计算及容器技术中将广泛使用,本文仅简单了解了下几个主流的开源分布式技术,作为分布式体系架构中的基础数据存储组件至关重要,接下去将进行深入的探索。
顺祝新年快乐,虎年大吉!
参考资料:
-
https://blog.csdn.net/zzq900503/article/details/80020725
-
https://www.jianshu.com/p/e04e45e9f8da
-
https://www.talkwithtrend.com/Article/260181
-
https://www.talkwithtrend.com/Article/244687
-
https://www.cnblogs.com/hukey/p/11899710.html
-
《大规模分布式存储系统原理解析与架构实战》
-
https://www.talkwithtrend.com/Article/260151
-
https://www.51cto.com/article/616378.html?mobile
原文始发于微信公众号(牧羊人的方向):分布式系列之开源分布式存储技术分析
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/65201.html