Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9263630
  • 博文数量: 1669
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12594
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1669)

文章存档

2023年(4)

2022年(1)

2021年(10)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: 服务器与存储

2014-06-13 17:42:22

GlusterFS 分布式集群文件系统安装、配置及性能测试
收藏人:
2011-12-23 | 阅:  转:  
 |   
  |   
  
GlusterFS 分布式集群文件系统安装、配置及性能测试
 
 

 
 
 
[1]
Glusterfs 是一个具有可以扩展到几个 PB 数量级的分布式集群文件系统。它可以把多个不同
类型的存储块通过 Infiniband RDMA 或者 TCP/IP 汇聚成一个大的并行网络文件系统。 
考虑到公司图片服务器后期的升级,我们对 Glusterfs 进行了比较详细的技术测试。 
 
4.     测试环境 
 
我们采用八台老的至强服务器组成了测试环境,配置为内存 1-2G 不等,每台有两块以上的
73G SCSI 硬盘。 
同时每服务器配有两块网卡,连接至两个 100M 以太网交换机上。192.168.1.x 段连接的是
cisco 2950,另一个段是一个 d-link 交换机,服务器间的传输主要是通过 cisco 2950,以保证
网络的稳定性。 
 
IP 地址分别为:192.168.1.11~192.168.1.18  及  192.168.190.11~192.168.190~18。 
 
所有服务器的操作系统都是 Centos linux 5.3,安装 DAG RPM Repository 的更新包。DAG RPM 
Repository 下载页面为:。 
安装方式: 
 
# wget 
 
# rpm –ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm 
 
5.    GlusterFS 的安装 
 
5.1.     服务器端安装  
我们通过 rpm 编译方式来安装 GlusterFS,因为做为群集文件系统,可能需要在至少 10 台以
上的服务器上安装 GlusterFS。每台去源码编译安装太费功夫,缺乏效率。在一台编译为 rpm
包,再复制到其它的服务器上安装是最好的选择。 
 
GlusterFS 需要 fuse 支持库,需先安装: 
# yum -y install fuse fuse-devel httpd-devel libibverbs-devel  
 
下载 GlusterFS 源码编译 rpm 包。 
# wget  
            
先装 glusterfs-debuginfo-2.0.9-1.x86_64.rpm 
然后装  compat-db43.rpm iso   glusterfs-common-2.0.9-1.x86_64.rpm 
最后   glusterfs-devel-2.0.9-1.x86_64.rpm      glusterfs-server-2.0.9-1.x86_64.rpm 
glusterfs-client-2.0.9-1.x86_64.rpm 
 
安装完成   
 
5.2.     客户端安装 
 
 
客户端和服务器有一点点不同,特别需要注意的是在客户端这边,不但需要 fuse 库,并且
需要一个 fuse 内核模块。好在 DAG RPM Repository 内已有用 DKMS 方式编译好的内核模块
包,我们直接安装便可。 
DKMS(Dynamic Kernel Module Support)是 dell 发起的一个项目,目的是希望能在不编译内核
的情况下,动态的更新内核模块,最重要的是,通过 DKMS 方式编译的内核模块,由于是由
DKMS 管理的,在内核升级后,无需重新编译,仍旧可用。这种方式可大大方便以后的内核
更新。 
GlusterFS 可直接用上面 rpm 编译后的包安装: 
 
# yum -y install dkms dkms-fuse fuse fuse-devel httpd-devel libibverbs-devel  
 
 
# rpm -ivh glusterfs-*.rpm 
 
7.    GlusterFS 常用 translators(中继) 
 
7.1.1.    storage/posix   
 
type storage/posix 
storage/posix 的作用是指定一个本地目录给 GlusterFS 内的一个卷使用。 
配置例子: 
volume posix-example 
type storage/posix option directory /sda4 
end-volume 
 
7.1.2.    protocol/server (服务器) 
 
type protocol/server  
服务器中继(protocol/server)表示本节点在 GlusterFS 中为服务器模式。 
配置例子: 
volume server-example 
type protocol/server  
option transport-type tcp 
subvolumes brick                #定义好的卷 
option auth.addr.brick.allow *  #指定可访问本卷的访问者,*为所有,可对访问者做限制,如
192.168.1.* 
end-volume 
 
7.1.3.    protocol/client (客户端) 
 
type protocol/client  
客户端中继(protocol/server)用于客户端连接服务器时使用。 
配置例子: 
volume client-example 
type protocol/client  
option transport-type tcp 
option remote-host 192.168.1.13    #连接的服务器 
option remote-subvolume brick      #连接的服务器卷名 
end-volume 
 
7.1.4.    cluster/replicate(复制)  
 
type cluster/replicate 
复制中继(cluster/replicate,前身是 AFR)为 GlusterFS 提供了类似 RAID-1 的功能。 
Replicate 会复制文件或者文件夹到各个 subvolumes 里。如一个卷(volume)内有两个子卷
(subvolume),那就会有两份文件或文件夹的复本。 
Replicate 只时还有高可用的功能,如果两个子卷中有一个子卷挂了,卷依然可以正常工作。
当这个子卷重新启用时,会自动更新丢失的文件或文件夹,不过更新是通过客户端进行的。  
配置例子: 
volume replicate-example 
type cluster/replicate 
subvolumes brick3 brick4 
end-volume 
 
7.1.5.    cluster/distribute (分布式) 
 type cluster/distribute 
分布式中继(cluster/distribute,前身是 unify)为 GlusterFS 提供了类似 RAID-0 的功能。 
Distribute 可把两个卷或子卷组成一个大卷,实现多存储空间的聚合 
配置例子: 
volume distribute-example 
type cluster/distribute 
subvolumes repl1 repl2 
end-volume 
 
7.1.6.    features/locks (锁) 
 
type features/locks 
锁中继(features/locks)只能用于服务器端的 posix 中继之上,表示给这个卷提供加锁(fcntl 
locking)的功能。 
配置例子: 
volume locks-example 
type features/locks 
subvolumes posix-example 
end-volume 
 
7.1.7.      performance/read-ahead (预读) 
 
type performance/read-ahead 
预读中继(performance/read-ahead)属于性能调整中继的一种,用预读的方式提高读取的性
能。 
读取操作前就预先抓取数据。这个有利于应用频繁持续性的访问文件,当应用完成当前数据
块读取的时候,下一个数据块就已经准备好了。   
额外的,预读中继也可以扮演读聚合器,许多小的读操作被绑定起来,当成一个大的读请求
发送给服务器。   
预读处理有 page-size 和 page-count 来定义,page-size 定义了,一次预读取的数据块大小,
page-count 定义的是被预读取的块的数量 
不过官方网站上说这个中继在以太网上没有必要,一般都能跑满带宽。主要是在 IB-verbs 或
10G 的以太网上用。 
配置例子: 
volume readahead-example 
type performance/read-ahead 
option page-size  256         #  每次预读取的数据块大小 
option page-count 4           #  每次预读取数据块的数量 
option force-atime-update off #是否强制在每次读操作时更新文件的访问时间,不设置这个,
访问时间将有些不精确,这个将影响预读转换器读取数据时的那一时刻而不是应用真实读到
数据的那一时刻。 
subvolumes  
end-volume 
 7.1.8.    performance/write-behind (回写) 
 
type performance/write-behind 
回写中继(performance/read-ahead)属于性能调整中继的一种,作用是在写数据时,先写入
缓存内,再写入硬盘。以提高写入的性能。 
回写中继改善了了写操作的延时。它会先把写操作发送到后端存储,同时返回给应用写操作
完毕,而实际上写的操作还正在执行。使用后写转换器就可以像流水线一样把写请求持续发
送。这个后写操作模块更适合使用在 client 端,以期减少应用的写延迟。 
回写中继同样可以聚合写请求。如果 aggregate-size 选项设置了的话,当连续的写入大小累
积起来达到了设定的值,就通过一个写操作写入到存储上。这个操作模式适合应用在服务器
端,以为这个可以在多个文件并行被写入磁盘时降低磁头动作。 
配置例子: 
volume write-behind-example 
type performance/write-behind 
option cache-size 3MB    #  缓存大小,当累积达到这个值才进行实际的写操作 
option flush-behind on   #  这个参数调整 close()/flush()太多的情况,适用于大量小文件的情
况 
subvolumes  
end-volume 
 
7.1.9.    performance/io-threads (IO 线程) 
 
type performance/io-threads 
IO线程中继(performance/io-threads)属于性能调整中继的一种,作用是增加IO的并发线程,
以提高 IO 性能。 
IO 线程中继试图增加服务器后台进程对文件元数据读写 I/O 的处理能力。由于 GlusterFS 服
务是单线程的,使用 IO 线程转换器可以较大的提高性能。这个转换器最好是被用于服务器
端,而且是在服务器协议转换器后面被加载。 
IO 线程操作会将读和写操作分成不同的线程。同一时刻存在的总线程是恒定的并且是可以
配置的。 
配置例子: 
volume iothreads 
type performance/io-threads   
option thread-count 32 #  线程使用的数量 
subvolumes  
end-volume 
 
7.1.10.    performance/io-cache (IO 缓存) 
 
type performance/io-cache 
IO 缓存中继(performance/io-threads)属于性能调整中继的一种,作用是缓存住已经被读过
的数据,以提高 IO 性能。 
IO 缓存中继可以缓存住已经被读过的数据。这个对于多个应用对同一个数据多次访问,并
且如果读的操作远远大于写的操作的话是很有用的(比如,IO 缓存很适合用于提供 web 服务的环境,大量的客户端只会进行简单的读取文件的操作,只有很少一部分会去写文件)。 
当 IO 缓存中继检测到有写操作的时候,它就会把相应的文件从缓存中删除。 
IO 缓存中继会定期的根据文件的修改时间来验证缓存中相应文件的一致性。验证超时时间
是可以配置的。 
配置例子: 
volume iothreads 
type performance/ io-cache 
option cache-size 32MB  #可以缓存的最大数据量 
option cache-timeout 1  #验证超时时间,单位秒 
option priority   *:0   #文件匹配列表及其设置的优先级 
subvolumes  
end-volume 
 
7.1.11.     其它中继 
 
其它中继还有 
cluster/nufa(非均匀文件存取) 
cluster/stripe(条带,用于大文件,分块存储在不用服务器) 
cluster/ha(集群) 
features/filter(过滤) 
features/trash(回收站) 
path-converter 
quota 
老的还有: 
cluster/unify(和 distribute,可定义不同的调度器,以不同方式写入数据) 
 
8.    GlusterFS 配置 
 
8.1.     服务器端配置 
 
服务器为 6 台,IP 分别是 192.168.1.11~192.168.1.16。配置为: 
1》volume brick 
type storage/posix # POSIX FS translator 
option directory /gluster # Export this directory 
end-volume 
 
### Add network serving capability to above brick.  
volume server  
type protocol/server  
option transport-type tcp/server  
option bind-address 192.168.4.251 # Default is to listen on all interfaces 
option listen-port 6996 # Default is 6996 
subvolumes brick 
option auth.addr.brick.allow * # Allow access to "brick" volume  end-volume 
 
2》# vi /etc/glusterfs/glusterfsd.vol  
volume posix 
type storage/posix 
option directory /sda4 
end-volume 
 
volume locks 
type features/locks 
subvolumes posix 
end-volume 
 
volume brick 
type performance/io-threads 
option thread-count 8 
subvolumes locks 
end-volume 
 
volume server  
type protocol/server  
option transport-type tcp 
subvolumes brick 
option auth.addr.brick.allow * 
end-volume   
保存后启动 GlusterFS: 
# service glusterfsd start 
 
8.2.     客户端配置 
 
服务器为 192.168.1.17和 192.168.1.18: 
1》volume client0 
type protocol/client  
option transport-type tcp/client  
option remote-host 192.168.4.251 # IP address of the remote brick 
option remote-port 6996 # default server port is 6996 
option remote-subvolume brick # name of the remote volume 
end-volume 
volume client1 
type protocol/client  
option transport-type tcp/client  
option remote-host 192.168.4.252 # IP address of the remote brick 
option remote-port 6996 # default server port is 6996 
option remote-subvolume brick # name of the remote volume end-volume 
volume unify 
type cluster/distribute 
subvolumes client0 client1 
end-volume 
 
 
2》# vi /etc/glusterfs/glusterfs.vol  
volume brick1 
type protocol/client  
option transport-type tcp 
end-volume 
volume brick2 
type protocol/client  
option transport-type tcp 
option remote-host 192.168.1.12 
option remote-subvolume brick 
end-volume 
 
volume brick3 
type protocol/client  
option transport-type tcp 
option remote-host 192.168.1.13 
option remote-subvolume brick 
end-volume 
 
volume brick4 
type protocol/client  
option transport-type tcp 
option remote-host 192.168.1.14 
option remote-subvolume brick 
end-volume 
 
volume brick5 
type protocol/client  
option transport-type tcp 
option remote-host 192.168.1.15 
option remote-subvolume brick 
end-volume 
 
volume brick6 
type protocol/client  
option transport-type tcp 
option remote-host 192.168.1.16 option remote-subvolume brick 
end-volume 
 
volume afr1 
type cluster/replicate 
subvolumes brick1 brick2 
end-volume 
 
volume afr2 
type cluster/replicate 
subvolumes brick3 brick4 
end-volume 
 
volume afr3 
type cluster/replicate 
subvolumes brick5 brick6 
end-volume 
 
volume unify 
type cluster/distribute 
subvolumes afr1 afr2 afr3 
end-volume 
 
GlusterFS 的主要配置都在客户端上,上面配置文件的意思是把 6 台服务器分成 3 个replicate
卷,再用这 3 个replicate 卷做成一个 distribute,提供应用程序使用。 
 
8.3.    GlusterFS 挂载 
 
GlusterFS 挂载为在客户端上执行: 
# glusterfs -f /etc/glusterfs/glusterfs.vol /gmnt/ -l /var/log/glusterfs/glusterfs.log  
-f /etc/glusterfs/glusterfs.vol 为指定 GlusterFS 的配置文件 
/gmnt 是挂载点 
-l /var/log/glusterfs/glusterfs.log 为日志 
另外,GlusterFS 也可以结果 fstab 或 autofs 方式开机挂载。挂载后就可以在/gmnt 内读写文
件了,用法与读写本地硬盘一样。 
 
 
9.    GlusterFS 性能测试 
 
9.1.     单客户端测试 
 
测试 1:复制大约 2.5G 容量  /usr 目录至 GlusterFS(大部分都是小文件) 
测试结果: 
glusterfs    1361KB/s 本地硬盘    2533KB/s 
 
测试 2:  复制一个 3.8G 的文件至 GlusterFS 
测试结果: 
glusterfs      2270KB/s 
本地硬盘     10198KB/s 
 
测试 3:读取测试 2 复制的大文件(cat xxx.iso > /dev/null) 
测试结果: 
glusterfs     11.2MB/s(基本跑满 100M 带宽) 
本地硬盘     45.6MB/s 
 
9.2.     双客户端测试 
 
测试 1:在两个客户端上同时复制大约 2.5G 容量  /usr 目录至 GlusterFS(大部分都是小文件) 
测试结果: 
192.168.1.17:glusterfs   1438KB/s 
192.168.1.18:glusterfs   1296KB/s 
 
测试 2:  在两个客户端上同时复制一个 3.8G 的文件至GlusterFS 
测试结果: 
192.168.1.17:glusterfs    2269KB/s 
192.168.1.18:glusterfs    2320KB/s 
 
 
9.3.     配置回写功能后的测试 
 
9.3.1.     服务器配置 
 
volume posix 
type storage/posix 
option directory /sda4 
end-volume 
 
volume locks 
type features/locks 
subvolumes posix 
end-volume 
 
volume writebehind 
type performance/write-behind 
option cache-size   16MB 
option flush-behind on 
subvolumes locks end-volume 
 
volume brick 
type performance/io-threads 
option thread-count 64 
subvolumes writebehind   
end-volume 
 
volume server  
type protocol/server  
option transport-type tcp 
option auth.addr.brick.allow * # Allow access to "brick" volume  
end-volume 
 
9.3.2.     客户端配置 
 
volume brick1 
type protocol/client  
option transport-type tcp 
option remote-host 192.168.1.11      # IP address of the remote brick 
option remote-subvolume brick        # name of the remote volume 
end-volume 
 
volume brick2 
type protocol/client  
option transport-type tcp 
option remote-host 192.168.1.12 
option remote-subvolume brick 
end-volume 
 
volume brick3 
type protocol/client  
option transport-type tcp 
option remote-host 192.168.1.13 
option remote-subvolume brick 
end-volume 
 
volume brick4 
type protocol/client  
option transport-type tcp 
option remote-host 192.168.1.14 
option remote-subvolume brick 
end-volume 
 volume brick5 
type protocol/client  
option transport-type tcp 
option remote-host 192.168.1.15 
option remote-subvolume brick 
end-volume 
 
volume brick6 
type protocol/client  
option transport-type tcp 
option remote-host 192.168.1.16 
option remote-subvolume brick 
end-volume 
 
volume afr1 
type cluster/replicate 
subvolumes brick1 brick2 
end-volume 
 
volume afr2 
type cluster/replicate 
subvolumes brick3 brick4 
end-volume 
 
volume afr3 
type cluster/replicate 
subvolumes brick5 brick6 
end-volume 
 
volume wb1 
type performance/write-behind 
option cache-size 2MB 
option flush-behind on 
subvolumes afr1 
end-volume 
 
volume wb2 
type performance/write-behind 
option cache-size 2MB 
option flush-behind on 
subvolumes afr2 
end-volume 
 
volume wb3 type performance/write-behind 
option cache-size 2MB 
option flush-behind on 
subvolumes afr3 
end-volume 
 
volume unify 
type cluster/distribute 
subvolumes wb1 wb2 wb3 
end-volume 
 
9.3.3.     测试 
 
测试:在两个客户端上同时复制大约 2.5G 容量  /usr 目录至 GlusterFS(大部分都是小文件) 
测试结果: 
192.168.1.17:glusterfs   979KB/s 
192.168.1.18:glusterfs   1056KB/s 
 
 
10.     结语 
 
从测试结果看,小文件的写入速度只有 1M 多,速度过低,好在在多客户端的情况下,写入
速度还算平稳。大文件的写入也只有 2M。对于做图片服务器来说,只能算勉强够用。 
另外在性能调优方面,在我们加上回写后,速度反而有下降。当然也有可能是配置参数不当
的原因。 
经测试,GlusterFS 在高可用方面比较稳定的,基本能达到要求。不过由于在复制模式的更
新是通过客户端进行的,当客户端和 replicate 内的一台服务器同时挂时,会造成数据不同步
的情况。需要手动做个列表的动作(ls)才会更新。 
GlusterFS 作为正式运营环境使用时,还缺乏一些功能,如 GlusterFS 没有对整个集群的监控
和管理程序等。 
阅读(1385) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~