Glusterfs是一种可基于以太网、Infiniband构建大规模的分布式文件系统,早期目的是替代GPFS和Lustre。其源码主要遵守GPLv3,设计原则符合奥卡姆剃刀原则,即“若无必要,勿增实体”。它的特点是统一的对象视图,符合UNIX设计哲学“一切皆文件”,且跨平台兼容性高,可作为Hadoop、OpenStack、oVirt、Amazon EC的存储后端。较之Ceph,Glusterfs是对称式架构,没有集中的控制节点。同样实现共享文件系统,Glusterfs不需要单独的元数据节点,且在数据存储形式可以是类似RAID 0的条带(strip)、RAID 1的多副本(replica)以及这两种之间的组合。
1.架构关键字
Glusterfs包含以下几个主要元素,详细介绍可参考官方手册http://gluster.readthedocs.io/。
□Brick(砖块)
主机节点上的目录,是组成卷的最基本单元,在非stripe的卷中文件是以raw的格式存放于砖块中的,这使得Glusterfs的文件直接恢复与备份非常方便。
□Volume(卷)
用户最终使用的由多个砖块组成的逻辑卷,其中的砖块组合可以有多重方式,最基本的有distributed、striped、replicated、disperse等,且每个卷都拥有独立的参数命名空间。卷的导出方式可以是Glusterfs、NFS、CIFS,使用插件SwiftOnFile则可以实现对象存储。另外,较新的版本中提供了subvolume用于缓存,很多以Glusterfs作为存储产品的厂商会在这个卷下使用SSD以提高缓存I/O效率。
□GFID
卷中文件或目录的扩展属性,相当于普通文件系统的inode,可使用命令“ls-li”查看。
□Translator
Translator相当于网络中的iptables或者OpenFlow,它可以对用户发来的存储请求进行解析并转换,以实现多种附加功能,比如cache机制、数据加密、访问控制、数据预读等。
□RRDNS
Round Robin Domain Name Service,它将多个不同主机的IP作为同一主机名的A记录,这样集群中的某个节点即使失效,使用主机名(域名)连接逻辑卷的客户端仍然能够连接到集群中的其他主机,从而保证集群服务的负载均衡和高可用(实际使用时也可采用Virtual IP)。
□Elastic Hash
□AFR
Automatic File Replication是Glusterfs的一大特色,它是一种实现文件跨砖块备份机制的translator,可通过卷的geo-replication选项设定卷的备份策略。
□glusterd
运行于所有主机中用于管理Glusterfs逻辑卷与集群主机关系的服务进程,社区在glusterd 2.0的开发计划中,有向配置集中管理发展的趋势。
□libgfapi
较早版本的客户端需要通过gluster-fuse挂载卷,而Glusterfs 3.4版本开始提供libgfapi库以缩短客户端与卷之间的I/O路径从而使读写更具效率,其函数接口都是POSIX兼容,所以我们可以使用它作为多种应用程序的存储驱动或插件,比如QEMU。
2.快速搭建(www.xing528.com)
笔者将以CentOS 7作为基本操作系统,然后使用4台主机中共8个砖块,创建一个distributed-striped-replicated逻辑卷为例,介绍Glusterfs的基本使用方法。
这些主机(gs1-4)分别有3块硬盘,其中两块是数据盘为sdb和sdc,将被格式化为xfs并在创建data目录用作砖块。以下操作需要在每一台主机上都执行。
服务启动以后,只需要在任意主机(gs1为例)运行以下命令将其他节点加入进集群即可。
8存储,其中的strip组、replica组与砖块顺序有关。
然后再创建卷,数据将按照图7-
图7-8 distributed-stripe-rep lica示意图
当卷成功启动后,可在客户端使用mount.Glusterfs进行挂载。由于Glusterfs卷的NFS、CIFS是独立实现的,所以要启动其他NFS、CIFS服务的话,请注意修改端口号。
3.脑裂处理
当两个存储节点中的数据互为副本时,由于网络或者其他故障导致的数据不一致现象叫做脑裂(split-brain)。为例避免脑裂,我们需要引入quorum机制(默认关闭)以判断是否有节点数据有效性并使用工具进行自恢复(self-heal)。
虽然Glusterfs同时提供了这两者,但它的效果有时并不理想,如果不使用存储厂商提供的Glusterfs存储,我们仍需要大量的开发工作,以应对相对频繁的脑裂问题,参考步骤如下。
第一步:定位裂脑文件,通过以下命令查看是否仍然存在I/O错误的文件。
第二步:关闭已经打开的文件或者虚机,并卸载相应卷。
第三步:删除错误副本,并恢复扩展属性。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。