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,同时具有条带卷和复制卷的特点
分布式条带复制卷:三种基本卷的集合
在企业中数据的安全性是非常重要的,不具备冗余的卷是不会被企业所接受,所以使用频率较高的就是冗余性好的几种,例如本章讲的复制卷、分布式复制卷,还有没讲的条带复制卷和分布式条带复制卷了。