一、概述
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倍),兼顾分布式和复制式的功能。