GFS分布式文件系统 + 实验部署

Posted kiroct

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GFS分布式文件系统 + 实验部署相关的知识,希望对你有一定的参考价值。

GlusterFS简介

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

由存储服务器、客户端以及NFS/Samba存储网关(可选,根据需要选择使用)组成。

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

MFS

传统的分布式文件系统大多通过元服务器来存储元数据,元数据包含存储节点上的目录信息、目录结构等。这样的设计在浏览目录时效率

高,但是也存在一些缺陷,例如单点故障。一旦元数据服务器出现故障,即使节点具备再高的冗余性,整个存储系统也将崩溃。GlusterFS分布式文件系统是基于无元服务器的设计,数据横向扩展能力强,具备较高的可靠性及存储效率。GlusterFS同时也是Scale-Out (横向扩展)存储解决方案Gluster的核心,在存储数据方而具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。

GlusterFS支持借助TCP/IP或InfiniBandRDMA网络(一种支持多并发链接的技术,具有高带宽、低时延、高扩展性的特点)将物理分散分布的存储资源汇聚在一起,统一提供 存储服务,并使用统一全局命名空间来管理数据。

GlusterFS特点

●扩展性和高性能

GlusterFS利用双重特性来提供高容量存储解决方案。

(1)Scale-Out架构允许通过简单地增加存储节点的方式来提高存储容量和性能(磁盘、计算和I/0资源都可以独立增加),支持10GbE和InfiniBand等高速网络互联。

(2) Gluster弹性哈希(ElasticHash) 解决了GlusterFS对元数据服务器的依赖,改善了单点故障和性能瓶颈,真正实现了并行化数据访问。GlusterFS采用弹性哈希算法在存储池中可以智能地定位任意数据分片(将数据分片存储在不同节点上),不需要查看索引或者向元数据服务器查询。

●高可用性

GlusterFS可以对文件进行自动复制,如镜像或多次复制,从而确保数据总是可以访问,甚至是在硬件故障的情况下也能正常访问。当数据出现不一致时,自我修复功能能够把数据恢复到正确的状态,数据的修复是以增量的方式在后台执行,几乎不会产生性能负载。GlusterFS可以支持所有的存储,因为它没有设计自己的私有数据文件格式,而是采用操作系统中主流标准的磁盘文件系统(如EXT3、XFS等)来存储文件,因此数据可以使用传统访问磁盘的方式被访问。

●全局统一命名空间

分布式存储中,将所有节点的命名空间整合为统一命名空间,将整个系统的所有节点的存储容量组成--个大的虛拟存储池,供前端主机访

问这些节点完成数据读写操作。

●弹性卷管理

GlusterFS通过将数据储存在逻辑卷中,逻辑卷从逻辑存储池进行独立逻辑划分而得到。

逻辑存储池可以在线进行增加和移除,不会导致业务中断。逻辑卷可以根据需求在线增长和缩减,并可以在多个节点中实现负载均衡。文件系统配置也可以实时在线进行更改并应用,从而可以适应工作负载条件变化或在线性能调优。

GlusterFS 术语

●Brick (存储块) :

指可信主机池中由主机提供的用于物理存储的专用分区,是GlusterFS中的基本存储单元,同时也是可信存储池中服务器上对外提供的存储目录。

存储目录的格式由服务器和目录的绝对路径构成,表示方法为SERVER:EXPORT, 如192. 168.80.10: /data/mydir/.

●Volume (逻辑卷) :

一个逻辑卷是一 -组Brick 的集合。卷是数据存储的逻辑设备,类似于LVM中的逻辑卷。大部分Gluster 管理操作是在卷上进行的。

●FUSE:

是一个内核模块,允许用户创建自己的文件系统,无须修改内核代码。

●VFS:

内核空间对用户空间提供的访问磁盘的接口。

●Glusterd (后台管理进程) :

在存储群集中的每个节点上都要运行。

GFS支持的其中卷格式

1、分布式卷(默认):文件通过HASH算法分布到所有Brick Server上,这种卷是GFS的基础;以文件为单位根据HASH算法散列到不同的Brick,其实只是扩大了磁盘空间,并不具备容错能力,属于文件级RAID 0

2、条带卷(默认):类似RAID 0,文件被分成数据库并以轮询的方式分布到多个Brick Server上,文件存储以数据块为单位,支持大文件存储,文件越大,读取效率越高

3、复制卷:将文件同步到多个Brick上,使其具备多个文件副本,属于文件级RAID 1,具有容错能力。因为数据分散在多个Brick中,所以读性能得到很大提升,但写性能下降

4、分布式条带卷:Brick Server数量是条带数(数据块分布的Brick数量)的倍数,兼具分布式卷和条带的特点

5、分布式复制卷:Brick Server数量是镜像数(数据副本 数量)的倍数,兼具分布式卷和复制卷的特点

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

7、分布式条带复制卷:三种基本卷的复合卷通常用于类Map Reduce应用

实验: 部署GFS 集群

关闭所有防火墙、配置好yum
node01 :192.168.206.101
node02:192.168.206.100
node03:192.168.206.13
node04:192.168.206.12
每台节点添加四块磁盘,无需太大

```html/xml
首先是更改所有节点名称,以方便识别(临时改名)
hostname node1、2、3、4
hostnamectl set-hostname 名字 #永久改名
su - #切换下环境

就展示node1节点怎么改名了
![2.png](https://s2.51cto.com/images/20220228/1646036797651443.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

```html/xml
下面是所有阶段都进行磁盘的挂载,配置本地源

vim /opt/fenqu.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

...............................
cd /opt
chmod +x fenqu.sh   #赋权
./fenqu.sh           #执行

#添加host文件
echo "192.168.206.100 node2" >> /etc/hosts
echo "192.168.206.101 node1" >> /etc/hosts
echo "192.168.206.12 node4" >> /etc/hosts
echo "192.168.206.13 node3" >> /etc/hosts

#下面是去/opt下传gfsrepo.zip 进去,然后解压安装
cd /opt
#winscp传文件
unzip gfsrepo.zip          #解压zip
然后是cd /etc/yum.repos.d/    #去配置yum来本地安装gfsrepo,联网会非常慢
vim local.repo
.................................
[glfs]
name=glfs
#baseurl=file:///mnt    #注释本地
baseurl=file:///opt/gfsrepo    #文件改成opt下的gfsrepo
enabled=1
gpgcheck=0
.......................    
yum clean all && yum makecache      

yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma   #安装gfsrepo相关东西
systemctl start glusterd  #开启服务

截图以node1为例,其他3台同理安装
先把zip文件传给opt

配置好yum仓库然后进行配置

安装glfsrepo相关组件

开启glusterd.service 服务,然后查看下状态是否开启

```html/xml
添加节点创建集群
此步骤只需要在一个节点上做就行,我坐在node2上面
gluster peer probe node1
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4

gluster peer status #查看存储信任池的状态
ps:一个节点做好信任池后,一定要在所有节点查看下状态,如果某个节点显示没连接,
请重新添加host文件,然后systemctl restart glusterd 服务,基本就解决问题了

![4.png](https://s2.51cto.com/images/20220228/1646039233176798.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

```html/xml
根据规划创建卷

卷名称                 卷类型             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)

#首先是创建分布式卷,只要在node1上面进行安装就可以了(由于gluster的存在,所以说只需要在一个节点上安装即可)
gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force  
 #后面带force是指的是强制执行

gluster volume listdis-volume

gluster volume start dis-volume

gluster volume info dis-volume

```html/xml
第二部是创建创建条带卷(node1或者node2上面做一次就行了)
#指定类型为 stripe,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是条带卷

gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force #后面带force是指的是强制执行

gluster volume start stripe-volume

gluster volume info stripe-volume


![6.png](https://s2.51cto.com/images/20220228/1646040887879057.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

```html/xml
创建复制卷(只需要在node3或者node4中随便真找一个做一个就行了)
#指定类型为 replica,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是复制卷

gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force
#后面带force是指的是强制执行

gluster volume start rep-volume

gluster volume info rep-volume

```html/xml
创建分布式条带卷(1-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
#后面带force是指的是强制执行

gluster volume start dis-stripe

gluster volume info dis-stripe

![8.png](https://s2.51cto.com/images/20220228/1646041431494535.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

```html/xml
创建分布式复制卷(1-4随便一个建点创建一个就行了)
指定类型为 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

```html/xml
部署gluster客户端 新开一个机器(192.168.206.3,新开的一台客户端机器)

#添加host文件
echo "192.168.206.100 node2" >> /etc/hosts
echo "192.168.206.101 node1" >> /etc/hosts
echo "192.168.206.12 node4" >> /etc/hosts
echo "192.168.206.13 node3" >> /etc/hosts

#下面是去/opt下传gfsrepo.zip 进去,然后解压安装
cd /opt
#winscp传文件
unzip gfsrepo.zip #解压zip
然后是cd /etc/yum.repos.d/ #去配置yum来本地安装gfsrepo,联网会非常慢
vim local.repo
.................................
[glfs]
name=glfs
#baseurl=file:///mnt #注释本地
baseurl=file:///opt/gfsrepo #文件改成opt下的gfsrepo
enabled=1
gpgcheck=0
.......................
yum clean all && yum makecache

yum -y install glusterfs glusterfs-fuse #安装gfsrepo相关东西

mkdir -p /test/dis,stripe,rep,dis_stripe,dis_rep #创建卷轴话文件

cd /test/

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

df -h #查看挂载的情况

cd /opt
dd if=/dev/zero of=/opt/demo1.log bs=1M count=40
dd if=/dev/zero of=/opt/demo2.log bs=1M count=40
dd if=/dev/zero of=/opt/demo3.log bs=1M count=40
dd if=/dev/zero of=/opt/demo4.log bs=1M count=40
dd if=/dev/zero of=/opt/demo5.log bs=1M count=40

ls -lh /opt

cp demo /test/dis
cp demo
/test/stripe/
cp demo /test/stripe/
cp demo
/test/stripe/
cp demo* /test/dis_rep/

cd /test/
tree


![10.png](https://s2.51cto.com/images/20220228/1646042903635463.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![10.1.png](https://s2.51cto.com/images/20220228/1646042905494107.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![10.2.png](https://s2.51cto.com/images/20220228/1646042908893044.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

```html/xml
检测:查看文件分布(node1、inode2)
ls -lh /data/sdb1
ll -h /data/sdb1

```html/xml
查看条带卷文件分布 (inode1、inode2)
ls -lh /data/sdc1
ll -h /data/sdc1


![11.1.png](https://s2.51cto.com/images/20220228/1646043145578477.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

```html/xml
查看复制卷文件分布(inode3、inode4)
ll -h /data/sdb1
ll -h /data/sdb1

```html/xml
查看分布式条带卷分布(1-4都看下)
ll -h /data/sdd1


```html/xml
查看分布式复制卷分布(1-4)
ll -h /data/sde1

```html/xml
冗余测试
分布式卷数据查看,缺少demo5,这是在node2上的,不具备冗余
挂起 node2 节点或者关闭glusterd服务来模拟故障

init 0 #我选择inode2直接关机


![12.png](https://s2.51cto.com/images/20220228/1646043373303373.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

```html/xml
客户端206.3查看文件是否正常
ll /test/dis

ll /test/stripe/
#条带卷,无法访问,不具备冗余

init 0   #inode4关闭
ll /test/rep/    #客户端这边进行操作
#复制卷,在node3和node4上的,关闭node4进行测试,具有冗余

ll /test/dis_stripe/
#分布式条带卷,不具备冗余

ll /test/dis_rep/
#分布式复制卷,具有冗余
##综上,带有复制数据的,数据都比较安全

可以查看。在客户端看到全部都是正常的

条带卷,无法访问,不具备冗余

补充:其他维护命令

```html/xml
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.allow 192.168.184.100

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

以上是关于GFS分布式文件系统 + 实验部署的主要内容,如果未能解决你的问题,请参考以下文章

GFS分布式文件系统(理论+实验+故障模拟)

详解 GFS分布式文件系统 (条带卷/复制卷/分布式条带卷/分布式复制卷)

GFS分布式文件系统

GFS分布式文件系统

GFS分布式文件系统简述以及GFS的服务部署案例

GFS分布式文件系统简述以及GFS的服务部署案例