目录
1、简介
⭐开源的分布式文件系统
⭐由存储服务器、客户端以及NFS/Samba存储网关组成
⭐无元数据服务器
2、GlusterFS特点
⭐扩展性和高性能(分布式特性)
⭐高可用性(冗余、容灾能力)
⭐全局统一命名空间
⭐弹性卷管理
⭐基于标准协议
3、文件系统
文件系统文件系统组成:
1、文件系统接口
2、对对像管理的软件集合
3、对象及熟悉
⭐文件系统作用:
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。
具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取
⭐文件系统的挂教使用:
除根文件系统以外的文件系统创建后要使用需要先挂载至挂载点后才可以被访问,挂载点即分区设备文件关联的某个目录文件。类比:NFS
4、GlusterFS专业术语
⭐Brick(块存储服务器):实际存储用户数据的服务器
⭐Volume:本地文件系统的"分区"
⭐FUSE:用户空间的文件系统(类别EXT4),”这是一个伪文件系统“,用户端的交换模块
⭐VFS(虚拟端口):内核态的虚拟文件系统,用户是提交请求给VFS 然后VFS交给FUSH,再交给GFS客户端,最后由客户端交给远端的存储
⭐Glusterd(服务):是运行再存储节点的进程(客户端运行的是gluster client)GFS使用过程中整个GFS之间的交换由Gluster client 和glusterd完成
注:GFS会使用到以上的虚拟文件系统
5、GlusterFS工作原理
1、客户端通过挂载点目录,将数据转交给VFS接口
2、在通过VFS接口将数据转交给FUSE伪文件系统进行格式转换
3、由于FUSE是没有转存工具直接发送到GlusterFS服务的的,所以需要转送到内存中,再由内存发送给GlusterFS服务端
4、这时就是GlusterFS服务端和和客户端吧、进程与进程质检进行对接数据传输
5、服务的在通过自己的VFS发送到自己的文件系统进行本地保存
注:x轴上方为用户态环境,可视化,下方则为系统换下内核环境
6、GlusterFS的卷类型
(1)分布式卷
⭐没有对文件进行分块处理
⭐通过扩展文件属性保存HASH值
⭐支持的底层文件系统有EXT3.EXT4.ZFS.XFS等
(2)条带卷
⭐根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
⭐存储大文件时,性能尤为突出
⭐不具备冗余性,类似Raid0
(3) 复制卷
⭐同一文件保存一份或多分副本
⭐因为要保存副本,所以磁盘利用率较低
⭐若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量
(4)分布式条带卷
⭐兼顾分布式卷和条带卷的功能
⭐主要用于大文件访问处理
⭐至少最少需要4天服务器
(5)分布式复制卷
⭐兼顾分布式卷和复制卷的功能
⭐用于需要冗余的情况
二、GlusterFS实验
1、准备5台机器
Node1:192.168.182.160
Node2:192.168.182.137
Node3:192.168.182.138
Node4:192.168.182.139
客户端:192.168.182.175
将每台机器 添加 大小为5G的磁盘
#关闭防火墙
systemctl stop firewalld
setenforce 0
2、磁盘分区,并挂载 利用
2.磁盘分区,并挂载
vim /opt/fdisk.sh
#! /bin/bash
echo "the disks exist list:"
fdisk -l |grep '磁盘 /dev/sd[a-z]'
echo "=================================================="
PS3="chose which disk you want to create:"
select VAR in `ls /dev/sd*|grep -o 'sd[b-z]'|uniq` quit
do
case $VAR in
sda)
fdisk -l /dev/sda
break ;;
sd[b-z])
#create partitions
echo "n
p
w" | fdisk /dev/$VAR
#make filesystem
mkfs.xfs -i size=512 /dev/${VAR}"1" &> /dev/null
#mount the system
mkdir -p /data/${VAR}"1" &> /dev/null
echo -e "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0\n" >> /etc/fstab
mount -a &> /dev/null
break ;;
quit)
break;;
*)
echo "wrong disk,please check again";;
esac
done
cd /opt
chmod +x fdisk.sh
./fdisk.sh
将脚本执行
#配置各个节点的/etc/hosts文件(所有节点操作)
echo "192.168.182.160 node1" >> /etc/hosts
echo "192.168.182.137 node2" >> /etc/hosts
echo "192.168.182.138 node3" >> /etc/hosts
echo "192.168.182.139 node4" >> /etc/hosts
cd /etc/yum.repos.d/
mv * repos.bak/
vim glfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
安装、启动GFS(所有节点操作)
unzip gfsrepo.zip
yum clean all && yum makecache
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
如果出现以下情况 可以先删除之前的依赖包 然后在下载
rpm -e --nodeps glusterfs-api glusterfs-libs glusterfs-fuse glusterfs-cli glusterfs glusterfs-client-xlators ##删除报错的依赖包
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
3、根据以下规划创建卷
卷名称 | 卷类型 | 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
4、 部署客户端
(1)安装客户端软件
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
cd /opt
unzip gfsrepo.zip
(2)创建挂载目录
yum -y install glusterfs glusterfs-fuse
mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep}
5、配置 /etc/hosts 文件
echo "192.168.182.160 node1" >> /etc/hosts
echo "192.168.182.137 node2" >> /etc/hosts
echo "192.168.182.138 node3" >> /etc/hosts
echo "192.168.182.139 node4" >> /etc/hosts
6、挂载 Gluster 文件系统
#临时挂载
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
Node1
Node2
Node3
Node4
7、破坏性测试
node2和node4的服务器进行挂机来模拟故障,然后在客户端上查看其他服务器的文件是否正常
(1)分布式卷数据 可以查看
(2)条带卷 不可查看
(3) 复制卷 可产查看
(4) 分布式复制卷 可查看
注:当出现以下情况是
1、需要考虑是否是 各台机子的时间是否做了同步处理
2、需要查看版本是否一致[root@client /]# rpm -qa glusterfs glusterfs-fuse
3、或查看日志报错[root@client /]# cat /var/log/glusterfs/test0