Skip to content

GlusterFS-分布式文件系统

GlusterFS 概述

GlusterFS是一个完全开源、无中心设计的分布式文件系统,旨在构建大规模、弹性扩展、高性能的存储解决方案。它将多个物理存储设备汇聚成一个巨大的、虚拟的、全局统一命名空间的存储池,使得数据可以在整个集群中透明地分布和共享。

作为Scale-Out(横向扩展)存储解决方案的核心,GlusterFS在存储数据方面具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。它支持借助TCP/IP或InfiniBandRDMA网络将物理分散分布的存储资源汇聚在一起,统一提供存储服务。通过扩展不同的节点可以支持PB级别的存储容量。

与传统分布式文件系统不同,GlusterFS没有元数据服务器组件,这有助于提升整个系统的性能、可靠性和稳定性。传统的分布式文件系统大多通过元服务器来存储元数据,这样的设计在浏览目录时效率高,但是存在单点故障的缺陷。而GlusterFS基于无元服务器的设计,数据横向扩展能力强,具备较高的可靠性及存储效率。

GlusterFS 特点

可扩展性和高性能

  • 横向扩展:能够通过简单地增加存储节点的方式来提高存储容量和性能(磁盘、计算和I/O资源都可以独立增加),支持10GbE和InfiniBand等高速网络互联
  • 高性能:通过分布式并行处理I/O请求,优化了读写性能,特别是针对大数据集的读取操作,通过条带化、镜像和分布式复制等存储策略,可以大幅提升数据访问效率

高可用性

  • 无单点故障:没有中央元数据服务器,而是通过分布式元数据管理来避免单点故障
  • 冗余和自动恢复:支持多种数据保护模式,包括复制、分布式复制和奇偶校验等,能够在节点故障时迅速恢复数据服务

全局统一命名空间

提供了一个全局的、统一的文件命名空间,使得用户可以从单一入口点访问整个集群内的所有文件,简化了数据管理

弹性卷管理

灵活的存储卷管理机制允许管理员根据业务需求调整存储策略,比如增加或减少冗余级别,或者动态地向现有卷添加新存储节点

弹性哈希算法

使用弹性的哈希算法将数据分布在整个集群中,确保数据分布的均衡和高效定位

标准协议支持

支持行业标准的网络协议,例如NFS、SMB/CIFS、HTTP/REST等,使得不同操作系统和应用程序都能够方便地访问存储资源

POSIX兼容性

兼容POSIX标准,使得大多数符合POSIX要求的应用程序可以直接在GlusterFS之上运行

用户空间设计

利用用户空间的FUSE(Filesystem in Userspace)技术,使得系统设计更加灵活,能够快速迭代和改进

GlusterFS 存储架构

Brick(存储块)

  • 定义:GlusterFS 的基本物理存储单元,对应存储节点上的一个本地目录(如 /data/brick1),由底层文件系统(如 XFS、EXT4)管理。
  • 功能
    • 实际存储文件数据分片或完整文件(取决于卷类型)。
    • 通过格式 SERVER:EXPORT(如 192.168.1.4:/data/brick1)标识。
  • 特性
    • 无专用硬件依赖,支持标准磁盘设备。

Volume(逻辑卷)

  • 定义:由多个 Brick 聚合而成的逻辑存储单元,提供统一的命名空间。
  • 功能
    • 定义数据分布策略(如复制、条带、分散)。
    • 支持动态扩展(在线添加/移除 Brick)。
  • 卷类型示例
    • 分布式卷:文件级分布,无冗余(类似 RAID0)。
    • 复制卷:文件全量复制,高可用(类似 RAID1)。
    • 分散卷:纠删码冗余(如 10+3 模式),高效存储。

Client(客户端)

  • 核心模块
    • FUSE(用户空间文件系统):通过内核模块挂载 GlusterFS 卷,提供 POSIX 兼容接口。
    • libgfapi:原生 API 库,支持直接 I/O 操作(绕过 FUSE)。
  • 智能特性
    • 缓存卷配置信息,通过弹性哈希算法直接定位数据所在 Brick,无需元数据服务器。
    • 支持并行读写(如条带卷分块处理)。

服务端守护进程

  • glusterd
    • 角色:集群管理进程,运行于每个节点。
    • 功能
      • 节点对等(gluster peer probe)构建可信存储池(Trusted Storage Pool)。
      • 卷生命周期管理(创建/启动/停止/扩容)。
      • 配置同步至所有节点与客户端。
  • glusterfsd
    • 角色:数据服务进程,处理客户端 I/O 请求。
    • 功能
      • 根据卷策略(如复制、条带)操作 Brick 数据。
      • 支持 TCP/RDMA 传输协议优化网络性能。

Translator(转换器)

  • 定位:GlusterFS 的模块化功能引擎,以堆栈形式组合实现复杂逻辑。
  • 核心模块
    • Distribute:实现分布式卷的文件哈希定位。
    • Replicate:实现复制卷的同步写入。
    • Stripe:实现条带卷的分块存储。
    • Self-Heal:自动修复副本数据不一致。
  • 工作流程:I/O 请求按顺序通过 Translator 堆栈处理(如 Client → Replicate → Distribute → Brick)。

弹性哈希算法(Elastic Hash)

  • 核心机制
    • 根据文件名计算 32 位哈希值,映射到 Brick 组成的哈希环,直接定位数据存储位置。
  • 优势
    • 消除元数据服务器瓶颈,避免单点故障。
    • 数据均匀分布,支持动态扩容(新增 Brick 自动重平衡)。

辅助组件

  • 仲裁器(Arbiter)
    • 解决复制卷的脑裂问题(如 3 副本卷中设置仲裁节点)。
  • 地域复制(Geo-Replication)
    • 跨数据中心异步同步数据,支持灾难恢复。

组件协作关系

GlusterFS 工作原理

GlusterFS的工作流程如下:

  1. 客户端访问数据:客户端或应用程序通过GlusterFS的挂载点访问数据,就像访问常规的本地文件系统一样
  2. 操作系统内核处理:当客户端操作系统接收到应用程序的I/O请求时,它通过VFS层处理这个请求。如果是Linux系统,客户端通常通过FUSE内核模块或内建的Kernel Module
  3. GlusterFS客户端处理
    • GlusterFS客户端负责将操作系统传递来的I/O请求转换为对GlusterFS服务端的调用
    • 客户端使用GlusterFS的API与集群中的各个节点进行通信,确定数据的位置
    • 根据GlusterFS的卷配置和弹性HASH算法,客户端计算出数据应该存储或读取的brick(存储节点)
  4. 数据传输:客户端通过网络将请求发送到对应的brick节点。brick节点接收到请求后,通过VFS接口,在本地文件系统上执行相应的读写操作
  5. 卷类型影响的处理方式:根据卷的类型(如分布式卷、复制卷、条带卷、分布式复制卷等),请求的处理方式会有所不同
  6. 返回结果:brick完成操作后,将结果通过网络传回给客户端。客户端再将处理结果反馈给操作系统,进而由操作系统通知应用程序

弹性HASH算法

弹性HASH算法是Davies-Meyer算法的具体实现,通过HASH算法可以得到一个32位的整数范围的hash值。假设逻辑卷中有N个存储单位Brick,则32位的整数范围将被划分为N个连续的子空间,每个空间对应一个Brick。当用户或应用程序访问某一个命名空间时,通过对该命名空间计算HASH值,根据该HASH值所对应的32位整数空间定位数据所在的Brick。

弹性HASH算法的优点:

  • 保证数据平均分布在每一个Brick中
  • 解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈

GlusterFS 卷的类型

GlusterFS支持七种卷类型,可以满足不同应用对高性能、高可用的需求:

分布式卷

  • 特点:文件通过HASH算法分布到所有Brick Server上,是GlusterFS的默认卷类型
  • 优点:更容易和廉价地扩展卷的大小
  • 缺点:不具备冗余性,单点故障会造成数据丢失
  • 创建命令
    bash
    gluster volume create dis-volume server1:/dir1 server2:/dir2 server3:/dir3
  • 适用场景:当不需要数据冗余时,可以用于存储大量的非关键数据

条带卷

  • 特点:类似RAID0,文件被分成数据块并以轮询的方式分布到多个BrickServer上
  • 优点:支持大文件存储,文件越大,读取效率越高
  • 缺点:不具备冗余性
  • 创建命令
    bash
    gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2
  • 适用场景:需要高带宽和并行读写性能的场景,如流媒体服务、大数据分析等

复制卷

  • 特点:将文件同步到多个Brick上,使其具备多个文件副本,属于文件级RAID1
  • 优点:具有容错能力,即使一个节点损坏,也不影响数据的正常使用
  • 缺点:磁盘利用率较低
  • 创建命令
    bash
    gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
  • 适用场景:需要高可用性和数据安全性的场景,如数据库和关键业务系统

分布式条带卷

  • 特点:BrickServer数量是条带数的倍数,兼具分布式卷和条带卷的特点
  • 优点:可以获得更好的性能和一定的扩展性
  • 缺点:不自带冗余
  • 创建命令
    bash
    gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
  • 适用场景:分布式条带卷通常适用于对性能要求很高,同时可以接受较低冗余度的应用环境

分布式复制卷

  • 特点:Brick Server数量是镜像数的倍数,兼具分布式卷和复制卷的特点
  • 优点:提供分布式存储的同时还保证数据的冗余
  • 创建命令
    bash
    gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
  • 适用场景:既要扩展存储容量又要保证数据冗余的复杂环境

条带复制卷

  • 特点:类似RAID10,同时具有条带卷和复制卷的特点
  • 优点:既能实现数据条带化以提高性能,又能做到数据的冗余备份

分布式条带复制卷

  • 特点:三种基本卷的复合卷
  • 适用场景:通常用于类MapReduce应用