码迷,mamicode.com
首页 > 其他好文 > 详细

glusterfs简单介绍

时间:2018-03-21 17:25:46      阅读:821      评论:0      收藏:0      [点我收藏+]

标签:glusterFS FUSE

【前言】

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

    [root@VM-CDS-COS-1 ~]# for i in `seq -w 1 100`;do cp -rp /var/log/messages /mnt/copy-test-$i;done
    [root@VM-CDS-COS-1 ~]# ls -lA /mnt/copy-test-* | wc -l
    [root@VM-CDS-COS-1 ~]# 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的优势之一是它不使用元数据,而是依赖于文件布局和底层文件系统的知识。

  • s3fs此FUSE文件系统允许您将 S3存储桶作为本地文件系统安装。Subcloud提供这种服务的商业支持。


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 FUSE

原文地址:http://blog.51cto.com/11697257/2089478

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!