文章目录
GlusterFS分布式文件系统
什么是GlusterFS分布式文件系统?
GlusterFS是Scale-out(横向扩展)存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。Gluster FS借助TCP/IP或infiniBand RDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名工具来管理数据。GlusterFS基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。
GlusterFS做什么的?
主要应用在集群系统中,具有高可扩展性,可以通过各个模块的灵活搭配以得到针对性的解决方案。可以解决以下问题:
- 网络存储
- 联合存储(融合多个节点上的存储空间)
- 冗余备份
- 大文件的负载均衡(分块)
由于缺乏部分关键特征,可靠性也未经过长时间考验,还不适合应用于24小时不间断服务的环境中,适用于大数据量的离线环境。
文件系统概述
1、什么是API?
- 应用程序编程接口,是一些预先定义的接口,或指软件系统或指软件系统不同组从部分衔接的约定。
- 用来提供应用程序与开发人员基于软件或硬件得以访问的一组例程,而又无需访问源码,或立即内部工作机制的细节。
- 只要调用API,就能使用,例如cd、ls等命令。
2、文件系统的组成
- 文件系统接口(API)
- 管理对象的软件集合(可以对一些文件、目录等,对这些资源进行管理)
- 对象及属性(管理的数据及属性,每个文件都是对应的inode号)
3、文件系统的作用
- 从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统
- 简单点说的说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取等这些工作。对文件的具体管理,文件可以是文件、目录或符号文件(软硬链接),对这样的对象和数据进行存、读、改等具体操作
4、文件系统的挂载使用
- 除跟文件系统以外的文件系统创建后要使用需要先挂载至挂载点后才可以被访问
- 挂载点即分区设备文件关联的某个目录文件
- 类比 NFS(外部的文件系统),使用挂载的方式才可以让本地系统来使用外部的文件系统的功能
- 例如:配置永久挂载时,我们会写入挂载点与挂载目录,还有文件系统的名称(xfs),文件类型格式等。我们在远程跨服务器使用 GlusterFS 分布式文件系统,挂载时也需要指定其文件格式(GlusterFS)
二、GlusterFS文件系统
1、GlusterFS的概述
- Gluster File System 是一个可扩展、开源的分布式文件系统(可以很好的体现出弹性伸缩的特点),用于大型的、分布式的、对大量数据进行访问的应用
- 在传统的解决方案中,GlusterFS 能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储
- GlusterFS 由三个组件组成:
- 存储服务器(Brick Server)
- 客户端(不在本地)(且,有客户端,也会有服务端,这点类似于 NFS,但是更为复杂)
- 存储网关(NFS/Samaba)
- 无元数据服务器
- 元数据是核心,描述对象的信息,影响其属性
- 例如NFS,存放数据本身,是一个典型的元数据服务器可能存在单点故障,故要求服务器性能较高,服务器一旦出现故障就会导致数据丢失
- 反过来看,所以无元数据服务不会有单点故障
- 那么数据存放在哪里呢?会借用分布式的原则,分散存储,不会有一个统一的数据服务器
2、GlusterFS的特点
- 扩展性和高性能
- 可扩展性,扩展节点
- GlusterFS利用双重特性来提供高容量存储解决方案。
- Scale-Out架构允许通过简单地增加存储节点的方式来提高存储容量和性能(磁盘、计算和I/O资源都可以独立增加),支持10GbE和 InfiniBand等高速网络互联。
- Gluster弹性哈希(ElasticHash)解决了GlusterFS对元数据服务器的依赖,改善了单点故障和性能瓶颈,真正实现了并行化数据访问。GlusterFS采用弹性哈希算法在存储池中可以智能地定位任意数据分片(将数据分片存储在不同节点上),不需要查看索引或者向元数据服务器查询。
- 通过多节点提高性能
- 高可用性
- 不存在单点故障,有备份机制
- 类似 Raid 的容灾机制
- 全局统一命名空间
- 集中化管理,类比 API 的性质/概念
- 系统里根据他命名所定义的隔离区域,是一个独立空间
- 统一的名称空间,与客户端交互,把请求存放至后端的块数据服务器
- 弹性卷管理
- 方便扩容及对后端存储集群的管理与维护
- 较为复杂
- 基于文件系统的标准使用协议
- 基于标准化的文件使用协议
- 让 CentOS 兼容 GlusterFS
3、GlusterFS专业术语
- Brick(块):实际存储用户数据的服务器
- Volume:类似于本地文件系统的“分区”,卷
- FUSE:用户空间的文件系统
- 类比EXT4:对用户创建的文件进行精细化、具体的管理
- 是一个伪文件系统,不是实际的文件系统。涉及到内核及操作系统的底层,是用户端的交互模块
- VFS (虚拟端口) :内核态的虚拟文件系统,用户是先提交请求交给 VFS,然后 VFS 交给 FUSE ,再交给 GlusterFS 客户端,最后由客户端交给远端的存储
- Glusterd (服务): 是运行在存储节点的进程(客户端运行的是 Gluster Client),整个 GlusterFS 之间的交互是由 Gluster Client 和 Glusterd 完成的(即GlusterFS 的整个使用过程)
4、GlusterFS的结构(模块化堆栈式)
- 模块化的设计,即把功能封装在一起,最后一起调用
- 同时启用多个模块,多个功能的组合,这种提供功能的方式叫做堆栈式的结构
- 通过对模块的组合,可以实现复杂的功能(需求)
-
VFS:
-
虚拟文件系统,即伪文件系统,和真实的服务器相比,性能要差一些,功能也不完善
- 但是好处在于方便管理,资源消耗较少,且有一些真实文件的基础功能(建立、存入、读出、修改、转储文件,控制文件的存储)
- 管理一个功能模块的集合:比如 I/O Cache 是缓存,Read Ahead 是内核文件预读,Distribute/Stripe 是分布式、条带卷(后续进行详细讲解)
-
Replicate:通过请求的方式与多个 Client 端进行交互。以上为客户端,以下为服务端(GFS 存储段)
-
(中间)通过网络的方式访问 GFS 的服务端,GFS 会通过标准化的方式去把其存储至本地的 Ext4 文件系统内
- Gige:千兆网/千兆接口
- TCP/IP:网络接口(协议)
- InfinlBand:也是一种网络协议,与 TCP/IP 相比,TCP/IP 具有转发丢失数据包的特性,基于此,通讯协议可能导致通讯变慢,而 IB 使用基于信任的、流控制的的机制来确保连接性完整,数据丢包几率较少,保证数据传输的速率
- RDAM:负责数据传输,一种数据传输协议。为了解决传输中客户端与服务器端数据处理的延迟(实现方式非常复杂,再在简述)
-
POSIS:可移植操作系统接口,主要解决不同操作系统间的移植性
5、GFS 工作原理(过程)
- 首先是在客户端, 用户通过glusterfs的mount point 来读写数据, 对于用户来说, 集群系统的存在对用户是完全透明的,
用户感觉不到是操作本地系统还是远端的集群系统。 - 用户的这个操作被递交给 本地linux系统的VFS来处理。
- VFS 将数据递交给FUSE 内核文件系统:在启动 glusterfs 客户端以前, 需要想系统注册一个实际的文件系统FUSE,如上图所示,该文件系统与ext3在同一个层次上面, ext3 是对实际的磁盘进行处理, 而fuse 文件系统则是将数据通过/dev/fuse 这个设备文件递交给了glusterfs client端。所以, 我们可以将 fuse文件系统理解为一个代理。
- 数据被fuse 递交给Glusterfs client 后, client 对数据进行一些指定的处理(所谓的指定,是按照client 配置文件据来进行的一系列处理, 我们在启动glusterfs client
时需要指定这个文件。 - 在glusterfs client的处理末端, 通过网络将数据递交给 Glusterfs Server,并且将数据写入到服务器所控制的存储设备上。
6、弹性HASH分片
-
使用弹性 HASH 算法来解决数据定位、索引与寻址的功能(辅助)
- 先通过HASH算法得到一个值(2的32次方个组合,约43亿)
- 每个数据对应了0-2的32次方的一个值,“伪”唯一值
- 通常情况下,不同的数据得到的结果是不同的
-
划分为N个连续的子空间,每个空间对应一个 Brick
-
弹性HASH算法(平均分配)的优点:
- 当数据量越来越大的时候,相对每个存储节点的数据量(几率)是相等的,即保证数据平均分布在每一个 Brick 中
- 解决了对元数据服务器的依赖,进而解决了单点故障以及访问的瓶颈
三、Gluster的卷类型
GlusterFS 支持七种卷,即分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、条带复制卷和分布式条带复制卷。
1、分布式卷
- 分布式卷是 GlusterFS 的默认卷,即在创建卷时,默认选项是创建分布式卷
- 在该模式下, 并没有对文件进行分块处理,文件直接存储在某个 Server 节点上
- 直接使用本地文件系统进行文件存储,大部分 Linux 命令和工具可以继续正常使用。需要通过扩展文件属性保存 HASH 值,目前支持的底层文件系统有 EXT3、EXT4、ZFS、XFS 等
- 由于使用的是本地文件系统,所以存取效率并没有提高,反而会因为网络通信的原因而 有所降低。另外支持超大型文件也会有一定的难度,因为分布式卷不会对文件进行分块处理。虽然 EXT4 已经可以支持最大 16TB 的单个文件,但是本地存储设备的容量实在有限
- File1 和 File2 存放在 Server1,而 File3 存放在 Server2,文件都是随机存储,一 个文件(如 File1)要么在 Server1 上,要么在 Server2 上,不能分块同时存放在 Server1 和 Server2 上
分布式卷具有如下特点:
- 文件通过 HASH 算法分布在所有的 Brick Server上,不具备冗余性
- 更容易且廉价地扩展卷的大小,其实只是扩大了磁盘空间,若有一块磁盘损坏(存在单点故障),会造成数据丢失,属于文件级的 RAID 0,不具有容错能力
- 依赖底层的数据保护,即依赖服务器的性能
2、条带卷
- 类似于 RAID 0,不具备冗余性
- 根据偏移量将文件分成N块(N个条带节点),轮询的存储(同步)在每个 Brick Server 节点
- 存储大文件时,性能尤为突出(文件越大,读取效率越高)
特点:
- 数据被分割成更小块分布到块服务器群中的不同条带区
- 分布减少了负载且更小的文件加速了存取的速度
3、复制卷
- 类比于 RAID1,即同一文件保存一份或多份副本,每个节点上保存相同的内容和目录结构,具有容错能力
- 因为数据分散在多个 Brick 中,所以读性能得到很大提升,但写性能下降
- 复制模式因为要保存副本,所以磁盘利用率较低
- 如果多个节点上的存储空间不一致,那么将按照木桶效应取最低节点的容量作为该卷的总容量
特点:
- 卷中所有的服务器均保存一个完整的副本
- 卷的副本数量可由客户创建的时候决定
- 至少由两个块服务器或更多服务器
- 具备冗余性,即使一个节点损坏,也不影响数据的正常使用
4、分布式条带卷
-
兼顾分布式卷和条带卷的功能,主要用于大文件访问处理
-
用于需要冗余的情况下,至少需要四台服务器
-
File1和File2通过分布式卷的功能分别定位到Server1 和 Server2。在 Server1 中,File1 被分割成 4 段,其中 1、3 在 Server1 中的 exp1 目录中, 2、4 在 Server1 中的 exp2 目录中
-
在 Server2 中,亦是如此
-
Brick Server 数量是条带数(数据块分布的 Brick 数量)的倍数,兼具分布式与条带卷的特点(优点)
5、分布式复制卷
- 兼顾分布式卷和复制卷的功能,主要用于需要冗余的情况下
- File1 和 File2 通过分布式卷的功能分别定位到 Server1 和 Server2。 在存放 File1 时,File1 根据复制卷的特性,将存在两个相同的副本,分别是 Server1 中的 exp1 目录和 Server2 中的 exp2 目录
- 在存放 File2 时,File2 根据复制卷的特性,也将存 在两个相同的副本,分别是 Server3 中的 exp3 目录和 Server4 中的 exp4 目录
6、 条带复制卷
- 首先触发条带卷的功能,将数据等分成4份,轮询存放
- 然后轮询后再进行触发复制卷的作用,进行复制
7、分布式条带复制卷
exp1 目录和 Server2 中的 exp2 目录
- 在存放 File2 时,File2 根据复制卷的特性,也将存 在两个相同的副本,分别是 Server3 中的 exp3 目录和 Server4 中的 exp4 目录
6、 条带复制卷
- 首先触发条带卷的功能,将数据等分成4份,轮询存放
- 然后轮询后再进行触发复制卷的作用,进行复制
7、分布式条带复制卷
三种基本卷的复合卷,通常用于类 Map Reduce 应用。