1.Glusterfs简介

   GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBandRDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。

说起glusterfs可能比较陌生,可能大家更多的听说和使用的是NFS,GFS,HDFS之类的,这之中的NFS应该是使用最为广泛的,简单易于管理,但是NFS以及后边会说到MooseFS都会存在单点故障,为了解决这个问题一般情况下都会结合DRBD进行块儿复制。但是glusterfs就完全不用考虑这个问题了,因为它是一个完全的无中心的系统。

2.Glusterfs特点

    扩展性和高性能

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

    高可用性

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

    弹性卷管理

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

(以上部分内容来源互联网)


3、glusterfs的安装


rpm包安装

官方站点:http://download.gluster.org/pub/gluster/glusterfs/

源码包位置:http://download.gluster.org/pub/gluster/glusterfs/3.6/3.6.2/

rpm包:http://download.gluster.org/pub/gluster/glusterfs/3.6/3.6.2/RHEL/epel-6.5/x86_64/

[   ]

glusterfs-3.6.3-1.el6.x86_64.rpm 24-Apr-2015 07:49 1.4M 基础包,server,client都需要

[   ]

glusterfs-api-3.6.3-1.el6.x86_64.rpm 24-Apr-2015 07:49 63K api访问是需要安装

[   ]

glusterfs-api-devel-3.6.3-1.el6.x86_64.rpm 24-Apr-2015 07:49 32K

[   ]

glusterfs-cli-3.6.3-1.el6.x86_64.rpm 24-Apr-2015 07:49 143K 客户端需要安装的管理工具

[   ]

glusterfs-debuginfo-3.6.3-1.el6.x86_64.rpm 24-Apr-2015 07:49 8.0M

[   ]

glusterfs-devel-3.6.3-1.el6.x86_64.rpm 24-Apr-2015 07:49 133K

[   ]

glusterfs-extra-xlators-3.6.3-1.el6.x86_64.rpm 24-Apr-2015 07:49 49K

[   ]

glusterfs-fuse-3.6.3-1.el6.x86_64.rpm 24-Apr-2015 07:49 91K 挂载点

[   ]

glusterfs-geo-replication-3.6.3-1.el6.x86_64.rpm 24-Apr-2015 07:49 168K 远程复制

[   ]

glusterfs-libs-3.6.3-1.el6.x86_64.rpm 24-Apr-2015 07:49 281K 公共库,需要

[   ]

glusterfs-rdma-3.6.3-1.el6.x86_64.rpm 24-Apr-2015 07:49 52K InfiniBandRDMA网络传输协议需要安装的

[   ]

glusterfs-server-3.6.3-1.el6.x86_64.rpm 24-Apr-2015 07:49 718K server需要安装


测试环境:

192.168.21.18  rhel6.5

192.168.21.19  rhel6.5

yum源配置:

wget -P /etc/yum.repos.d/ http://download.gluster.org/pub/gluster/glusterfs/3.6/3.6.3/RHEL/glusterfs-epel.repo

配置好之后就可以很悠然的yum -y install 了

这里呢,因为我只有两台所以不分server和client端,安装的rpm包如下:

glusterfs-libs-3.6.2-1.el6.x86_64
    glusterfs-3.6.2-1.el6.x86_64
    glusterfs-cli-3.6.2-1.el6.x86_64
    glusterfs-api-3.6.2-1.el6.x86_64
    glusterfs-fuse-3.6.2-1.el6.x86_64
    glusterfs-server-3.6.2-1.el6.x86_64

同时呢我们还安装了两个检测工具:

atop:ftp://rpmfind.net/linux/epel/6/x86_64/atop-1.27-2.el6.x86_64.rpm

fio:ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/fio-2.0.10-1.el6.rf.x86_64.rpm


源码安装:

http://download.gluster.org/pub/gluster/glusterfs/3.6/3.6.3/glusterfs-3.6.3.tar.gz

解压:tar zxf glusterfs-3.6.3.tar.gz && cd glusterfs-3.6.3

安装依赖:

    yum -y install flex bison openssl openssl-devel libxml2-devel gcc 

编译安装:# ./configure && make && make install


4、初体验

先创建一个数据目录,用于存储数据

# mkdir -p /data0/gluster1

glusterfs的配置管理一般有两种方法,直接修改配置文件,这个不推荐,因为它的配置可都是用bison进行解析的,不是那么好写的;一般用的更多的都是直接使用提供的命令管理工具进行,glusterfs会自动的为我们创建出文件的。

# gluster help 可以查看gluster当前支持的所有的命令

# gluster volume hlp  指定查看volume配置的相关命令信息

[root@lvs glusterfs-3.6.3]# /etc/init.d/glusterd start
Starting glusterd:                                         [  OK  ]
[root@lvs glusterfs-3.6.3]# gluster volume info       
No volumes present

默认情况没有任何的volume


下面我们创建一个:

[root@lvs glusterfs-3.6.3]# gluster volume create help
Usage: volume create [stripe ] [replica ] [disperse []] [redundancy ] [transport ] ?... [force]

:volume的名称

stripe :条待卷

replica :复制卷

disperse:哈希卷  默认

redundancy:冗余卷

transport :传输协议,默认是TCP


[root@lvs glusterfs-3.6.3]# gluster volume create testglustervol 192.168.21.19:/data0/gluster1/brick1 192.168.21.19:/data0/gluster1/brick2


volume create: testglustervol: failed: The brick 192.168.21.19:/data0/gluster1/brick1 is being created in the root partition. It is recommended that you don't use the system's root partition for storage backend. Or use 'force' at the end of the command if you want to override this behavior.


发现报错了,这是因为我们创建的brick在系统盘,这个在gluster的默认情况下是不允许的,生产环境下也尽可能的与系统盘分开,如果必须这样请使用force

[root@lvs glusterfs-3.6.3]# gluster volume create testglustervol 192.168.21.19:/data0/gluster1/brick1 192.168.21.19:/data0/gluster1/brick2 force
volume create: testglustervol: success: please start the volume to access data

[root@lvs glusterfs-3.6.3]# gluster volume info
 
Volume Name: testglustervol #卷的名称
Type: Distribute            #类型是哈希卷
Volume ID: 3a6ed7fe-bfdb-4a9c-a85e-dba2afaefd0b  #卷ID
Status: Created            #状态还是刚创建,还不能使用,我们需要启动它
Number of Bricks: 2        #brick数量
Transport-type: tcp
Bricks:
Brick1: 192.168.21.19:/data0/gluster1/brick1
Brick2: 192.168.21.19:/data0/gluster1/brick2

启动:

# gluster volume start testglustervol

再看状态会是Started

挂载:# mount -t glusterfs 192.168.21.19:testglustervol /mnt/

现在可以使用了:# cd /mnt/  && touch testfile{1,2,3,4,5,6}

[root@lvs mnt]# ls
testfile1  testfile2  testfile3  testfile4  testfile5  testfile6
[root@lvs mnt]# ls /data0/gluster1/brick1/
testfile5
[root@lvs mnt]# ls /data0/gluster1/brick2
testfile1  testfile2  testfile3  testfile4  testfile6

这里我们创建了6个文件,可以看见被分开存储在了两个brick之中;如果是复制卷,那么两个brick之中都会有一份完整的数据