您的位置:首页 > 其它

Glusterfs文件系统简介和源码简单分析

2014-07-25 11:09 1501 查看
Glusterfs是开源存储解决方案提供商Gluster的核心,GlusterFS是“一套可扩展的开源集群文件系统,并能够轻松为客户提供全局命名空间、分布式前端以及高达数百PB级别的扩展性”。Gluster公司当前被Redhat收购,作为其进军存储软件市场的手段。开源的Glusterfs受到了存储软件使用和研发者的青睐,在国内,使用Gluster作为平台数据管理软件的公司越来越多,开发者也越来越多。关于Glusterfs的介绍除了官方文档之外,还有很多的牛人的分析,作为初学者,将对Glusterfs的个人理解呈现出来,方便自己后续学习。文中复制了参考文献中各位大牛的段落,特此声明!

一、Glusterfs简介

Glusterfs是一个开源的分布式文件系统,具有良好的扩展能力,能够支持数PB的存储容量和数千客户端的访问。与Lustre、ceph等面向高性能计算的并行文件系统相比,其最大的特点是无元数据服务设计。Lustre 2.0版本(不太准确,关注者请详查whamcloud网站)之后和ceph都采用元数据集群管理元数据,但元数据依然和数据分开存储。Glusterfs与GFS、HDFS等分布式文件系统相比,共同点在于都借助于TCP/IP或者Infiniband
RDMA网络将廉价的(可靠性不高)、物理分布的存储资源整合在一起,都提供副本机制保证数据的可靠性;不同之处在于Glusterfs提供posix-io接口,并且无元数据服务设计。另外在设计上Glusterfs采用模块化堆栈式架构(Modular Stackable Architecture),可以根据不同的应用环境特点,为不同的数据负载提供优异的性能。

1、Glusterfs的特点

Glusterfs具有以下重要特点:

良好的可扩展性

Glusterfs优良的可扩展能力体现在两个方面。第一,采用弹性哈希(Elastic Hash)消除了系统对元数据服务器的需求,消除了单点故障和性能瓶颈,实现真正意义上的并行化数据访问,因而称之为可scale-out的架构。这就保障了Glusterfs能够扩展至提供数百PB存储空间,数千上万的客户端的存储服务。第二,弹性的存储系统,提供在线扩展。允许动态的增删数据卷、扩展或者缩减数据卷、增删存储服务器等,而不影响系统正常运行。

高可用性

可用性指的是能够连续向用户提供服务的能力,对于企业和用户非常重要,停机或者故障会造成经济和信誉上的损失。Glusterfs可以对文件进行复制,当一台服务器或者某一块磁盘产生了故障,其他的服务器和磁盘上的副本能够提供对数据的正常访问。自动修复功能在后台将数据恢复,增量恢复的方式降低了后台恢复对性能的影响。另外,弹性的扩展能力使得能够增删存储服务器能够在线进行,因而提高了可用性。

高可靠性

Gluster的可靠性保障与GFS、HDFS的可靠性实现相似,都是通过实现副本机制来实现。副本机制能够冗余服务器故障,并且依赖于软件实现。Lustre和PVFS并行文件系统的可靠性由底层的硬件RAID提供,不能冗余服务器故障。panasas的PanFS通过文件级RAID提供可靠性,能够冗余服务器故障。另外Glusterfs的无元数据服务器设计,不需要维护元数据的同步和一致性,增强了可靠性。

较高的性能

glusterfs的分布式架构和无集中式元数据设计带来了较高的性能,不同的客户端上的应用进程能够并发的对不同的物理存储服务器进行访问。因而能够聚合不同存储服务器的带宽,向应用提供高性能。访问数据存储节点之前不需要访问元数据节点,因而降低了访问延迟。然而,与Lustre相比,Glusterfs的客户端设计采用了fuse,需要在用户态和内核态进行数次切换,增加了请求处理时间;并且Glusterfs的模块化堆栈式结构,一个请求往往需要经过数个模块(translator、xlator)的处理才能完成,使得延迟增加。另外,无集中式元数据设计,使得与元数据相关的操作性能低,因为需要访问相关的数个存储服务器节点才能完成请求。

应用范围广

Glusterfs采用模块化、堆栈式的架构,可以通过灵活的配置支持各类应用环境,如大文件存储、海量小文件存储、云存储、多传输协议应用等。每个功能以模块的形式实现,然后以树的结构进行组合,可以实现定制功能。比如Replicate模块可实现RAID1,Stripe模块可实现RAID0,通过两者的组合可实现RAID10和RAID01,同时获得高性能和高可靠性。dht模块实现数据在各个子卷上的分布存储(文件以哈希方式存储在子卷上),stripe模块可以实现条带(同一文件在两个子卷上分布),二者组合可以实现分布式条带存储。因而,可以适应大文件应用场景。

2、Glusterfs的整体架构设计



图1 Glusterfs架构
Glusterfs的架构如图1所示,主要由客户端、存储服务器(brick server)和NFS/Samba网关组成。客户端可以通过原生Glusterfs客户端协议访问存储服务器中的数据,包括Supercomputer、Datacenter等通常使用Linux OS作为操作系统的都可以安装原生客户端。没有安装原生客户端协议的节点可以通过NFS/CIFS标准,经过存储网关转换访问数据。存储网关实际起到了协议转换作用。
存储服务器提供基本的数据存储功能,storage brick可以看作与物理节点对应,一个brick可以放置数个Glusterfs的volume的数据。存储服务器上运行Glusterfsd进程,负责处理来自其他组件的数据请求。Glusterfs不同于其他分布式文件系统的是,数据以原始格式直接存储在服务器的本地文件系统上,如EXT3、EXT4、XFS、ZFS等。卷管理器(运行于客户端或者存储网关上)将存储服务器按照用户要求组成集群,如Stripe(RAID0)、Replicate(RAID1)和DHT(分布式Hash)存储集群,也可利用嵌套组合构成更加复杂的集群,如RAID10。
客户端较之于存储服务器,实现了更多的功能,如卷管理、IO调度、文件定位、数据预取、延迟写和缓存。客户端上运行Glusterfs进程,它实际是Glusterfsd的符号链接,利用FUSE(File system in User Space)模块将Glusterfs挂载到本地文件系统之上,实现POSIX兼容的方式来访问系统数据。在最新的3.1.X版本中,客户端不再需要独立维护卷配置信息,改成自动从运行在网关上的glusterd弹性卷管理服务进行获取和更新,极大简化了卷管理。GlusterFS客户端负载相对传统分布式文件系统要高,包括CPU占用率和内存占用。

GlusterFS存储网关提供弹性卷管理和NFS/CIFS访问代理功能,其上运行Glusterd和Glusterfs进程,两者都是Glusterfsd符号链接。卷管理器负责逻辑卷的创建、删除、容量扩展与缩减、容量平滑等功能,并负责向客户端提供逻辑卷信息及主动更新通知功能等。GlusterFS 3.1.X实现了逻辑卷的弹性和自动化管理,不需要中断数据服务或上层应用业务。对于Windows客户端或没有安装GlusterFS的客户端,需要通过NFS/CIFS代理网关来访问,这时网关被配置成NFS或Samba服务器。相对原生客户端,网关在性能上要受到NFS/Samba的制约。

3、卷管理器

卷管理器是Glusterfs重要的组成部分,卷管理器负责逻辑卷的创建、删除、容量扩展与缩减、容量平滑等功能,并负责向客户端提供逻辑卷信息及主动更新通知功能等。GlusterFS是模块化堆栈式的架构设计,如图3所示。模块称为Translator,是GlusterFS提供的一种强大机制,借助这种良好定义的接口可以高效简便地扩展文件系统的功能。服务端与客户端模块接口是兼容的,同一个translator可同时在两边加载。每个translator都是SO动态库,运行时根据配置动态加载。每个模块实现特定基本功能,GlusterFS中所有的功能都是通过translator实现,比如Cluster,
Storage, Performance, Protocol, Features等,基本简单的模块可以通过堆栈式的组合来实现复杂的功能。这一设计思想借鉴了GNU/Hurd微内核的虚拟文件系统设计,可以把对外部系统的访问转换成目标系统的适当调用。大部分模块都运行在客户端,比如合成器、I/O调度器和性能优化等,服务端相对简单许多。客户端和存储服务器均有自己的存储栈,构成了一棵Translator功能树,应用了若干模块。模块化和堆栈式的架构设计,极大降低了系统设计复杂性,简化了系统的实现、升级以及系统维护。首先看卷管理器是如何创建一个卷的。举例说明,Glusterfs的网关、客户端的配置文件如下所示,Glusterfs根据此配置文件创建卷。
volume v1-client-0
type protocol/client
option remote-host 192.168.12.201
option remote-subvolume /home/gluster/data1
option transport-type tcp
end-volume

volume v1-client-1
type protocol/client
option remote-host 192.168.12.202
option remote-subvolume /home/gluster/data2
option transport-type tcp
end-volume

volume v1-client-2
type protocol/client
option remote-host 192.168.12.203
option remote-subvolume /home/gluster/data3
option transport-type tcp
end-volume

volume v1-client-3
type protocol/client
option remote-host 192.168.12.204
option remote-subvolume /home/gluster/data4
option transport-type tcp
end-volume

volume v1-client-4
type protocol/client
option remote-host 192.168.12.205
option remote-subvolume /home/gluster/data5
option transport-type tcp
end-volume

volume v1-client-5
type protocol/client
option remote-host 192.168.12.206
option remote-subvolume /home/gluster/data6
option transport-type tcp
end-volume

volume v1-replicate-0
type cluster/replicate
subvolumes v1-client-0 v1-client-1
end-volume

volume v1-replicate-1
type cluster/replicate
subvolumes v1-client-2 v1-client-3
end-volume

volume v1-replicate-2
type cluster/replicate
subvolumes v1-client-4 v1-client-5
end-volume

volume v1-dht
type cluster/distribute
subvolumes v1-replicate-0 v1-replicate-1 v1-replicate-2
end-volume
根据此配置文件,卷管理器可以创建卷v1-dht,v1-dht如图2所示



图2 根据配置文件创建的卷v1-dht的模块依赖
6个存储服务器,其ip分别为192.168.12.201~192.168.12.206,各提供了一个存储brick。卷管理器读取此配置文件,创建出v1-dht卷,实际上就是分布式复制集群(Distributed
replia cluster),文件首先按照hash分布在三组服务器上,然后每组中两个服务器互为备份。事实上,Gluster提供了各种模块,分别实现Cluster, Storage, Performance, Protocol, Features。比如我们可以加入Performance中的IO Cache、Read ahead等模块,创建如图3所示集群:



图3 Glusterfs模块化堆栈式设计

3、重要的技术点

卷管理器如何利用模块创建客户指定的功能

二、源码简单分析

1、源码包组成

2、卷管理的实现

此文对xlator的代码分析及其透彻,http://blog.chinaunix.net/uid-11344913-id-3794453.html

参考文献

Glusterfs文件系统研究 /article/2433931.html

Glusterfs客户端浅析 http://blog.sina.com.cn/s/blog_6a4c492f0100w1ju.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: