一
、 GFS概念
Gluster File System,开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端。在传统的解决方案中,Glusterfs能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储。
由存储服务器(Brick Server)、客户端以及NFS/Samba 存储网关组成
无元数据服务器
二)、GlusterFS特点
-
扩展性和高性能
-
高可用性
-
全局统一命名空间
-
弹性卷管理
-
基于标准协议
(三)、GFS的结构
模块化堆栈式架构
模块化、堆栈式的架构
通过对模块的组合,实现复杂的功能
(四)、弹性HASH算法
通过HASH算法得到一个32位的整数
划分为N个连续的子空间,每个空间对应一个Brick
弹性HASH算法的优点
保证数据平均分布在每一个Brick中
解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈
(五)、GlusterFS工作原理(工作流程)
1、客户端或应用程序通过GlusterFS的挂载点访问数据
2、linux系统内核通过VFS API收到请求并处理
3、VFS将数据递交给FUSE内核文件系统, fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client端
4、GlusterFS client 收到数据后,client根据配置文件的配置对数据进行处理
5、通过网络将数据传递至远端的GlusterFS Server,并且将数据写入到服务器存储设备上
(六)、GFS卷类型
分布式卷
条带卷
复制卷
分布式条带卷
分布式复制卷
条带复制卷
分布式条带复制卷
1、分布式卷:
没有对文件进行分块处理
通过扩展文件属性保存HASH值
支持的底层文件系统有ext3、ext4、ZFS、XFS等
特点:
文件分布在不同的服务器,不具备冗余性
更容易和廉价地扩展卷的大小
单点故障会造成数据丢失
依赖底层的数据保护
创建命令:
gluster volume create dis-volume server1:/dir1 server2:/dir2
2、条带卷
根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
存储大文件时,性能尤为突出
不具备冗余性,类似Raid0
特点:
数据被分割成更小块分布到块服务器群中的不同条带区
分布减少了负载且更小的文件加速了存取的速度
没有数据冗余
创建命令: gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2
3、复制卷
同一文件保存一份或多分副本
复制模式因为要保存副本,所以磁盘利用率较低
多个节点上的存储空间不一致,那么将按照木桶效应取最低节点的容量作为该卷的总容量
特点:
卷中所有的服务器均保存一个完整的副本
卷的副本数量可由客户创建的时候决定
至少由两个块服务器或更多服务器
具备冗余性
创建命令: gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
4、分布式条带卷
兼顾分布式卷和条带卷的功能
主要用于大文件访问处理
至少最少需要 4 台服务器
创建命令: gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
二、GFS分布式文件系统部署步骤
1.集群环境
Node1节点:node1/192.168.179.11 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
Node2节点:node2/192.168.179.22 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
Node3节点:node3/192.168.179.33 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
Node4节点:node4/192.168.179.44 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
客户端节点为192.168.179.55
2.更改节点名称
所有节点(这里使用node1作为示范)
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
hostnamectl set-hostname node4
3.节点进行磁盘挂载,安装本地源
所有节点(这里使用node1作为示范)
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
chmod +x /opt/fdisk.sh #赋执行权限
./opt/fdisk.sh #执行脚本
4.Hosts文件创建映射关系
所有节点(这里使用node1作为示范)
echo "192.168.179.11 node1" >> /etc/hosts
echo "192.168.179.22 node2" >> /etc/hosts
echo "192.168.179.33 node3" >> /etc/hosts
echo "192.168.179.44 node4" >> /etc/hosts
5.创建GFS本地安装源
cd /opt
tar -zxvf gfsrepo.zip /opt #解压gfsrepo.zip压缩包
vim /etc/yum.repos.d/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
6.添加节点创建集群
添加节点到存储信任池中(仅需在一个节点上操作,我这里依旧在node1节点上操作)
gluster peer probe node1
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4
- gluster peer status
7.根据规划创建卷
卷名称 卷类型 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)
1.创建分布式卷
#创建分布式卷,没有指定类型,默认创建的是分布式卷
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
2.创建条带卷
#指定类型为 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
3.创建复制卷
#指定类型为 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
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
gluster volume start dis-stripe
gluster volume info dis-stripe
5.创建分布式复制卷
指定类型为 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
6.查看GFS创建列表
gluster volume list
部署Gluster客户端(192.168.179.55)
1.创建本地安装源
systemctl stop firewalld
setenforce 0
cd /opt
unzip gfsrepo.zip
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
2.创建测试目录
mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep}
3.创建节点映射
echo "192.168.179.11 node1" >> /etc/hosts
echo "192.168.179.22 node2" >> /etc/hosts
echo "192.168.179.33 node3" >> /etc/hosts
echo "192.168.179.44 node4" >> /etc/hosts
4.挂载分布式文件系统
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
5.创建测试文件并写入GFS文件系统
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
cp demo* /test/dis
cp demo* /test/stripe/
cp demo* /test/rep/
cp demo* /test/dis_stripe/
cp demo* /test/dis_rep/
验证文件分布效果
1、查看分布式文件分布(node1:/dev/sdb1、node2:/dev/sdb1)
2、查看条带卷文件分布(node1:/dev/sdc1、node2:/dev/sdc1)
3、查看复制卷文件分布 node3:/dev/sdb1、node4:/dev/sdb1
4、查看分布式条带卷分布(node1:/dev/sdd1、node2:/dev/sdd1、node3:/dev/sdd1、node4:/dev/sdd1)
5、查看分布式复制卷分布(node1:/dev/sde1、node2:/dev/sde1、node3:/dev/sde1、node4:/dev/sde1)
冗余测试
在客户端(192.168.179.55)上查看文件是否正常
1、分布式卷数据查看,不具备冗余 `分布式卷node1(/data/sdb1)、node2(/data/sdb1)`
挂起 node2 节点模拟故障
2、条带卷,无法访问,不具备冗余 `条带卷 node1(/data/sdc1)、node2(/data/sdc1)`
3、复制卷,`复制卷node3(/data/sdb1)、node4(/data/sdb1)`,关闭node4(192.168.179.44)进行测试,具有冗余
4、分布式条带卷node1(/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/sdd1),不具备冗余
5、分布式复制卷
node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1),具有冗余