首页 > 其他 > 详细

GlusterFS源码解析 —— GlusterFS简介

时间:2014-04-27 13:16:20      阅读:522      评论:0      收藏:0      [点我收藏+]

                                                                         —— —— 本系列博客源码是基于GlusterFS 3.4.3 版本

1. Glusterfs简介

GlusterFSScale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IPInfiniBandRDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。GlusterFS基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。


2. Glusterfs特点


2.1 扩展性和高性能

GlusterFS利用双重特性来提供几TB至数PB的高扩展存储解决方案。Scale-Out架构允许通过简单地增加资源来提高存储容量和性能,磁盘、计算和I/O资源都可以独立增加,支持10GbEInfiniBand等高速网络互联。Gluster弹性哈希(ElasticHash)解除了GlusterFS对元数据服务器的需求,消除了单点故障和性能瓶颈,真正实现了并行化数据访问。

2.2 高可用性

GlusterFS可以对文件进行自动复制,如镜像或多次复制,从而确保数据总是可以访问,甚至是在硬件故障的情况下也能正常访问。自我修复功能能够把数据恢复到正确的状态,而且修复是以增量的方式在后台执行,几乎不会产生性能负载。GlusterFS没有设计自己的私有数据文件格式,而是采用操作系统中主流标准的磁盘文件系统(如EXT3ZFS)来存储文件,因此数据可以使用各种标准工具进行复制和访问。

2.3全局统一命名空间

全局统一命名空间将磁盘和内存资源聚集成一个单一的虚拟存储池,对上层用户和应用屏蔽了底层的物理硬件。存储资源可以根据需要在虚拟存储池中进行弹性扩展,比如扩容或收缩。当存储虚拟机映像时,存储的虚拟映像文件没有数量限制,成千虚拟机均通过单一挂载点进行数据共享。虚拟机I/O可在命名空间内的所有服务器上自动进行负载均衡,消除了SAN环境中经常发生的访问热点和性能瓶颈问题。

2.4 弹性哈希算法

GlusterFS采用弹性哈希算法在存储池中定位数据,而不是采用集中式或分布式元数据服务器索引。在其他的Scale-Out存储系统中,元数据服务器通常会导致I/O性能瓶颈和单点故障问题。GlusterFS中,所有在Scale-Out存储配置中的存储系统都可以智能地定位任意数据分片,不需要查看索引或者向其他服务器查询。这种设计机制完全并行化了数据访问,实现了真正的线性性能扩展。

2.5 弹性卷管理

数据储存在逻辑卷中,逻辑卷可以从虚拟化的物理存储池进行独立逻辑划分而得到。存储服务器可以在线进行增加和移除,不会导致应用中断。逻辑卷可以在所有配置服务器中增长和缩减,可以在不同服务器迁移进行容量均衡,或者增加和移除系统,这些操作都可在线进行。文件系统配置更改也可以实时在线进行并应用,从而可以适应工作负载条件变化或在线性能调优。

2.6基于标准协议

Gluster存储服务支持NFS,CIFS, HTTP, FTP以及Gluster原生协议,完全与POSIX标准兼容。现有应用程序不需要作任何修改或使用专用API,就可以对Gluster中的数据进行访问。这在公有云环境中部署Gluster时非常有用,Gluster对云服务提供商专用API进行抽象,然后提供标准POSIX接口。


3. 模块化堆栈式架构简介

GlusterFS采用模块化、堆栈式的架构,可通过灵活的配置支持高度定制化的应用环境,比如大文件存储、海量小文件存储、云存储、多传输协议应用等。每个功能以模块形式实现,然后以积木方式进行简单的组合,即可实现复杂的功能。比如,Replicate模块可实现RAID1Stripe模块可实现RAID0,通过两者的组合可实现RAID10RAID01,同时获得高性能和高可靠性。如下图所示:

bubuko.com,布布扣

 

每个功能模块就是一个Xlator,不同的xlator在初始化后形成树,每个xlator为这棵树中的节点,glusterfs要工作,就必然会涉及到节点之间的调用。

调用主要包括2个方面,父节点调用子节点,子节点调用父节点,如当父节点向子节点发出写请求则要调用子节点的写操作,当子节点写操作完成后,会调用父节点的写回调操作。父子节点的调用关系可用下图说明:

 

 bubuko.com,布布扣

4. glusterfs整体工作流程

整体流程如下图所示:

bubuko.com,布布扣

 

1)     首先是在客户端, 用户通过glusterfs的mount point 来读写数据,对于用户来说,集群系统的存在对用户是完全透明的,用户感觉不到是操作本地系统还是远端的集群系统。

2)     用户的这个操作被递交给 本地linux系统的VFS来处理。

3)     VFS 将数据递交给FUSE 内核文件系统:在启动glusterfs客户端以前,需要想系统注册一个实际的文件系统FUSE,如上图所示,该文件系统与ext3在同一个层次上面,ext3 是对实际的磁盘进行处理, 而fuse文件系统则是将数据通过/dev/fuse 这个设备文件递交给了glusterfsclient端。所以, 我们可以将 fuse文件系统理解为一个代理。

4)     数据被fuse 递交给Glusterfs client 后,client 对数据进行一些指定的处理(所谓的指定,是按照client配置文件据来进行的一系列处理


5. 主要模块介绍

Gluterfs整体采用堆栈式架构,模仿的函数调用栈,各个功能模块耦合度低,且很多模块可自由结合形成不同的功能。下面主要介绍一下Glusterfs的主要模块:

  5.1 DHT模块

    该xlator主要实现了文件的哈希分布,将0到2的32次方根据子卷的个数平均划分若干个区间,文件到达DHT时,会根据文件名计算所得的哈希值所在的区间,来决定该文件落在哪个子卷上。其中各个子卷的哈希区间记录在父目录的扩展属性中。此外,该模块还实现了数据迁移和扩容功能。

  5.2 AFR模块

    该xlator主要实现了文件级别的镜像冗余功能,类似raid1功能,不过不是块级别的。数据到达AFR时,会将ChangeLog加1,然后写数据,待所有子卷全部写成功后,再将ChangeLog减1。若需要修复时,根据ChangeLog判断哪个是source卷。实际的修复流程非常复杂,包括meta,entry等。冗余卷没有主从之分,任何一个子卷都可以保证上层的读写请求,可在不影响上层应用的情况下执行修复功能。

  5.3 Stripe模块

    该xlator主要实现了文件的写条带,即文件到达Stripe时,会将文件按固定大小的条带写入各个子卷,类似raid0功能。在高版本中,有两种模式:写空洞文件模式和聚合模式。该模块原理和实现都较DHT和AFR模块简单,且代码量较少,在此不再赘述。


                                                                                   —— —— 以上内容来自互联网

GlusterFS源码解析 —— GlusterFS简介,布布扣,bubuko.com

GlusterFS源码解析 —— GlusterFS简介

原文:http://blog.csdn.net/wangyuling1234567890/article/details/24564185

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!