GFS分布式文件系统

一、GFS概述

1、GlusterFS的概念

  • GlusterFS:分布式文件系统
    开源的分布式文件系统

  • 组成:
    存储服务器
    客户端
    NFS/Samba 存储网关

  • 无元数据服务器

    • 数据分散存储
    • 可避免出现单点故障
  • 补充:
    FS(文件系统)的作用:从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。
    具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取
    文件系统组成:
    1)文件系统接口
    2)对对像管理的软件集合
    3)对象及属性

2、GlusterFS特点

  • 【1】扩展性和高性能
  • 【2】高可用性
  • 【3】全局统一命名空间
  • 【4】弹性卷管理
  • 【5】基于标准协议

3、GlusterFS术语

  • Brick(块存储):由主机提供的用于物理存储的专用分区,是GlusterFS中的基本存储单元,同时也是可信存储池中服务器上对外提供的存储目录。
  • Volume(逻辑卷):一个逻辑卷是一组 Brick 的集合。卷是数据存储的逻辑设备,类似于 LVM 中的逻辑卷。大部分 Gluster 管理操作是在卷上进行的。
  • FUSE:用户空间的文件系统(类别EXT4),”这是一个伪文件系统“,用户端的交换模块
  • VFS(虚拟端口):内核态的虚拟文件系统,用户是提交请求给VFS 然后VFS交给FUSH,再交给GFS客户端,最后由客户端交给远端的存储
    Glusterd(服务):是运行再存储节点的进程(客户端运行的是gluster client)GFS使用过程中整个GFS之间的交换由Gluster client 和glusterd完成

4、GlusterFS的工作流程

在这里插入图片描述

  • 1、外来一个请求,例:用户端申请创建一个文件,客户端或应用程序通过GFS的挂载点访问数据
  • 2、linux系统内容通过VFSAPI收到请求并处理
  • 3、VFS将数据递交给FUSE内核文件系统,fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client端
  • 4、GlusterFS client端收到数据后,会根据配置文件的配置对数据进行处理
  • 5、再通过网络,将数据发送给远端的ClusterFS server,并将数据写入到服务器储存设备上
  • 6、server再将数据转交给VFS伪文件系统,再由VFS进行转存处理,最后交给EXT3

5、GFS卷类型

  • 分布式卷
  • 条带卷
  • 复制卷
  • 分布式条带卷
  • 分布式复制卷
  • 条带复制卷
  • 分布式条带数据卷

6、三大基本卷的特点

①、分布式卷

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

②、条带卷

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

③、复制卷

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

二、相关维护命令

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.10.100

仅拒绝

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

三、GFS部署

集群环境准备

节点名称ip地址磁盘挂载点
Node1节点192.168.10.15/dev/sdb1
/dev/sdc1
/dev/sdd1
/dev/sde1
/data/sdb1
/data/sdc1
/data/sdd1
/data/sde1
Node2节点192.168.10.16/dev/sdb1
/dev/sdc1
/dev/sdd1
/dev/sde1
/data/sdb1
/data/sdc1
/data/sdd1
/data/sde1
Node3节点192.168.10.17/dev/sdb1
/dev/sdc1
/dev/sdd1
/dev/sde1
/data/sdb1
/data/sdc1
/data/sdd1
/data/sde1
Node4节点192.168.10.18/dev/sdb1
/dev/sdc1
/dev/sdd1
/dev/sde1
/data/sdb1
/data/sdc1
/data/sdd1
/data/sde1
客户端192.168.10.19

== 所有节点更改名称,方便识别==
== 关防火墙(所有节点和客户端)==

1、部署节点集群

#关闭防火墙
systemctl stop firewalld
setenforce 0

#磁盘分区,并进行挂载
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

cd /opt
chmod +x fdisk.sh
./fdisk.sh

#配置各个节点的/etc/hosts文件(所有节点操作)
echo "192.168.10.15 node1" >> /etc/hosts
echo "192.168.10.16 node2" >> /etc/hosts
echo "192.168.10.17 node3" >> /etc/hosts
echo "192.168.10.18 node4" >> /etc/hosts

#安装、启动GFS(所有节点操作)
unzip gfsrepo.zip
cd /etc/yum.repos.d/
mv * repos.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-server glusterfs-fuse glusterfs-rdma

systemctl start glusterd.service
systemctl enable glusterd.service
systemctl status glusterd.service

#添加DNS,进行时间同步
echo "nameserver 114.114.114.114" >> /etc/resolv.conf
ntpdate ntp1.aliyun.com

#添加节点到存储信任池中(在任意一个node中操作)
gluster peer probe node1
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4

#在每个node节点上查看群集状态
gluster peer status

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

#创建分布式卷,没有指定类型,默认创建的是分布式卷
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

#指定类型为 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

#指定类型为 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

#创建分布式条带卷
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

#创建分布式复制卷
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 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、部署gluster客户端

cd /opt
unzip gfsrepo.zip 

cd /etc/yum.repos.d/
mv * repos.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 /test/{dis,stripe,rep,dis_stripe,dis_rep}

echo "192.168.10.15 node1" >> /etc/hosts
echo "192.168.10.16 node2" >> /etc/hosts
echo "192.168.10.17 node3" >> /etc/hosts
echo "192.168.10.18 node4" >> /etc/hosts

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、测试 Gluster 文件系统

#客户端写入数据
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/rep/
cp demo* /test/dis_stripe/
cp demo* /test/dis_rep/

#查看文件分布
1、查看分布式文件分布
node1:ll -h /data/sdb1
node2:ll -h /data/sdb1
2、查看条带卷文件分布
node1:ll -h /data/sdc1
node2:ll -h /data/sdc1
3、查看复制卷文件分布
node3:ll -h /data/sdb1
node4:ll -h /data/sdb1
4、查看分布式条带卷分布
node1:ll -h /data/sdd1
node2:ll -h /data/sdd1
node3:ll -h /data/sdd1
node4:ll -h /data/sdd1
5、查看分布式复制卷分布
node1:ll -h /data/sde1
node2:ll -h /data/sde1
node3:ll -h /data/sde1
node4:ll -h /data/sde1

在这里插入图片描述
在这里插入图片描述

  • 查看卷对应的磁盘分区中的文件数据,验证结果

①、查看分布式文件分布

node1:/dev/sdb1

ll -h /data/sdb1

在这里插入图片描述
node2:/dev/sdb1

ll -h /data/sdb1

在这里插入图片描述

  • 现象:分布式只会将demo文件分开存储(5个文件不在同一磁盘分区上),不会将数据分片和备份

②、查看条带卷文件分布

node1:/dev/sdc1

ll -h /data/sdc1

在这里插入图片描述
node2:/dev/sdc1

ll -h /data/sdc1

在这里插入图片描述

  • 现象:条带卷会将每个demo文件中的数据分片存储(两个分区各有20M的文件),没有备份

③、查看复制卷文件分布

node3:/dev/sdb1

ll -h /data/sdb1

在这里插入图片描述
node4:/dev/sdb1

ll -h /data/sdb1

在这里插入图片描述
- 现象:复制卷会将每个文件放入卷中的磁盘分区中(两分区的文件一样)

④、查看分布式条带卷分布

node1:/dev/sdd1

ll -h /data/sdd1

在这里插入图片描述
node2:/dev/sdd1

ll -h /data/sdd1

在这里插入图片描述
node3:/dev/sdd1

ll -h /data/sdd1

在这里插入图片描述
node4:/dev/sdd1

ll -h /data/sdd1

在这里插入图片描述

  • 现象:分布式条带卷中,带有分布式和条带卷的特点,即将数据分片,又将文件分开存储,没有备份

⑤、查看分布式复制卷分布

node1:/dev/sde1

ll -h /data/sde1

在这里插入图片描述
node2:/dev/sde1

ll -h /data/sde1

在这里插入图片描述
node3:/dev/sde1

ll -h /data/sde1

在这里插入图片描述
node4:/dev/sde1

ll -h /data/sde1

在这里插入图片描述

  • 现象:分布式复制卷中,带有分布式和复制卷的特点,即将文件分开存储,又复制一遍文件(备份)

4、破坏性测试

  • node2和node4的服务器进行挂机来模拟故障,然后在客户端上查看其他服务器的文件是否正常

①、分布式卷数据(可查看,但缺少node2的demo5.log)

在这里插入图片描述

②、条带卷(不可查看,不具备冗余)

在这里插入图片描述

③、复制卷(可查看 ,有冗余)

在这里插入图片描述

④、分布式条带卷(不可查看,不具备冗余)

在这里插入图片描述

⑤、分布式复制卷(可查看 ,有冗余)

在这里插入图片描述

四、gluster命令

gluster [参数]
常用参数说明
peer probe 节点添加节点
peer detach 节点删除节点
peer status 节点节点状态
volume start 卷名启动卷
volume stop 卷名停止卷
volume delete 卷名删除卷
volume list列出卷
volume info查看卷信息
volume status查看卷状态

总结

分布式卷:属于文件级的RAID0,不具备容错能力,如果有一块磁盘损坏,数据就丢失
条带卷:类似RAID0,文件将被分成数据块并以轮询方式分布到Brick server上
复制卷:将文件同步到多个Brick上,属于文件RAID1,数据分数在多个Brick中
分布式条带卷:Brick server 数量是条带数兼具分布式卷和条带卷的特定
分布式复制卷:Brick server数量是镜像数,兼具分布式卷和复制卷的特点
条带复制卷:类似RAID10,同时具有条带卷和复制卷的特点
分布式条带复制卷:三种基本卷的集合

在企业中数据的安全性是非常重要的,不具备冗余的卷是不会被企业所接受,所以使用频率较高的就是冗余性好的几种,例如本章讲的复制卷、分布式复制卷,还有没讲的条带复制卷和分布式条带复制卷了。