http://www.bubuko.com/infodetail-666312.html
#######################################
##### 网络架构 #
#######################################
两台服务器 M1 M2
M1 为GlusterFS 主服务器,ip为192.168.1.138
M2 为GlusterFS 热备服务器,ip为192.168.1.139
M1 也是client客户端
(一) IP设置
略
#######################################
#### 服务环境安装 ###
#######################################
(一) fuse的安装
1 检查fuse是否安装
[root@M1 ~]# modprobe -l | grep fuse #检查是否已经安装了fuse,执行这条命令如果有东西输出则直接跳到第二步,如果没有东西输出则说明fuse没有安装则安装fuse
kernel/fs/fuse/fuse.ko
kernel/fs/fuse/cuse.ko
2 安装fuse
#tar -zxvf fuse-2.7.4glfs11.tar.gz
#cd fuse-2.7.4glfs11
#./configure
#make
#checkinstall
(二) 安装glusterFS(M1,M2上执行相同的操作)
[root@M1 ~]# cd /data/software/
[root@M1 software]# tar -zxvf glusterfs-3.4.0.tar.gz
[root@M1 glusterfs-3.4.0]# cd glusterfs-3.4.0
[root@M1 glusterfs-3.4.0]# ./configure --prefix=/data/apps/glusterfs
# 如果出现下面错误
checking for flex... no
checking for lex... no
configure: error: Flex or lex required to build glusterfs.
解决方法 [root@M1 glusterfs-3.4.0]# yum -y install flex
# 如果出现下面错误
configure: error: GNU Bison required to build glusterfs.
解决方法 [root@M1 glusterfs-3.4.0]# yum -y install bison
[root@M1 glusterfs-3.4.0]# make
[root@M1 glusterfs-3.4.0]# make install
# 检验安装是否成功
[root@M1 glusterfs-3.4.0]# ldconfig
[root@M1 glusterfs-3.4.0]# /home/data/apps/glusterfs/sbin/glusterfs --version # 输出版本信息,则说明安装成功
################################################
#### glusterfs 环境配置与客户端挂载 #
################################################
一 glusterfs 启动
[root@M1 glusterfs-3.4.0]# service glusterd start (M1,M2上都执行相同的操作)
二 添加防火墙规则 (M1,M2都做相同的操作,注意防火墙规则顺序) 注:防火墙部分等下再做测试
[root@M1 glusterfs-3.4.0]# iptables -I INPUT -p tcp --dport 24007 -j ACCEPT
[root@M1 glusterfs-3.4.0]# service iptables save
三 添加节点
[root@M1 glusterfs-3.4.0]# /data/apps/glusterfs/sbin/gluster peer probe 192.168.1.139 (只要在在M1上)
四 创建副本卷
[root@M1 ~]# mkdir /data/share (M1,M2上创建的存储数据的文件夹)
[root@M2 ~]# mkdir /data/share
[root@M1 ~]# chown -R www:www /data/share
[root@M2 ~]# chown -R www:www /data/share
[root@M1 ~]# /data/apps/glusterfs/sbin/gluster volume create bbs_img replica 2 192.168.1.{138,139}:/data/share
volume create: bbs_img: success: please start the volume to access data # 创建名称为bbs_img的副本卷用于挂载,分别存储在192.168.1.138,192.168.1.139的/data/share的文件夹中
[root@M2 ~]# /data/apps/glusterfs/sbin/gluster volume start bbs_img
volume start: bbs_img: success (启动副本卷可以在M1或者M2上执行)
五 挂载
在M1上创建挂载点
[root@M1 ~]# mkdir /data/wwwroot/web/share
[root@M1 ~]# chown -R www:www /data/wwwroot/web/share
[root@M1 glusterfs]# mount.glusterfs 192.168.1.138:/bbs_img /data/wwwroot/web/share # 这里客户端可以挂载任意ip地址,可以是192.168.1.139,所得到的数据都是一样的
# 我们切换到www用户创建文件
[root@M1 glusterfs]# su -l www
[www@M1 share]$ echo "111111111111111" > 1.txt
[www@M1 share]$ echo "222222222222222" > 2.txt
# 注意我们不要在服务器上添加内容,这样会导致内容紊乱,应该直接在挂载点添加内容
# 此时在m1和m2上都创建了文件说明挂载已经成功了
[www@M1 share]$ ll /data/share/ # 每次卸载挂载这个文件夹的所有者都会切换成root,应该注意这点
total 16
-rw-rw-r-- 2 www www 16 Mar 9 01:50 1.txt
-rw-rw-r-- 2 www www 16 Mar 9 01:50 2.txt
[root@M2 ~]# ll /data/share/
total 16
-rw-rw-r-- 2 www www 16 Mar 9 01:50 1.txt
-rw-rw-r-- 2 www www 16 Mar 9 01:50 2.txt
################################################
## glusterfs管理 #
################################################
一 节点管理
1 查看节点状态
[root@M1 glusterfs]# /data/apps/glusterfs/sbin/gluster peer status
Number of Peers: 1
Hostname: 192.168.1.139
Uuid: cd25b695-6266-4720-8f42-ffb34179b4fb
State: Peer in Cluster (Connected)
2 移除节点 # 现在我们在M1上把M2移除掉
[root@M1 glusterfs]# /data/apps/glusterfs/sbin/gluster peer detach 192.168.1.139
peer detach: failed: Brick(s) with the peer 192.168.1.139 exist in cluster
# 默认情况下节点是移除不了的,我们可以强制移除(不建议强制移除节点)
[root@M1 share]# /data/apps/glusterfs/sbin/gluster peer detach 192.168.1.139 force # 强制移除节点(不建议)
peer detach: success
[root@M1 share]# /data/apps/glusterfs/sbin/gluster peer status # 再次查看状态
peer status: No peers present
3 添加节点
[root@M1 share]# /data/apps/glusterfs/sbin/gluster peer probe 192.168.1.139
二 卷管理
1 创建卷(这里我只介绍副本卷)
[root@M1 ~]# /data/apps/glusterfs/sbin/gluster volume create bbs_img replica 2 192.168.1.{138,139}:/data/share
2 查看卷信息
[root@M1 share]# /data/apps/glusterfs/sbin/gluster volume info
3 查看卷状态
[root@M1 share]# /data/apps/glusterfs/sbin/gluster volume status
4 启动/停止卷
//data/apps/glusterfs/sbin/gluster volume start/stop volumename
// 客户端挂载卷之前要先启动,在卷停止之前要先把客户端的挂载卸载
[root@M1 share]# umount /home/data/wwwroot/web/share
[root@M1 share]# /data/apps/glusterfs/sbin/gluster volume stop bbs_img
三 Brick管理
1 添加Brick
若是副本卷,则一次添加的Bricks数是replica的整数倍
# 现在我们为bbs_img添加2个Brick(前面我们的Brick数为2)
[root@M1 share]# mkdir /data/share2
[root@M1 share]# chown www:www /data/share2
[root@M2 share]# mkdir /data/share2
[root@M2 share]# chown www:www /data/share2
[root@localhost mnt]# /data/apps/glusterfs/sbin/gluster volume add-brick bbs_img 192.168.1.{138,139}:/data/share2
volume add-brick: success # 这样就达到了扩容的作用
[root@M1 share]# /data/apps/glusterfs/sbin/gluster volume info
Volume Name: bbs_img
Type: Distributed-Replicate
Volume ID: cacb4587-c9b4-4d38-84d1-99dbe2c28477
Status: Started
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: 192.168.1.138:/data/share
Brick2: 192.168.1.139:/data/share
Brick3: 192.168.1.138:/data/share2
Brick4: 192.168.1.139:/data/share2
# 扩容时,可以先增加系统节点,然后添加新增节点上的Brick即可。
2 移除Brick
若是副本卷,则移除的Bricks数是replica的整数倍。
# 现在我们移除刚刚添加的两个Brick
[root@M1 share]# /data/apps/glusterfs/sbin/gluster volume remove-brick bbs_img 192.168.1.{138,139}:/data/share2 start
# 在执行开始移除之后,可以使用status命令进行移除状态查看。
[root@M1 share]# /data/apps/glusterfs/sbin/gluster volume remove-brick bbs_img 192.168.1.{138,139}:/data/share2 status
# 使用commit命令执行Brick移除,则不会进行数据迁移而直接删除Brick,符合不需要数据迁移的用户需求。
[root@M1 share]# /data/apps/glusterfs/sbin/gluster volume remove-brick bbs_img 192.168.1.{138,139}:/data/share2 commit
3 替换Brick
我们把 192.168.1.139:/data/share 替换为 192.168.1.138:/data/share2
[root@M1 share]# /data/apps/glusterfs/sbin/gluster volume replace-brick bbs_img 192.168.1.139:/data/share 192.168.1.138:/data/share2 start
如果发生这个错组 volume replace-brick: failed: /data/share2 or a prefix of it is already part of a volume 说明 /data/share2 曾经是一个Brick。具体解决方法
[root@M1 share]# rm -rf /data/share2/.glusterfs
[root@M1 share]# setfattr -x trusted.glusterfs.volume-id /data/share2
[root@M1 share]# setfattr -x trusted.gfid /data/share2
//如上,执行replcace-brick卷替换启动命令,使用start启动命令后,开始将原始Brick的数据迁移到即将需要替换的Brick上。
# 查看是否替换完
[root@M1 share]# /data/apps/glusterfs/sbin/gluster volume replace-brick bbs_img 192.168.1.139:/data/share 192.168.1.138:/data/share2 status
# 在数据迁移的过程中,可以执行abort命令终止Brick替换。
[root@M1 share]# /data/apps/glusterfs/sbin/gluster volume replace-brick bbs_img 192.168.1.139:/data/share 192.168.1.138:/data/share2 abort
# 在数据迁移结束之后,执行commit命令结束任务,则进行Brick替换。使用volume info命令可以查看到Brick已经被替换。
[root@M1 share]# /data/apps/glusterfs/sbin/gluster volume replace-brick bbs_img 192.168.1.139:/data/share 192.168.1.138:/data/share2 commit
# 此时我们再往 /data/wwwroot/web/share 上添加数据的话,数据会同步到 192.168.1.138:/data/share 和 192.168.1.138:/data/share2 上。而不会同步到192.168.1.139:/data/share 上。
下面替换回来
这里我们在M2上执行
[root@M2 ~]# rm -rf /data/share/.glusterfs
[root@M2 share]# setfattr -x trusted.glusterfs.volume-id /data/share
[root@M2 share]# setfattr -x trusted.gfid /data/share
[root@M2 data]# /data/apps/glusterfs/sbin/gluster volume replace-brick bbs_img 192.168.1.138:/data/share2 192.168.1.139:/data/share start
[root@M2 data]# /data/apps/glusterfs/sbin/gluster volume replace-brick bbs_img 192.168.1.138:/data/share2 192.168.1.139:/data/share status
[root@M2 data]# /data/apps/glusterfs/sbin/gluster volume replace-brick bbs_img 192.168.1.138:/data/share2 192.168.1.139:/data/share commit
[root@M2 data]# chown www:www /data/share
[root@M1 share]# chown www:www /data/share (有可能要更改)
此时再在服务器上创建文件,则又同步到 192.168.1.139:/data/share上面了
###################################
#### 数据复制 ##
###################################
一数据复制
我们同步一份数据到
192.168.1.138 /data/share3上
[root@M1 share]# mkdir /data/share3
[root@M1 share]# /data/apps/glusterfs/sbin/gluster volume geo-replication bbs_img /data/share3 start
Starting geo-replication session between bbs_img & /data/share3 has been successful
[root@M1 share]# ll /data/share3
total 28
-rw-rw-r-- 1 www www 16 Mar 9 01:50 1.txt
-rw-rw-r-- 1 www www 16 Mar 9 01:50 2.txt
..........................................
-rw-rw-r-- 1 www www 17 Mar 9 04:05 7.txt
[root@M1 share]# /data/apps/glusterfs/sbin/gluster volume geo-replication bbs_img /data/share3 status # 查看同步状态
NODE MASTER SLAVE STATUS
---------------------------------------------------------------------------------------------------
M1 bbs_img /data/share3
OK
[root@M1 share]# /data/apps/glusterfs/sbin/gluster volume geo-replication bbs_img /data/share3 stop # 停止同步,如果同步不停止则会一直增量同步
Stopping geo-replication session between bbs_img & /data/share3 has been successful
#####################################################
# 故障处理 #
#####################################################
一 挂载服务器故障:
我们使用的是 mount.glusterfs 192.168.1.138:/bbs_img /data/wwwroot/web/share 这种方式进行挂载。如果192.168.1.138(M1) 网络故障怎么办?
1 手动切换
步骤:
umount /data/wwwroot/web/share
mount.glusterfs 192.168.1.139:/bbs_img /data/wwwroot/web/share # 重新挂载到192.168.1.139(M2)上
2 使用shell脚本每隔10s扫描一遍如果192.168.1.138服务器有问题则重新挂载并退出程序
[root@M2 data]# yum -y install nmap # 安装端口扫描工具
[root@M1 shell]# vim gfs_keepalive.sh
#!/bin/bash # nmap 192.168.1.138 的 24007端口判断端口是否已经开启 flag=0 while [ "$flag" == "0" ] do hostup=$( /usr/bin/nmap -p 24007 192.168.1.138 | grep ‘Host is up‘ ) portup=$( /usr/bin/nmap -p 24007 192.168.1.138 | grep ‘tcp open‘ ) if [ "$hostup" == "" ] || [ "$portup" == "" ];then # 先卸载服务在重新挂载到另一台服务器 /bin/umount /data/wwwroot/web/share /sbin/mount.glusterfs 192.168.1.139:/bbs_img /data/wwwroot/web/share flag=1 fi /bin/sleep 10 done
二 数据紊乱问题
# 比如192.168.1.139:/data/share上数据紊乱。但客户端数据没紊乱,这时192.168.1.139:/data/share会自动同步客户端的数据
三 数据恢复
如果客户端误删数据
1 备份客户端数据
2 可以采用每天的备份直接替换掉客户端的数据