glusterfs分布式文件系统初探

公司有几台就服务器,正好有个项目对磁盘的容量以及性能有一定的要求,故而寻求分布式文件系统方面的知识,最终采用了glusterfs。以下对部署以及测试过程潦做记录。

glusterfs分布式文件系统采用C/S模式,其中客户端作为对外提供服务的点,并且负责分配管理数据在后端多台server间的存储。

实验采用6台服务器做整个分布式架构,其中4台存储端实现类似RAID 10模式的存储池,两台客户端通过挂载至存储池,两台客户端之间通过keepalived做双机热备。

要求:glusterfs禁止在系统分区上创建glusterfs卷,所以需要server端每台机器都要有一个独立于跟分区之外的分区加入glusterfs,并且此独立分区要求大小一致(否则,到后期会遇到问题,导致无法继续支持高可用特性)。

Server端

1、采用yum方式安装

首先配置glusterfs官方的yum源,执行下面命令

vi  /etc/yum.repos.d/glusterfs-epel.repo  # 添加以下内容
[glusterfs-epel]
name=GlusterFS is a clustered file-system capable of scaling toseveral petabytes.
baseurl=http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/epel-$releasever/$basearch/
enabled=1
skip_if_unavailable=1
gpgcheck=1
gpgkey=http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/pub.key
[glusterfs-noarch-epel]
name=GlusterFS is a clustered file-system capable of scaling toseveral petabytes.
baseurl=http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/epel-$releasever/noarch
enabled=1
skip_if_unavailable=1
gpgcheck=1
gpgkey=http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/pub.key
[glusterfs-source-epel]
name=GlusterFS is a clustered file-system capable of scaling toseveral petabytes. - Source
baseurl=http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/epel-$releasever/SRPMS
enabled=0
skip_if_unavailable=1
gpgcheck=1
gpgkey=http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/pub.key

2、yum 安装

yum  install glusterfsglusterfs-server

wKiom1OC3eDRitF0AABtDPrhAaA126

3、启动glusterd服务:

#执行  
service glusterd start

4、将用于存储的主机加入到“存储池”

在配置glusterfs卷之前,首先应该创建“存储池”将实际提供存储的机器加入到“存储池”。

#执行:
gluster peer probe  server(IP/hostname)

此过程只需要在一台glusterfs-server上执行即可,以上命令对每个server执行一次,如下图
wKiom1OC3gqCseqUAABq7haklfA862
注意:执行peer probe 的时候不需要跟本机(hostname/IP)
在其中一台server机上查看存储池内的信息,执行glusterpeer status,如下图

5、Create volume(创建卷)

Glusterfs的卷有多种可选模式,我们采用其中的两种Distributed和Replicated,其中Distributed类似于磁盘的RAID 0模式;Replicated类似于磁盘的RAID1模式(glusterfs中可以制定副本的数量,这里我们存储两个副本即可)。我们利用此两种模式在4台server间做成类似于RAID 10的模式,提供高性能和高可用的存储服务。
在任意一台server执行:
glustervolume create ftp-volume replica 2 192.168.5.201:/data/ftp-data192.168.5.202:/data/ftp-data 192.168.5.203:/data/ftp-data192.168.5.204:/data/ftp-data
##上述命令中:dir为每台服务器上要加入存储池的目录(此目录最好做一个单独分区挂载至此目录)。按照上述命令server2:/dir作为server1:/dir的副本;server4:/dir作为server3:/dir的副本

6、创建完卷后,要启动卷,执行命令:

Gluster volume start test-volume,如下图
至此,server端配置完成
另外,可以执行以下命令查看卷信息
wKioL1OC3hTjO8kgAAEhgENyBxk735

Client端

1、yum安装

配置glusterfs官方yum源参照server端设置过程。

yum  install glusterfs  glusterfs-client

会安装下图所示安装包
wKiom1OC3nGwYpCkAABLdJDiCZQ052

2、安装完成后,执行挂载操作

mount -t glusterfs192.168.5.201:/ftp-volume /glusterfs/

#此处选择任一台服务器进行载即可
在/etc/rc.local添加如下内容,以便实现开机自动挂载

mount -t glusterfs192.168.5.201:/ftp-volume /glusterfs/ 2>/var/log/gluster-client.err

在client端执行df -h查看挂载情况,如下图
wKiom1OC3qXyILYbAAC5wanuVl8920

说明client端已经挂载成功,可以像使用本地目录一样使用此目录,数据会分散存储在后端4台
Server上,并且依照我们的设置,每个文件都会存储两个副本。

二、管理、监控等其他操作

1、查看存储节点,在任意一台server上执行如下命令

wKiom1OC3srSGnS-AACtDRlX40Q721

2、查看卷信息,任意一台server上执行如下命令

wKioL1OC3sDihMFUAAGRMkG17n8407

如图所示,卷test-volume共包含了三个存储节点的6个块(brick)

3、扩展卷

将新的存储节点加入到“存储池”中,在原来“存储池”中的任意一台主机执行
wKiom1OC3w7ikTyrAABGQk65j80918
在新节点上准备好要加入卷的“独立分区”(区别于跟分区,并且要跟其他节点的数据分区大小一致)以及目录,执行以
wKioL1OC3wbgEVQ1AABIprst8Jg583

上图表示将1.201上的两个目录作为两个“块”添加到glusterfs卷中
查看卷信息可以看到新添加的“块”(birck)信息
wKioL1OC4QXgqyiyAAG1rXPHTUA687

三、实测数据(通过局域网ftp方式)

上传目录,包含众多随机大小的文件共2.1G:
通过glusterfs,平均速度为2.59M/S
不通过glusterfs,平均速度为2.20M/S
上传另一目录,总大小2.7G :
通过glusterfs,平均速度为2.76M/S
不通过glusterfs,平均速度为2.29M/S
下载目录2.1G
通过glusterfs,平均速度为3.55M/S
不通过glusterfs,平均速度为3.09M/S
下载另一目录2.7G
通过glusterfs,平均速度为3.81M/S
不通过glusterfs,平均速度为3.59M/S
上传单个大文件
通过glusterfs,平均速度为10.61M/S
不通过glusterfs,平均速度为6.31M/S

说明:操作目录时整体速度偏慢,是因为通过ftp上传下载包含很多文件的目录时每个文件都要进行建立连接过程然后传输,所以会影响整体速度,但是这并不影响我们测试glusterfs文件系统能否给我们带来性能提升。
通过以上测试可以得出结论,通过glusterfs的分布式存储,对于磁盘读写的性能是有很大提升的。
最后附上“辛苦”找来的glusterfs administrator guid

还没有评论,快来抢沙发!

发表评论

  • 😉
  • 😐
  • 😡
  • 😈
  • 🙂
  • 😯
  • 🙁
  • 🙄
  • 😛
  • 😳
  • 😮
  • emoji-mrgree
  • 😆
  • 💡
  • 😀
  • 👿
  • 😥
  • 😎
  • ➡
  • 😕
  • ❓
  • ❗
  • 69 queries in 0.417 seconds