GFS分布式文件系统实验

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/sde1Node2节点:node2/192.168.154.50	  磁盘: /dev/sdb1			挂载点: /data/sdb1/dev/sdc1					/data/sdc1/dev/sdd1					/data/sdd1/dev/sde1					/data/sde1Node3节点:node3/192.168.154.60  磁盘: /dev/sdb1			挂载点: /data/sdb1/dev/sdc1					/data/sdc1/dev/sdd1					/data/sdd1/dev/sde1					/data/sde1Node4节点: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
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/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.shcd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bakecho '[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: 3Hostname: 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 info3.查看所有卷的状态
gluster volume status
4.停止一个卷
gluster volume stop dis-stripe5.删除一个卷,注意:删除卷时,需要先停止卷,且信任池中不能有主机处于宕机状态,否则删除不成功
gluster volume delete dis-stripe6.设置卷的访问控制
#仅拒绝
gluster volume set dis-rep auth.deny 192.168.80.1007.仅允许
gluster volume set dis-rep auth.allow 192.168.80.*	  #设置192.168.80.0网段的所有IP地址都能访问dis-rep卷(分布式复制卷)

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

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

相关文章

Spring5应用之高级注解开发

作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者! 个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏:Spring5应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言Conf…

CentOS 7 部署Jellyfin详细教程

前言 Jellyfin是免费、开源的媒体服务器解决方案,它能让我们轻松地管理和访问个人媒体文件,如电影、音乐等。本文将向您介绍如何快速搭建和部署Jellyfin,并分享一些最佳实践和技巧,帮助您更好地利用这个强大的媒体服务器解决方案。…

2.MySQL表的操作

个人主页:Lei宝啊 愿所有美好如期而遇 表的操作 (1)表的创建 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 存储引擎的不同会导致创建表的文件不同。 换个引擎。 t…

xcode打包macos报错:FlutterInputs.xcfilelist 和 FlutterOutputs.xcfilelist

xcode 打包macos的时候,报错如下: Unable to load contents of the file list: ‘macos/ephemeral/FlutterInputs.xcfilelist’ ‘macos/ephemeral/FlutterOutputs.xcfilelist’ 解决方案: 我的项目macos下没有找到FlutterInputs.xcfilelis…

angular项目指定端口,实现局域网内ip访问

直接修改package.json文件 "dev": "ng serve --host 0.0.0.0 --port 8080"终端运行npm run dev启动项目。 这里就指定了使用8080端口运行项目,同时局域网内的其他电脑可以通过访问运行项目主机的ip来访问项目 例如项目运行在ip地址为192.168.2…

jmeter压测

jmeter强大到很强大 hh~也要压测go的一些东西&#xff0c;这是三年前做的东西了&#xff0c;jmeter不支持grpc调用所以写了一个spring小服务中间层&#xff1a; 具体的jmeter开始了 这里设置线程相关 <h3>调用哪个服务的哪个方法</h3> <h3>BeanShell PrePro…

喜报 | 擎创科技实力亮相2023科创会并荣获科技创新奖

近日&#xff0c;由国家互联网数据中心产业技术创新战略联盟&#xff08;NIISA&#xff09;主办的“2023第二届国际互联网产业科技创新大会暨互联网创新产品展览会”于北京圆满落幕。 擎创科技副总裁冯陈湧受邀出席本次论坛&#xff0c;并发表了“银行分布式核心智能运维体系思…

Unity3D 基础——使用 Mathf.SmoothDamp 函数制作相机的缓冲跟踪效果

使用 Mathf.SmoothDamp 函数制作相机的缓冲跟踪效果&#xff0c;让物体的移动不是那么僵硬&#xff0c;而是做减速的缓冲效果。将以下的脚本绑定在相机上&#xff0c;然后设定好 target 目标对象&#xff0c;即可看到相机的缓动效果。通过设定 smoothTime 的值&#xff0c;可以…

洗地机什么牌子好用?洗地机排名

洗地机是如今清洁工作中非常重要的设备&#xff0c;它可以提高清洁效率&#xff0c;保持地面卫生&#xff0c;并减轻人力劳动的负担&#xff0c;市面上有许多不同品牌的洗地机&#xff0c;那么洗地机哪个牌子最好用呢?下面我们来介绍一下洗地机排名&#xff0c;并分析其热门型…

DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

点云处理【三】(点云降采样)

点云降采样 第一章 点云数据采集 第二章 点云滤波 第二章 点云降采样 1. 为什么要降采样&#xff1f; 我们获得的数据量大&#xff0c;特别是几十万个以上的点云&#xff0c;里面有很多冗余数据&#xff0c;会导致处理起来比较耗时。 降采样是一种有效的减少数据、缩减计算量…

【LeetCode刷题(数据结构)】:翻转二叉树

方法一&#xff1a;递归 思路与算法 这是一道很经典的二叉树问题。显然&#xff0c;我们从根节点开始&#xff0c;递归地对树进行遍历&#xff0c;并从叶子节点先开始翻转。如果当前遍历到的节点 root\textit{root}root 的左右两棵子树都已经翻转&#xff0c;那么我们只需要交…

如何在C程序中使用libcurl库下载网页内容

概述 爬虫是一种自动获取网页内容的程序&#xff0c;它可以用于数据采集、信息分析、网站监测等多种场景。在C语言中&#xff0c;有一个非常强大和灵活的库可以用于实现爬虫功能&#xff0c;那就是libcurl。libcurl是一个支持多种协议和平台的网络传输库&#xff0c;它提供了一…

天锐绿盾透明加密、半透明加密、智能加密这三种不同加密模式的区别和适用场景——@德人合科技-公司内部核心文件数据、资料防止外泄系统

由于企事业单位海量的内部数据存储情况复杂&#xff0c;且不同公司、不同部门对于文件加密的需求各不相同&#xff0c;单一的加密系统无法满足多样化的加密需求。天锐绿盾企业加密系统提供多种不同的加密模式&#xff0c;包括透明加密、半透明加密和智能加密&#xff0c;用户可…

解码自然语言处理之 Transformers

自 2017 年推出以来&#xff0c;Transformer 已成为机器学习领域的一支重要力量&#xff0c;彻底改变了翻译和自动完成服务的功能。 最近&#xff0c;随着 OpenAI 的 ChatGPT、GPT-4 和 Meta 的 LLama 等大型语言模型的出现&#xff0c;Transformer 的受欢迎程度进一步飙升。这…

Burstormer论文阅读笔记

这是CVPR2023的一篇连拍图像修复和增强的论文&#xff0c;一作是阿联酋的默罕默德 本 扎耶得人工智能大学&#xff0c;二作是旷视科技。这些作者和CVPR2022的一篇BIPNet&#xff0c;同样是做连拍图像修复和增强的&#xff0c;是同一批。也就是说同一个方向&#xff0c;22年中了…

设计模式:简单工厂模式(C#、JAVA、JavaScript、C++、Python、Go、PHP):

简介&#xff1a; 简单工厂模式&#xff0c;它提供了一个用于创建对象的接口&#xff0c;但具体创建的对象类型可以在运行时决定。这种模式通常用于创建具有共同接口的对象&#xff0c;并且可以根据客户端代码中的参数或配置来选择要创建的具体对象类型。 在简单工厂模式中&am…

MySQL --- 聚合查询

聚合查询相当是行和行之间进行运算。 下文中的所有示例操作都是基于此表&#xff1a; 聚合函数 count(列名) select count(列名) from 表名; 统计该表中该列的行数&#xff0c;但是 null 值不会统计在内&#xff0c;但是如果写为 count(*) null 也会算进去&#xff08;就算…

轻松完成Figma导入Sketch的在线方法

众所周知&#xff0c;Figma支持Sketch文件的导入&#xff0c;但Figma不支持Sketch文件的导出&#xff0c;而Sketch不能直接打开Figma文件&#xff0c;在这种情况下&#xff0c;如何将Figma导入Sketch&#xff1f;别担心&#xff0c;其实借助免费的在线工具即时设计&#xff0c;…