GlusterFS是一个开源的分布式文件系统,Gluster借助TCP/IP网络将存储资源分散存储在网络的不同节点,在通过汇聚为客户端提供统一的资源访问,在存储方面具有很强大的横向扩展能力,通过扩展不同的节点可以支持PB级别的存储容量(tips :Bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、DB、NB);
特点:
扩展性与高性能:采用弹性哈希算法来确定数据在chunk节点中的分布情况,无须元数据服务器,实现了存储的横向扩展
高可用性:GlusterFS通过配置不同类型的卷,可以对数据进行自动复制(类似于RAID1),即使某节点故障,也不影响数据的访问;
通用性:GlusterFS没有设置独立的私有数据文件系统,而是采用以往的ext4、ext3等,数据可以通过传统的磁盘访问方式被客户端所访问;
弹性卷管理:逻辑卷的数量可以根据实际需求进行自行增加和缩减;
专业术语:
Brick(存储块):存储池中节点对外提供存储服务的目录;
Volume(逻辑卷):一个逻辑卷是一组Brick的集合,卷是数据存储的逻辑设备,类似LVM中的逻辑卷,大部分GlusterFS管理操作都是在逻辑卷上进行的;
FUSE(用户空间文件系统):是一个内核模块,用户自行创建挂载的的文件系统;
VFS(接口):内核空间对用户空间提供的访问磁盘的接口;
Glusterd(后台管理进程):在存储集群中的每个节点上都要运行;
GlusterFS工作原理;
- 首先是在客户端,用户通过glusterfs的mount point 来读写数据, 对于用户来说, 集群系统的存在对用户是完全透明的, 用户感觉不到是操作本地系统还是远端的集群系统。
- 用户的这个操作被递交给 本地linux系统的VFS来处理。
- VFS 将数据递交给FUSE 内核文件系统:在启动 glusterfs 客户端以前, 需要向系统注册一个实际的文件系统FUSE,如上图所示,该文件系统与ext3在同一个层次上面,ext3 是对实际的磁盘进行处理,而 fuse 文件系统则是将数据通过/dev/fuse 这个设备文件递交给了glusterfs client端。所以我们可以将 fuse 文件系统理解为一个代理。
- 数据被 fuse 递交给 Glusterfs client 后,client 对数据进行一些指定的处理(所谓的指定,是按照client 配置文件据来进行的一系列处理, 我们在启动glusterfs client 时 需 要 指 定 这 个 文 件 , 其 默 认 位 置 :/etc/glusterfs/client.vol)。
- 在glusterfs client的处理末端,通过网络将数据递交给 Glusterfs Server,并且将数据写入到服务器所控制的存储设备上。
GlusterFS卷的类型;
1、分布式卷
分布式卷是GlusterFS的默认卷,一个文件要么在Server1上,要么在Serve2上,在支持超大型文件也会有一定的难度
特点:
文件分布在不同的服务器,不具备冗余性;
更容易且廉价地扩展卷的大小;
单点故障会造成数据丢失;
依赖底层的数据保护;
创建方法: gluster volume create dis-volume server1:/dir1 server2:/dir2
2、条带卷
Stripd模式相当于RAID 0,在该模式下,根据偏移量将文件分成N块,轮询地存储在每个Brick Server节点。节点把每个数据块都作为普通文件存入本地文件系统中,通过扩展属性记录总块数(Stripe-count) 和每块的序号(Stripe-index),在配置时指定的条带数必须等于卷中Brick所包含的存储服务器数,在存储大文件时,性能尤为突出,但是不具备冗余性;
特点:
数据被分割成更小块分布到块服务器群中的不同;
分布减少了负载且更小的文件提高了存取速度;
没有数据冗余;
创建方法:
gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2
3、复制卷
也称为AFR(AutGilePepliatio)相当于RAID1,即同一文件保存一份或多份副本。每个节点上保存相同的内容和目录结构。复制模式因为要保存副本,所以磁盘利用率较低,复制卷时,复制数必须等于卷中Brick所包含的存储服务器数,复制卷具备冗余性,即使一个节点损坏,也不影响数据的正常使用;
特点:
卷中所有的服务器均保存一个完整的副本;
卷的副本数量可由客户创建的时候决定;
最少保证两个块服务器或更多服务器;
具备冗余效果;
创建方法:
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
4、分布式条带卷
分布式条带卷兼顾分布式卷和条带卷的功能,可以理解成为大型的条带卷,主要用于大文件访问处理,创建一个分布式条带,卷最少需要4台服务器;
创建方法:
gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
上述命令创建了一个名为dis-stripe的分布式条带卷,配置分布式条带卷时,卷中Brick所包含的存储服务器必须是条带数的倍数(大于等于2倍),如上述命令,Brick的数量为4,条带数为2;
5、分布式复制卷
分布式复制卷兼顾分布式卷和复制卷的功能,可以理解成为大型的复制卷,主要用于冗余的场景下,创建一个分布式复制卷,最少需要4块brick;
创建方法:
gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
6、条带复制卷
条带复制卷兼顾了条带卷和复制卷两者的优点,相当于RAID10,用于存储效率高,备份冗余的场景下,创建条带复制卷,最少需要四个brick;
创建方法:
gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/dir1
7、分布式条带复制卷
分布式条带复制卷将分布条带数据在复制卷集群。为了获得最佳效果,可以选择使用分布在高并发的条带复制卷环境下并行访问非常大的文件和性能是至关重要的;
总结:
分布式:数据放到不同服务器
条带式:数据被切片分配到不同服务器
复制卷:备份多分
搭建Gluster分布式文件系统实验环境
步骤:
配置主机之间的解析(在此所有主机配置相同,在此只列举data1节点的配置);
在所有data节点上安装GlusterFS(在此所有主机配置相同,在此只列举data1节点的配置);
在data1节点上进行创建集群,其他节点会同步配置;
在多个data节点创建数据存储的位置;
在data1节点创建数据存储的卷(复制卷),其他节点会同步配置;
在client客户端节点上安装gluster客户端工具并测试挂载;
client客户端节点测试存放文件;
配置主机之间的解析(在此所有主机配置相同,在此只列举data1节点的配置);
vim /etc/hosts
192.168.1.10 data1
192.168.1.11 data2
192.168.1.12 data3
192.168.1.13 client
在所有data节点上安装GlusterFS(在此所有主机配置相同,在此只列举data1节点的配置);
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install centos-release-gluster
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
systemctl start glusterd
systemctl enable glusterd
netstat -utpln |grep gluster
netstat -utpln |grep rpcbind
在data1节点上进行创建集群,其他节点会同步;
gluster peer probe data1
gluster peer probe data2
gluster peer probe data3
gluster peer probe data3
gluster peer status
在多个data节点创建数据存储的位置
mkdir /data
gluster volume info
在data1节点创建数据存储的卷(复制卷),其他节点会同步配置;
gluster volume create rep-volume replica 3 transport tcp data1:/data data2:/data data3:/data force
gluster volume info
启动该卷
gluster volume start rep-volume
在client客户端节点上安装gluster客户端工具并测试挂载;
yum install -y glusterfs glusterfs-fuse
mount -t glusterfs data1:rep-volume /mnt/
df
ls /mnt/
df -hT |tail -1
client客户端节点测试存放文件;
服务端所有节点都进行了一次备份
客户端:
touch /mnt/{1..10}.file
ls /mnt/
服务端:
ls /data
测试文件大小是否相同
客户端:
dd if=/dev/zero of=/mnt/1.txt bs=1G count=2
服务端:
扩展:Gluster的管理命令;
gluster peer status ##查看所有的节点信息
gluster peer probe name ##添加节点
gluster peer detach name ##删除节点
gluster volume create xxx ##创建卷
gluster volume info ##查看卷信息
发布者:LJH,转发请注明出处:https://www.ljh.cool/5561.html