GFS分布式文件系统
GlusterFS概述
简介
开源的分布式文件系统
由存储服务器、可u段以及NFS/Samba存储网关组成
无元数据服务器
特点
扩展性和高性能
高可用性
全局统一命名空间
弹性卷管理
基于标准协议
术语
Brick(存储块)(砖):
指可信主机池中由主机提供的用于物理存储的专用分区(磁盘分区),是GlusterFS中的基本存储单元,同时也是可信存储池中服务器上对外提供的存储目录。
Volum(逻辑卷):
一个逻辑卷是一组Brick的集合。卷是数据存储的逻辑设备,类似于LVM中的逻辑卷。大部分Gluster管理操作是在卷上进行的
FUSE(filesystem inuserspace):
是一个内核模块,允许用户创建自己的文件系统,无需修改内核代码
VFS:
内核空间对用户空间提供的访问磁盘的接口。(客户机访问服务器的入口接口)
Gluster(后台管理进程):
在存储集群中每个节点上都要运行。
模块化堆栈式架构
模块化,堆栈式的架构
通过对模块的组合,实现复杂的功能
工作原理
流程
客户端或应用程序通过Gluster的过载点(VFS)访问数据
linux系统内核通过VFS API收到请求并处理
VFS将数据递交给FUSE内核文件系统,FUSE文件系统则是将数据通过/dev/fuse设备文件递交给了客户机
GlusterFS client收到数据后,client根据配置文件的配置对数据进行处理
通过网络将数据传递至远端的Gluster服务器,并将数据写入到服务器的存储设备
弹性hash算法
通过hash算法得到一个32位的整数
划分为n个连续的子空间,每个空间对应一个brick
弹性hash算法的优点:
保证数据平均的分布在每一个brick中解决了对元数据服务器的依赖,进而解决单点故障以及访问瓶颈
四个brick节点的GlusterFS卷,平均分配2的32次方的区间的范围空间
访问文件时,通过计算该文件的hash值(key值),从而对应到brick存储空间
GlusterFS卷类型
分布式卷
条带卷
复制卷
分布式条带卷
分布式复制卷
分布式条带复制卷
分布式卷(异地存储)
没有对文件进行分块处理
通过扩展文件属性保存hash值
支持底层的文件系统有EXT2、EXT4、ZFS、XFS等
没有分块处理,文件只能存在于以个server中,效率不提升
特点文
件分布在不同的服务器不具备冗余性(备份)
更容易和廉价的扩展卷的大小
单点故障会造成数据丢失
依赖底层的数据保护(要进行额外的数据备份)
创建分布式卷
gluster volum create fb-volum server1:/dir1 server2:/dir2 server3:/dir3 force
#创建一个名为fb-volum的分布式卷,存储的文件将根据hash算法分布在server1、2、3:/dir1、2、3上。server1:/dir1是主机名:/挂载点
条带卷
根据偏移量将文件分成N块(N个条带点),轮询的存储在每个brick server节点
存储大文件时,性能尤为突出
不具备冗余性,类似于raid0
从多个server中同时读取文件,效率提升
特点
数据分割成更小块分布到块服务器群中的不同条带区
分布减少了负载且更小的文件加速了存取速度
没有数据冗余
创建条带卷
gluster volum create td-volum stricpe 2 transport tcp server1:/dir1 server2:/dir2 force
#创建一个名为td-volume的条带卷,文件将被分块轮询存储在server1:/dir1 server2:/dir2 两个brick中
复制卷
同一文件保存一份或多份副本(类似raid1)
因为要保存副本,所以磁盘利用率较低
若多个节点上的存储空间不一致,将按照最低容量节点的容量作为该卷的总容量
特点
卷中所有服务器均保存一个完整的副本
卷的副本数量可由客户创建的时候觉点
至少有两块服务器
具备冗余性
创建复制卷
gluster volum create fz-volum replica 2 transport tcp server1:/dir1 server2:/dir2
#创建名为fz-volum的复制卷,文件将同时存储两个副本,分别在server1:/dir1 server2:/dir2 两个brick中
分布式条带卷
兼顾分布式卷和条带卷的功能(先条带后分布)
主要用于大文件访问处理
至少需要4台服务器
创建分布式条带卷
gluster volum create ft-volum stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
#创建名为ft-volum的分布式条带卷,配置分布式条带卷时,卷重brick所包含的存储服务器数量必须是条代卷数的倍数(两倍以上)
分布式复制卷
兼顾分布式卷和复制卷的功能
用于需要冗余的情况
创建分布式复制卷
gluster volume create ff-volum replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
#创建名为ff-volum的分布式条带卷,配置分布式复制卷时,卷重brick所包含的存储服务器数量必须是条带卷数的倍数(两倍以上)
汇总
分布式:存储brick不在一个区域范围,某一个区域内brick坏了,不影响另一个区域的brick。
条带式:多个brick形成一个整体,这个整体内的任意一块brick坏了,整个条带卷不可用。
复制卷:多个brick形成一个整体,这个整体内的每块brick都有完整的副本,由此,复制卷内任意一块brick坏了,不影响复制卷使用。
GlusterFS部署
准备5台主机,分别位4台服务器和一台客户端
nd1:20.0.0.10
nd2:20.0.0.20
nd3:20.0.0.30
nd4:20.0.0.40
client:20.0.0.50
关闭所有防火墙
地址映射
在4台服务器和客户端上
vi /etc/hosts
#添加
20.0.0.10 nd1
20.0.0.20 nd2
20.0.0.30 nd3
20.0.0.40 nd4
添加gfsrepo的软件包
vi /etc/yum.repos.d/gfs.repo
[gfs]
name=gfs
baseurl=file:///root/gfsrepo
gpgcheck=0 #无验证
enabled=1 #立即启用
yum clean all #清除缓存
yum makecache #建立缓存
在服务器节点上安装软件
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
#glusterfs :软件
#glusterfs-server: 服务
#glusterfs-fuse :文件系统
#glusterfs-rdma :rdma协议
systemctl start glusterd.service #开启服务
systemctl enable glusterd.service #服务开机自启
systemctl status glusterd.service #查看服务状态
时间同步
在确认联通网络后
ntpdate ntp1.aliyun.com #与阿里云时间服务器同步
crontab -e #创建任务计划,每10分钟与阿里云进行一次时间同步
*/10 * * * * /usr/sbin/ntpdate ntp1.ailyun.com
选择nd1节点作为信任池中的信任端
在nd1上
g
luster peer probe nd2
gluster peer probe nd3
gluster peer probe nd4
在四个节点上添加4个大小为5g的硬盘,后重启
fdisk -l #查看磁盘信息
格式化
mkfs.ext4 /dev/sdb #所有的磁盘都要格式化
创建挂载点并挂载
mkdir {/bb,/cc,/dd,/ee} #创建挂载点
mount /dev/sdb /bb #挂载
mount /dev/sdc /cc
mount /dev/sdd /dd
mount /dev/sde /ee
df -Th #查看挂载情况
systemctl start glusterfsd.service #服务启动
systemctl status glusterfsd.service #查看服务状态
创建卷
创建分布式卷
nd1上
gluster volum create fb-volum nd1:/bb nd2:/bb force
gluster volume info fb-volum #查看卷的信息
gluster volume start fb-volum #开启卷
gluster volume status fb-volum #查看卷状态
创建条带卷
gluster volum create td-volum stripe 2 nd1:/cc nd2:/cc force
gluster volume info td-volum #查看卷的信息
gluster volume start td-volum #开启卷
gluster volume status td-volum #查看卷状态
创建复制卷
gluster volum create fz-volum replica 2 nd3:/bb nd4:/bb force
gluster volume info fz-volum #查看卷的信息
gluster volume start fz-volum #开启卷
gluster volume status fz-volum #查看卷状态
创建分布式条带卷
gluster volum create ft-volum stripe 2 nd1:/dd nd2:/dd nd3:/dd nd4:/dd force
gluster volume info ft-volum #查看卷的信息
gluster volume start ft-volum #开启卷
gluster volume status ft-volum #查看卷状态
创建分布式复制卷
gluster volume create ff-volum replica 2 nd1:/ee nd2:/ee nd3:/ee nd4:/ee force
gluster volume info ff-volum #查看卷的信息
gluster volume start ff-volum #开启卷
gluster volume status ff-volum #查看卷状态
gluster volume list #查看创建的卷的列表
在客户机上安装gluster,创建挂载点后挂载
yum -y install glusterfs glusterfs-fuse
mkdir {/fb,/td,/fz,/ft,/ff}
mount.glusterfs nd1:fb-volum /fb
mount.glusterfs nd1:td-volum /td
mount.glusterfs nd1:fz-volum /fz
mount.glusterfs nd1:ft-volum /ft
mount.glusterfs nd1:ff-volum /ff
df -Th #查看挂载情况
进行测试
创建测试文件
dd if=/dev/zero of=/demo1.log bs=40M count=1
dd if=/dev/zero of=/demo2.log bs=40M count=1
dd if=/dev/zero of=/demo3.log bs=40M count=1
dd if=/dev/zero of=/demo4.log bs=40M count=1
dd if=/dev/zero of=/demo5.log bs=40M count=1
cd /
ls -lh
复制文件到卷组上
cp demo* /fb
cp demo* /td
cp demo* /fz
cp demo* /ft
cp demo* /ff
查看分布式卷
nd1有4个文件
nd2上有1个文件
查看条带卷
nd1上所有文件都在,但大小只有原来的一半
nd2上所有文件都在,在大小也只有原来的一半
查看复制卷
nd3上,所有文件都在,且大小一样
nd4上,所有文件都在,且大小一样
查看分布式条带卷
nd1上,有4个文件,且文件大小为原来的一般
nd2上,与nd1相同
nd3上,只有一个文件,且大小为原来的一半
nd4上,与nd3相同
查看分布式复制卷
nd1上四个文件,且大小与原来相同
nd2上,与nd1相同
nd3上,有一个文件,大小与原来相同
nd4上,与nd3相同
文件损坏测试
停止nd2后再客户机上查看测试文件
cd /fb \ll #查看分布卷,只有1-4文件
cd /td \ll #查看条带卷,无文件
cd /ft \ll #查看分布式条带卷 ,只有5文件
cd /ff \ll #查看分布式复制卷,可以查看到全部文件
删除卷
在nd1上
gluster volume list #查看卷列表
gluster volume stop td-volum #停止分布式卷
gluster volume status td-volum #查看状态
gluster volume delete td-volum #删除卷df -Th #在客户机上查看
控制访问
拒绝某个用户访问某个卷
nd1上
gluster volume set fz-volum auth.reject 20.0.0.50
#拒绝ip为20.0.0.50的主机访问复制卷