暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

​Glusterfs使用心得

390


作者时间QQ群
perrynzhou@gmail.com2020/12/01672152841


Glusterfs介绍

  • Glusterfs是一个分布式文件存储,通过多个主机磁盘聚合,对外提供统一的命令空间的存储文件存储服务。

  • Glusterfs提供丰富的存储策略,支持无副本方式存储、N副本存储、EC存储,针对不同的应用场景提供不同的存储策略。

  • Glusterfs整个架构采用堆栈插件实现,如果用户要实现自定义的功能,只需要实现自己需要的posix语义和对象你想要的功能即可,灵活性比较大。

  • Glusterfs作为无中心架构,扩展性相对比较好。

  • Glusterfs内部采用了弹性哈希算法,Glusterfs客户端针对每个文件在写入集群时候需要计算它父目录的layout和文件名的哈希值,然后选择一个glusterfsd进行写入.Glusterfs把需要计算的部分放到了客户端,Glusterfs服务端相对压力会比较好。


Glusterfs无中心架构



  • glusterfs,作为fuse mount的服务,通过fuse xlator作为入口,通过glusterfs 客户端的dht xlator,最终通过protocol/client xlator,数据直接送到glusterfsd进行IO操作。其中上图中的白色框内,是每个glusterfsd负责的写入数据的哈希范围。这个设计和ceph有一些类似。glusterfs每个进程的服务,都包含了一堆的xaltor.


  • glusterfs集群中每个进程服务都是由一组xlator来做对应的功能,每个请求都是从每个进程的中最上面一个xlator顺序执行到最后一个xlator,来实现本进程的工作,上图中的每个进程仅仅罗列了部分的xlator.glusterfs实现中客户端实现最重,体现在比较核心的三个模块,cluster/distribute、cluster/ec、cluster/replicate这三块,分别在客户端实现了哈希卷、EC卷、多副本卷的逻辑。每个客户端在使用mount时候会和glusterd通信获取到当前集群的拓扑信息,客户端通过弹性哈希算法来决定数据存储的位置,后续直接和对应的glusterfsd通信来完成IO

  • glusterfs服务端,在glusterfs集群中体现在glusterfsd的进程,这里主要是数据读写的一些io thread、网络请求接受和发送、访问控制、锁、刷盘的操作的xlator集合。

  • glusterd是glusterfs集群中管理进程,负责拉起glusterfsd服务、配置变更通知glusterfs客户端和glusterfsd,让他们各自根据变动来重新加载xlator.glusterd是通过读取glusterfs的集群配置来完成的,如下是glusterd加载的xaltor

    volume management
    // 定义glusterd加载的xaltor,这里对应的是glusterfs源代码中的xlator的实现目录
    type mgmt/glusterd
    option rpc-auth.auth-glusterfs on
    option rpc-auth.auth-unix on
    option rpc-auth.auth-null on
    option rpc-auth-allow-insecure on
    option transport.listen-backlog 1024
    option max-port 60999
    option event-threads 1
    option ping-timeout 0
    option transport.socket.listen-port 24007
    option transport.socket.read-fail-log off
    option transport.socket.keepalive-interval 2
    option transport.socket.keepalive-time 10
    option transport-type socket
    // 这里是最核心的,是整个glusterfs集群的目录配置
    option working-directory /var/lib/glusterd
    end-volume


Glusterfs 实际工程中的使用心得

  • glusterfs的稳定性不错,适合容量和带宽形的业务。

  • glusterfs的可配置参数比较多,需要掌握一些核心参数的实现,这样对于运行原理和运维上会有很大的帮助

  • glusterfs 的客户端实现比较重,大部分核心逻辑都在客户端,对于研发来说这块有很大的改进空间。

  • 在实际的使用过程中,建议使用比较新的release版本,目前旧版的小问题比较多;如果有研发实力最好自己维护一个分支。

  • glusterfs 目前社区活跃度还不错,但是周边生态做的比较差。


文章转载自存储内核技术交流,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论