GlusterFS架构与维护

官方网站http://www.gluster.org/php

下载地址http://download.gluster.org/pub/gluster/glusterfs/node

GlusterFS 外部架构linux

wKiom1eDiHjA-6YjAAW6vXeeVEE704.png

    GlusterFS整体架构与组成部分如图2所示,它主要由存储服务器(BrickServer)、客户端以及NFS/Samba 存储网关组成。不难发现,GlusterFS 架构中没有元数据服务器组件,这是其最大的设计这点,对于提高整个系统的性能、可靠性和稳定性都有着决定性的意义。GlusterFS 支持TCP/IP 和InfiniBandRDMA 高速网络互联,客户端可经过原生Glusterfs 协议访问数据,其余没有运行GlusterFS客户端的终端可经过NFS/CIFS 标准协议经过存储网关访问数据。算法

GlusterFS内部架构
编程

wKioL1eDiNayWoKEAAcdvSoqpMo543.png

GlusterFS是模块化堆栈式的架构设计,如上图所示。模块称为Translator,是GlusterFS提供的一种强大机制,借助这种良好定义的接口能够高效简便地扩展文件系统的功能。缓存

1.服务端与客户端模块接口是兼容的,同一个translator可同时在两边加载。安全

2.GlusterFS中全部的功能都是经过translator实现,如Cluster, Storage,Performance, Protocol, Features等。性能优化

3.重点是GlusterFSClient端。bash

GlusterFS数据访问流程
服务器

wKiom1eDiTDxNAtWAACeeKXHV3M342.png

上图是GlusterFS数据访问的一个概要图:

1.首先是在客户端,用户经过glusterfs的mount point 来读写数据。

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

3.VFS将数据递交给FUSE内核文件系统,在启动glusterfs客户端之前,须要向系统注册一个实际的文件系统FUSE,如上图所示,该文件系统与ext3在同一个层次上面,ext3是对实际的磁片进行处理,而fuse文件系统则是将数据经过/dev/fuse这个设备文件递交给了glusterfs client端。因此,咱们能够将fuse文件系统理解为一个代理。

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

5.在glusterfsclient的处理末端,经过网路将数据递交给Glusterfs Server,而且将数据写入到服务器所控制的存储设备上

技术特色

GlusterFS在技术实现上与传统存储系统或现有其余分布式文件系统有显著不一样之处,主要体如今以下几个方面。

彻底软件实现(SoftwareOnly)

GlusterFS认为存储是软件问题,不可以把用户局限于使用特定的供应商或硬件配置来解决。GlusterFS采用开放式设计,普遍支持工业标准的存储、网络和计算机设备,而非与定制化的专用硬件设备捆绑。对于商业客户,GlusterFS能够以虚拟装置的形式交付,也能够与虚拟机容器打包,或者是公有云中部署的映像。开源社区中,GlusterFS被大量部署在基于廉价闲置硬件的各类操做系统上,构成集中统一的虚拟存储资源池。简言之,GlusterFS是开放的全软件实现,彻底独立于硬件和操做系统。

完整的存储操做系统栈(CompleteStorage Operating System Stack)

GlusterFS不只提供了一个分布式文件系统,并且还提供了许多其余重要的分布式功能,好比分布式内存管理、I/O调度、软RAID和自我修复等。GlusterFS汲取了微内核架构的经验教训,借鉴了GNU/Hurd操做系统的设计思想,在用户空间实现了完整的存储操做系统栈。

用户空间实现(User Space)

与传统的文件系统不一样,GlusterFS在用户空间实现,这使得其安装和升级特别简便。另外,这也极大下降了普通用户基于源码修改GlusterFS的门槛,仅仅须要通用的C程序设计技能,而不须要特别的内核编程经验。

模块化堆栈式架构(ModularStackable Architecture)

GlusterFS采用模块化、堆栈式的架构,可经过灵活的配置支持高度定制化的应用环境,好比大文件存储、海量小文件存储、云存储、多传输协议应用等。每一个功能以模块形式实现,而后以积木方式进行简单的组合,便可实现复杂的功能。好比,Replicate模块可实现RAID1,Stripe模块可实现RAID0,经过二者的组合可实现RAID10和RAID01,同时得到高性能和高可性。

原始数据格式存储(DataStored in Native Formats)

GlusterFS无元数据服务设计(NoMetadata with the Elastic Hash Algorithm)以原始数据格式(如EXT三、EXT四、XFS、ZFS)储存数据,并实现多种数据自动修复机制。所以,系统极具弹性,即便离线情形下文件也能够经过其余标准工具进行访问。若是用户须要从GlusterFS中迁移数据,不须要做任何修改仍然能够彻底使用这些数据。

对Scale-Out存储系统而言,最大的挑战之一就是记录数据逻辑与物理位置的映像关系,即数据元数据,可能还包括诸如属性和访问权限等信息。传统分布式存储系统使用集中式或分布式元数据服务来维护元数据,集中式元数据服务会致使单点故障和性能瓶颈问题,而分布式元数据服务存在性能负载和元数据同步一致性问题。特别是对于海量小文件的应用,元数据问题是个很是大的挑战。

GlusterFS独特意采用无元数据服务的设计,取而代之使用算法来定位文件,元数据和数据没有分离而是一块儿存储。集群中的全部存储系统服务器均可以智能地对文件数据分片进行定位,仅仅根据文件名和路径并运用算法便可,而不须要查询索引或者其余服务器。这使得数据访问彻底并行化,从而实现真正的线性性能扩展。无元数据服务器极大提升了GlusterFS的性能、可靠性和稳定性。

一些设计与讨论

无元数据服务器vs 元数据服务器

无元数据服务器设计的好处是没有单点故障和性能瓶颈问题,可提升系统扩展性、性能、可靠性和稳定性。对于海量小文件应用,这种设计可以有效解决元数据的难点问题。它的负面影响是,数据一致问题更加复杂,文件目录遍历操做效率低下,缺少全局监控管理功能。同时也致使客户端承担了更多的职能,好比文件定位、名字空间缓存、逻辑卷视图维护等等,这些都增长了客户端的负载,占用至关的CPU 和内存。

用户空间vs内核空间

用户空间实现起来相对要简单许多,对开发者技能要求较低,运行相对安全。用户空间效率低,数据须要屡次与内核空间交换,另外GlusterFS 借助FUSE 来实现标准文件系统接口,性能上又有所损耗。内核空间实现能够得到很高的数据吞吐量,缺点是实现和调试很是困难,程序出错常常会致使系统崩溃,安全性低。纵向扩展上,内核空间要优于用户空间,GlusterFS 有横向扩展能力来弥补。

堆栈式vs 非堆栈式

这有点像操做系统的微内核设计与单一内核设计之争。GlusterFS 堆栈式设计思想源自GNU/Hurd 微内核操做系统,具备很强的系统扩展能力,系统设计实现复杂性下降不少,基本功能模块的堆栈式组合就能够实现强大的功能。查看GlusterFS卷配置文件咱们能够发现,translator 功能树一般深达10层以上,一层一层进行调用,效率可见一斑。非堆栈式设计可当作相似Linux 的单一内核设计,系统调用经过中断实现,很是高效。后者的问题是系统核心臃肿,实现和扩展复杂,出现问题调试困难。

原始存储格式vs 私有存储格式

GlusterFS使用原始格式存储文件或数据分片,能够直接使用各类标准的工具进行访问,数据互操做性好,迁移和数据管理很是方便。然而,数据安全成了问题,由于数据是以平凡的方式保存的,接触数据的人能够直接复制和查看。这对不少应用显然是不能接受的,好比云存储系统,用户特别关心数据安全,这也是影响公有云存储发展的一个重要缘由。私有存储格式能够保证数据的安全性,即便泄露也是不可知的。GlusterFS 要实现本身的私有格式,在设计实现和数据管理上相对复杂一些,也会对性能产生必定影响。

大文件vs 小文件

GlusterFS 适合大文件仍是小文件存储?弹性哈希算法和Stripe 数据分布策略,移除了元数据依赖,优化了数据分布,提升数据访问并行性,可以大幅提升大文件存储的性能。对于小文件,无元数据服务设计解决了元数据的问题。但GlusterFS 并无在I/O 方面做优化,在存储服务器底层文件系统上仍然是大量小文件,本地文件系统元数据访问是一个瓶颈,数据分布和并行性也没法充分发挥做用。所以,GlusterFS 适合存储大文件,小文件性能较差,还存在很大优化空间。

可用性vs 存储利用率

GlusterFS使用复制技术来提供数据高可用性,复制数量没有限制,自动修复功能基于复制来实现。可用性与存储利用率是一个矛盾体,可用性高存储利用率就低,反之亦然。采用复制技术,存储利用率为1/复制数,镜像是50%,三路复制则只有33%。其实,能够有方法来同时提升可用性和存储利用率,好比RAID5的利用率是(n-1)/n,RAID6是(n-2)/n,而纠删码技术能够提供更高的存储利用率。可是,鱼和熊掌不可得兼,它们都会对性能产生较大影响。

术语表:

Xlator=translator:glusterfs 模块的代名词

Brick :存储目录是Glusterfs 的基本存储单元,由可信存储池中服务器上对外

输出的目录表示。存储目录的格式由服务器和目录的绝对路径构成,具体以下:

SERVER:EXPORT.例如:myhostname:/exports/myexportdir/

Volume :卷是存储目录的逻辑组合。大部分gluster 管理操做是在卷上进行的。

Metadata:元数据关于数据的数据,用于描述文件、目录等的相关信息。

FUSE=Filesystem inUserspace: 是一个内核模块,容许用户建立本身的文件系

统无需修改内核代码。

Glusterd : Glusterfs 后台进程,运行在全部Glusterfs 节点上。

DistributeVolume: 分布式卷

ReplicateVolume: 副本卷

StripeVolume: 条带卷

DistributeReplicate Volume: 分布式副本卷

DHT=Distribute HashTable

AFR=Automatic FileReplication

SAN = Storage AreaNetwork: 存储区域网络是一种高速网络或子网络,提供在计算机与存储之间的数据传输。

NAS = Network-attachedstorage:网络附属存储是一种将分布、独立的数据整合为大型、集中化管理的数据中心,以便于对不一样主机和应用服务器进行访问的技术。

RPC =Remote ProcedureCall: 远程过程调用

XDR =eXtern DataRepresentation: RPC 传递数据的格式

CLI=Command LineInterface 控制台

argp=Argument Parser

UUID=University UnqiueIdentifier

SVC =service

CLNT =client

MGMT=management

cbks = Call Backs

ctx = context

lk = lock

attr = attribute

txn = transaction

rb = replace brick

worm = write once , readmany

系统配额:

一、开启/关闭系统配额

gluster volume quota VOLNAME enable/disable


二、设置(重置)目录配额

gluster volume quota VOLNAME limit-usage /img limit-value
gluster volume quota img limit-usage /quota 10GB


设置img 卷下的quota 子目录的限额为10GB。这个目录是以系统挂载目录为根目录”/”,因此/quota 即客户端挂载目录下的子目录quota

三、配额查看

gluster volume quota VOLNAME list
gluster volume quota VOLNAME list


可使用如上两个命令进行系统卷的配额查看,第一个命令查看目的卷的全部配额设置,

第二个命令则是执行目录进行查看。能够显示配额大小及当前使用容量,若无使用容量(最小0KB)则说明设置的目录多是错误的(不存在)。

 地域复制:

gluster volume geo-replication MASTER SLAVE start/status/stop

 //地域复制是系统提供的灾备功能,可以将系统的所有数据进行异步的增量备份到另外的磁盘中。

gluster volume geo-replication img 192.168.10.8:/data1/brick1 start

如上,开始执行将img 卷的全部内容备份到10.8 下的/data1/brick1 中的task,须要注意的是,这个备份目标不能是系统中的Brick。

 平衡卷:

平衡布局是颇有必要的,由于布局结构是静态的,当新的bricks 加入现有卷,新建立的文件会分布到旧的bricks 中,因此须要平衡布局结构,使新加入的bricks 生效。布局平衡只是使

新布局生效,并不会在新的布局移动老的数据,若是你想在新布局生效后,从新平衡卷中的数据,还须要对卷中的数据进行平衡。

当你扩展或者缩小卷以后,须要从新在服务器直接从新平衡一下数据,从新平衡的操做被分

为两个步骤:

一、Fix Layout

修改扩展或者缩小后的布局,以确保文件能够存储到新增长的节点中。

二、Migrate Data

从新平衡数据在新加入bricks 节点以后。

* Fix Layout and Migrate Data

先从新修改布局而后移动现有的数据(从新平衡)

# gluster volume rebalance VOLNAME fix-layout start
# gluster volume rebalance VOLNAME migrate-data start

也能够两步合一步同时操做

# gluster volume rebalance VOLNAME start
# gluster volume rebalance VOLNAME status //你能够在在平衡过程当中查看平衡信息
#  gluster volume rebalance VOLNAME stop //你也能够暂停平衡,再次启动平衡的时候会从上次暂停的地方继续开始平衡。

I/O 信息查看:

Profile Command 提供接口查看一个卷中的每个brick 的IO 信息

#gluster volume profile VOLNAME start //启动profiling,以后则能够进行IO 信息查看
#gluster volume profile VOLNAME info //查看IO 信息,能够查看到每个Brick 的IO 信息
#gluster volume profile VOLNAME stop //查看结束以后关闭profiling 功能

Top监控:

Top command 容许你查看bricks 的性能例如:read, write, fileopen calls, file read calls, file,write calls,directory open calls, and directory real calls

全部的查看均可以设置top 数,默认100

# gluster volume top VOLNAME open [brick BRICK-NAME] [list-cnt cnt] //查看打开的fd
# gluster volume top VOLNAME read [brick BRICK-NAME] [list-cnt cnt] //查看调用次数最多的读调用
# gluster volume top VOLNAME write [brick BRICK-NAME] [list-cnt cnt] //查看调用次数最多的写调用
# gluster volume top VOLNAME opendir [brick BRICK-NAME] [list-cnt cnt] //查看次数最多的目录调用
# gluster volume top VOLNAME readdir [brick BRICK-NAME] [list-cnt cnt] //查看次数最多的目录调用
# gluster volume top VOLNAME read-perf [bs blk-size count count] [brickBRICK-NAME] [list-cnt cnt] //查看每一个Brick 的读性能
# gluster volume top VOLNAME write-perf [bs blk-size count count] [brickBRICK-NAME] [list-cnt cnt] //查看每一个Brick 的写性能

性能优化配置选项:

gluster volume set arch-img cluster.min-free-disk 默认是10% 磁盘剩余告警
gluster volume set arch-img cluster.min-free-inodes 默认是5% inodes 剩余告警
gluster volume set img performance.read-ahead-page-count 8 默认4,预读取的数量
gluster volume set img performance.io-thread-count 16 默认16 io 操做的最大线程
gluster volume set arch-img network.ping-timeout 10 默认42s
gluster volume set arch-img performance.cache-size 2GB 默认128M 或32MB,
gluster volume set arch-img cluster.self-heal-daemon on 开启目录索引的自动愈合进程
gluster volume set arch-img cluster.heal-timeout 300 自动愈合的检测间隔,默认为600s #3.4.2版本才有
gluster volume set arch-img performance.write-behind-window-size 256MB #默认是1M 能提升写性能单个文件后写缓冲区的大小默认1M


参考资料:

http://www.gluster.com/products/gluster-file-system-architecture-white-paper/

http://www.gluster.com/products/performance-in-a-gluster-system-white-paper/

http://gluster.com/community/documentation/index.php/Main_Page

http://blog.csdn.net/liuaigui/

相关文章
相关标签/搜索