ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

GFS文件系统存储

2021-11-22 21:32:39  阅读:195  来源: 互联网

标签:存储 GFS 文件系统 volume stripe data dis


目录

一、GFS文件系统

1.组成

2.文件系统作用

3.文件系统的挂载使用

二、GFS分布式文件系统

1.简介

2.元数据服务器的作用

3.GlusterFS特点

4.GlusterFS术语

三、GlusterFS模块化堆栈式架构

1.模块化

2.堆栈式架构设计

3.模块

四、GFS工作流程

1.GFS-server端

2.GFS-client端

3.网络通讯

4.详细流程

5.读取过程

五、配置GFS

1.基本设置

2.安装GFS分布式文件系统(所有节点)

3. 添加存储信任池(只在节点1操作即可)

4.创建卷

5.客户端操作

6.验证gluster文件系统

7.破坏分布式文件系统进行测试


一、GFS文件系统

1.组成

①接口:文件系统接口

②功能模块:对对象管理的软件合集

③对象及属性

2.文件系统作用

从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。

具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取

3.文件系统的挂载使用

除根文件系统以外的文件系统创建后要使用需要先挂载至挂载点后才可以被访问,挂载点即分区设备文件关联的某个目录文件类比:NFS

二、GFS分布式文件系统

主要是用于存储、管理文件(保存)时使用

1.简介

①开源的分布式文件系统

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

③无元数据服务器

2.元数据服务器的作用

存储元数据,主要时定位文件的位置、索引等信息

当元数据服务器文件系统中,如果元数据损坏,会直接导致文件系统不可用(典型的单点故障)

而GFS文件系统会把文件分布在各个服务器上,并且可以做到备份,即使当一个服务器故障,也可以从别的服务器上获取数据

3.GlusterFS特点

①扩展性和高性能(分布式)

②高可用性(分布式特点)

③全局统一命名空间:名称空间都是独立隔离的,与其他名称空间互相

④弹性卷管理:分布式、条带、分布式条带、分布式复制、条带复制

⑤基于标准协议

4.GlusterFS术语

①Brick存储服务器:实际存储用户数据的服务器

②Volume:本地文件系统的"分区"

③FUSE:FUSE :用户空间的文件系统(类比ExT4),"这是一个伪文件系统”, 以本地文件系统为例,用户想要读写一个文件,会借助于EXT4文件系统,然后把数据写在磁盘上而如果是远端的GFs,客户端的请求则应该交给USE(为文件系统),就可以实现跨界点存储在cFs上FUSE(用户空间的文件系统)伪文件系统用户端的交互模块

④VFs(虚拟端口):内核态的虚拟文件系统,用户是先提交请求交给ves然后vrs交给PUs再交给GFS客户端,最后由客户端交给远端的存储

⑤glusterd(服务):是运行在存储节点的进程

小结:使用GFS 会使用到以上的虚拟文件系统

三、GlusterFS模块化堆栈式架构

1.模块化

类似linux编译安装

很多功能都可以做定制的,通常都是通过软件开发的方式封装为模块,按需使用/不适用

GlusterFS也是这个思想,把功能封装为一个个模块,通过加戟/调用/启用的方式就可以对应的功能

2.堆栈式架构设计

通过对模块不同功能的组合来实现复杂功能

3.模块

①VFS:虚拟的内核文件系统,通过VFS的API接受请求、处理请求(场景:根据请求,加载以下模块)

②I/O cache: I/O缓存

③read ahead:内核文件预读

④distribute/ stripe:分布式、条带卷

通过加载以上三个模块,然后联和多个client端,组成所需要的例如:分布式卷、条带卷等

⑤gige:千兆网/千兆接口

⑥TCP/IP:网络协议

⑦infiniBand::网络协议,与TCP/IP相比,TcP/Te具有转发丢失数据包的特性,基于此通讯协议可能导致通讯变慢,而IB使用基于信任的、流控制的机制来确保连接完整性,数据包丢失几率小。

⑧RDMA:负责数据传输,有一种数据传输协议,功能:为了解决传输中客户端与服务器端数据处理的延迟

⑨POSIX:可移植操作系统接口,主要解决不同操作系统间的移植性

然后再转换为逻辑存储(EXT4 +BRICK)

以上架构模式可以提高GFs的工作效率

Application:客户端或应用程序通过GlusterFSync的挂载点访问数据

VFS:linux系统内核通过VFS API收到请求并处理

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

GlusterFS Client:通过网络将数据传递至远端的GlusterFS Server,并且写入到服务器存储设备上

read ahead :内核文件预读

四、GFS工作流程

客户端在本地发出读写请求,然后交由VFS的API接受请求,接受请求后会交给FUSE(内核伪文件系统),FUSE可以模拟操作系统,所以可以对文件系统进行转存,转存的设备位置为:/dev/fuse(用于传输的设备-虚拟设备文件)—》交给GFS客户端,client会根据配置文件对数据进行处理,然后再通过TCP网络发送到VFS服务端,并且将数据写到服务器存储设备上

1.GFS-server端

功能划分

①卷的类型

定义要使用的存储类型:分布式、复制、条带

②存储管理

主要用于创建卷,开启卷,关闭卷

③I/O调用

用于存储数据,读取数据

④与GFS-Client端对接

2.GFS-client端

①用户通过系统、服务等(用户态模式)模式下,存取数据(读取数据)

②写入的数据,使用GFS挂载的形式完成(网络挂载samba/NFS)

③数据的写入由GFS-client转存到GFS-server端(对应的卷中)

3.网络通讯

infinlband

RDMA:面向连接的传输协议,主要是能保证数据完成性,丢包率低(以后的服务中可以做为跨节点共享内存资源的协议)

TCP/IP:建立连接

4.详细流程

首先GFS-Client端服务器的/data目录已把GFS-Server端的分布式卷、复制卷等挂载上,当有数据进来的时候,会由VFS接口的API接受,然后将数据交给FUSE(内核伪文件系统),

FUSE可以模拟操作系统,将数据进行转存到虚拟目录/dev/fuse相当于是内存,GFS客户端Client会根据配置文件对数据进行处理,然后再通过TCP/IP、RDMA网络发送到GFS-Server端,GFS-Server端接收到数据后,会通过配置好的卷的类型进行存储,存储到对应的节点上。

5.读取过程

交由VFS的API接受请求–>组合功能模块,将数据交给FUSE(内核伪文件系统)

FUSE在/dev/fuse (用于传输的设备-虚拟设备文件)查询缓存,执行page函数读取(read)内存,若缓存有,则返回客户端

若没有缓存,GFS客户端会去GFS服务端获取数据,GFS服务端通过VFS接口去本地读取缓存

再把缓存存储在/dev/fuse,读取了缓存数据之后再通过VFS返回给客户端

五、配置GFS

环境分布

角色       IP地址                     磁盘

node1     192.168.226.128                   5GX4

node2     192.168.226.129                   5GX4

node3     192.168.226.130                   5GX4

node4     192.168.226.131                   5GX4

1.基本设置

①添加磁盘

每个node添加4块磁盘

添加完之后输入echo "- - -" > /sys/class/scsi_host/host0/scan,免重启装载磁盘

②使用脚本对硬盘进行分区

#!/bin/bash

dev=`ls /dev/sd*|grep -o 'sd[b-z]' | uniq`

for var in $dev

do

echo -e "n\np\n\n\n\nw\n" | fdisk /dev/$var

mkfs -t xfs /dev/${var}1

mkdir -p /data/${var}1 &> /dev/null

echo -e "/dev/${var}1 /data/${var}1 xfs defaults 0 0" >>/etc/fstab

done

mount -a &> /dev/null

③建立地址映射,所有节点都操作

echo "192.168.72.21 node1" >> /etc/hosts

echo "192.168.72.22 node2" >> /etc/hosts

echo "192.168.72.23 node3" >> /etc/hosts

echo "192.168.72.24 node4" >> /etc/hosts

echo “192.168.72.25 client” >> /etc/hosts

2.安装GFS分布式文件系统(所有节点)

将gfsrepo压缩包放在opt目录下,并解压

unzip gfsrepo.zip

创建yum本地源

cd /etc/yum.repos.d/

mkdir bak

mv Cent* bak/

echo "[glfs]

name=glfs

baseurl=file:///opt/gfsrepo

gpgcheck=1

enabled=1

" >> gfs.repo

yum clean all && yum makecache

安装gluster

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

开启gluster服务,并设置开机自启

systemctl start glusterd.service

systemctl enable glusterd.service

systemctl status glusterd.service

3. 添加存储信任池(只在节点1操作即可)

gluster peer probe node2

gluster peer probe node3

gluster peer probe node4

gluster peer status

4.创建卷

规划

卷名称                         卷类型                         节点

dis-volume                  分布卷                         node1(/data/sdb1)、node2(/data/sdb1)

stripe-volume              条带卷                         node1(/data/sdc1)、node2(/data/sdc1)

rep-volume                 复制卷                         node3(/data/sdb1)、node2(/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

利用node1和node2上的两块磁盘创建,dis-volume为磁盘名,force表示强制

启动dis-volume卷

gluster volume start dis-volume

查看dis-volume卷的状态

gluster volume info dis-volume

②创建条带卷

指定的类型为 stripe,数值为2,2个盘

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

启动stripe-volume条带卷

gluster volume start stripe-volume

查看stripe-volume条带卷信息

gluster volume info stripe-volume

③创建复制卷

指定的类型为replica,数值为2,2个盘

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

启动rep-volume复制卷

gluster volume start rep-volume

查看rep-volume复制卷的信息

gluster volume info rep-volume

④创建分布式条带卷(四个节点)

指定的类型为stripe,数值为2,4个盘

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

启动dis-stripe分布式条带卷

gluster volume start dis-stripe

查看dis-stripe分布式条带卷

gluster volume info dis-stripe

⑤创建分布式复制卷

指定的类型为replica,数值为2,4个盘

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

开启dis-rep分布式复制卷

gluster volume start dis-rep

查看dis-rep分布式复制卷

gluster volume info dis-rep

5.客户端操作

在客户端上进行操作,node1上创建了五种类型的卷后,需要在客户端上把这些卷挂载到指定的五个目录内

①安装客户端软件

unzip gfsrepo.zip

创建本地yum源

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

②创建挂载目录

创建挂载目录

mkdir -p /text/{dis,stripe,rep,dis-stripe,dis-rep}

ls /text

③配置hosts

echo "192.168.72.21 node1" >> /etc/hosts

echo "192.168.72.22 node2" >> /etc/hosts

echo "192.168.72.23 node3" >> /etc/hosts

echo "192.168.72.24 node4" >> /etc/hosts

echo "192.168.72.25 client" >> /etc/hosts

④挂载gluster文件系统

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

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

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

mount.glusterfs node1:dis-stripe /text/dis-stripe

mount.glusterfs node1:dis-rep /text/dis-rep

⑤在客户端,卷中写入文件

创建一个文件夹,写入文件,方便操作

mkdir /abc

cd /abc

dd if=/dev/zero of=/abc/test1.log bs=1M count=200

dd if=/dev/zero of=/abc/test2.log bs=1M count=200

dd if=/dev/zero of=/abc/test3.log bs=1M count=200

dd if=/dev/zero of=/abc/test4.log bs=1M count=200

dd if=/dev/zero of=/abc/test5.log bs=1M count=200

ls -lh /abc

cp test* /text/dis

cp test* /text/stripe

cp test* /text/rep

cp test* /text/dis-stripe

cp test* /text/dis-rep

6.验证gluster文件系统

①查看分布式文件分布

ls -lh /data/sdb1/

node1

node2

②查看条带卷文件分布

ls -lh /data/sdc1                  数据被分为50%,没有副本,没有冗余

node1

node2

③查看复制卷分布

复制卷在node3、node4上

ls -lh /data/sdb1                 没有被分片,但是有副本,有冗余

node3

node4

④查看分布式条带分布

ls -lh /data/sdd1                 本分成了50%,没有备份,没有冗余

node1

node2

node3

node4

⑤查看分布式复制卷分布

ls -lh /data/sde1                         没有被分片,但是有副本,有冗余

node1

node2

node3

node4

7.破坏分布式文件系统进行测试

关闭gluster服务的node2节点模拟故障

systemctl stop glusterd

标签:存储,GFS,文件系统,volume,stripe,data,dis
来源: https://blog.csdn.net/YsDou/article/details/121480910

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有