CentOS5.8上glusterfs安装手册
版本历史
时间 | 版本 | 说明 | 编写者 |
2014-11-19 | 1.1 | CentOS 5上glusterfs安装手册 | csc |
武汉****技术有限公司
前提:centos 5.8 标准系统安装,必须安装开发包和开发库
如果没有bison flex 则需要安装。
yum install bison flex
一、安装篇
源代码安装方案:
1. 安装python2.6.5
wgethttp://www.python.org/ftp/python/2.6.5/Python-2.6.5.tar.bz2
tar jxvf Python-2.6.5.tar.bz2
cd Python-2.6.5
./configure --enable-shared 支持64bit
make
make install
将系统默认的python指向到2.6版本
#mv/usr/bin/python /usr/bin/python.bak (或者rm -rf /usr/bin/python)
#ln -s/usr/local/bin/python2.6 /usr/bin/python
vi /etc/ld.so.conf 添加
/usr/local/lib
执行:
ldconfig -v
# python -V
Python 2.6.5
python 升级后,yum 不能使用,请修改如下:
# vi /usr/bin/yum
#!/usr/bin/python2.4
。。。
2. 安装fuse
tar xvzf fuse-2.8.7.tar.gz
cd fuse-2.8.7
./configure
make
make install
fuse测试并检查
lsmod | grep fuse
假如没有, 使用命令
modprobe fuse
lsmod | grep fuse
echo "modprobefuse" >>/etc/rc.local
3. 安装glusterfs
tar xvzf glusterfs-3.5.3.tar.gz
cd glusterfs-3.5.3
./configure --prefix=/usr/local/glusterfs
######################################################
make之前更改/glusterfs-3.5.3/contrib/qemu/util/oslib-posix.c
第175行增加:
#undef CONFIG_PIPE2
第1行增加:
#define UTIME_OMIT ((1l << 30) - 2l)
#define UTIME_NOW ((1l << 30) - 1l)
备注:centos 6.X 版本不需要执行以上操作。
#######################################################
然后make和make install
make
make install
4. 添加环境变量
更改文件/etc/profile
export PATH=$PATH:/usr/local/glusterfs/sbin
5. 启动服务
查看glusterfs的版本号:
glusterfs --version
glusterfs 3.5.3 built on Nov 17 2014 15:10:35
启动gluster服务:/etc/init.d/glusterdstart
tail -f /usr/local/glusterfs/var/log/glusterfs/*.log
####################
RPM 安装方案
RPM 服务端安装
官网:http://www.gluster.org/download/下载对应系统的RPM 包,
我下载的是centos 5.X 系列的 3.4.6 版本
-rw-r--r-- 1 rootroot 1378938 Nov 21 17:42 glusterfs-3.4.6-1.el5.x86_64.rpm
-rw-r--r-- 1 rootroot 72832 Nov 21 17:42glusterfs-api-3.4.6-1.el5.x86_64.rpm
-rw-r--r-- 1 rootroot 27477 Nov 21 17:42glusterfs-api-devel-3.4.6-1.el5.x86_64.rpm
-rw-r--r-- 1 rootroot 119818 Nov 21 17:42glusterfs-cli-3.4.6-1.el5.x86_64.rpm
-rw-r--r-- 1 rootroot 6655452 Nov 21 17:42 glusterfs-debuginfo-3.4.6-1.el5.x86_64.rpm
-rw-r--r-- 1 rootroot 111666 Nov 21 17:42glusterfs-devel-3.4.6-1.el5.x86_64.rpm
-rw-r--r-- 1 rootroot ×××3 Nov 21 17:42glusterfs-fuse-3.4.6-1.el5.x86_64.rpm
-rw-r--r-- 1 rootroot 186723 Nov 21 17:42glusterfs-geo-replication-3.4.6-1.el5.x86_64.rpm
-rw-r--r-- 1 rootroot 268844 Nov 21 17:42glusterfs-libs-3.4.6-1.el5.x86_64.rpm
-rw-r--r-- 1 rootroot 52953 Nov 21 17:42glusterfs-rdma-3.4.6-1.el5.x86_64.rpm
-rw-r--r-- 1 rootroot 577486 Nov 21 17:42glusterfs-server-3.4.6-1.el5.x86_64.rpm
-rw-r--r--1 root root 45551 Nov 21 17:42libibverbs-1.1.3-2.el5.x86_64.rpm
-rw-r--r--1 root root 23367 Nov 21 17:42librdmacm-1.0.10-1.el5.x86_64.rpm
-rw-r--r--1 root root 20786 Nov 21 17:42openib-1.4.1-6.el5.noarch.rpm
-rw-r--r--1 root root 1408260 Nov 21 17:42 xfsprogs-2.9.4-1.el5.centos.x86_64.rpm
其中最后4个包是YUM download only 下载的依赖包,
glusterfs-resource-agents-3.4.6-1.el5.x86_64.rpm不需要安装,已被剔除
1.安装方法:
直接上传以上RPM包 至 Centos 5.8 64 bit 系统,
执行 rpm -ivh*.rpm glusterfs 客户端 、服务器端 都已经安装完毕
2.查看glusterfs的版本号:
[root@gluster1gluster_3.4.6_RPM]# gluster --version
glusterfs 3.4.6built on Nov 13 2014 12:38:38
Repositoryrevision: git://git.gluster.com/glusterfs.git
Copyright (c)2006-2011 Gluster Inc. <http://www.gluster.com>
GlusterFS comeswith ABSOLUTELY NO WARRANTY.
3.加载 fuse
modprobe fuse
lsmod | grep fuse
echo "modprobefuse" >>/etc/rc.local
4.启动服务:
/etc/init.d/glusterd start
3.RPM客户端安装:
客户端不需要启动glusterd 服务,只需要有挂载命令,安装的RPM包为:
1.安装gluster client RPM包
只需要安装以上包中的4个:
rpm -ivhglusterfs-libs-3.4.6-1.el5.x86_64.rpm
rpm -ivhglusterfs-cli-3.4.6-1.el5.x86_64.rpm
rpm -ivhglusterfs-3.4.6-1.el5.x86_64.rpm
rpm -ivhglusterfs-fuse-3.4.6-1.el5.x86_64.rpm
2.加载 fuse
modprobe fuse
lsmod | grep fuse
echo "modprobefuse" >>/etc/rc.local
3.挂载GlusterFS卷到指定目录(/res)
# mkdir /res
# mount -t glusterfs 192.168.20.233:/gv0/res
二、配置篇(replica模式)
1、服务器信息:
测试服务器:4台ip:192.168.1.1-192.168.1.4
服务端、客户端都需要进行《一、安装篇》部署,
客户端不需要启动glusterd 服务
2、建立分区或磁盘挂在目录
4台服务器都需要创建:
mkdir-p /brick1
3、挂在分区或磁盘到目录
mount /dev/sda1 /brick1(所有节点执行挂载,分区或磁盘容量要尽量一致(对于replica模式的卷尤为重要,这种模式下会以容量小的分区或磁盘为准))
加入开机启动挂载(例子):
vi /etc/fstab
......
/dev/sda1 /brick1 ext3 defaults 0 0
也可直接在本地创建目录,不过不好控制磁盘的大小
mkdir /brick1
4、修改/etc/hosts文件(可省略)
加入各节点机器名与IP对应关系
test01 192.168.1.1
test02 192.168.1.2
test03 192.168.1.3
test04 192.168.1.4
在其他节点做相同操作
5、建立peer关系(192.168.1.1上操作)
gluster
gluster>peer probe 192.168.1.2
gluster> peer probe 192.168.1.3
gluster> peer probe 192.168.1.4
(以上操作在一台服务器上操作即可,状态将同步到其他服务器)
gluster>peerprobe (ip)(后续增加节点时使用)
gluster>peerdetach (ip) (后续删除节点时使用) 可以使用参数 force
gluster>peer status对等体状态
NumberofPeers: 3
Hostname:192.168.1.2
Uuid:67d37243-4332-4324-b497-92cf3d4fa2c1
State:Peerin Cluster (Connected)
Hostname:192.168.1.3
Uuid:0e8f17ba-c061-4537-ac3a-f625600c6663
State:Peerin Cluster (Connected)
Hostname:192.168.1.4
Uuid:66149333-6235-4bcc-82ae-b2fd011794db
State:Peerin Cluster (Connected)
6、建立卷(192.168.1.1上操作)
gluster
gluster>volume create gv0 replica 2 192.168.1.1:/brick1 192.168.1.2:/brick1
建立卷时有三种模式:Stripe(RAID0)、Replicate(RAID1)和DHT(分布式Hash),默认是DHT, 后边跟的数字意思是几个为1组,此示例中为2个为一组建立replica卷,类似RAID1。
##如果直接在/分区建立的文件夹,会提示/root 分区警告,则需要加上force
gluster>volume create gv0 replica 2 10.8.9.13:/brick1 10.8.9.107:/brick1 force
7、向卷中添加brick(192.168.1.1上操作)
gluster>volumeadd-brick gv0 192.168.1.3:/brick1 192.168.1.4:/brick1
可在动态在线增加brick
若是副本卷,则一次添加的Bricks 数是replica 的整数倍;stripe 具有同样的要求
我的动态增加方法(指定两个IP做主备)
gluster>volume add-brick gv0 replica 2 10.8.9.115:/brick1 10.8.9.118:/brick1 force
在线增加brick后,还需重新平衡各节点数据。
gluster>volume rebalance gv0 start开始平衡
startingrebalanceon volume gv0 has been successful
gluster>volume rebalance gv0 status
rebalancestep1: layout fix in progress
gluster>volumerebalance gv0 status
rebalancecompleted重新平衡完成
查看卷信息:
gluster> volume info
8、启动卷
gluster>volumestart gv0
查看卷信息:
gluster>volume info
卷停止
gluster>volume stop gv0
将创建的卷启动,才能进行客户端挂载;stop能够将系统卷停止,无法使用;此外gluster未提供restart的重启命令
#gluster>volume delete gv0 #删除卷
//删除卷操作能够将整个卷删除,操作前提是需要将卷先停止
9、客户端挂载
由于安装包时,安装了gluster客户端,所以测试机同时担当客户端/服务器的角色,
也建议在分布式文件系统这样使用。
mount-t glusterfs 192.168.1.1:/gv0 /data
备注:客户端可任意挂载各节点IP地址,gv0 的数据都是一样的
各节点均可挂载自己ip地址,这也符合gluster的设计思想,无元数据服务器,无单点故障。
Mount failed. Please check the log file for more details.
如果报错,则要加载fuse
至此,gluster的配置及初期使用已经介绍完毕,配置使用极为简单,理念及步骤清晰,但要想提升性能及在生产环境中使用,还需进一步的测试及优化。
三、测试篇
我的实际环境部署:
在原有的4台节点上,再增加两节点,互为replica 模式,一共6节点:
gluster> volumeinfo
Volume Name: gv0
Type:Distributed-Replicate
Volume ID: caa12bc8-31eb-49ca-bd86-cbd31771b010
Status: Started
Number of Bricks: 3 x 2 = 6
#3个Bricks ,每个bricks还有一个备bricks互为replica 2模式
Transport-type:tcp
Bricks:
Brick1:10.8.9.13:/brick1
Brick2:10.8.9.107:/brick1
Brick3:10.8.9.115:/brick1 #新增加
Brick4: 10.8.9.118:/brick1 #新增加
Brick5:10.8.9.112:/brick1
Brick6:10.8.9.114:/brick1
测试一:
客户端挂载glusterfs 10.8.9.115 节点,上传总共5G小文件
发现5G小文件被均匀打散,分布在以上六台服务器的/brick1 目录
查看每个节点的/brick1目录,发现:
10.8.9.13和10.8.9.107 的 /brick1 每个文件目录大小一样1.2G
10.8.9.115和10.8.9.118 的 /brick1 每个文件目录大小一样2G
10.8.9.112和10.8.9.114 的 /brick1 每个文件目录大小一样1.8G
以上3组服务器/brick1 目录文件合计5G
测试二:
客户端挂载glusterfs 10.8.9.115节点,上传一个5G的大文件test.img
发现 test.img 只存在10.8.9.115和10.8.9.118 的/brick1目录
其他服务器没有该文件。
总结:
在replica模式下,增加节点,可以增加整个分布式文件系统的存储总量,并且提升整个文件存储系统的性能,其中的replica模式还能实现数据的高可用性。
replica模式下,不进行对大文件的切割,而是存放在其中一组节点(客户端连接的节点优先)。
四、节点删除、修复篇
10.8.9.115和10.8.9.118 节点互为 replica 模式
移除其中一节点测试:
gluster>peerdetach (ip) (后续删除节点时使用) 可以使用参数 force
报错:
gluster> peer detach 10.8.9.115
peer detach: failed: Brick(s) with the peer 10.8.9.115exist in cluster
可使用force 删除。(正常环境下,不建议强制删除,这里为了测试所以用force)
gluster> peer detach 10.8.9.115 force
gluster> peer status
Hostname: 10.8.9.115
Uuid: cef74bc3-64ba-4f74-8a56-113e63eb467d
State: Peer in Cluster (Disconnected)
利用命令移除10.8.9.115节点后,客户端执行命令 du -sh /data 挂载的数据大小不变。
客户端上传数据后,10.8.9.118 /brick1目录数据比 10.8.9.115 /brick1 多10M
重新添加节点10.8.9.115 ,
gluster> peer probe 10.8.9.115
查看连接状态正常:gluster> peer status
过一段时间后,10.8.9.118 /brick1目录数据和 10.8.9.115 /brick1 数据一样
另外:
如果在10.8.9.115 服务停掉后,rm -rf /brick1/* 发现 /brick1/ 下面有个
.glusterfs 是用来恢复数据用的,启动节点后,数据直接从.glusterfs里面恢复。
删除一组节点测试
关闭两台服务器系统 10.8.9.115 10.8.9.118节点。
或者强制删除两个节点。
客户端执行du -sh /data 挂载的数据总大小减少50G。客户端挂载的目录里面文件一部分丢失。
该步骤主要测试:其中一组(主备)服务器丢失后,数据的完整性。
重新增加这两台节点,或者系统重启,打开cluster服务,
gluster> peer status 显示的节点数都正常连接后,客户端执行:du -sh /data 挂载的数据总大小恢复。
客户端连接节点测试()
客户端连接 10.8.9.115
直接关闭节点10.8.9.115 系统,
查询节点状态出于失效状态:
Hostname: 10.8.9.115
Uuid:2886b235-0983-42a9-a7dc-8b27c5813625
State: Peer inCluster (Disconnected)
客户端df -h查询:
glusterfs#10.8.9.115:/gv0 148G 7.5G 133G 6% /data
上传1G的数据,发现数据尽然能上传,并且数据已经分布到其他的节点。
说明,客户端利用glusterfs 挂载目录,连接的节点不存在单点故障。
五、扩容、缩减篇
缩减节点步骤:
系统的扩容及缩容可以通过如上节点管理、Brick 管理组合达到目的。
(1) 扩容时,可以先增加系统节点,然后添加新增节点上的Brick 即可。
(2) 缩容时,先移除Brick ,然后再进行节点删除则达到缩容的目的,且可以保证数据不丢失
1.移除brick
若是副本卷,则移除的Bricks 数是replica 的整数倍;stripe 具有同样的要求。
因此,副本卷(replica 2模式)需要移除一对brick,数据会移动到其他的节点上。
gluster> volume remove-brickgv0 10.8.9.112:/brick1 10.8.9.114:/brick1
查看状态
gluster> volume remove-brickgv0 10.8.9.112:/brick1 10.8.9.114:/brick1 status
2.移除节点:
gluster>peer detach 10.8.9.112
gluster>peer detach 10.8.9.114
。
###############################################################
替换 /brick1
1、先增加一个节点
gluster>peer probe 10.8.9.112
2、替换步骤
把10.8.9.115:/brick1替换到 10.8.9.112:/brick1
替换前状态:
gluster>volume info
Volume Name: gv0
Type: Distributed-Replicate
Volume ID: caa12bc8-31eb-49ca-bd86-cbd31771b010
Status: Started
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: 10.8.9.13:/brick1
Brick2: 10.8.9.107:/brick1
Brick3: 10.8.9.115:/brick1
Brick4: 10.8.9.118:/brick1
2.1、开始替换
我挂载的目录是一级目录所以提示报错,需要加force
volume replace-brick gv0 10.8.9.115:/brick110.8.9.112:/brick1 start force
2.2、查看状态:
gluster> volume replace-brick gv010.8.9.115:/brick1 10.8.9.112:/brick1 status
volume replace-brick: success: Number of filesmigrated = 218 Migration complete
2.3、commit 提交替换任务
gluster> volume replace-brick gv010.8.9.115:/brick1 10.8.9.112:/brick1 commit
volume replace-brick: success: replace-brick commitsuccessful
替换后状态:
gluster> volume info
Volume Name: gv0
Type: Distributed-Replicate
Volume ID: caa12bc8-31eb-49ca-bd86-cbd31771b010
Status: Started
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: 10.8.9.13:/brick1
Brick2: 10.8.9.107:/brick1
Brick3: 10.8.9.112:/brick1
Brick4: 10.8.9.118:/brick1
客户端上传数据,新节点 10.8.9.112 和10.8.9.118 的/brick目录数据一样,说明2台节点互为主备。
移除掉的节点10.8.9.115 /brick 数据大小,没有发生变化,说明已经被剔除。
这个时候可以删除节点10.8.9.115服务器了
gluster>peer detach 10.8.9.115
peerdetach: success
六、系统运维篇
1、系统配额
1.1开启/关闭系统配额
# gluster volume quota VOLNAME enable/disable
//在使用系统配额功能时,需要使用enable将其开启;disable为关闭配额功能命令。
1.2设置(重置)目录配额
# gluster volume quota VOLNAME limit-usage /directorylimit-value
#gluster volume quota dht_vol limit-usage /quota 10GB
//如上,设置dht_vol卷下的quota子目录的限额为10GB。
PS:这个目录是以系统挂载目录为根目录”/”,所以/quota即客户端挂载目录下的子目录quota
1.3配额查看
# gluster volume quota VOLNAME list
# gluster volume quota VOLNAME list /directory name
//可以使用如上两个命令进行系统卷的配额查看,第一个命令查看目的卷的所有配额设置,第二个命令则是执行目录进行查看。
//可以显示配额大小及当前使用容量,若无使用容量(最小0KB)则说明设置的目录可能是错误的(不存在)。
1.4地域复制、灾备(geo-replication)
# gluster volume geo-replication MASTER SLAVE start/status/stop
地域复制是系统提供的灾备功能,能够将系统的全部数据进行异步的增量备份到另外的磁盘中。
#gluster volume geo-replication dht_vol192.168.2.104:/mnt/sdb1 start
//如上,开始执行将dht_vol卷的所有内容备份到2.104下的/mnt/sdb1中的task,需要注意的是,这个备份目标不能是系统中的Brick。
1.5 I/O信息查看
Profile Command 提供接口查看一个卷中的每一个 brick 的 IO 信息。
#gluster volume profile VOLNAME start
//启动profiling,之后则可以进行IO信息查看
#gluster volume profile VOLNAME info
//查看IO信息,可以查看到每一个Brick的IO信息
# gluster volume profile VOLNAME stop
//查看结束之后关闭profiling功能
1.6 Top监控
Top command 允许你查看bricks 的性能例如:read, write, file opencalls, file read calls, file write calls, directory open calls, and directoryreal calls
所有的查看都可以设置top 数,默认100
# gluster volume top VOLNAME open [brickBRICK-NAME] [list-cnt cnt]
//查看打开的fd
#gluster volume top VOLNAME read [brick BRICK-NAME][list-cnt cnt]
//查看调用次数最多的读调用
#gluster volume top VOLNAME write [brick BRICK-NAME][list-cnt cnt]
//查看调用次数最多的写调用
# gluster volume top VOLNAME opendir [brickBRICK-NAME] [list-cnt cnt]
# gluster volume top VOLNAME readdir [brickBRICK-NAME] [list-cnt cnt]
//查看次数最多的目录调用
# gluster volume top VOLNAME read-perf [bsblk-size count count] [brick BRICK-NAME] [list-cnt cnt]
//查看每个Brick的读性能
# gluster volume top VOLNAME write-perf [bsblk-size count count] [brick BRICK-NAME] [list-cnt cnt]
//查看每个Brick的写性能
gluster 性能优化、报错解决:
peer 节点从一个集群,加入到另外一个集群的时候,节点不能启动 glusterd 报错解决方法:
[root@server114 glusterfs]# vi/usr/local/glusterfs/etc/glusterfs/glusterd.vol
volume management
typemgmt/glusterd
option working-directory /var/lib/glusterd
optiontransport-type socket,rdma
optiontransport.socket.keepalive-time 10
optiontransport.socket.keepalive-interval 2
optiontransport.socket.read-fail-log off
# optionbase-port 49152
/var/lib/glusterd 里面有记录信息,删除下面的所有信息,清空历史记录配置文件,服务即可启动
性能调优示例:
gluster volume start file-backup
gluster volume quota file-backup enable
gluster volume quota file-backup limit-usage /800TB
gluster volume set file-backup auth.allow192.168.10.31,192.168.12.27
gluster volume set file-backupperformance.cache-size 4GB
gluster volume set file-backupperformance.flush-behind on
gluster volume info file-backup