GFS
介绍
GlusterFS简介
开源的分布式文件系统
由存储服务器、客户端以及NFS/Samba 存储网关组成
无元数据服务器
GlusterFS特点
扩展性和高性能
高可用性
全局统一命名空间
弹性卷管理
基于标准协议
GlusterFS术语
Brick
Volume
FUSE
VFS
Glusterd
GlusterFS架构
模块化、堆栈式的架构
通过对模块的组合,实现复杂的功能
GlusterFS工作原理
GlusterFS工作流程
客户端或应用程序通过GlusterFS的挂载点访问数据
linux系统内核通过VFS API收到请求并处理
VFS将数据递交给FUSE内核文件系统,fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client端
GlusterFS client收到数据后,client根据配置文件的配置对数据进行处理
通过网络将数据传递至远端的GlusterFS Server,并且将数据写入到服务器存储设备上
弹性HASH算法
通过HASH算法得到一个32位的整数
划分为N个连续的子空间,每个空间对应一个Brick(存储块)
弹性HASH算法的优点
保证数据平均分布在每一个Brick中
解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈
GlusterFS的卷类型
■ 分布式卷
■ 条带卷
■ 复制卷
■ 分布式条带卷
■ 分布式复制卷
■ 条带复制卷
■ 分布式条带复制卷
分布式卷
没有对文件进行分块处理
通过扩展文件属性保存HASH值
支持的底层文件系统有EXT3、EXT4、ZFS、XFS等
分布式卷的特点:
文件分布在不同的服务器,不具备冗余性
更容易和廉价地扩展卷的大小
单点故障会造成数据丢失
依赖底层的数据保护
条带卷
根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
存储大文件时,性能尤为突出
不具备冗余性,类似Raid0
条带卷特点:
数据被分割成更小块分布到块服务器群中的不同条带区
分布减少了负载且更小的文件加速了存取的速度
没有数据冗余
复制卷
同一文件保存一份或多分副本
因为要保存副本,所以磁盘利用率较低
若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量
分布式条带卷
兼顾分布式卷和条带卷的功能
主要用于大文件访问处理
至少最少需要4台服务器
分布式复制卷
兼顾分布式卷和复制卷的功能
用于需要冗余的情况
GlusterFS部署
这边用到四台centos7.4版本机器,每台机器原本一块硬盘(装机的时候都装的),另外每台机器再加四块硬盘。
IP地址分别为:20.0.0.10
20.0.0.20
20.0.0.30
20.0.0.40
我们要在每台节点都设置主机名,方便管理,并设置好映射关系(4个节点都做)
下面只做一台的演示:
[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# su
[root@node1 ~]# vim /etc/hosts ##做映射
20.0.0.10 node1
20.0.0.20 node2
20.0.0.30 node3
20.0.0.40 node4
配置yum源,用线网源也行,我这边用的是本地有的源放在/abc目录下
[root@node1 ~]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# mv C* backup/
[root@node1 yum.repos.d]# vim GLFS.repo
[GLFS]
name=glfs
baseurl=file:///abc/glfs
gpgcheck=0
enabled=1
然后去做磁盘分割,一台一台搞的话太麻烦了,我这边用的shell脚本。每台机器刷一下就行了。
#!/bin/bash
for k in $(ls /dev/sd[b-z])
do
echo -e "n\np\n\n\n\nw\n" |fdisk $V
mkfs.xfs -i size=512 ${k}1 &>/dev/null
sleep 1
M=$(echo "$V" |awk -F "/" '{print $3}')
mkdir -p /data/${M}1 &>/dev/null
echo -e "${k}1 /data/${M}1 xfs defaults 0 0\n" >>/etc/fstab
mount -a &>/dev/null
done
安装gluster服务器,并设时间同步(4个节点都做)
[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
[root@node1 ~]# systemctl enable glusterd
[root@node1 ~]# systemctl start glusterd
[root@node1 ~]# ntpdate ntp1.aliyun.com
添加另外三台到存储池(只需要在其中一个节点做即可,另外三个自动匹配)
[root@node1 ~]# gluster peer probe node2
peer probe: success.
[root@node1 ~]# gluster peer probe node3
peer probe: success.
[root@node1 ~]# gluster peer probe node4
peer probe: success.
[root@node1 ~]# gluster peer status ##查看分布式存储邻居状态,会显示其他三个节点
Number of Peers: 3 ##成员为3
创建卷
创建分布式卷
创建一个名为dis-vol的分布式卷,文件将根据HASH分布在node1:/data/sdb1和node2:/data/sdb1中
[root@node1 ~]# gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force
[root@node1 ~]# gluster volume start dis-vol
创建条带卷
创建一个名为Stripe-vol的条带卷,文件将被分块轮询的存储在node1:/data/sdc1和node1:/data/sdc2两个Brick中
[root@node1 ~]# gluster volume create stripe-vol stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
[root@node1 ~]# gluster volume start stripe-vol
创建复制卷
创建名为rep-vol的复制卷,文件将同时存储两个副本,分别在node3:/data/sdb1 node4:/data/sdb1两个Brick中
[root@node1 ~]# gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force
[root@node1 ~]# gluster volume start rep-vol
创建分布式条带卷
创建名为dis-stripe的分布式条带卷,配置分布式的条带卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)
[root@node1 ~]# gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
[root@node1 ~]# gluster volume start dis-stripe
创建分布式复制卷
创建名为dis-rep的分布式复制卷,配置分布式复制卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)
[root@node1 ~]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
[root@node1 ~]# gluster volume start dis-rep
删除卷
要先停止才能删除
[root@node1 ~]# gluster volume stop 卷名
[root@node1 ~]# gluster volume delete 卷名