GFS分布式文件系统

发布于:2022-11-28 ⋅ 阅读:(405) ⋅ 点赞:(0)

一,GlusterFS简介

1,GlusterFS是什么

  • Gluster是一个开源的分布式文件系统
  • 是一个c/s架构
  • 由存储服务器,客户端以及NFS/Samba存储网关组成。
  • 没有云数据服务器组件,这有助于提升整个系统的性能,可靠性和稳定性。

文件系统定义

负责实现数据存储方式,以什么格式保存在磁盘中的一个技术。

2,GlusterFS特点

扩展性和高性能

  • 分布式的特性

高可用性

  • 冗余,容灾的能力

全局同一命令空间

  • 将所以的节点的命令空间整个统一命令空间。将整个系统的所以节点的存储容量组成一个大的虚拟存储池,供客户端访问。

弹性卷管理

逻辑存储池可以在线进行增加和移除,不会导致业务中断,逻辑卷可以根据需求在线增长和缩减,并可以在多个节点中实现负载均衡。

基于标准协议

按照什么协议进行传输(tcp、ip),Gluster存储服务支持NFS,CLFS,HTTP.FTP.SMB及gluster原生协议,完全与POSIX标准(可移植操作系统接口)兼容。

二,GlusterFS专业术语

1,Brick(块存储服务器)

  • 实际存储用户数据的服务器(相当于逻辑卷中的PE)

2,Volume(逻辑卷)

  • 一个逻辑卷是一组brick的集合,卷是数据存储的逻辑设备。
  • 本地文件系统的“分区”

3,FUSE(用户空间的文件系统)

用户的空间的文件系统(类别ext4),这是一个“伪文件系统(就是虚拟的文件系统)”用户端的交换模块。

4,VFS(虚拟端口)

用户是提交请求个VFS,然后VFS交给FUSH,再交给GFS客户端,最后由客户端交给远程服务端进行存储。

5,Glusterd(服务)

  • 是运行再存储节点的进程(客户端运行的是gluster client),GFS使用过程中整个GFS之间的交换由Gluster client 和 glusterd 完成。

6,模块化堆伐式架构

  • GlusterFS 采用模块化、堆栈式的架构。
  • 通过对模块进行各种组合,即可实现复杂的功能。例如 Replicate 模块可实现 RAID1,Stripe 模块可实现 RAID0, 通过两者的组合可实现 RAID10 和 RAID01,同时获得更高的性能及可靠性。

三,GlusterFS构成

模块化推栈式架构

  • 模块化、推栈式的架构
  • 通过对模块的组合,实现复杂的功能

1、API: 应用程序编程接口

2、模块化: 每个模块可以提供不同的功能

3、推栈式: 同时启用多个模块,多个功能功能可以组合,实现复杂的功能

1、GlusterFS总流程

 I/O cache : I/O缓存
read ahead : 内核文件预读
distribute/stripe: 分布式、条带化
Gige: 千兆网/千兆接口
TCP/IP: 网络协议
InfiniBand: 网络协议,与TCP/IP具有转发丢失数据包的特性,基于此通信协议可能导致通信变慢,而IB使用基于信任的,流程制的机制来保证连接的完整性。
RDMA: 负责数据传输,有一种数据传输协议,功能:为了解决传输过程中客户端与服务器端数据处理的延迟。
上半部分为客户端,中间为网络层,下班部分为服务端

  • 封装多核功能模块,组成推栈式的结构,来实现复杂的功能。
  • 然后以请求的方式与客户端进行交互,客户端与服务端进行交互,由于可能会存在系统兼容问题,需要通过posix来解决系统兼容性问题,让客户端的命令通过posix过滤后可以在服务端执行。

2,GFS的工作原理

 上图说明

外来的一个请求,例:用户端申请创建一个文件,客户端或应用程序通过GFS的挂载点进行访问数据

linux系统内核通过VFS的apl收到请求并处理

VFS将数据交给FUSE内核文件系统,FUSE文件系统则是将数据通过/dev/fuse设备文件递交给GluseterFS client端。

GlusterFS client端收到数据后,会根据配置文件的配置对数据进行处理。

再通过网络,将数据发送给远程端的Gluster server,并将数据写入到服务器存储设备上。

server再将数据转交给VFS虚拟文件系统转换,在由VFS进行CFS转存处理,最后交给EXT3文件系统,最后存储到磁盘中。

四,GlusterFS的卷类型

(1)分布式卷

没有对文件进行分块处理

通过扩展文件属性保存HASH值

支持的底层文件系统有EXT3.EXT4.ZFS.XFS等

(2)条带卷

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

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

不具备冗余性,类似Raid0

(3) 复制卷

同一文件保存一份或多分副本

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

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

(4)分布式条带卷

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

主要用于大文件访问处理

至少最少需要4天服务器

(5)分布式复制卷

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

用于需要冗余的情况

五,GlusterFS实验

1、准备5台机器

Node1:192.168.182.160

Node2:192.168.182.137

Node3:192.168.182.138

Node4:192.168.182.139

客户端:192.168.182.175

将每台机器 添加 大小为5G的磁盘

#关闭防火墙

systemctl stop firewalld

setenforce 0

 2、磁盘分区,并挂载 利用

2.磁盘分区,并挂载
vim /opt/fdisk.sh
#! /bin/bash
echo "the disks exist list:"
fdisk -l |grep '磁盘 /dev/sd[a-z]'
echo "=================================================="
PS3="chose which disk you want to create:"
select VAR in `ls /dev/sd*|grep -o 'sd[b-z]'|uniq` quit
do
    case $VAR in
    sda)
        fdisk -l /dev/sda
        break ;;
    sd[b-z])
        #create partitions
        echo "n
                p
                
                
           
                w"  | fdisk /dev/$VAR
 
        #make filesystem
        mkfs.xfs -i size=512 /dev/${VAR}"1" &> /dev/null
	#mount the system
        mkdir -p /data/${VAR}"1" &> /dev/null
        echo -e "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0\n" >> /etc/fstab
        mount -a &> /dev/null
        break ;;
    quit)
        break;;
    *)
        echo "wrong disk,please check again";;
    esac
done

cd /opt

chmod +x fdisk.sh

./fdisk.sh

 

将脚本执行

#配置各个节点的/etc/hosts文件(所有节点操作)

echo "192.168.182.160 node1" >> /etc/hosts

echo "192.168.182.137 node2" >> /etc/hosts

echo "192.168.182.138 node3" >> /etc/hosts

echo "192.168.182.139 node4" >> /etc/hosts

cd /etc/yum.repos.d/

mv * repos.bak/

vim glfs.repo

[glfs]

name=glfs

baseurl=file:///opt/gfsrepo

gpgcheck=0

enabled=1



安装、启动GFS(所有节点操作)

unzip gfsrepo.zip

    

  yum clean all && yum makecache

 

  yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

如果出现以下情况 可以先删除之前的依赖包  然后在下载

rpm -e --nodeps glusterfs-api glusterfs-libs glusterfs-fuse glusterfs-cli  glusterfs glusterfs-client-xlators ##删除报错的依赖包

systemctl start glusterd.service

systemctl enable glusterd.service

systemctl status glusterd.service

添加DNS,进行时间同步

echo "nameserver 114.114.114.114" >> /etc/resolv.conf

ntpdate ntp1.aliyun.com

添加节点到存储信任池中(在任意一个node中操作)

gluster peer probe node1

gluster peer probe node2

gluster peer probe node3

gluster peer probe node4

更改一下名字 在进行添加

在每个node节点上查看群集状态

gluster peer status

  3、根据以下规划创建卷

卷名称

卷类型 Brick
dis-volume 分布式卷 node1(/data/sdb1)、node2(/data/sdb1)
stripe-volume 条带卷 node1(/data/sdc1)、node2(/data/sdc1)
rep-volume 复制卷 node3(/data/sdb1)、node4(/data/sdb1)
dis-stripe 分布式条带卷 node1(/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/sdd1)
dis-rep 分布式复制卷 node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1)

创建分布式卷,没有指定类型,默认创建的是分布式卷 

gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force

gluster volume list

gluster volume start dis-volume

gluster volume info dis-volume

 指定类型为 stripe,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是条带卷 

gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force

gluster volume start stripe-volume

gluster volume info stripe-volume

 指定类型为 replica,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是复制卷

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

gluster volume start rep-volume

gluster volume info rep-volume

  创建分布式条带卷

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

gluster volume start dis-stripe

gluster volume info dis-stripe

  创建分布式复制卷

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

gluster volume start dis-rep

gluster volume info dis-rep

六,部署客户端

cd /etc/yum.repos.d/

mv * repos.bak/
vim glfs.repo

[glfs]

name=glfs

baseurl=file:///opt/gfsrepo

gpgcheck=0

enabled=1

yum clean all && yum makecache

cd /opt

unzip gfsrepo.zip

 配置 /etc/hosts 文件

echo "192.168.182.160 node1" >> /etc/hosts

echo "192.168.182.137 node2" >> /etc/hosts

echo "192.168.182.138 node3" >> /etc/hosts

echo "192.168.182.139 node4" >> /etc/hosts

 挂载 Gluster 文件系统

#临时挂载

mount.glusterfs node1:dis-volume /test/dis

mount.glusterfs node1:stripe-volume /test/stripe

mount.glusterfs node1:rep-volume /test/rep

mount.glusterfs node1:dis-stripe /test/dis_stripe

mount.glusterfs node1:dis-rep /test/dis_rep

 Node1

  Node2

 Node3

  Node4

 七,破坏性测试

node2和node4的服务器进行挂机来模拟故障,然后在客户端上查看其他服务器的文件是否正常

分布式卷数据 可以查看

 条带卷   不可查看

复制卷  可产查看

 分布式复制卷  可查看

  注:当出现以下情况是

1、需要考虑是否是  各台机子的时间是否做了同步处理

2、需要查看版本是否一致[root@client /]# rpm -qa glusterfs glusterfs-fuse

3、或查看日志报错[root@client /]# cat /var/log/glusterfs/test0

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到