文章目录

  • 一.概述
    • 1.1 文件系统组成
    • 1.2 文件系统FS作用
    • 1.3 文件系统FS 的挂载使用
    • 1.4 分布式文件系统(GFS)组成
    • 1.5 分布式文件系统(GFS)特点
    • 1. 6 分布式文件系统(GFS)专业术语
    • 1.7. 元数据服务器的作用
  • 二 模块化堆栈架构
    • 2.1 模块部分:
  • 三.GFS工作原理
    • 3.1 GFS工作流程
  • 四.GFS卷类型
    • 4.1 分布式卷
    • 4.2 条带卷
    • 4.3 复制卷
    • 4.4 分布式条带卷
    • 4.5 分布式复制卷
    • 4.6 条带复制卷
    • 4.6分布式条带卷
  • 五.相关维护命令
  • 六.GFS部署
    • 6.1 节点进行磁盘分区、挂载
    • 6.2 修改主机名,配置/etc/hosts文件
    • 6.3其他的维护命令

一.概述

  1. GlusterFS:开源分布式文件系统,无元数据服务器
  2. FS:文件系统

1.1 文件系统组成

  1. 文件系统的接口(API)
  2. 功能模块(管理、存储的工具):对对象管理的软件集合
  3. 对象及属性(使用此文件系统的消费者)

1.2 文件系统FS作用

从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统;主要负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取

1.3 文件系统FS 的挂载使用

除了根文件系统外,需要先挂载到挂载点后,才可被访问
挂载点即分区设备文件关联的某个目录文件

1.4 分布式文件系统(GFS)组成

存储服务器
客户端
NFS/samba存储网关组成

1.5 分布式文件系统(GFS)特点

  1. 扩展性和高性能
  2. 高可用(冗余)
  3. 全局统一命名空间
  4. 弹性卷管理(复制卷,条带卷
  5. 基于标准协议(http https)

1. 6 分布式文件系统(GFS)专业术语

  1. brick块:实际存储用户数据的服务器
  2. volume:本地文件系统的分区
  3. fuse:用户空间的文件系统(伪文件系统),客户端与服务端连接的工具,本地的数据以网络的方式传递,客户端服务端口连接工具客户端请求交给fuse
  4. VFS:虚拟接口,用户提交请求给VFS,VFS把文件给fuse,再交给GFS客户端,最后客户端交给远端存储
  5. Glusterd:服务端

1.7. 元数据服务器的作用

  1. 存储元数据,帮用户定位文件的位置、索引等信息
    有元数据服务器文件系统中,如果元数据损坏,会直接导致文件系统不可用( 单点故障-服务器定位)
    详见下图:若A宕机,就无法获取数据。
  2. 而GFS把元数据服务器舍弃了,使用的是数据挂载形式挂载到客户端,挂载的网关是NFS/Samba,实现ABC三台GFS服务器数据共享,即使服务器A宕机,也可以从服务器B/C拿取数据

二 模块化堆栈架构

  1. 多种功能模块组合在一起,组成堆栈架构
  2. 模块化、堆栈式架构
  3. 通过对模块的组合,实现复杂的功能

2.1 模块部分:

  1. gige:千兆口
  2. TCP/ip:网络协议
  3. infiniband:网络协议,tcp,ip具有转发丢失数据包的特征,丢包的几率小

RDMA:负责数据传输,数据传输协议
解决传输中客户端与服务器端数据处理的延迟
posix:可移植系统接口,解决不同操作系统见的移植性

三.GFS工作原理

用户:安装客户端,安装fuse,挂载到服务端,把文件存储进去

  1. 首先系统调用给vfs(虚拟接口),再将数据给fuse(伪文件系统)连接客户端和服务端
  2. 再数据保存在虚拟的文件中
  3. 通过客户端传递数据给服务端
  4. 服务端使用VFS接口,保存在实际文件系统中

3.1 GFS工作流程

写的过程
GFS客户端服务器

  1. 需求:将数据保存在GFS文件系统中(客户端在本地发出写请求)
    交由VFS的API接受请求–>组合功能模块,将数据交给FUSE(内核伪文件系统)
    FUSE可以模拟操作系统,可以对文件系统进行转存,转存的设备位置为: /dev/fuse (用于传输的设备-虚拟设备文件)
    /dev/fuse 虚拟设备文件会将数据交给GFS客户端
    GFS客户端client会根据配置文件对数据进行处理,然后再通过TCP/IB/rdma网络发送到GFS服务端
  2. GFS服务端服务器
    接收到数据之后
    会将数据保存在对应的存储节点上
    详见下图

四.GFS卷类型

4.1 分布式卷

  • 没有对文件进行分块处理
  • 通过扩展文件属性保存HASH值
  • 支持的底层文件系统有EXT3、EXT4、ZFS、XFS

特点:

  • 文件分开存,没有拆分大小,效率不提升
  • 文件分布在不同服务器,不具备冗余
  • 单点故障会造成数据丢失
  • 依赖底层的数据保护

创建命令

  • 创建一个名为dis-volume的分布式卷,文件将根据HASH分布在server1:/dir1、server2:/dir2和server3:/dir3中
gluster volume create dis-volume server1:/dir1 server2:/dir2

4.2 条带卷

 大小拆分,轮询存储在每个节点不具备冗余,

特点:

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

创建命令

  • 创建了一个名为Stripe-volume的条带卷,文件将被分块轮询的存储在Server1:/dir1和Server2:/dir2两个Brick
gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2

4.3 复制卷

冗余备份,多个节点存储空间不一致,按木桶效应最小节点存取
至少两个服务器和更多服务器

特点:

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

创建命令

  • 创建名为rep-volume的复制卷,文件将同时存储两个副本,分别在Server1:/dir1和Server2:/dir2两个Brick中
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

4.4 分布式条带卷

分布式,条带卷功能
大文件访问处理,至少4台服务器

创建命令

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

gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

4.5 分布式复制卷

 分布式,复制卷功能兼具分布式卷和复制卷的特点

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

gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4

4.6 条带复制卷

类似RAID 10,同时具有条带卷和复制卷的特点

4.6分布式条带卷

三种基本卷的复合卷通常用于类Map Reduce应用

五.相关维护命令

命令 含义
gluster volume list 查看GlusterFS卷
gluster volume info 查看所有卷的信息
gluster volume status 查看所有卷的状态
gluster volume stop dis-stripe 停止一个卷
gluster volume delete dis-stripe 删除一个卷
注意:删除卷时,需要先停止卷,且信任池中不能有主机处于宕机状态,否则删除不成功
gluster volume set dis-rep auth.allow + IP 设置卷的访问控制仅拒绝
-------- -----
gluster volume set dis-rep auth.allow + IP 仅允许

六.GFS部署

节点名 IP地址
Node 1 192.168.10.129
Node2 192.168.10.134
Node3 192.168.10.130
Node4 192.168.10.142
客户机 192.168.10.1

关闭防火墙:

systemctl stop firewalld
setenforce 0

6.1 节点进行磁盘分区、挂载

Node1节点:192.168.10.129
Node2节点:192.168.10.134
Node3节点:192.168.10.130
Node4节点:192.168.10.142

vim fdisk.sh
#!/bin/bash
NEWDEV=`ls /dev/sd* | grep -o 'sd[b-z]' | uniq`
for VAR in $NEWDEV
doecho -e "n\np\n\n\n\nw\n" | fdisk /dev/$VAR &> /dev/nullmkfs.xfs /dev/${VAR}"1" &> /dev/nullmkdir -p /data/${VAR}"1" &> /dev/nullecho "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0" >> /etc/fstab
done
mount -a &> /dev/nullchmod +x fdisk.sh
./fdisk.sh

获着

#!/bin/bash
echo "the disks exist list:"
##grep出系统所带磁盘
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
docase $VAR insda)##本地磁盘就退出case语句fdisk -l /dev/sda   break ;;sd[b-z])#create partitionsecho "n    ##创建磁盘pw"  | fdisk /dev/$VAR#make filesystem
##格式化mkfs.xfs -i size=512 /dev/${VAR}"1" &> /dev/null    #mount the systemmkdir -p /data/${VAR}"1" &> /dev/null
###永久挂载echo -e "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0\n" >> /etc/fstab
###使得挂载生效mount -a &> /dev/nullbreak ;;quit)break;;*)echo "wrong disk,please check again";;esac
done

6.2 修改主机名,配置/etc/hosts文件

#以Node1节点为例:

hostnamectl set-hostname node1
suecho "192.168.10.129 node1" >> /etc/hosts
echo "192.168.10.134 node2" >> /etc/hosts
echo "192.168.10.130 node3" >> /etc/hosts
echo "192.168.10.142 node4" >> /etc/hosts
echo "192.168.10.1 client" >> /etc/hosts

----- 安装、启动GlusterFS(所有node节点上操作) -----
#将gfsrepo 软件上传到/opt目录下

#上传gfsrepo.zip 至/opt解压缩

unzip gfsrepo.zip
cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak

打开配置文件

vim  /etc/yum.repos.d/glfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
yum clean all && yum makecache

安装

#yum -y install centos-release-gluster           #如采用官方 YUM 源安装,可以直接指向互联网仓库
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

解决方法,卸载高版本,重新安装

rpm -e --nodeps glusterfs-api
rpm -e --nodeps glusterfs-libs
rpm -e --nodeps glusterfs-fuse
rpm -e --nodeps glusterfs-cli
yum -y install glusterfs-client-xlators.x86_64
yum -y install glusterfs-api.x86_64
yum install -y  glusterfs-cli
如果还有其他软件包版本过高,直接卸载,重新安装即可

启动

systemctl start glusterd.service  开启服务
systemctl enable glusterd.service  开机自启动服务
systemctl status glusterd.service   查看状态

进行时间同步

ntpdate ntp1.aliyun.com

----- 添加节点到存储信任池中(在 node1 节点上操作) -----
#只要在一台Node节点上添加其它节点即可

gluster peer probe node1
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4

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

gluster peer status

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

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

2.创建条带卷
#指定类型为 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

3.创建复制卷
#指定类型为 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

4.创建分布式条带卷
#指定类型为 stripe,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式条带卷

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

5.创建分布式复制卷
指定类型为 replica,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式复制卷

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
gluster volume list


---- 部署 Gluster 客户端 -----
1.安装客户端软件
#将gfsrepo 软件上传到/opt目下

cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak
vim glfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
yum clean all && yum makecache
yum -y install glusterfs glusterfs-fuse

2.创建挂载目录
mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep}
ls /test

3.配置 /etc/hosts 文件

echo “192.168.10.129 node1” >> /etc/hosts
echo “192.168.10.134 node2” >> /etc/hosts
echo “192.168.10.130 node3” >> /etc/hosts
echo “192.168.10.142 node4” >> /etc/hosts
echo “192.168.10.1 client” >> /etc/hosts

4.挂载 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_repdf -Th


----- 测试 Gluster 文件系统 -----
1.卷中写入文件,客户端操作

cd /opt
dd if=/dev/zero of=/opt/demo1.log bs=1M count=20
dd if=/dev/zero of=/opt/demo2.log bs=1M count=20
dd if=/dev/zero of=/opt/demo3.log bs=1M count=20
dd if=/dev/zero of=/opt/demo4.log bs=1M count=20
dd if=/dev/zero of=/opt/demo5.log bs=1M count=20
cp demo* /test/dis
cp demo* /test/stripe/
cp demo* /test/rep/
cp demo* /test/dis_stripe/
cp demo* /test/dis_rep/

2.查看文件分布
#查看分布式文件分布

[root@node1 ~]# ls -lh /data/sdb1                   #数据没有被分片
[root@node2 ~]# ll -h /data/sdb1



#查看条带卷文件分布

[root@node1 ~]# ls -lh /data/sdc1   #数据被分片50% 没副本 没冗余

root@node2 ~]# ll -h /data/sdc1                 #数据被分片50% 没副本 没冗余


#查看复制卷分布

[root@node3 ~]# ll -h /data/sdb1                    #数据没有被分片 有副本 有冗余

[root@node3 ~]# ll -h /data/sdd1

root@node4 ~]# ll -h /data/sdd1

root@node4 ~]# ll -h /data/sdd1


#查看分布式复制卷分布
#数据没有被分片 有副本 有冗余

[root@node1 ~]# ll -h /data/sde1

[root@node2 ~]# ll -h /data/sde1

[root@node3 ~]# ll -h /data/sde1

[root@node4 ~]# ll -h /data/sde1


---- 破坏性测试 -----
#挂起 node2 节点或者关闭glusterd服务来模拟故障
[root@node2 ~]# systemctl stop glusterd.service

#在客户端上查看文件是否正常
#分布式卷数据查看

[root@localhost dis]# ll                        #在客户上发现少了demo5.log文件,这个是在node2上的


#条带卷

[root@localhost text]# cd stripe/                   #无法访问,条带卷不具备冗余性
[root@localhost stripe]# ll


#分布式条带卷

[root@localhost dis_and_stripe]# ll                 #无法访问,分布条带卷不具备冗余性


#分布式复制卷

[root@localhost dis_and_rep]# ll                    #可以访问,分布式复制卷具备冗余性


若node2修复,加入集群,数据正常

#挂起 node2 和 node4 节点,在客户端上查看文件是否正常
#测试复制卷是否正常

[root@localhost rep]# ls -l                     #在客户机上测试正常 数据有


测试分布式条卷是否正常

[root@localhost dis_stripe]# ll                     #在客户机上测试正常 没有数据


#测试分布式复制卷是否正常

[root@localhost dis_and_rep]# ll                    #在客户机上测试正常 有数据

6.3其他的维护命令

1.查看GlusterFS卷

gluster volume list

2.查看所有卷的信息

gluster volume info

3.查看所有卷的状态

gluster volume status

4.停止一个卷

gluster volume stop dis-stripe

5.删除一个卷,注意:删除卷时,需要先停止卷,且信任池中不能有主机处于宕机状态,否则删除不成功

gluster volume delete dis-stripe

6.设置卷的访问控制
#仅拒绝

gluster volume set dis-rep auth.deny 192.168.10.100

#仅允许
gluster volume set dis-rep auth.allow 192.168.10.* #设置192.168.10.0网段的所有IP地址都能访问dis-rep卷(分布式复制卷)

GFS —— 分布式文件系统相关推荐

  1. GFS分布式文件系统简介及部署——让存储变得更高级

    GFS分布式文件系统简介及部署 一.GFS概述 1.文件系统 ①.文件系统组成 ②.文件系统的作用 ③.专业术语 二.GFS特点 三.GFS工作原理 四.GFS卷 1.GFS卷类型 2.三大基本卷的特 ...

  2. 浅识一下GFS分布式文件系统

    GFS分布式文件系统 什么是GFS分布式文件系统 GFS(GlusterFS) 是一个开源的分布式文件系统. 由存储服务器.客户端以及NFS/Samba 存储网关(可选,根据需要选择使用)组成. 没有 ...

  3. GFS分布式文件系统

    GFS分布式文件系统 前言 GFS是一个可扩展的分布式文件系统,用于大型的.分布式的.对大量数据进行访问的应用.它运行于廉价的普通硬件上,并提供容错功能.它可以给大量的用户提供总体性能较高的服务. G ...

  4. GlusterFS/GFS 分布式文件系统--理论详解

    文章目录 一.文件系统简介 1.组成 2.作用 3.文件系统的挂载使用 二.GFS分布式文件系统概述 1.GFS简介 2.GFS的特点 3.GFS专业术语 4. 模块化堆栈式架构 5. GFS 工作流 ...

  5. 如何搭建GFS分布式文件系统

    如何搭建GFS分布式文件系统 什么是文件系统 文件系统的组成部分 文件系统作用 文件系统的使用 分布式文件系统GFS GFS简介 GFS组成 GFS的特点 GFS专业术语 GFS模块化和堆栈式架构 G ...

  6. GFS 分布式文件系统从入门到实践

    文章目录 一.GlusterFS 概述 1.1 GlusterFS简介 1.2 GlusterFS的特点 (一)扩展性和高性能 (二)高可用性 (三)弹性卷管理 (四)基于标准协议 二.Gluster ...

  7. 企业级别应用--GFS分布式文件系统(GlusterFS工作原理、弹性 HASH 算法 、GlusterFS卷的类型、 部署GlusterFS)

    文章目录 一. GlusterFS 概述 1.1 GlusterFS 简介 与传统分布式相比的优点 1.2 GlusterFS 的特点 扩展性和高性能 高可用性 全局统一命名空间 弹性卷管理 基于标准 ...

  8. 大点干!早点散----------深入剖析GFS分布式文件系统

    文章目录 一.GlusterFS(GFS)介绍 1.GlusterFS 2.GlusterFS特点 3.常用术语 4.GFS的结构 5.弹性HASH算法 6.GlusterFS工作原理 二.Glust ...

  9. 分布式应用之GFS分布式文件系统

    内容预知 前言 1. GlusterFS的相关知识 1.1 GlusterFS简介 1.2 GlusterFS特点 1.3 GlusterFS 术语 1.4 模块化堆栈式架构 1.5 GlusterF ...

最新文章

  1. 熟人Dubbo 系列1-Dubbo什么
  2. 如何用Python和BERT做中文文本二元分类?| 程序员硬核评测
  3. 比特币现金将出新招,推动比特币现金使用
  4. Python numpy生成矩阵、串联矩阵
  5. english learning websites
  6. 间接银团贷款(Indirectly Syndicated Loan/PARTICIPATED)
  7. 微型计算机广告牌实验报告,微型计算机实验报告1资料.doc
  8. Linux I2C核心、总线与设备驱动(一)
  9. Java8 默认方法
  10. 幼儿学数数的c语言程序,【资源学习】c语言程序代码,登录幼儿园200个小朋友的数据...
  11. 立冬了 广州还是夏天
  12. VISA 通信command总结
  13. (十九)论文阅读 | 目标检测之SNIP
  14. ckeditor5 添加ckeditor5-line-height-plugin插件
  15. vue大文件下载(下载进度展示)
  16. 数学连乘和累加运算符号_3,7,5之间加数学运算符号使结果等于8?
  17. css动画实现跳动的小人
  18. HTML5 Flash 现状及未来预测
  19. 计算机可以配置不同的显示系统,为什么Win7系统显卡显示型号和电脑配置型号不一样...
  20. Android---BaseApplication

热门文章

  1. 乔布斯当场“复活”,苹果发AirPods 3和地表最强电脑芯片,秀刘海屏Macbook Pro
  2. .md文件转.pdf文件
  3. 趣味密码学入门--cryptohack
  4. 科学解释超级计算机,人工智能、现代科学证明:宇宙是虚拟的,真实世界是超级计算机...
  5. 自定义 input[type=checkbox]的样式
  6. 缓存之王 | Redis最佳实践开发规范FAQ
  7. 亮剑精神---程序人生路
  8. 语音信号的梅尔频率倒谱系数(MFCC)的原理讲解及python实现
  9. 2020年—岁月静好,温暖如初
  10. 开启TX2、Xavier最大性能 Opening the Max performance of TX2、Xavier