目录
1.什么是GFS文件系统
2.分布式文件系统的特点
3.GFS术语
4.gfs卷的分类
4.1分布式卷
4.2条带卷
4.2复制卷
4.4分布式条带卷
4.5分布式复制卷
4.6条带式复制卷
4.7分布式条带复制卷
5.GlusterFS 的工作流程
6.弹性 HASH 算法
7.部署 GlusterFS 群集
7.1 准备环境
7.2 编写磁盘分区脚本
7.3 修改主机名,配置/etc/hosts文件
7.4 安装GlusterFS
7.5 添加节点到存储信任池中
7.6 创建卷
7.6.1 创建分布式卷
7.6.2 创建条带卷
7.6.3 创建复制卷
7.6.4 创建分布式条带卷
7.6.5 创建分布式复制卷
7.7 配置客户端
7.8 测试 Gluster 文件系统
1.什么是GFS文件系统开源的分布式文件系统。
没有元数据服务器组件,有助于提升整个系统的性能、可靠性和稳定性
2.分布式文件系统的特点
- 拓展性和高性能
- 高可用性
- 全局统一命名空间
- 弹性卷管理
- 基于标准协议
3.GFS术语
- brick(存储块):指可信主机池中由主机提供的用于物理存储的专用分区,是GlusterFS中的基本存储单元,同时也是可信存储池中服务器上对外提供的存储目录。
- Volume(逻辑卷):一个逻辑卷是一组 Brick 的集合。卷是数据存储的逻辑设备,类似于 LVM 中的逻辑卷。大部分 Gluster 管理操作是在卷上进行的。
- FUSE:是一个内核模块,允许用户创建自己的文件系统,无须修改内核代码。
- VFS:内核空间对用户空间提供的访问磁盘的接口。
- Glusterd:在存储群集中的每个节点上都要运行。
4.gfs卷的分类
4.1分布式卷
- brick(存储块):指可信主机池中由主机提供的用于物理存储的专用分区,是GlusterFS中的基本存储单元,同时也是可信存储池中服务器上对外提供的存储目录。
- Volume(逻辑卷):一个逻辑卷是一组 Brick 的集合。卷是数据存储的逻辑设备,类似于 LVM 中的逻辑卷。大部分 Gluster 管理操作是在卷上进行的。
- FUSE:是一个内核模块,允许用户创建自己的文件系统,无须修改内核代码。
- VFS:内核空间对用户空间提供的访问磁盘的接口。
- Glusterd:在存储群集中的每个节点上都要运行。
4.gfs卷的分类
4.1分布式卷
文件通过 HASH 算法分布到所有 Brick Server 上,这种卷是 GlusterFS 的默认卷;以文件为单位根据 HASH 算法散列到不同的 Brick,其实只是扩大了磁盘空间,如果有一块磁盘损坏,数据也将丢失,属于文件级的 RAID0, 不具有容错能力。
在该模式下,并没有对文件进行分块处理,文件直接存储在某个 Server 节点上。 由于直接使用本地文件系统进行文件存储,所以存取效率并没有提高,反而会因为网络通信的原因而有所降低。
创建一个名为dis-volume的分布式卷,文件将根据HASH分布在server1:/dir1、server2:/dir2和server3:/dir3中
gluster volume create dis-volume server1:/dir1 server2:/dir2 server3:/dir3
4.2条带卷
类似 RAID0,文件被分成数据块并以轮询的方式分布到多个 Brick Server 上,文件存储以数据块为单位,支持大文件存储, 文件越大,读取效率越高,但是不具备冗余性。
创建了一个名为stripe-volume的条带卷,文件将被分块轮询的存储在Server1:/dir1和Server2:/dir2两个Brick中
gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2
4.2复制卷
将文件同步到多个 Brick 上,使其具备多个文件副本,属于文件级 RAID 1,具有容错能力。因为数据分散在多个 Brick 中,所以读性能得到很大提升,但写性能下降。
复制卷具备冗余性,即使一个节点损坏,也不影响数据的正常使用。但因为要保存副本,所以磁盘利用率较低。
创建名为rep-volume的复制卷,文件将同时存储两个副本,分别在Server1:/dir1和Server2:/dir2两个Brick中
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
4.4分布式条带卷
兼顾分布式卷和条带卷的功能
主要用于大文件访问
至少需要4台服务器
创建一个名为dis-stripe的分布式条带卷,配置分布式的条带卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)。 Brick 的数量是 4(Server1:/dir1、Server2:/dir2、Server3:/dir3 和 Server4:/dir4),条带数为 2(stripe 2)
gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
4.5分布式复制卷
兼顾分布式和复制卷的功能
用于需要冗余的数据
#创建一个名为dis-rep的分布式复制卷,配置分布式的复制卷时,卷中Brick所包含的存储服务器数必须是复制数的倍数(>=2倍)。Brick 的数量是 4(Server1:/dir1、Server2:/dir2、Server3:/dir3 和 Server4:/dir4),复制数为 2(replica 2)
gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
4.6条带式复制卷
类似 RAID 10,同时具有条带卷和复制卷的特点。
4.7分布式条带复制卷
三种基本卷的复合卷,通常用于类 Map Reduce 应用。
5.GlusterFS 的工作流程
- 客户端或应用程序通过 GlusterFS 的挂载点访问数据。
- linux系统内核通过 VFS API 收到请求并处理。
- VFS 将数据递交给 FUSE 内核文件系统,并向系统注册一个实际的文件系统 FUSE,而 FUSE 文件系统则是将数据通过 /dev/fuse 设备文件递交给了 GlusterFS client 端。可以将 FUSE 文件系统理解为一个代理。
- GlusterFS client 收到数据后,client 根据配置文件的配置对数据进行处理。
- 经过 GlusterFS client 处理后,通过网络将数据传递至远端的 GlusterFS Server,并且将数据写入到服务器存储设备上。
6.弹性 HASH 算法
弹性 HASH 算法是 Davies-Meyer 算法的具体实现,通过 HASH 算法可以得到一个 32 位的整数范围的 hash 值,
假设逻辑卷中有 N 个存储单位 Brick,则 32 位的整数范围将被划分为 N 个连续的子空间,每个空间对应一个 Brick。
当用户或应用程序访问某一个命名空间时,通过对该命名空间计算 HASH 值,根据该 HASH 值所对应的 32 位整数空间定位数据所在的 Brick。
7.部署 GlusterFS 群集
7.1 准备环境
| 节点名 | 地址 | 磁盘 | 挂载点 |
| node1 | 192.18.112.97 | /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 | /data/sdb1 /data/sdc1 /data/sdd1 /data/sde1 |
| node2 | 192.18.112.99 | /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 | /data/sdb1 /data/sdc1 /data/sdd1 /data/sde1 |
| node3 | 192.18.112.100 | /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 | /data/sdb1 /data/sdc1 /data/sdd1 /data/sde1 |
| node4 | 192.18.112.101 | /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 | /data/sdb1 /data/sdc1 /data/sdd1 /data/sde1 |
7.2 编写磁盘分区脚本
vim /opt/fdisk.sh
#!/bin/bash
NEWDEV=`ls /dev/sd* | grep -o 'sd[b-z]' | uniq`
#提取磁盘名称
for VAR in $NEWDEV
do
echo -e "nnpnnnnwn" | 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
cd /opt/
./fdisk.sh
7.3 修改主机名,配置/etc/hosts文件
在各个节点进行相同配置
#以Node1节点为例: hostnamectl set-hostname node1 su echo "192.168.112.97 node1" >> /etc/hosts echo "192.168.112.99 node2" >> /etc/hosts echo "192.168.112.100 node3" >> /etc/hosts echo "192.168.112.101 node4" >> /etc/hosts
7.4 安装GlusterFS
在各个节点上进行配置
#将gfsrepo 软件上传到/opt目录下 cd /etc/yum.repos.d/ mkdir repo.bak mv *.repo repo.bak vim glfs.repo [glfs] name=glfs baseurl=file:///opt/gfsrepo gpgcheck=0 enabled=1 yum clean all && yum makecache #yum -y install centos-release-gluster #如采用官方 YUM 源安装,可以直接指向互联网仓库 yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma systemctl start glusterd.service systemctl enable glusterd.service systemctl status glusterd.service
7.5 添加节点到存储信任池中
在 node1 节点上操作
gluster peer probe node1 gluster peer probe node2 gluster peer probe node3 gluster peer probe node4
查看gluster 集群状态
gluster peer status
7.6 创建卷
7.6.1 创建分布式卷
分布式卷包括:
- 节点1:/data/sdb1
- 节点2:/data/sdb1
- 节点3:/data/sdb1
- 节点4:/data/sdb1
gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb2 node3:/data/sdb3 node3:/data/sdb4 force
查看已创建卷的列表
gluster volume list
启动分布式卷及查看详细信息
gluster volume start dis-volume gluster volume info dis-volume
7.6.2 创建条带卷
gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
#创建条带卷
gluster volume start stripe-volume
#启动条带卷
gluster volume info stripe-volume
#查看详情
7.6.3 创建复制卷
gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force
#创建
gluster volume start rep-volume
#启动
gluster volume info rep-volume
#查看详情
7.6.4 创建分布式条带卷
gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1node3:/data/sdd1 node4:/data/sdd1 force
#创建
gluster volume start dis-stripe
#启动
gluster volume info dis-stripe
#查看
7.6.5 创建分布式复制卷
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
#查看
最后查看一下刚刚创建的卷
7.7 配置客户端
安装软件,并将节点1创建的卷 ,挂载到客户端服务器
1.安装客户端软件
#将gfsrepo 软件上传到/opt目下
cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak
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}
ls /test
3.配置 /etc/hosts 文件
echo "192.168.112.97 node1" >> /etc/hosts
echo "192.168.112.99 node2" >> /etc/hosts
echo "192.168.112.100 node3" >> /etc/hosts
echo "192.168.112.101 node4" >> /etc/hosts
4.挂载 Gluster 文件系统
#临时挂载
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



