gluster分布式文件系统

Posted Devops小王子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gluster分布式文件系统相关的知识,希望对你有一定的参考价值。

什么是gluster

  • GlusterFS是Scale-Out存储解决方案Gluster的核心,他是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBand RDMA(一种支持多并发链接的“转换线缆”技术)网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。GlusterFS基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。

GlusterFS支持运行在任何标准IP网络上标准应用程序的标准客户端,如图2所示,用户可以在全局统一的命名空间中使用NFS/CIFS等标准协议来访问应用数据。GlusterFS使得用户可摆脱原有的独立、高成本的封闭存储系统,能够利用普通廉价的存储设备来部署可集中管理、横向扩展、虚拟化的存储池,存储容量可扩展至TB/PB级。GlusterFS主要特征如下:

  • 扩展性和高性能

GlusterFS利用双重特性来提供几TB至数PB的高扩展存储解决方案。Scale-Out架构允许通过简单地增加资源来提高存储容量和性能,磁盘、计算和I/O资源都可以独立增加,支持10GbE和InfiniBand等高速网络互联。Gluster弹性哈希(Elastic Hash)解除了GlusterFS对元数据服务器的需求,消除了单点故障和性能瓶颈,真正实现了并行化数据访问。

  • 高可用性

GlusterFS可以对文件进行自动复制,如镜像或多次复制,从而确保数据总是可以访问,甚至是在硬件故障的情况下也能正常访问。自我修复功能能够把数据恢复到正确的状态,而且修复是以增量的方式在后台执行,几乎不会产生性能负载。GlusterFS没有设计自己的私有数据文件格式,而是采用操作系统中主流标准的磁盘文件系统(如EXT3、ZFS)来存储文件,因此数据可以使用各种标准工具进行复制和访问。

  • 全局统一命名空间

全局统一命名空间将磁盘和内存资源聚集成一个单一的虚拟存储池,对上层用户和应用屏蔽了底层的物理硬件。存储资源可以根据需要在虚拟存储池中进行弹性扩展, 比如扩容或收缩。当存储虚拟机映像时,存储的虚拟映像文件没有数量限制,成千虚拟机均通过单一挂载点进行数据共享。虚拟机I/O可在命名空间内的所有服务器上自动进行负载均衡,消除了SAN环境中经常发生的访问热点和性能瓶颈问题。

  • 弹性哈希算法

GlusterFS采用弹性哈希算法在存储池中定位数据,而不是采用集中式或分布式元数据服务器索引。在其他的Scale-Out存储系统中,元数据服务器通常会导致I/O性能瓶颈和单点故障问题。GlusterFS中,所有在Scale-Out存储配置中的存储系统都可以智能地定位任意数据分片,不需要查看索引或者向其他服务器查询。这种设计机制完全并行化了数据访问,实现了真正的线性性能扩展。

  • 弹性卷管理

数 据储存在逻辑卷中,逻辑卷可以从虚拟化的物理存储池进行独立逻辑划分而得到。存储服务器可以在线进行增加和移除,不会导致应用中断。逻辑卷可以在所有配置 服务器中增长和缩减,可以在不同服务器迁移进行容量均衡,或者增加和移除系统,这些操作都可在线进行。文件系统配置更改也可以实时在线进行并应用,从而可 以适应工作负载条件变化或在线性能调优。

  • 基于标准协议

Gluster存储服务支持NFS, CIFS, HTTP, FTP以及Gluster原生协议,完全与POSIX标准兼容。现有应用程序不需要作任何修改或使用专用API,就可以对Gluster中的数据进行访问。这在公有云环境中部署Gluster时非常有用,Gluster对云服务提供商专用API进行抽象,然后提供标准POSIX接口。

## 设计目标

GlusterFS的设计思想显著区别有现有并行/集群/分布式文件系统。如果GlusterFS在设计上没有本质性的突破,难以在与Lustre、PVFS2、Ceph等的竞争中占据优势,更别提与GPFS、StorNext、ISILON、IBRIX等具有多年技术沉淀和市场积累的商用文件系统竞争。其核心设计目标包括如下三个:

  • 弹性存储系统(Elasticity)

存储系统具有弹性能力,意味着企业可以根据业务需要灵活地增加或缩减数据存储以及增删存储池中的资源,而不需要中断系统运行。GlusterFS设计目标之一就是弹性,允许动态增删数据卷、扩展或缩减数据卷、增删存储服务器等,不影响系统正常运行和业务服务。GlusterFS早期版本中弹性不足,部分管理工作需要中断服务,目前最新的3.1.X版本已经弹性十足,能够满足对存储系统弹性要求高的应用需求,尤其是对云存储服务系统而言意义更大。GlusterFS主要通过存储虚拟化技术和逻辑卷管理来实现这一设计目标。

  • 线性横向扩展(Linear Scale-Out)

线性扩展对于存储系统而言是非常难以实现的,通常系统规模扩展与性能提升之间是LOG对数曲线关系,因为同时会产生相应负载而消耗了部分性能的提升。现在的很多并行/集群/分布式文件系统都具很高的扩展能力,Luster存储节点可以达到1000个以上,客户端数量能够达到25000以上,这个扩展能力是非常强大的,但是Lustre也不是线性扩展的。

纵向扩展(Scale-Up)旨在提高单个节点的存储容量或性能,往往存在理论上或物理上的各种限制,而无法满足存储需求。横向扩展(Scale-Out)通过增加存储节点来提升整个系统的容量或性能,这一扩展机制是目前的存储技术热点,能有效应对容量、性能等存储需求。目前的并行/集群/分布式文件系统大多都具备横向扩展能力。

GlusterFS是线性横向扩展架构,它通过横向扩展存储节点即可以获得线性的存储容量和性能的提升。因此,结合纵向扩展GlusterFS可以获得多维扩展能力,增加每个节点的磁盘可增加存储容量,增加存储节点可以提高性能,从而将更多磁盘、内存、I/O资源聚集成更大容量、更高性能的虚拟存储池。GlusterFS利用三种基本技术来获得线性横向扩展能力:

  1. 消除元数据服务

  2. 高效数据分布,获得扩展性和可靠性

  3. 通过完全分布式架构的并行化获得性能的最大化**

  4. 高可靠性(Reliability)

与GFS(Google File System)类似,GlusterFS可以构建在普通的服务器和存储设备之上,因此可靠性显得尤为关键。GlusterFS从设计之初就将可靠性纳入核心设计,采用了多种技术来实现这一设计目标。首先,它假设故障是正常事件,包括硬件、磁盘、网络故障以及管理员误操作造成的数据损坏等。GlusterFS设计支持自动复制和自动修复功能来保证数据可靠性,不需要管理员的干预。其次,GlusterFS利用了底层EXT3/ZFS等磁盘文件系统的日志功能来提供一定的数据可靠性,而没有自己重新发明轮子。再次,GlusterFS是无元数据服务器设计,不需要元数据的同步或者一致性维护,很大程度上降低了系统复杂性,不仅提高了性能,还大大提高了系统可靠性。

GlusterFS的6种模式

1.默认模式。既DHT, 也叫 分布卷: 将文件已hash算法随机分布到 一台服务器节点中存储。gluster volume create test-volume server1:/exp1 server2:/exp2

2.复制模式,既AFR, 创建volume 时带 replica x 数量: 将文件复制到 replica x 个节点中。gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2

gluster分布式文件系统

3.条带模式,既Striped, 创建volume 时带 stripe x 数量:将文件切割成数据块,分别存储到 stripe x 个节点中 ( 类似raid 0 )。gluster volume create test-volume stripe 2 transport tcp server1:/exp1 server2:/exp2

gluster分布式文件系统

4.分布式条带模式(组合型),最少需要4台服务器才能创建。创建volume 时 stripe 2 server = 4 个节点:是DHT 与 Striped 的组合型。gluster volume create test-volume stripe 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4

gluster分布式文件系统

5.分布式复制模式(组合型), 最少需要4台服务器才能创建。创建volume 时 replica 2 server = 4 个节点:是DHT 与 AFR 的组合型。gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4

6.条带复制卷模式(组合型), 最少需要4台服务器才能创建。创建volume 时 stripe 2 replica 2 server = 4 个节点:是 Striped 与 AFR 的组合型。gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4

GlusterFS的使用

至少两个节点

这里我用的是master 和slave01

保证网络互通,防火墙关闭,hosts配置完成。

服务器节点安装(master和slave01都安装)

[root@master ~]# yum install centos-release-gluster

[root@master ~]# yum install -y glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

创建数据存储目录

[root@master ~]# mkdir -p /opt/gluster/data
[root@slave01 ~]# mkdir -p /opt/gluster/data

查看volume状态

[root@master ~]# gluster volume info
No volumes present

创建glusterfs磁盘(两个节点都执行)

[root@master ~]#pvcreate  /dev/sdb

[root@master ~]#vgcreate vg01 /dev/sdb

[root@master ~]#lvcreate -n glusterfs -l 100%VG vg01

[root@master ~]# mkfs.xfs -i size=512 /dev/mapper/vg01-glusterfs
meta-data=/dev/mapper/vg01-glusterfs isize=512 agcount=4, agsize=3276544 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=13106176, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=6399, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

[root@master ~]# echo '/dev/mapper/vg01-glusterfs /opt/gluster/data xfs defaults 1 2' >> /etc/fstab

[root@master ~]# mount -a && mount

#启动GlusterFS
[root@master ~]# systemctl start glusterd
[root@master ~]# systemctl status glusterd

配置可信池并检查状态

[root@slave01 ~]# gluster peer probe  master
[root@master ~]# gluster peer status
Number of Peers: 1

Hostname: slave01
Uuid: 51f7b09c-7acb-4656-8533-662e89f6a93b
State: Peer in Cluster (Connected)

设置一个GlusterFS卷(两个节点都执行)

(这里创建的是复制模式)

[root@master ~]# mkdir -p /opt/gluster/data/gv0

[root@master ~]# gluster volume create zhangpx-gv replica 2 master:/opt/gluster/data slave01:/opt/gluster/data force
volume create: zhangpx-gv: success: please start the volume to access data
[root@master ~]# gluster volume start zhangpx-gv
volume start: zhangpx-gv: success

任意一节点执行确保启动

[root@slave01 ~]# gluster volume info

Volume Name: zhangpx-gv
Type: Replicate
Volume ID: 41d3e348-e424-4ad3-b5b5-f4231fee7f16
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: master:/opt/gluster/data
Brick2: slave01:/opt/gluster/data
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

测试GlusterFS volume

客户端安装(复制模式)

[root@master ~]#yum -y install glusterfs glusterfs-fuse
#挂载
[root@master ~]#mount -t glusterfs master:/opt/gluster/data /mnt
[root@master ~]#cd /mnt
[root@master ~]#touch a
[root@master mnt]# ls
a
[root@master mnt]# cat a
hello
[root@slave01 ~]# cd /opt/gluster/data/
[root@slave01 data]# ls
a
[root@slave01 data]# cat a
hello

gluster 性能调优:

开启 指定 volume 的配额:(models 为 volume 名称)

gl uster volume quota models enable

限制 models 中 / (既总目录) 最大使用 80GB 空间

gluster volume quota models limit-usage / 80GB

#设置 cache 4GB

gluster volume set models performance.cache-size 4GB

#开启 异步 , 后台操作

gluster volume set models performance.flush-behind on

#设置 io 线程 32

gluster volume set models performance.io-thread-count 32

#设置 回写 (写数据时间,先写入缓存内,再写入硬盘)

gluster volume set models performance.write-behind on

其他的维护命令:

创建卷

  • 创建分布式卷(DHT)

// DHT卷将数据以哈希计算方式分布到各个brick上,数据是以文件为单位存取,基本达到分布均衡,提供的容量为各个brick的容量总和
gluster volume create NEW-VOLNAME [transport [tcp | rdma | tcp,rdma]] NEW-BRICK...
  • 创建副本卷(AFR)

// AFR提供数据副本,副本数为replica,即每个文件存储replica份数,文件不分割,以文件为存储单位:副本数需要等于brick数;当brick数是副本的倍数时,则自动变化为Replicated-Distributed卷
gluster volume create NEW-VOLNAME [replica COUNT] [transport [tcp | rdma | tcp,rdma]] NEW-BRICK...

每两个brick组成一组,每组两个副本,文件又以DHT分布在三个组上,这样是副本卷和分布式卷的组合

  • 创建条带卷

//stripe卷类似raid0,将数据条带化,分布在不同的brick,该方式将文件分块,将文件分成stripe块,分别进行存储,在大文件读取是有优势。stripe需要等于brick数;当brick数等于stripe数的倍数时,则自动变化为stripe-distributed卷。
gluster volume create NEW-VOLNAME [stripe COUNT] [transport [tcp | dma | tcp,rdma]] NEW-BRICK...

每2个brick组成一组,每组2个brick,文件以DHT分布在两个组中,每个组中将文件条带成2块

  • 创建Replicated-Stripe-Distributed卷

//使用8个brick创建一个组合卷,即brick数是stripe*replica的倍数,则创建三种基本卷的组合卷,若刚好等于stripe*replica则为stript-Distrubted卷
gluster volume create str_afr_dht_vol stripe 2 replica 2 172.16.18.{241,242,243,244}:/export/brick1/gv0 172.16.18.{241,242,243,244}:/export/brick1/gv1

卷信息

命令:gluster volume info

卷状态

命令:gluster volume status

启动、停止卷

命令:gluster volume start/stop VOLNAME

// 将创建的卷启动,才能进行客户端挂载;stop能够将系统将停止;此外gluster并未提供restart的重启命令
gluster volume start gv0
volume create: gv0: success: please start the volume to access data

删除卷

命令:gluster volume delete VOLNAME

// 删除卷的操作能够将整个卷删除,操作前需要将卷先停止
gluster volume stop gv0
gluster volume delete gv0

均衡卷

\\ 不迁移数据
gluster volume gv0 rebalance fix-layout start
gluster volume gv0 rebalance start
gluster volume gv0 rebalance startforce
gluster volume gv0 rebalance status
gluster volume gv0 rebalance stop

修复卷

gluster volume heal mamm-volume #只修复有问题的文件
gluster volume heal mamm-volume full #修复所有文件
gluster volume heal mamm-volume info#查看自愈详情
gluster volume heal mamm-volume info healed|heal-failed|split-brain


欢迎大家关注我哦


以上是关于gluster分布式文件系统的主要内容,如果未能解决你的问题,请参考以下文章

GlusterFS-----文件分布系统+集群部署

GlusterFS-----文件分布系统+集群部署

Gluster libgfapi接口和应用实例

Gluster 简介

为 GlusterFS 设计新的xlator (编译及调用过程分析)

红帽成远见者|Gartner发布2016年分布式文件系统和对象存储魔力象限