目录
一、GlusterFS
(一)、GFS概念
(二)、GlusterFS特点
(三)、常用术语
(四)、GFS的结构
(五)、弹性HASH算法
(六)、GlusterFS工作原理(工作流程)
(七)、GFS卷类型
1、分布式卷:
2、条带卷
3、复制卷
4、分布式条带卷
二、GFS分布式文件系统部署步骤
1.创建分布式卷
验证文件分布效果
冗余测试
其他维护命令
1、Brick:GFS中的存储单元,通过是一个受信存储池中的服务器的一个导出目录。可以通过主机名和目录名来标识,如’SERVER:EXPORT’
2、Volume:卷
3、FUSE:内核文件系统,Filesystem Userspace是一个可加载的内核模块,其支持非特权用户创建自己的文件系统而不需要修改内核代码。通过在用户空间运行文件系统的代码通过FUSE代码与内核进行桥接。
4、VFS:虚拟文件系统
5、Glusterd:Gluster management daemon,要在trusted storage pool中所有的服务器上运行。
1、客户端或应用程序通过GlusterFS的挂载点访问数据
2、linux系统内核通过VFS API收到请求并处理
3、VFS将数据递交给FUSE内核文件系统, fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client端
4、GlusterFS client 收到数据后,client根据配置文件的配置对数据进行处理
5、通过网络将数据传递至远端的GlusterFS Server,并且将数据写入到服务器存储设备上
没有对文件进行分块处理
通过扩展文件属性保存HASH值
支持的底层文件系统有ext3、ext4、ZFS、XFS等
特点:
文件分布在不同的服务器,不具备冗余性
更容易和廉价地扩展卷的大小
单点故障会造成数据丢失
依赖底层的数据保护
创建命令:
gluster volume create dis-volume server1:/dir1 server2:/dir2
根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
存储大文件时,性能尤为突出
不具备冗余性,类似Raid0
特点:
数据被分割成更小块分布到块服务器群中的不同条带区
分布减少了负载且更小的文件加速了存取的速度
没有数据冗余
创建命令:
gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2
同一文件保存一份或多分副本
复制模式因为要保存副本,所以磁盘利用率较低
多个节点上的存储空间不一致,那么将按照木桶效应取最低节点的容量作为该卷的总容量
特点:
卷中所有的服务器均保存一个完整的副本
卷的副本数量可由客户创建的时候决定
至少由两个块服务器或更多服务器
具备冗余性
创建命令:
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
兼顾分布式卷和条带卷的功能
主要用于大文件访问处理
至少最少需要 4 台服务器
创建命令:
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
1.集群环境
Node1节点:node1/192.168.78.11 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
Node2节点:node2/192.168.78.22 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
Node3节点:node3/192.168.78.33 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
Node4节点:node4/192.168.78.44 磁盘: /dev/sdb1 挂载点: /data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
所有节点(这里使用node1作为示范)
客户端节点:192.168.78.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.78.11 node1" >> /etc/hosts
echo "192.168.78.22 node2" >> /etc/hosts
echo "192.168.78.33 node3" >> /etc/hosts
echo "192.168.78.44 node4" >> /etc/hosts
5.创建GFS本地安装源
cd /opt
unzip gfsrepo.zip #解压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.78.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.78.11 node1" >> /etc/hosts
echo "192.168.78.22 node2" >> /etc/hosts
echo "192.168.78.33 node3" >> /etc/hosts
echo "192.168.78.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.78.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.78.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),具有冗余
服务器宕机时,在操作的时,界面时卡住不动的 需要重新连接远程,进行操作
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卷(分布式复制卷)