学习GlusterFS(一)
阅读原文时间:2023年07月09日阅读:3

一、概述

1、GlusterFS是集群式NAS存储系统,分布式文件系统(POSIX兼容),Tcp/Ip方式互联的一个并行的网络文件系统,通过原生 GlusterFS 协议访问数据,也可以通过 NFS/CIFS 协议访问数据,没有元数据服务器,实现整个系统的性能、可靠性和稳定性。

2、GlusterFS 常见术语

名称

解释

Brick                   

最基本的存储单元,表示为trusted storage pool中输出的目录,供客户端挂载用。

Volume

一个卷。在逻辑上由N个bricks组成。

FUSE

Unix-like OS上的可动态加载的模块,允许用户不用修改内核即可创建自己的文件系统。

Glusterd

Gluster management daemon,要在trusted storage pool中所有的服务器上运行。

POSIX

一个标准,GlusterFS兼容。

3、GlusterFS卷类型

基本卷:

(1)  distribute volume:分布式卷

(2)  stripe volume:条带卷

(3)  replica volume:复制卷

复合卷:

(4)  distribute stripe volume:分布式条带卷

(5)  distribute replica volume:分布式复制卷

(6) stripe replica volume:条带复制卷

(7) distribute stripe replicavolume:分布式条带复制卷

基本卷:

哈希卷(distributed volume,文件通过hash算法在所有brick上分布,文件级raid0,不具有容错能力);

复制卷(replicated volume,生产常用,文件同步复制到多个brick上,文件级raid1,具有容错能力,w性能下降r性能提升);

条带卷(striped volume,不建议使用,单个文件分布到多个brick上,支持超大文件,类似raid0,rr方式round-robin,通常用于HPC(high performance compute)中的超大文件(>10G的单个文件)及高并发环境(多人同时访问同一个文件));

复合卷:

哈希复制卷(distributed replicated volume,生产常用,同时具有哈希卷和复制卷的特点);

哈希条带卷(distributed striped volume);

复制条带卷(replicated striped vlume);

哈希复制条带卷(distributed replicated striped volume);

4、开源并行FS比较(glusterfs VS moosefs VS lustre VS ceph):

比较维度

Glusterfs

Moosefs

Lustre

Ceph

成熟度

2005年发布第一个GA版1.2.3,2013年GA版3.3.2,具有成熟的系统架构和完整的工程代码

2008年发布第一个开源版本v1.5,13年发布GA版v1.6.27,稳定,比较成熟的开源DFS

2003发布第一个版本lustre1.0,2013年发布v2.4.0,相当成熟,在HPC领域占有绝大比例

2013年发布v0.71,并已添加到linux kernel中作实验内核,目前不成熟有较多bug,更新稳定都是实验版

稳定性

较稳定,无重大bug,已有较多组织或机构应用于生产环境

较稳定,无重大bug

很稳定,在HPC领域应用很多

核心组件RADOS较稳定,每3个月更新一次稳定版,有部分企业用于生产环境

复杂度

简单,无元数据服务,用户空间实现,架构清晰,xlator树形结构

简单,用户空间实现,代码规模较小,高度模块化

复杂度较高,依赖内核实现

较复杂,c++实现,功能较多

高性能

解除元数据瓶颈,并行化数据访问

元数据单点瓶颈

高性能,HPC领域表现卓越

数据分布均衡,并行化度高

扩展性

弹性hash代替元数据服务,线性扩展,可轻松扩展到数百PB量级,支持动态扩容

可增加存储server,不能增加MDS

高扩展性,容量可达数百PB,可在不打断任何操作的情况下,通过增加新的OSS来实现动态扩展

高扩展性,支持10-1000台server,支持TB到PB的扩展,当组件发生变化时(添加或删除),自动进行数据的重分布

可用性

多元数据服务设计,数据分布提供三种方式的分割:AFR、DHT、stripe,支持自动复制和自动修复

元数据+日志服务器,保障元数据server,运行时元数据放内存,可设置副本

元数据集群,可部署主备切换工作方式,无副本设计,OSS之间可利用共享存储实现自动故障恢复

元数据集群,没有单点故障,多数据副本,自动管理、自动修复,monitor监控集群中所有节点状态,且可有多个monitor保证可靠性

可管理性

部署简单,易于管理和维护,使用底层FS,ext3/zfs,客户端负载增加;提供管理工具,如卷的扩容、数据LB、目录配额及相关监控等

部署简单,提供web gui监控界面,元数据恢复,文件恢复,回收站功能,快照

部署复杂,需升级kernel等,提供管理工具,如设置目录stripe

部署较复杂,提供工具对集群进行监控管理,包括集群状态,各组件状态等

研发成本

用户空间实现,模块化堆栈式架构

用户空间实现,小规模

高,内核空间实现,且代码规模大

较高,代码规模大,功能多

适用性

适用以文件为对象的存储体系,适合大文件存储

小规模集群,元数据瓶颈,内存消耗大

大文件,HPC领域

 

NAS兼容

支持NFS、CIFS、HTTP、FTP、gluster原生协议,与POSIX标准兼容

支持CIFS、NFS,支持标准POSIX接口

支持CIFS、NFS,支持标准POSIX接口

支持CIFS、NFS,支持标准POSIX接口

采用指数

☆☆☆☆

☆☆☆

☆☆☆

☆☆

二、配置安装

1、环境

192.168.1.11     gluster-1-1

192.168.1.12     gluster-1-2

192.168.1.13     gluster-1-3

注意:hosts文件添加解析,时间同步,关闭iptables和SELinux,三台各加10G硬盘做存储数据。

2、下载gluster相关软件包

vim /etc/yum.repos.d/gfs.repo
http://bits.gluster.org/pub/gluster/glusterfs/3.4.2/x86_64
依赖包:rpcbind libaio lvm2-devel
服务端:yum install glusterfs-server glusterfs glusterfs-cli glusterfs-fuse glusterfs-libs glusterfs-api
客户端:yum install glusterfs glusterfs-fuse glusterfs-libs
磁盘分区:mkfs.ext4 -L /brick1 /dev/sdb 分区、标签、格式化

3、部署

1)创建目录并启动服务
mkdir /brick1
/etc/init.d/glusterd start

2)添加gluster节点服务器
gluster peer probe gluster-1-2
gluster peer probe gluster-1-3

3)查看节点服务器
gluster peer status

4、创建卷

1)创建testvol卷(默认是哈希卷)
gluster volume create testvol gluster-1-1:/brick1/b1 哈希卷
gluster volume create gs2 replica 2 gluster-1-1:/brick1/b1  gluster-1-2:/brick1/b2 复制卷

2)启动卷
gluster volume start testvol

3)查看卷
gluster volume info

4)删除卷
gluster volume remove-brick testvol gluster-1-2:/brick1/b2

5、客户端测试

1)客户端挂载卷
mount -t glusterfs gluster-1-1:/testvol /mnt

2)测试
df -h mount 等
touch {1..9}.txt
rm 4.txt

6、节点操作

1)删除节点服务器
gluster peer detach gluster-1-2 不能删除自己

2)添加节点服务器
gluster peer probe gluster-1-2
gluster volume add-brick testvol gluster-1-2:/brick1/b2 (b2下面不能有文件)

3)重新LB,要在闲时做,分两步,先fix-layout将hash算法重分配,再将数据重分配
gluster volume rebalance testvol fix-layout start
gluster volume rebalance testvol start

4)查看rebalance平衡状态
gluster volume rebalance testvol status

7、删除卷

1)卸载挂载点
umount /mnt -lf
2)删除卷
gluster volume stop testvol
gluster volume delete testvol (卷删除后,内容还在)
rm -rf /brick1/b1

8、恢复卷信息

1)卷信息的目录
ll /var/lib/glusterd/vols/testvol/

2)恢复命令
gluster volume sync gluster-1-1 all

9、其他

1)允许可信任客户端IP
gluster volume set testvol auth.allow 192.168.1.*

2)关闭gluster的nfs功能
ps -ef | grep nfs
gluster volume set testvol nfs.disable on

10、故障

1)复制卷数据不一致
故障现象:双副本卷数据出现不一致
故障模拟:删除其中一个brick数据
修复方法
cat 文件
触发自修复:遍历并访问文件
find /mnt -type f -print0 | xargs -0 head -c1

2)glusterfs集群节点配置信息不正确
恢复复制卷 brick
故障现象:双副本卷中一个brick损坏
恢复流程
a、重新建立故障brick目录
mkdir b2
b、设置扩展属性(参考另一个复制 brick)
getfattr -d -m . -e hex b1/ 获取扩展属性
setfattr -n trusted.glusterfs.volume-id -v 0x1fa96ed0a0624ccf9e4f07cb9d84296f b2
setfattr -n trusted.gfid -v 0x00000000000000000000000000000001 b2
setfattr -n trusted.glusterfs.dht -v 0x000000010000000000000000ffffffff b2
c、重启 glusterd服务
/etc/init.d/glusterd restart
gluster volume stop testvol
gluster volume start testvol
d、触发数据自修复
find /mntpoint -type f -print0 | xargs -0 head -c1 >/dev/null

3)修复磁盘数据(在使用server1时宕机,使用server2替换,执行数据同步)
gluster volume replace-brick testvol server1:/brick1/b1 server2:/brick1/b1 commit force
gluster volume heal testvol full

GlusterFS 客户端常用命令

命令

功能

gluster peer probe

添加节点         

gluster peer detach

移除节点

gluster volume create

创建卷

gluster volume start

启动卷

gluster volume stop

停止卷

gluster volume delete

删除卷

gluster volume quota enable

开启卷配额

gluster volume quota enable

关闭卷配额

gluster volume quota limit-usage

设定卷配额

创建卷

1、创建分布卷
gluster volume create dis_vol gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3

2、创建复制卷
gluster volume create rep_vol replica 2 gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3

3、创建条带卷
gluster volume create str_vol stripe 3 gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3

4、创建分布条带卷
gluster volume create dir_str_vol stripe 4 gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3

5、创建分布复制卷
gluster volume create dir_rep_vol replica 2 gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3

6、创建分布条带复制
gluster volume create dis_str_rep_vol stri 2 repl 2 gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3

7、创建条带复制卷
gluster volume create str_rep_vol stripe 2 replica 2 gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3

8、创建分散卷(不常用)
gluster volume create disperse_vol disperse 4 gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3

资源定义

Brick: 存储的基本单元,表现为服务器上可信存储池的导出目录
Volume: 卷是bricks的逻辑集合
Cluster: 一组计算机组成的集群
Distributed File System: 允许多个客户端通过网络并发访问的文件系统
GFID: 每个GlusterFs中的文件或者目录都有一个128bit的数字标识称为GFID
glusterd: 管理守护进程需要运行在所有的提供授信存储池的服务器上
Namespace: 名称空间是被创建的一个抽象容器或环境用来保存唯一标识符号
Quorum: 设置一个可信的存储池中最多失效的主机节点数量
Quota: 允许通过目录或者卷设置对磁盘空间使用的限制
Posix: 可移植操作系统接口是IEEE定义的一系列相关api标准
Vol File: Vol文件是glusterfs进程使用的配置文件
Distributed: 分布卷
Replicated: 复本卷
Distributed Replicated: 分布式复制卷
Geo-Replication: 异地备份为站点通过局域网、广域网、互联网提供一个连续的异步的和增量复制服务
Metedata: 元数据定义为关于数据的数据描述信息,在GlusterFs没有专用的元数据存储内容
Extended Attributes: 扩展属性是文件系统的一个特性
FUSE: 用户空间的文件系统是一个用于类Unix操作系统的可加载内核模块,以允许非特权用户在适用内核代码的情况下创建自己的文件系统。实现了在用户空间下运行文件系统代码

创建volume

Distributed:分布式卷,文件通过hash算法随机的分布到由bricks组成的卷上。
Replicated:复制式卷,类似raid1,replica数必须等于volume中brick所包含的存储服务器数,可用性高。
Striped:条带式卷,类似与raid0,stripe数必须等于volume中brick所包含的存储服务器数,文件被分成数据块,以Round Robin的方式存储在bricks中,并发粒度是数据块,大文件性能好。
Distributed Striped:分布式的条带卷,volume中brick所包含的存储服务器数必须是stripe的倍数(>=2倍),兼顾分布式和条带式的功能。
Distributed Replicated:分布式的复制卷,volume中brick所包含的存储服务器数必须是 replica 的倍数(>=2倍),兼顾分布式和复制式的功能。