GFS(GlusterFS)分布式文件系统
一.GlusterFS概述
GFS, Big Table, Map Reduce称为Google的三驾马车,是许多基础服务的基石
GFS于2003年提出,是一个分布式的文件系统,与此前的很多分布式系统的前提假设存在很大的不同,适用于以下场景
- 1认为组件失效是一种常态,提供了容错机制,自动负载均衡,使得分布式文件系统可以在廉价机器上运行
- 2面向大文件存储,系统主要的工作负载是大规模的流式读取,写操作主要是追加方式写,很少有随机写
- 3一次写入,多次读取,例如互联网上的网页存储
1.GliusterFS特点
- 扩展性和高性能
- 高可用性
- 全局统一命名空间(集中化管理、类比API性质/概念)
- 弹性卷管理
- 基于标准协议
2.GFS组成
- 1.存储服务器
- 2.客户端(不在本地)
- 3.NFS/Samba存储网关组成
- 开源分布式文件系统
- 由存储服务器、客户端以及NFS/Samba存储网关组成
- 无元数据服务器
3.GFS文件系统组成
- 1.文件系统接口(API:应用程序接口)
- 2.对对象管理的软件集合
- 对象及属性
文件系统作用:
- 从系统角度看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。
- 具体的说,它负责为用户建立文件,存入、读出、修改、存储文件,控制文件的存取。
文 件系统的挂载使用:
- 除根文件系统外的文件系统创建后要使用需要先挂载至挂载点后才可以被访问,挂载点即分区设备文件关联的某个目录文件。
- 类比:NFS
- 分布式文件系统
4.GFS术语
文件系统 | 解释 |
---|---|
Brick(块) | 实际存储用户数据的服务器 |
Volume | 本地文件系统的"分区" |
FUSE | 用户空间的文件系统(类比EXT4)文件系统,然后把数据写在磁盘上,而如果是远端的GFS,客户端的请求则应该交给FUSE(文件系统),就可以实现跨界点存储在GFS |
VFS(虚拟端口) | 内核态的虚拟文件系统,用户是先提交请求给VFS,然后VFS交给FUSE,再交给GFS客户端,最后由客户端交给远端的存储 |
Glusterd(服务) | 是运行在存储节点的进程(客户端运行的是gluster client)整个GFS之间的交互由Gluster client和glusterd完成的(GFS使用过程) |
总结:使用GFS会使用到以上的虚拟文件系统
5.GFS架构
一个GFS集群由一台master服务器(有备份),多台chunk服务器组成,客户端,架构上比较简单。
- Chunkserver:数据存储节点,文件被分割为固定大小的Chunk,每个Chunk被唯一标识,默认情况下,Chunk存储为3个副本
- Chunk:每个文件至少存储为一个chunk,每个chunk以普通linux文件存储,chuck尺寸大小选择是一个关键的设计参数,默认64MB,每个chunk有全局64位唯一标识符
Chunk尺寸较大优缺点?
-
较大:减小master上元数据大小,放在内存,减少client与master交互
-
缺点:小文件会存储为一个Chunk,多个Client同时对单个小文件多次操作时,存放这个Chunk的ChunkServer会成为热点
-
GFS master:管理所有元数据信息;租约管理;集群Chunk迁移;无用Chunk回收;
-
元信息(metadata)主要有三类:命名空间、文件和Chunk的映射关系(一个文件包含哪些Chunk)、每个Chunk副本的位置信息。元信息存储在内存中,加快处理速度。前两类元信息会以操作日志文件存储在本地磁盘上,并复制到远程Master备机上,容灾需要。Chunk副本的位置信息为Master通过心跳向各个ChunkServer轮询获得,无需持久化,避免了ChunkServer变更时的Master和ChunkServer的数据同步问题。
-
GFS client:与 Master节点的通信只获取元数据,所有的数据操作都直接和 Chunk 服务器进行交互,GFS提供了一套类似传统文件系统的 API 接口
6.GlusterFS工作原理
-
这是一个典型的 C/S(Client/Server)架构
-
1.客户端或应用程序通过GlusterFS的挂载点访问数据。
-
2.linux系统内核通过VFS API收到请求并处理。
-
3.VFS将数据递交给FUSE内核文件系统,fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client。
-
4.GlusterFS client收到数据后,client根据配置文件的配置对数据进行处理。
-
5.通过网络将数据传递至远端的GlusterFS Server,并将数据写入到服务器存储设备上。
二.堆栈式架构
- 通过对模块不同功能的组合来实现复杂功能。
- 通过加载以下前三个模块,然后联合多个GFS-client端,组成所需要的分布式卷、条带卷等。
模块 | 解释 |
---|---|
VFS | 虚拟的内核文件系统,通过VFS的API接收请求、处理请求(场景:根据请求,加载以下模块) |
I/O cache | I/O缓存 |
read ahead | 内核文件预读 |
distribute/stripe | 分布式、条带卷 |
gige | 千兆网/千兆接口 |
TCP/IP | 网络协议 |
InfiniBand | 网络协议,与TCP/IP相比,TCP/IP具有转发丢失数据包的特性,基于此通讯协议可能导致通讯变慢,而IB使用基于信任的、流控制的机制来确保连接完整性,数据包丢失几率小。 |
RDMA | 负责数据传输,有一种数据传输协议,功能:为了解决传输中客户端与服务端数据处理的延迟 |
POSIX | 可移植操作系统接口,主要解决不同操作系统间的移植性 |
read ahead | 内核文件预读 |
- 然后再转换为逻辑存储(EXT4 + BRICK)
- 以上的架构模式可以提高GFS的工作效率
1.平均分配的好处
- 当数据量越来越大的时候,相对每个存储节点的数据量(几率)是相等的,而如果考虑到单点故障问题,当数据存储再存储节点,对此CFS是会有备份机制的,默认3备份,所以GFS本身的机制会对数据产生冗余,以此解决单点故障。
2.弹性HASH算法
- 通过HASH算法得到一个固定长度的数据(这里是32位整数)
- 通常情况下,不同数据得到的结果是不同的。
- 为了解决分布式文件数据索引、定位的复杂程度,而使用HASH算法来辅助。
优点:
- 保证数据平均分布在每个Brick中;
- 解决了对元数据服务器的依赖,进而解决了单点故障及访问瓶颈;
三.GlusterFS七种卷
- GlusterFS支持七种卷,即是分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、条带复制卷和分布式条带复制卷。
1.分布式卷(Distribute volume)
- 又称哈希卷,近似于RAID0,文件没有分片,文件根据hash算法写入各个节点的硬盘上,优点是容量大,缺点是没冗余。
- 文件通过HASH算法分布到所有Brick Server上,这种卷是Glusterf的基础;以文件为单位根据HASH算法散列到不同的Brick,其实只是扩大了磁盘空间,如果有一个磁盘损坏,数据也将丢失,属于文件级的RAID0,不具备容错能力;
- 分布式卷是GlusterFS的默认卷,在创建卷时,默认选项就是创建分布式卷。在该模式下,并没有对文件进行分块处理,文件直接存储在某个Server节点上。直接使用本地文件系统进行文件存储,大部分Linux命令和工具可以继续正常使用。需要通过扩展文件属性保存HASH值,目前支持的底层文件系统有ext3、ext4、ZFS、XFS等。
- 由于使用本地文件系统,所以存取效率并没有提高,反而会因为网络通信的原因而有所降低;另外支持超大型文件也会有一定的难度,因为分布式卷不会对文件进行分块处理。虽然ext4已经可以支持最大16TB的单个文件,但是本地存储设备的容量实在有限。
分布式卷具有如下特点:
- 文件分布在不同的服务器,布局别冗余性;
- 更容易廉价地扩展卷的大小;
- 单点故障会造成数据丢失;
- 依赖于底层的数据保护;
2.条带卷(Stripe volume)
- 类似于RAID0,文件被分为数据块并以轮询的方式分布到多个Brick Server上,文件存储以数据块为单位,支持大文件存储,文件越大,读取效率越高;
- Stripe模式相当于RAID0,在该模式下,根据偏移量将文件分成N块(N个条带节点),轮询地存储在每个Brick Server节点。节点把每个数据块都作为普通文件存入本地文件系统中,通过扩展属性记录总块数和每块的序号。在配置时指定的条带数必须等于卷中Brick所包含的存储服务器数,在存储大文件时,性能尤为突出,但是不具备冗余性。
条带卷具有如下特点:
- 数据被分割成更小块分布到块服务器群中的不同条带区;
- 分布减少了负载且更小的文件加速了存取的速度;
- 没有数据冗余;
3.复制卷(Replica volume)
- 将文件同步到多个Brick上,使其具备多个文件副本,属于文件级RAID1,具有容错能力。因为数据分散到多个Brick中,所以读性能得到了很大提升,但写性能下降;
- 复制模式,也称为AFR,相当于RAID1。即同一文件保存一份或多份副本,每个节点保存相同的内容和目录结构。复制模式因为要保存副本,所以磁盘利用率较低。如果多个节点上的存储空间不一致,那么将按照木桶效应取最低节点的容量作为该卷的总容量。在配置复制卷时,复制数必须等于卷中Brick所包含的存储服务器数,复制卷具备冗余性,即使一个节点损坏,也不影响数据的正常使用。
复制卷具有以下特点:
- 卷中所有的服务器均保存一个完整的副本;
- 卷的副本数量可由客户创建的时候决定;
- 至少有两个块服务器或者更多的服务器;
- 具有冗余性;
4.分布式条带卷(Distribute Stripe volume)
- Brick Server数量是条带数(数据块分布的Brick数量)的倍数,兼备分布式卷和条带卷的特点;
- 分布式条带卷兼顾分布式和条带卷的功能,主要用于大文件访问处理,创建一个分布式条带卷最少需要4台服务器。
- 创建卷时,存储服务器的数量如果等于条带或复制数,那么创建的是条带卷或复制卷;如果存储服务器的数量是条带卷或复制卷的2倍甚至更多,那么将创建分布式条带卷或分布式复制卷。
5.分布式复制卷(Distribute Replica volume)
- Brick Server数量是镜像数(数据副本数量)的倍数,具有分布式卷和复制卷的特点;
- 分布式复制卷兼顾分布式卷和复制卷的功能,主要用于需要冗余的情况下。
- 假如存在8台服务器,当复制副本为2时,按照服务器列表的顺序,服务器1和2作为一个复制,服务器3和4作为一个复制,服务器5和6作为一个复制,服务器7和8作为一个复制;当复制副本为4时,按照服务器列表的顺序,服务器1/2/3./4作为一个复制,服务器5/6/7/8作为一个复制。
6.条带复制卷(Stripe Replica volume)
- 类似于RAID10,同时具有条带卷和复制卷的特点;
7.分布式条带复制卷(Distribute Stripe Replica volume)
- 三种基本卷的复合卷,通常用于类Map Reduce应用;