GFS分布式文件系统实验

news2024/11/23 15:52:49

GFS概念

Gluster 是一个开源的分布式文件系统

它是一个C/S架构

由存储服务器、客户端以及NFS/Samba存储网关组成

没有元数据服务器组件,这有助于提升整个系统的性能,可靠性和稳定性

文件系统定义

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

GlusterFS特点

扩展性和高性能

分布式的特性

高可用性

冗余、容灾的能力

全局统一命令空间

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

弹性卷管理

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

基于标准协议

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

GlusterFS专业术语

Brick(块存储服务器

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

Volume(逻辑卷)

一个逻辑卷是一组Brick的集合,卷是数据存储的逻辑设备

本地文件系统的“分区”

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

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

VFS(虚拟端口)

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

Glusterd(服务)

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

GlusterFS构成

模块化堆栈式架构

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

API

  • 应用程序编程接口

模块化

  • 每个模块可以提供不同的功能

推栈式

  • 同时启用多个模块,多个功能功能可以组合,实现复杂的功能

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的API收到请求并处理。

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

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

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

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

3、分布式gfs服务器存储

分布式GFS存储是依靠于弹性hash算法,通过对存储内容进行hash算法的运算,可以得到32位的整数,将32位整数平均划分到 分布式服务器中,也就是每一个brick对应一段整数范围。用户根据计算得出数字找到对应的brick块。

弹性HASH算法

  • 弹性 HASH 算法是 Davies-Meyer 算法的具体实现,通过 HASH 算法可以得到一个 32 位的整数范围的 hash 值,
  • 假设逻辑卷中有 N 个存储单位 Brick,则 32 位的整数范围将被划分为 N 个连续的子空间,每个空间对应一个 Brick。
  • 当用户或应用程序访问某一个命名空间时,通过对该命名空间计算 HASH 值,根据该 HASH 值所对应的 32 位整数空间定位数据所在的 Brick。

弹性HASH算法的优点

  • 保证数据平均分布在每一个Brick中
  • 解决了对元数据服务器的依赖,进而解决了单点故障

四、GlusterFS的卷类型

1、分布式卷

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

特点:

  • 文件分布在不同的服务器,不具备冗余性
  • 更容易和廉价的扩展卷的大小。
  • 单点故障会造成数据丢失
  • 依赖底层的数据保护

2、条带卷

  • 根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
  • 存储大文件时,性能尤为突出
  • 不具备冗余性,类似Raid0

特点

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

3、复制卷

  • 同一文件保存一份或多份副本
  • 因为要保存副本,所以磁盘利用率较低
  • 若多个节点上的存储空间不一致,将按照木桶效应取最低点的容量作为该卷的总容量。

特点

  • 卷中所有的服务器均保存一个完整的副本
  • 卷的副本数量可由创建的时候决定,但是复制必须等于卷中Brick所包含的存储服务器数。
  • 至少由两块服务器或更多服务器
  • 具备冗余性

4、分布式条带卷

  • 兼顾分布式卷和条带卷的功能
  • 主要用于大文件访问处理
  • 至少最少需要4台服务器

5、分布式复制卷

  • 兼顾分布式卷和复制卷的功能
  • 用于需要冗余的情况

五、部署GlusterFS集群实验

1、集群环境

Node1节点:node1/192.168.154.40	  磁盘: /dev/sdb1			挂载点: /data/sdb1
								  /dev/sdc1					/data/sdc1
								  /dev/sdd1					/data/sdd1
								  /dev/sde1					/data/sde1
 
Node2节点:node2/192.168.154.50	  磁盘: /dev/sdb1			挂载点: /data/sdb1
								  /dev/sdc1					/data/sdc1
								  /dev/sdd1					/data/sdd1
								  /dev/sde1					/data/sde1
 
Node3节点:node3/192.168.154.60  磁盘: /dev/sdb1			挂载点: /data/sdb1
								  /dev/sdc1					/data/sdc1
								  /dev/sdd1					/data/sdd1
								  /dev/sde1					/data/sde1
 
Node4节点:node4/192.168.154.70    磁盘: /dev/sdb1		挂载点: /data/sdb1
								   /dev/sdc1				/data/sdc1
								   /dev/sdd1				/data/sdd1
								   /dev/sde1				/data/sde1
 
=====客户端节点:192.168.154.30=====

更改节点主机名称、关闭防火墙

以下四台服务器相同操作,分别命名名称为:node1、node2、node3、node4

[root@ydq1 ~]# systemctl stop firewalld
[root@ydq1 ~]# setenforce 0
[root@ydq1 ~]# hostnamectl set-hostname node1
[root@ydq1 ~]# su
[root@node1 ~]# 

节点进行磁盘挂载,安装本地源

所有节点都需要做,这边以node1为例

------------------------编写自动分区脚本,并执行---------------------------
[root@node1 ~] # vim /opt/fdisk.sh
 
#!/bin/bash
NEWDEV=`ls /dev/sd* | grep -o 'sd[b-z]' | uniq`
for VAR in $NEWDEV
do
   echo -e "n\np\n\n\n\nw\n" | fdisk /dev/$VAR &> /dev/null
   mkfs.xfs /dev/${VAR}"1" &> /dev/null
   mkdir -p /data/${VAR}"1" &> /dev/null
   echo "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0" >> /etc/fstab
done
mount -a &> /dev/null
 
:wq
 
[root@node1 ~] # chmod +x /opt/fdisk.sh
[root@node1 ~] # cd /opt/
[root@node1 /opt] # ./fdisk.sh
 
-----------------------创建本地DNS-------------------------------
[root@node1 /opt] # echo "20.0.0.55 node1" >> /etc/hosts
[root@node1 /opt] # echo "20.0.0.56 node2" >> /etc/hosts
[root@node1 /opt] # echo "20.0.0.57 node3" >> /etc/hosts
[root@node1 /opt] # echo "20.0.0.58 node4" >> /etc/hosts
 
----------------------上传gfsrepo软件到/opt目录下
[root@node1 /opt] # ls
fdisk.sh  rh
[root@node1 /opt] # rz -E
rz waiting to receive.
[root@node1 /opt] # ls
fdisk.sh  gfsrepo.zip  rh
[root@node1 /opt] # unzip gfsrepo.zip 
 
----------------------编写创建本地源脚本,并执行------------------------
[root@node1 opt]# vim /opt/gfs.sh
 
cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak
 
echo '[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1' > glfs.repo
 
[root@node1 opt]# chmod +x gfs.sh 
yum clean all && yum makecache
 
--------------------安装glusterd服务,并启动---------------------
[root@node1 opt]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
[root@node1 opt]# systemctl start glusterd.service
[root@node1 opt]# systemctl enable glusterd.service
[root@node1 opt]# systemctl status glusterd.service

添加节点创建集群

添加节点到存储信任池中(仅需在一个节点上操作,我这里依旧在node1节点上操作)

---------------------添加集群节点---------------------------
[root@node1 opt]# gluster peer probe node1
peer probe: success. Probe on localhost not needed
[root@node1 opt]# gluster peer probe node2
peer probe: success. 
[root@node1 opt]# gluster peer probe node3
peer probe: success. 
[root@node1 opt]# gluster peer probe node4
peer probe: success. 
 
------------------查看集群节点-------------------------------
[root@node1 opt]# gluster peer status
Number of Peers: 3
 
Hostname: node2
Uuid: d7a3589b-da11-4f39-ac2a-f34416ca88a6
State: Peer in Cluster (Connected)
 
Hostname: node3
Uuid: c57b2162-3f76-45ae-b139-fead1580a6f5
State: Peer in Cluster (Connected)
 
Hostname: node4
Uuid: d4a0dc1c-31c5-4731-a7a1-783784325458
State: Peer in Cluster (Connected)

根据规划创建卷 

========根据以下规划创建卷=========
卷名称 				卷类型				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)

创建分布式卷

创建条带卷

创建复制卷

创建分布式条带卷

创建分布式复制卷

查看创建的卷种类

客户端

客户端测试

创建文件数据

查看挂载的数据

破坏性测试

挂起 node2 节点或者关闭glusterd服务来模拟故障
[root@node2 ~]# systemctl stop glusterd.service
在客户端上查看文件是否正常

分布式卷

[root@promote test]# ll /test/dis/
总用量 163840
-rw-r--r-- 1 root root 41943040 12月 18 14:50 demo1.log
-rw-r--r-- 1 root root 41943040 12月 18 14:50 demo2.log
-rw-r--r-- 1 root root 41943040 12月 18 14:50 demo3.log
-rw-r--r-- 1 root root 41943040 12月 18 14:50 demo4.log

条带卷

[root@ test]# cd /test/stripe/		#无法访问,条带卷不具备冗余性
[root@promote stripe]# ll
总用量 0

分布式条带卷

[root@promote test]# ll /test/dis_stripe/		#无法访问,分布条带卷不具备冗余性
总用量 40960
-rw-r--r-- 1 root root 41943040 12月 18 14:51 demo5.log

分布式复制卷

[root@promote test]# ll /test/dis_rep/	#可以访问,分布式复制卷具备冗余性
总用量 204800
-rw-r--r-- 1 root root 41943040 12月 18 14:52 demo1.log
-rw-r--r-- 1 root root 41943040 12月 18 14:52 demo2.log
-rw-r--r-- 1 root root 41943040 12月 18 14:52 demo3.log
-rw-r--r-- 1 root root 41943040 12月 18 14:52 demo4.log
-rw-r--r-- 1 root root 41943040 12月 18 14:52 demo5.log

总结

复制卷(rep)、分布式复制卷(dis-rep) 具有冗余性;其余的没有

其它维护命令

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.80.100
 
7.仅允许
gluster volume set dis-rep auth.allow 192.168.80.*	  #设置192.168.80.0网段的所有IP地址都能访问dis-rep卷(分布式复制卷)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1098252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea 2022 一个工作空间下导入git项目 后 无法导入第二个git项目

idea 2022 一个工作空间下导入git项目 后 无法导入第二个git项目 如图所示 我导入了一个git项目后,菜单栏出现了一个git按钮 找不到 导入git项目的按钮了 方式1、 通过idea设置 打开全局设置 如下图 把git先改为none,保存 保存后就可以看到 VCS按钮 导入…

程序员架构修炼:架构设计概要,业务、应用、技术、数据架构

作为一个程序员,了解架构设计是非常重要的,它能够帮助你更好地理解如何构建大型软件系统,并能够满足用户的需求。在架构设计中,通常会涉及到四种不同类型的架构:业务架构、应用架构、技术架构和数据架构。 1、业务架构…

鸿蒙初体验

下载与安装DevEco Studio 在HarmonyOS应用开发学习之前,需要进行一些准备工作,首先需要完成开发工具DevEco Studio的下载与安装以及环境配置。 进入DevEco Studio下载官网,单击“立即下载”进入下载页面。 DevEco Studio提供了Windows版本和…

迅雷下载宝-openwrt-kodexplorer

下载仓库 雾渺/KODExplorer - Gitee.com 下载后解压上传文件/mnt/mmcblk0/kodexplorer ip:8080访问

NFTScan | 10.09~10.15 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2023.10.09~ 2023.10.15 NFT 热点资讯 01/ DeLabs:所有 DeGods 已重置回 Season1,用户可于本周将 y00ts 免费迁移至以太坊 10 月 9 日,DeGods & y…

分布式存储系统在智慧广电8K场景的融合应用

一、前言 广电行业的业务系统主要包含收录、编辑、播出、媒资管理、归档等环节,即通常所说的采、编、播、管、存业务,每个环节几乎都伴随着频繁的数据调取和使用。尤其在8K高清时代,视频码流已经从高清的100Mbps前进到400-2000 Mbps&#xf…

2022最新版-李宏毅机器学习深度学习课程-P14 批次(batch)与动量(momentum)

一、batch 回顾epoch、shuffle batch size大还是小?都有好处 大batchsize的好处 由于GPU有并行计算的能力,左边并不一定用时更长 反而是,batch size小的时候,要跑完一个epoch所用的update时间更长,所以时间方面的比较…

反序列化 apache mq 反序列化

1.解释一下apache mq Apache activemq 开放源代码消息中间件 java代码 操作系统只要有java虚拟机就可以执行 利用方法 2.文件配置不当 3.看版本 4.exp下载 5.exp使用 6.利用条件 7.反弹shell 加密解密 8.执行并且发送 9.利用成功 10.反弹shell成功 参照 【vul…

如何利用Web应用防火墙应对未知威胁

网络安全是一个永恒的话题,尤其是在未知威胁不断涌现的情况下。Web应用防火墙(WAF)是企业网络安全防线的重要组成部分,能够帮助企业在面对未知威胁时采取有效的防护措施。本文将探讨如何利用Web应用防火墙应对未知的网络威胁。 一…

京东商品详情API接口(item_get-获得京东商品详情接口),京东API接口系列

京东商品详情API接口(item_get-获得京东商品详情接口),京东API接口可获取到商品链接,商品ID,商品标题,商品价格,品牌名称,店铺昵称,sku规格,sku属性&#xff…

私域社群团购直播活动报名小程序开发

新零售SaaS系统,一款超级好用的私域社交团购小程序。支持团购、直播,有统计、收款、发货等功能。直播配合开团转化率更高,一款真正的私域卖货神器。 社交化电商用户踊跃参与:在卖货的同时,体现众多消费者的参与动态更…

nginx之正向代理、反向代理和负载均衡(重点)

一、nginx的两种代理方式 1、七层代理(http协议) 2、四层代理(tcp/udp流量转发) 二、四层代理和七层代理 (一)四层代理:基于tcp/udp协议的ip和端口转发数据包 1、四层代理无法获取http请求…

[Linux 基础] Linux编辑器Vim,你值得拥有

文章目录 1、Linux 软件包管理器 yum1.1 什么是软件包1.2 如何安装软件1.3 如何卸载软件 2、vim的使用2.1 vim的安装和配置2.2 vim的基本概念2.3 vim的基本操作 3、vim正常模式命令集4、vim注释与去注释5、Liunx编辑器-gcc/g使用5.1 如何使用gcc编译c程序5.2 gcc的翻译过程5.2.…

excel管理接口测试用例

闲话休扯,上需求:自动读取、执行excel里面的接口测试用例,测试完成后,返回错误结果并发送邮件通知。 分析: 1、设计excel表格 2、读取excel表格 3、拼接url,发送请求 4、汇总错误结果、发送邮件 开始实现…

字节跳动2023测试开发岗 3+1 面经+经验分享(收到offer,入职月薪27K)

现在,招聘黄金时间已经来临,在网上看了很多大佬的面经,也加了很多交流群,受到了很多朋友的提点,今天终于轮到我来分享面经啦,之前面试了几家公司,最后在十月初拿到了字节跳动测试岗的 offer&…

竞赛选题 深度学习YOLO图像视频足球和人体检测 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络4 Yolov5算法5 数据集6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习YOLO图像视频足球和人体检测 该项目较为新颖,适合作为竞赛课题方向,学长非…

ArcGIS在VUE框架中的构建思想

项目快要上线了,出乎意料的有些空闲时间。想着就把其他公司开发的一期代码里面,把关于地图方面的代码给优化一下。试运行的时候,客户说控制台有很多飘红的报错,他们很在意,虽然很不情愿,但能改的就给改了吧…

git 创建并配置 GitHub 连接密钥

前记: git svn sourcetree gitee github gitlab gitblit gitbucket gitolite gogs 版本控制 | 仓库管理 ---- 系列工程笔记. Platform:Windows 10 Git version:git version 2.32.0.windows.1 Function: git 创建并配置 GitHub…

照片全屏水印轻松去除,让你的照片焕然一新

当需要处理带有全屏水印的照片时,想要去除照片全屏水印往往是一个让人感到棘手的问题,然而幸运的是现在有一些非常出色的一键去水印工具可供选择。这些工具操作简单易用,处理速度快,去除水印的效果也非常令人满意,基本…

如何进行开关电源能效(效率)测试?纳米软件电源测试系统如何助力?

开关电源在实际工作中输入与输出转换是有一定的能量损耗的,并不会完全无损耗转换,电源效率就是用来衡量能量转换损耗的一个重要指标。那么开关电源效率要如何测试呢? 电源效率是指输出功率与输入功率之比,计算公式如下: ​​​​…