Glusterfs分布式存储
一、简介
Glusterfs是一个开源分布式文件系统,具有强大的横向扩展能力,可支持数PB存储容量和数千客户端,通过Infiniband RDMA 或Tcp/Ip 方式将许多廉价的x86 主机,通过网络互联成一个并行的网络文件系统。具有可扩展性、高性能、高可用性等特点。
Glusterfs采用可堆叠的用户空间设计,如图所示:
Glusterfs堆栈式结构
Glusterfs是根据fuse提供的接口实现的一个用户态的文件系统,主要包括gluster、glusterd、glusterfs和glusterfsd四大模块组成:
gluster:是cli命令执行工具,主要功能是解析命令行参数,然后把命令发送给glusterd模块执行。
glusterd:是一个管理模块,处理gluster发过来的命令,处理集群管理、存储池管理、brick管理、负载均衡、快照管理等。集群信息、存储池信息和快照信息等都是以配置文件的形式存放在服务器中,当客户端挂载存储时,glusterd会把存储池的配置文件发送给客户端。
glusterfsd:是服务端模块,存储池中的每个brick都会启动一个glusterfsd进程。此模块主要是处理客户端的读写请求,从关联的brick所在磁盘中读写数据,然后返回给客户端。
glusterfs:是客户端模块,负责通过mount挂载集群中某台服务器的存储池,以目录的形式呈现给用户。当用户从此目录读写数据时,客户端根据从glusterd模块获取的存储池的配置文件信息,通过DHT算法计算文件所在服务器的brick位置,然后通过Infiniband RDMA 或Tcp/Ip 方式把数据发送给brick,等brick处理完,给用户返回结果。存储池的副本、条带、hash、EC等逻辑都在客户端处理。
在使用glusterfs提供的存储服务之前,需要先挂载存储池,向挂载点写数据,会经过fuse内核模块传给客户端,客户端检查存储池的类型,然后计算数据所在服务器 ,最后通过socket或rdma与服务器通信,如图2所示:
二、环境准备(两台机器为例)
1、在每台机器的hosts中添加
192.168.16.118 glusterfs01
192.168.16.119 glusterfs02
119
118
2、安装gluster存储库资源(两台服务器均操作)
yum install centos-release-gluster
yum --enablerepo=centos-gluster*-test install glusterfs-server
systemctl enable glusterd
systemctl start glusterd
systemctl status glusterd
118
119
3、服务器磁盘环境配置(两台服务器均操作)
每台机器上有用来做存储的磁盘/dev/sdb(如果没有也没有关系,直接用本地一个目录来测试操作)
mkfs.xfs -i size=512 /dev/sdb #格式化
mkdir -p /test/bk1 #创建挂载目录
cat /etc/fstab #永久挂载
/dev/sdb /test/bk1 xfs defaults 1 2
mount -a #执行挂载命令
df -h #查看是否挂载
4、没有磁盘的话,也可以用目录代替,意义一样(两台服务器均操作)
mkdir -p /u01/isi/glusterdata
5、添加节点信息(任意一台服务器操作,以118为例)
注意:在118上添加之后,在119上同样可以看到添加的节点信息,无需再次添加;若在119上操作可以看到提示已经有添加了
gluster peer probe glusterfs02
6、创建复制卷(任意一台服务器操作,以118为例)
gluster volume create volume1 replica 2 glusterfs01:/u01/isi/glusterdata/
glusterfs02:/u01/isi/glusterdata/
7、启动卷(任意一台服务器操作,以118为例)
gluster volume start volume1
8、查看卷信息(任意一台服务器操作,以118为例,119可以查看)
gluster volume info
9、创建挂载卷目录(两台服务器均操作)
mkdir /brick1
10、挂载卷(两台服务器均操作)
118
mount -t glusterfs glusterfs01:/volume1 /brick1
119
mount -t glusterfs glusterfs02:/volume1 /brick1
11、写数据测试
for i in `seq -w 1 10`; do cp -rp /var/log/messages /brick1/copy-test-$i; done
然后查看/brick1目录里面的数据,同样可以在119的/brick1
目录下看到这些数据,因为数据会写两份。
三、参考链接
https://www.cnblogs.com/bfmq/p/9990467.html
https://www.cnblogs.com/sxchengchen/p/7805667.html
四、问题汇总
1、创建卷失败
GlusterFS创建volume失败的解决方法,(* or a prefix of it is already part of a volume)
rm -rf /u01/isi/glusterdata/.glusterfs/ #删除数据目录下的数据
setfattr -x trusted.glusterfs.volume-id /u01/isi/glusterdata #清除属性信息
setfattr -x trusted.gfid /u01/isi/glusterdata #清除属性信息
重新创建即可
2、常见复制卷失败
volume create: volume1: failed: Staging failed on glusterfs02. Error: The brick
glusterfs02:/u01/isi/glusterdata 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.
是因为创建的卷占用了/分区,在命令的后面加上force即可
gluster volume create volume1 replica 2 glusterfs01:/u01/isi/glusterdata/
glusterfs02:/u01/isi/glusterdata/ force
3、卸载过程(两台服务器均操作)
step1:卸载盘和停止卷
cd
umount /brick1/ (两台服务器均操作) #卸载盘
gluster volume stop volume1(任意一台服务器操作,以118为例)#停止卷
step2:删除卷
gluster volume delete volume1 #删除卷
gluster volume list #列出集群中的所有卷
gluster volume info #查看集群中的卷信息
gluster volume status #查看集群中的卷状态
gluster volume status all #查看集群中的卷状态
step3:删除peer节点
gluster peer detach glusterfs02
step4:停用服务
systemctl stop glusterd
systemctl disable glusterd
systemctl status glusterd
step5:卸载服务
yum -y remove glusterfs-server centos-release-gluster #卸载服务
rm -rf /u01/isi/glusterdata /brick1 #删除数据目录和挂载卷目录