glusterfs简单介绍
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了glusterfs简单介绍相关的知识,希望对你有一定的参考价值。
【前言】
gluseterfs是我使用过的第一款开源存储文件系统,也是唯一一款。在经历了文件存储的种种弊端<遍历>之后,就进入了对象存储的行列。gluster同样也是我心中最优秀的开源存储文件系统。他依靠其完美的弱入手,低坑模式,深受我这种菜鸟的喜爱并一发不可收拾。
glusterFS:适用于数据密集型任务的可扩展忘了文件系统,免费开源。gluster于2011年10月7日被red hat收购。
glusterFS由gluster公司的创始人兼首席技术官Anand Babu Periasamy编写。
【技术特点】
1,glusterFS体系结构,将计算、存储和I/O资源聚合到全局名称空间中,每台服务器都被视为节点,通过添加附加节点或向每个节点添加额外存储来扩展容量。通过在更多节点之间部署存储来提高性能,通过在节点之前复制N路数据来实现高可用性。同时以牺牲可靠性为代价。
2,glusterFS支持基于文件的镜像和复制、分条、负载平衡、故障转移、调度、磁盘缓存、存储配额、卷快照等。
3,gluster各客户端之间无连接,本身依赖于弹性哈希算法,而不是使用集中式或分布式元数据模型。
4,gluster通过各种复制选项提供数据可靠性和可用性:复制卷、分布卷。
【显著优点】
1,开源,且网上的文档基本上足够你维护一套简单的存储系统。
2,支持多客户端处理,当前已知的支持千级别及以上规模客户。
3,支持POSIX<简单来说,软件跨平台,也可以看找的其他博客说明,见‘参考文件’>。
4,支持各种低端硬件,当然并不推崇,但是可以实现。我在线上用过8核,32G,依然跑的很溜。
5,支持NFS/SMB等行业标准协议访问。
6,提供各种优秀的功能,如磁盘配额、复制式、分布式、快照、性能检测命令等。
7,支持大容量存储,当前已知的支持PB及以上规模存储。
8,可以使用任何支持扩展属性的ondisk文件系统,比如xattr.
【快速配置】
1,准备条件
a,至少两台设备/节点。192.168.76.128/129/130
b,具备正常网络连接。
c,至少两个磁盘,一个用于OS安装,一个用于服务gluster存储。
2,格式化安装磁盘
a,磁盘分区:# fdisk /dev/sdb
b,格式化并挂载。
#mkfs.xfs -i size=512 /dev/sdb1
#mkdir -p /data/brick1
#echo '/dev/sdb1 /data/brick1 xfs defaults 1 2' >> /etc/fstab
#mount -a && mount&&df -h
3,安装glusterFS
#yum install centos-release-gluster glusterfs-server glusterfs -y
# service glusterd start
# service glusterd status
4,配置IP/主机名映射。--在所有主机配置
# cat /etc/hosts
192.168.76.128 VM-CDS-COS-1
192.168.76.129 VM-CDS-COS-2
192.168.76.130 VM-CDS-COS-3
5,配置peer--在第一台主机上配置,重启其他主机glusterd服务。
# gluster peer probe VM-CDS-COS-2
# gluster peer probe VM-CDS-COS-3
5,配置volume
# mkdir -p /data/brick1/volume0
# gluster volume create test01 replica 3 VM-CDS-COS-1:/data/brick1/volume0 VM-CDS-COS-2:/data/brick1/volume0 VM-CDS-COS-3:/data/brick1/volume0
# gluster volume start test0
# gluster volume info
6,测试gluster
# mount -t glusterfs VM-CDS-COS-1:/test01 /mnt
[[email protected] ~]# for i in `seq -w 1 100`;do cp -rp /var/log/messages /mnt/copy-test-$i;done
[[email protected] ~]# ls -lA /mnt/copy-test-* | wc -l
[[email protected] ~]# ls -lA /data/brick1/volume0/copy-test-* | wc -l
【概念及其他说明】
卷volume:brick的集合,文件系统操作发生在volume之上,gluster根据需求,支持不同类型的volume。如下:
1,分布式卷:Distributed Glusterfs Volume ,默认的glusterfs卷,文件分布在volume中的brick上,如下边的命令,file只能存储在brick1或brick2或brick3中,但不能同时存储在两者中。
创建示例:#gluster volume create test01 VM-CDS-COS-1:/data/brick1/volume0 VM-CDS-COS-2:/data/brick1/volume0 VM-CDS-COS-3:/data/brick1/volume0
缺点:不支持数据冗余,brick故障将导致数据完全丢失,并且必须依靠底层硬件来保护数据丢失。
优点:可以轻松便宜的缩放卷大小。
2,复制卷:Replicated Glusterfs Volume,该卷文件通过指定的复制个数,分布在复制的多个brick上。如下边的命令,file将同时存储在brick1和brick2和brick3中。
创建示例:# gluster volume create test01 replica 3 transport tcp VM-CDS-COS-1:/data/brick1/volume0 VM-CDS-COS-2:/data/brick1/volume0 VM-CDS-COS-3:/data/brick1/volume0
优点:数据副本可以根据需求保留在对应的brick中,即使一个brick故障,也可以从其复制的brick访问数据,提升了可靠性和数据冗余。
3,分布式复制卷:Distributed Replicated Glusterfs Volume ,该卷文件分布在复制的brick集合中。brick的数量必须是副本数的倍数。且按照相邻的brick的顺序,作为彼此的副本。
创建示例:# gluster volume create test01 replica 2 transport tcp VM-CDS-COS-1:/data/brick1/volume0 VM-CDS-COS-2:/data/brick1/volume0
优点:该卷用于需要由冗余和缩放引起的高可用性数据。
4,条带卷:Striped Glusterfs Volume,该卷中数据在划分为不同的条带后,存储在brick中。所以大文件将被分为更小的块(相当于卷中的块数)每个块都被存储在一个块中。
创建示例:# gluster volume create test01 stripe 2 transport tcp VM-CDS-COS-1:/data/brick1/volume0 VM-CDS-COS-2:/data/brick1/volume0
缺点:不提供数据冗余
优点:负载均衡技术,更快的获取文件
5,分布式条带卷:Distributed Striped Glusterfs Volume ,与条带卷类似,不同在于条带可以分布在更多数据的brick上,brick的数量必须是条带的倍数。
创建示例:# gluster volume create test01 stripe 1 transport tcp VM-CDS-COS-1:/data/brick1/volume0 VM-CDS-COS-2:/data/brick1/volume0
glusterFS是个用户空间文件系统,为了与内核VFS交互,glusterFS使用了FUSE。
FUSE:File System in Userspace用户空间文件系统。是支持内核VFS<虚拟文件系统>和非特权用户应用程序之间交互<访问硬件>的内核模块,它具有可从用户空间访问的API。使用这个IP,任何类型的文件系统都可以使用几乎所有你喜好的语言编写。因为FUSE和其他语言之间有很多绑定。
FUSE结构图。
1,编译为创建二进制“hello”的文件系统“hello world”。
2,hello文件系统挂载点/tmp/fuse。
3,用户在挂载点/tmp/fuse上发出一个命令ls -l /tmp/fuse
4,该命令通过glibc达到VFS,并且挂载点/mnt/fuse对应基于FUSE的文件系统,所以VFS将它传递给FUSE模块。
5,FUSE内核模块通过libuse<用户空间中的FUSE库>中的glibc和FUSE库<常规内核存储库>后,FUSE内核模块会联系实际的文件系统二进制文件“hello”。
6,文件系统二进制将结果从堆栈返回到FUSE内核模块,通过VFS返回,最后返回到ls -l命令。
FUSE内核模块和FUSE库(libfuse)之间的通信是通过打开/dev/fuse获得的特殊文件描述符实现的,该文件可以多次打开,并将获取的文件描述符传递给mount系统调用,以便将描述符与安装的文件系统进行匹配。
使用FUSE文件系统的例子:
SSHFS这是一个文件系统客户端,可以使用sftp在远程系统上挂载目录和文件并与其进行交互。用于安装远程文件系统的非常方便的文件系统。
archivemount该文件系统允许您将存档文件(如tar(.tar)或gzipped tar文件(.tar.gz))挂载到挂载点并与其进行交互,包括读取和写入。在解压缩和解压缩之前,检查.tar.gz文件的内容是一种非常酷的方式,尤其是在您只需要一个文件的情况下。它还允许您轻松操作和创建.tar.gz文件。
ZFS-Fuse此文件系统允许您在Linux下创建,安装,使用和管理ZFS文件系统。回想一下,ZFS的许可与GPL不兼容,因此ZFS与FUSE的接口将ZFS保持为在Linux上运行的用户空间应用程序,并且不会违反任何许可。所以如果你想在Linux上使用ZFS,这是你最好的选择。
CloudStore CloudStore是一个与 Hadoop和 Hypertable集成的分布式文件系统
GlusterFS这是一个高性能的分布式文件系统,它使用“转换器”的概念,允许您创建具有各种功能的文件系统,包括镜像和复制,分条,负载平衡,磁盘缓存,预读,写后传输,并自我修复。GlusterFS的优势之一是它不使用元数据,而是依赖于文件布局和底层文件系统的知识。
translators:翻译器,将来自用户的请求转换为存储请求。
可以实现的功能包括:
a,将一种请求类型转换为另一种请求类型。如:修改路径,标志,数据加密等。
b,拦截或组织请求,如访问控制等。
c,产生新的请求,如数据预取等。
gluster的translators可以细分为很多类别。但是有两个重要类别:Cluster and performance translators。
数据/请求必须经历的最重要和第一翻译者之一是fuse translator,属于mount translators.
cluster translators:
*DHT(Distributed Hash Table) 分布式哈希表
*AFR(Automatic File Replication) 自动文件复制
performance translators:
* io-cache IO-缓存
* io-threads IO-线程
* md-cache MD-缓存
* O-B (open behind) 后读取
* QR (quick read) 快速读取
* r-a (read-ahead) 预读取
* w-b (write-behind) 后写入
其他feature translators:
* changelog 更新日志
* locks 锁,使用AFR实现对文件或目录相互冲突的操作同步。
* marker 标记
* quota 配额
调试translators: trace
DHT:Distributed Hash Table分布式哈希表。是gluster聚合多个服务器的容量和性能的核心。
DHT的任务是将每个文件放置在其子卷的一个子卷上,与复制(将副本放置在其所有子卷上)或条带(将块放在其所有子卷上)不同,它是一个路由功能,不是复制或分割。
DHT如何工作:使用的基本方法是一致的哈希。
1,每个子体积(brick)在32位哈希空间内分配一个范围,覆盖整个范围,没有空洞或重叠。
2,通过散列它的名字,每个文件在同一个空间中,也被分配一个值。恰好有一个brick会有一个指定的范围,包括文件的散列值。因此文件应该在brick上。但是很多情况下并非如此。比如:磁盘空间满了,brick的设置发生变化。
【日志说明】
【参考文件】
维基百科:https://en.wikipedia.org/wiki/Gluster
gluster文档中心:https://docs.gluster.org/en/latest/
posix解说:http://www.cnblogs.com/weiweishuo/p/3222995.html
FUSE说明:http://www.linux-mag.com/id/7814/
以上是关于glusterfs简单介绍的主要内容,如果未能解决你的问题,请参考以下文章
在Glusterfs上创建distributed volume,replicated volume,dispersed volume,combined volume