GlusterFS原理及如何配置使用

一、GlusterFS概述

1.1 GlusterFS简介

  • Glusterfs是一个开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端.在传统的解决 方案中Glusterfs能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储.
  • Glusterfs通过TCP/IP或InfiniBand RDMA网络链接将客户端的存储资块源聚集在一起,使用单一的全局命名空间来管理数据,磁盘和内存资源.
  • Glusterfs基于堆叠的用户空间设计,可以为不同的工作负载提供高优的性能.

1.2 特点

扩展性和高性能

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

高可用性

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

全局统一命名空间

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

弹性卷管理

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

基于标准协议

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

1.3 GlusterFS相关术语

  • Brick
    GFS中的存储单元,通过是一个受信存储池中的服务器的一个导出目录。可以通过主机名和目录名来标识,如’SERVER:EXPORT’

  • Volume
    一组bricks的逻辑集合(卷)

  • FUST
    Filesystem Userspace是一个可加载的内核模块,其支持非特权用户创建自己的文件系统而不需要修改内核代码。通过在用户空间运行文件系统的代码通过FUSE代码与内核进行桥接。

  • VFS
    虚拟文件系统

  • Glusterd
    Gluster management daemon,要在trusted storage pool中所有的服务器上运行。

  • Node
    一个拥有若干brick的设备

  • Client
    挂载了GFS卷的设备

  • RDMA
    远程直接内存访问,支持不通过双方的OS进行直接内存访问。

  • RRDNS
    round robin DNS是一种通过DNS轮转返回不同的设备以进行负载均衡的方法

  • Self-heal
    用于后台运行检测复本卷中文件和目录的不一致性并解决这些不一致。

  • Split-brain
    脑裂

  • Volfile
    glusterfs进程的配置文件,通常位于/var/lib/glusterd/vols/volname

1.4 模块化堆栈式架构

  • 模块化、堆栈式的架构
  • 通过对模块的组合,实现复杂的功能
    GlusterFS采用模块化、堆栈式的架构,可通过灵活的配置支持高度定制化的应用环境,比如大文件存储、海量小文件存储、云存储、多传输协议应用等。每个功能以模块形式实现,然后以积木方式进行简单的组合,即可实现复杂的功能。比如,Replicate模块可实现RAID1,Stripe模块可实现RAID0,通过两者的组合可实现RAID10和RAID01,同时获得高性能和高可靠性。如下图所示
    在这里插入图片描述

二、GlusterFS工作原理

2.1 弹性hash算法

  • 通过hash算法得到一个32位的整数
  • 划分为N个连续的子空间,每个空间对应一个Brick
  • 弹性hash算法的优点
    保证数据平均分布在每一个Brick中
    解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈

2.2 GlusterFS工作流程

  1. 客户端或应用程序通过GlusterFS的挂载点访问数据,对于用户来说,集群系统的存在对用户是完全透明的,用户感觉不到是操作本地系统还是远端的集群系统。
  2. 用户的这个操作被递交给 本地linux系统的VFS来处理。
  3. VFS将数据递交给FUSE内核文件系统, fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client端,所以, 我们可以将 fuse文件系统理解为一个代理。
  4. GlusterFS client 收到数据后,client根据配置文件的配置对数据进行处理
  5. 通过网络将数据传递至远端的GlusterFS Server,并且将数据写入到服务器存储设备上
    在这里插入图片描述

三、GlusterFS的卷类型

3.1 分布式卷

  • 没有对文件进行分块处理

  • 通过扩展文件属性保存hash值

  • 支持的底层文件系统有ext4、zfs、xfs等

  • 特点
    文件分布在不同的服务器,不具备冗余性
    可以灵活的扩展卷的大小
    单点故障会造成数据丢失
    依赖底层的数据保护

  • 创建分布式卷
    创建一个名为dis-vol的分布式卷,文件将根据hash分布在node1:/data/sdb node2:/data/sdb中

      gluster volume create dis-vol node1:/data/sdb node2:/data/sdb force
    

3.2 条带卷

  • 根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点

  • 存储大文件时,性能尤为突出

  • 不具备冗余性,类似Raid0

  • 特点
    数据被分割成更小块分布到块服务器中的不同条带区
    分布减少了负载且更小的文件加速了存取的速度
    没有数据冗余

  • 创建条带卷
    创建了一个名为stripe-vol的条带卷,文件将被分块轮询的存储在node1:/data/sdc node2:/data/sdc中

      gluster volume create stripe-vol stripe 2 transport tcp node1:/data/sdc node2:/data/sdc
      (transport不指明时默认是RDMA)
    

3.3 复制卷

  • 同一个文件保存一份或多份副本

  • 因为要保存副本,所以磁盘利用率较低

  • 若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量

  • 特点
    卷中所有的服务器均保存一个完整的副本
    卷的副本数量可由客户创建的时候决定
    至少有两个块服务器或更多服务器
    具备冗余性

  • 创建复制卷
    创建名为rep-vol的复制卷,文件将同时存储两个副本,分别在node3:/data/sdb node4:/data/sdb两个Brick中

      gluster volume create rep-vol replica 2 node3:/data/sdb node4:/data/sdb force
    

3.4 分布式条带卷

  • 兼顾分布式卷和条带卷的功能

  • 主要用于大文件访问处理

  • 最少需要4台服务器

  • 创建分布式条带卷
    创建了名为dis-stripe的分布式条带卷,配置分布式的条带卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)

       gluster volume create dis-stripe stripe 2 node1:/data/sdd node2:/data/sdd node3:/data/sdd node4:/data/sdd force
    

3.5 分布式复制卷

  • 兼顾分布式卷和复制卷的功能

  • 用于需要冗余的情况

  • 创建分布式复制卷
    创建名为dis-rep的分布式条带卷,配置分布式复制卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)

       gluster volume create dis-rep replica 2 node1:/data/sde node2:/data/sde node3:/data/sde node4:/data/sde force
    

四、部署GlusterFS卷

4.1 实验环境

主机名IP
node1192.168.10.11
node2192.168.10.12
node3192.168.10.13
node4192.168.10.14

4.2 实验过程

  • glusterfs软件的安装
    首先需要提前准备好gfs的安装包,里面包括各种rpm包文件
    在这里插入图片描述然后将文件夹导入客户机中形成目录,对应目录我们去设置yum安装的repo本地源。

      vi /etc/yum.repo.d/gfs.repo
      [glfs]
      name=glfs
      baseurl=file:///root/gfsrepo	# 对应文件所在的位置
      gpgcheck=0
      enable=1
      
      yum clean all
      yum makecache
      yum -y install glusterfs glusterfs-server 		glusterfs-fuse glusterfs-rdma
      systemctl start glusterd.service 
      systemctl enable glusterd.service 
      systemctl status glusterd.service 
    
  • 时间同步

      ntpdate ntp1.aliyun.com
      crontab -e
      */30 * * * * /usr/sbin/ntpdate ntp1.aliyun.com
      crontab -l
    
  • 构建存储池(任意选取一个节点)

      gluster peer probe node2
      gluster peer probe node3
      gluster peer probe node4
      gluster peer status 	# 查看状态(任意一台都可以)
    

在这里插入图片描述

  • 创建卷
    在这里插入图片描述格式化并挂载使用

     fdisk -l
     mkfs.ext4 /dev/sdb
     mkfs.ext4 /dev/sdc
     mkfs.ext4 /dev/sdd
     mkfs.ext4 /dev/sde
     mkdir {/b1,/c1,/d1,/e1}
     mount /dev/sdb /b1
     mount /dev/sdc /c1
     mount /dev/sdd /d1
     mount /dev/sde /e1
    

查看挂载状态

df -Th

在这里插入图片描述

4.3 不同类型的卷的建立

4.3.1 分布式卷

[root@server1 ~]# gluster volume create dis-vol node1:/b1 node2:/b1 force	# 创建卷
volume create: dis-vol: success: please start the volume to access data
[root@server1 ~]# gluster volume info dis-vol	# 查看卷的信息

Volume Name: dis-vol
Type: Distribute
Volume ID: a5b68dc2-992c-4b61-b481-396c7f4173c9
Status: Created
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/b1
Brick2: node2:/b1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@server1 ~]# gluster volume start dis-vol	# 开启卷
volume start: dis-vol: success
[root@server1 ~]# gluster volume status dis-vol
Status of volume: dis-vol
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick node1:/b1                             49152     0          Y       11517	
Brick node2:/b1                             49152     0          Y       11619

Task Status of Volume dis-vol
------------------------------------------------------------------------------
There are no active volume tasks

其中显示online为Y即为在线表示分布式卷建立并开启成功。

4.3.2 条带卷

[root@server1 ~]# gluster volume create stripe-vol stripe 2 node1:/c1 node2:/c2 force	# 创建条带卷
volume create: stripe-vol: success: please start the volume to access data
[root@server1 ~]# gluster volume info stripe-vol	# 查看条带卷信息

Volume Name: stripe-vol
Type: Stripe
Volume ID: 04b86e2c-947f-41cf-ab60-831a433eb1b5
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/c1
Brick2: node2:/c2
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@server1 ~]# gluster volume start stripe-vol	# 启动条带卷
volume start: stripe-vol: success	
[root@server1 ~]# gluster volume status stripe-vol	# 查看条带卷状态

4.3.3 复制卷

[root@server1 ~]# gluster volume create rep-vol replica 2 node3:/b1 node4:/b1 force
[root@server1 ~]# gluster volume info rep-vol
[root@server1 ~]# gluster volume start rep-vol
volume start: rep-vol: success
[root@server1 ~]# gluster volume status rep-vol
Status of volume: rep-vol
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick node3:/b1                             49152     0          Y       12545
Brick node4:/b1                             49152     0          Y       12623
Self-heal Daemon on localhost               N/A       N/A        Y       12525
Self-heal Daemon on node4                   N/A       N/A        Y       12643
Self-heal Daemon on node3                   N/A       N/A        Y       12565
Self-heal Daemon on node2                   N/A       N/A        Y       12608

Task Status of Volume rep-vol
------------------------------------------------------------------------------
There are no active volume tasks

4.3.4 分布式条带卷

[root@server1 ~]# gluster volume create dis-stripe stripe 2 node1:/d1 node2:/d1 node3:/d1 node4:/d1 force
volume create: dis-stripe: success: please start the volume to access data
[root@server1 ~]# gluster volume info dis-stripe

Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: 3c17897c-e749-4cdd-990f-801fe5e6b59f
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/d1
Brick2: node2:/d1
Brick3: node3:/d1
Brick4: node4:/d1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@server1 ~]# gluster volume start dis-stripe
volume start: dis-stripe: success
[root@server1 ~]# gluster volume status dis-stripe
Status of volume: dis-stripe
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick node1:/d1                             49154     0          Y       12595
Brick node2:/d1                             49154     0          Y       12659
Brick node3:/d1                             49153     0          Y       12608
Brick node4:/d1                             49153     0          Y       12693

Task Status of Volume dis-stripe
------------------------------------------------------------------------------
There are no active volume tasks

4.3.5 分布式复制卷

[root@server1 ~]# gluster volume create dis-repl replica 2 node1:/e1 node2:/e1 node3:/e1 node4:/e1 force
volume create: dis-repl: success: please start the volume to access data
[root@server1 ~]# gluster volume info dis-repl

Volume Name: dis-repl
Type: Distributed-Replicate
Volume ID: c0d1b3e6-0d89-4d3b-9b45-8e2a78764427
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/e1
Brick2: node2:/e1
Brick3: node3:/e1
Brick4: node4:/e1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@server1 ~]# gluster volume start dis-repl
 gluster volume start dis-repl
[root@server1 ~]# gluster volume status dis-repl
Status of volume: dis-repl
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick node1:/e1                             49155     0          Y       12674
Brick node2:/e1                             49155     0          Y       12726
Brick node3:/e1                             49154     0          Y       12676
Brick node4:/e1                             49154     0          Y       12754
Self-heal Daemon on localhost               N/A       N/A        Y       12694
Self-heal Daemon on node3                   N/A       N/A        Y       12696
Self-heal Daemon on node4                   N/A       N/A        Y       12774
Self-heal Daemon on node2                   N/A       N/A        Y       12746

Task Status of Volume dis-repl
------------------------------------------------------------------------------
There are no active volume tasks

4.4 创建并挂载卷

[root@server1 ~]# gluster volume list
dis-repl
dis-stripe
dis-vol
rep-vol
stripe-vol
[root@client ~]# mkdir /dis-repl
[root@client ~]# mkdir /dis-stripe
[root@client ~]# mkdir /dis-vol
[root@client ~]# mkdir /rep-vol
[root@client ~]# mkdir /stripe-vol
[root@client ~]# mount.glusterfs node1:dis-repl /dis-repl
[root@client ~]# mount.glusterfs node1:dis-stripe /dis-stripe
[root@client ~]# mount.glusterfs node1:dis-vol /dis-vol
[root@client ~]# mount.glusterfs node1:rep-vol /rep-vol
[root@client ~]# mount.glusterfs node1:stripe-vol /stripe-vol
[root@client ~]# df -Th

[root@client ~]# dd if=/dev/zero of=/demo1.log bs=40M count=1
[root@client ~]# dd if=/dev/zero of=/demo2.log bs=40M count=1
[root@client ~]# dd if=/dev/zero of=/demo3.log bs=40M count=1
[root@client ~]# dd if=/dev/zero of=/demo4.log bs=40M count=1
[root@client ~]# dd if=/dev/zero of=/demo5.log bs=40M count=1
[root@client /]# cp demo* /dis-repl
[root@client /]# cp demo* /dis-stripe
[root@client /]# cp demo* /dis-vol
[root@client /]# cp demo* /rep-vol
[root@client /]# cp demo* /stripe-vol

4.5 检查并测试

以分布式复制卷为例:
我们查看客户机上面的dis-repl目录,发现

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

4.6 破坏实验

在这里插入图片描述总结:复制卷、分布式复制卷的数据完整,条带卷数据全部丢失,分布式卷丢失一部分

4.7 Glusterfs访问控制

删除某个卷:

[root@server1 e1]# gluster volume stop dis-vol
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: dis-vol: success
[root@server1 e1]# gluster volume delete dis-vol
Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
volume delete: dis-vol: success

在客户端使用df -Th查看挂载的时候发现该卷不见了。

#仅拒绝某个用户,查看该客户的挂载发现丢失
[root@server1 e1]# gluster volume set rep-vol auth.reject 192.168.10.15
volume set: success

# 仅允许某个用户
[root@server1 e1]# gluster volume set dis-repl auth.allow 192.168.10.15
volume set: success
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在oVirt中配置GlusterFS可以分为以下几个步骤: 1. 安装GlusterFS:在oVirt主机上安装GlusterFS服务器软件。可以使用yum或者其它包管理工具来安装GlusterFS。 2. 创建GlusterFS存储池:使用GlusterFS创建一个存储池,并将其添加到oVirt中作为一个数据存储域。可以使用GlusterFS的命令行工具来创建存储池,例如gluster volume create命令。在创建存储池时,需要指定存储池的名称、存储池的类型(例如分布式、复制等)、存储池的大小等信息。 3. 将存储池添加到oVirt:在oVirt管理界面中,将GlusterFS存储池添加为一个数据存储域。在oVirt中,存储域是用来存储虚拟机磁盘镜像、ISO镜像和虚拟机快照的存储空间。在添加存储池时,需要指定存储池的名称、存储池的类型(例如文件、块等)、存储池的地址等信息。 4. 创建虚拟机磁盘:在oVirt中创建虚拟机并为其分配一个GlusterFS存储域作为磁盘存储。可以使用oVirt管理界面或者oVirt API来创建虚拟机。在创建虚拟机时,需要指定虚拟机的名称、虚拟机的磁盘大小、虚拟机的操作系统等信息。同时,还需要指定虚拟机的磁盘存储域为GlusterFS存储域。 5. 启动虚拟机:在完成虚拟机的创建后,可以启动虚拟机并开始使用它。在虚拟机启动后,可以通过oVirt管理界面或者SSH等方式来访问虚拟机。同时,还可以使用oVirt的监视工具来监视虚拟机的状态和性能。 总之,配置GlusterFS存储池并将其添加到oVirt中作为一个数据存储域,可以为oVirt虚拟化环境提供高可用性和可扩展性。同时,使用GlusterFS作为虚拟机磁盘存储,还可以提高虚拟机的可用性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值