一、概述
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 |
---|---|---|---|---|
成熟度 | 2003发布第一个版本lustre1.0,2013年发布v2.4.0,相当成熟,在HPC领域占有绝大比例 | 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领域 | Ceph |
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倍),兼顾分布式和复制式的功能。