目录
6、测试Gluster文件系统(在Gluster客户端进行操作)
1、挂起 node2 节点或者关闭glusterd服务来模拟故障
前言
GFS是一个可扩展的分布式文件系统,可以将数据存储在不同的节点服务器上,达到硬件磁盘阵列的效果,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体性能较高的服务。
一、GlusterFS概述
1、GlusterFS简介
开源的分布式文件系统
由存储服务器、客户端以及NFS/Samba存储网关组成
无元数据服务器
2、GFS数据流向
①mysql服务器——》存储数据到挂载目录中/data
②mysql 数据会优先交给内核的文件系统处理—》GFS客户端处理(本地)
③GFS客户端会和GFS服务端进行交互,GFS服务端接收到数据,然后再通过挂载的卷的类型,对应保存在后端block块节点服务器上
3、文件系统组成
①文件系统接口
②对对像管理的软件集合
③对象及属性
文件系统作用:从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取
4、GFS是由三部分组成(组件)
①存储服务器
②客户端
③NFS / Samba存储网关组成
客户端的定位比较重要,因为他是无元数据服务器的
PS:元数据服务器的作用:存储元数据,帮用户定位文件的位置、索引等信息。有元数据服务器文件系统中,如果元数据损坏,会直接导致文件系统不可用(单点故障-服务器定位)
存储服务器,存储节点信息
分布式如何定位文件定位索引?对此,客户端是一个很关健的组件
5、GlusterFS特点
① 扩展性和高性能
②高可用性
③全局统一命名空间
④弹性卷管理
⑤基于标准协议
6、GlusterFS术语
①Brick
存储服务器:实际存储用户数据的服务器
②Volume
本地文件系统的”分区”
卷——》分布式、条带、复制、分布式复制、分布式条带
③FUSE
FUSE(用户空间的文件系统)伪文件系统,用户端的交互模块
mysql端,用户写入的数据,需要借助于GFS-CLIENT转存到gfs-server端
④VFS
内核态的虚拟文件系统,用户是先提交请求交给VFS然后VFS交给FUSE再交给GFS客户端,最后由客户端交给远端的存储
内核态的伪文件系统——》做为mysql服务器——》gfs客户端——》gfs服务端
⑤Glusterd
glusterd(服务)是运行在存储节点的进程
客户端运行的是gluster client
整个GFS之间的交互是由Gluster client 和glusterd完成的(GFS使用过程)
小结:使用GFs 会使用到以上的虚拟文件系统
7、模块化堆栈式架构
模块化、堆栈式的架构
8、GFS 工作流程
① 客户端或应用程序通过 GlusterFS 的挂载点访问数据
② linux系统内核通过 VFS API 收到请求并处理
③ VFS 将数据递交给 FUSE 内核文件系统,并向系统注册一个实际的文件系统 FUSE,而 FUSE 文件系统则是将数据通过 /dev/fuse 设备文件递交给了 GlusterFS client 端。可以将 FUSE 文件系统理解为一个代理
④ GlusterFS client 收到数据后,client 根据配置文件的配置对数据进行处理
⑤ 经过 GlusterFS client 处理后,通过网络将数据传递至远端的 GlusterFS Server,并且将数据写入到服务器存储设备上
简单来说:客户端在本地发出读写请求,然后交由VFs 的API接受请求,接受请求后会交给FUSE((内核伪文件系统),FUSE可以模拟操作系统,所以可以对文件系统进行转存,转存的设备位置为:/dev/fuse(用于传输的设备-虚拟设备文件)—》交给GFS客户端,client会根据配置文件对数据进行处理,然后再通过TCP 网络发送到GFS服务端,并且将数据写到服务器存储设备上
GFS-server 端功能模块的划分:
GFS-client 端
使用到的协议
gige:千兆网/千兆接口
TCP/IP:网络协议
InfiniBand:网络协议,与TCP/IP相比,TCP/IP具有转发丢失数据包的特性,基于此通讯协议可能导致通讯变慢,而IB使用基于信任的、流控制的机制来确保连接完整性,数据包丢失几率小。
RDMA:负责数据传输,有一种数据传输协议,功能:为了解决传输中客户端与服务器端数据处理的延迟
Application:客户端或应用程序通过GlusterFSync的挂载点访问数据·
9、在多个后端存储中如何定位文件:
10、平均分配的好处:
二、GlusterFS的卷类型
1、分布式卷(默认):文件通过HASH算法分布到所有Brick Server 上,这种卷是Glusterf 的基础;以文件为单位根据HASH算法散列到不同的 Brick,其实只是扩大了磁盘空间,如果有一块磁盘损坏,数据也将丢失,属于文件级的 RAID 0,不具有容错能力。
2、条带卷(默认):类似RAID0,文件被分成数据块并以轮询的方式分布到多个 Brick
server上,文件存储以数据块为单位,支持大文件存储,文件越大,读取效率越高。
特点:数据被分割成更小块分布到块服务器群中的不同条带区;分布减少了负载且更小的文件加速了存取的速度;没有数据冗余
3、复制卷 (Replica volume):将文件同步到多个 Brick 上,使其具备多个文件副本,
属于文件级RAID1,具有容错能力。因为数据分散在多个 Brick 中,所以读性能得到很大提升,但写性能下降。
特点:同一文件保存一份或多分副本;因为要保存副本,所以磁盘利用率较低;若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量
4、分布式条带卷 (Distribute stripe volume) : Brick Server 数量是条带数(数据块分布的 Brick数量)的倍数,兼具分布式卷和条带卷的特点。
特点:兼顾分布式卷和条带卷的功能;主要用于大文件访问处理;至少最少需要4台服务器
5、分布式复制卷 (Distribute Replica volume):Brick Server 数量是镜像数(数据副本数量)的倍数,兼具分布式卷和复制卷的特点
6、条带复制卷 (stripe Replica volume):类似RAID 10,同时具有条带卷和复制卷的特点
7、分布式条带复制卷 (Distribute stripe Replicavolume):三种基本卷的复合卷,通常用于类Map Reduce应用
三、部署GlusterFS 群集
每台虚拟机需要添加4块4G磁盘 Node1节点:node1/192.168.159.11 磁盘:/dev/sdb1 挂载点:/data/sdb1 /dev/sdc1 /data/sdc1 /dev/sdd1 /data/sdd1 /dev/sde1 /data/sde1 Node2节点:node2/192.168.159.20 磁盘:/dev/sdb1 挂载点:/data/sdb1 /dev/sdc1 /data/sdc1 /dev/sdd1 /data/sdd1 /dev/sde1 /data/sde1 Node3节点:node3/192.168.159.50 磁盘:/dev/sdb1 挂载点:/data/sdb1 /dev/sdc1 /data/sdc1 /dev/sdd1 /data/sdd1 /dev/sde1 /data/sde1 Node4节点:node4/192.168.159.70 磁盘:/dev/sdb1 挂载点:/data/sdb1 /dev/sdc1 /data/sdc1 /dev/sdd1 /data/sdd1 /dev/sde1 /data/sde1 Client节点:192.168.159.80
1、准备环境(所有node节点上操作)
1-1、关闭防火墙
systemctl stop firewalld systemctl disable firewalld setenforce 0
1-2、修改主机名
#以nodel节点为例: [root@localhost ~]# hostnamectl set-hostname node1 [root@localhost ~]# su [root@node1 ~]#
1-3、磁盘分区,并挂载
cd /opt vim fdisk.sh #! /bin/bash echo "the disks exist list:" grep出系统所带磁盘 fdisk -l |grep '磁盘 /dev/sd[a-z]' echo "==================================================" PS3="chose which disk you want to create:" 选择需要创建的磁盘编号 select VAR in `ls /dev/sd*|grep -o 'sd[b-z]'|uniq` quit do case $VAR in sda) 本地磁盘就退出case语句 fdisk -l /dev/sda break ;; sd[b-z]) #create partitions echo "n 创建磁盘 p w" | fdisk /dev/$VAR #make filesystem 格式化 mkfs.xfs -i size=512 /dev/${VAR}"1" &> /dev/null #mount the system mkdir -p /data/${VAR}"1" &> /dev/null 永久挂载 echo -e "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0\n" >> /etc/fstab 使得挂载生效 mount -a &> /dev/null break ;; quit) break;; *) echo "wrong disk,please check again";; esac done
chmod +x fdisk.sh sh -x fdisk.sh ...... chose which disk you want to create:交互时 依次输入1、2、3、4 df -h
1-4、建立地址映射,四台节点都操作
vim /etc/hosts 192.168.159.11 node1 192.168.159.20 node2 192.168.159.50 node3 192.168.159.70 node4
2、安装GFS分布式文件系统
2-1、编辑GFS的源,四台节点都操作
[root@node1 opt]# ls 在/opt放置关于gfs的软件包 gfsrepo.zip rh [root@node1 opt]# unzip gfsrepo.zip 解压 [root@node1 opt]# cd /etc/yum.repos.d/ [root@node1 yum.repos.d]# mkdir bak 将原来的源移动到新建的目录中 [root@node1 yum.repos.d]# mv Cent* bak/ [root@node1 yum.repos.d]# ls bak [root@node1 yum.repos.d]# vim local.repo [GLFS] name=glfs baseurl=file:///opt/gfsrepo gpgcheck=1 enabled=1
2-2、安装GFS软件包,四台节点都做
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma 安装-glusterfs-server服务端软件、glusterfs-fuse使用gfs文件系统软件 systemctl start glusterd.service 启动 systemctl enable glusterd.service 开机自启 systemctl status glusterd.service 查看状态
2-3、添加存储信任池(只在节点1操作即可)
[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 Hostname: node2 Uuid: 557eddc0-5dfb-4dd6-a124-a192b528ecb2 State: Peer in Cluster (Connected) Hostname: node3 Uuid: 847bde80-22fd-49dc-bbd8-47970c3ff3e6 State: Peer in Cluster (Connected) Hostname: node4 Uuid: 122e7693-f3b8-437f-a128-1c7b79001b23 State: Peer in Cluster (Connected) [root@node1 ~]#
3、根据规划创建卷
创建卷只需要在一台节点上创建即可,根据以下规则创建卷
| 卷名称 | 卷类型 | 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) |
3-1、创建分布式卷
创建分布式卷,没有指定类型,默认创建的是分布式卷。
利用node1和node2上的两块磁盘创建,dis-vol为磁盘名,force表示强制 [root@node1 ~]# gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force 启动dis-volume卷 [root@node1 ~]# gluster volume start dis-volume volume start: dis-vol: success 查看该卷的状态 [root@node1 ~]# gluster volume info dis-volume

3-2、创建条带卷
指定类型为stripe,数值为2,且后面跟了2个Brick Server,所以创建的是条带卷。
#创建条带卷 [root@node1 ~]# gluster volume create stripe-vol stripe 2 node1:/data/sdc1 node2:/data/sdc1 force #启动新建条带卷 [root@node1 ~]# gluster volume start stripe-volume #查看创建条带卷信息 [root@node1 ~]# gluster volume info stripe-volume

3-3、创建复制卷
指定类型为replica,数值为2,且后面跟了2个Brick Server,所以创建的是复制卷。
#创建复制卷 [root@node1 ~]# gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force #启动新建复制卷 [root@node1 ~]# gluster volume start rep-volume #查看创建复制卷信息 [root@node1 ~]# gluster volume info rep-volume

3-4、 创建分布式条带卷
指定类型为stripe,数值为2,而且后面跟了4个Brick Server,是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 #查看创建分布式条带卷信息 [root@node1 ~]# gluster volume info dis-stripe

3-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

3-6、查看卷列表
gluster volume list

4、创建客户端挂载GFS文件系统
4-1、安装客户端软件
[root@client ~]# cd /opt [root@client opt]# rz [root@client opt]# ls gfsrepo.zip rh [root@client opt]# unzip gfsrepo.zip [root@client opt]# vim /etc/yum.repos.d/GLFS.repo [GLFS] name=glfs baseurl=file:///opt/gfsrepo gpgcheck=0 enabled=1 [root@client opt]# cd #清理缓存并重新建立yum库 [root@client ~]# yum clean all && yum makecache #安装glusterfs客户端 [root@client ~]# yum -y install glusterfs glusterfs-fuse [root@client ~]# echo "192.168.159.11 node1" >> /etc/hosts [root@client ~]# echo "192.168.159.20 node2" >> /etc/hosts [root@client ~]# echo "192.168.159.50 node3" >> /etc/hosts [root@client ~]# echo "192.168.159.70 node4" >> /etc/hosts
4-2、创建挂载目录
mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep}
4-3、挂载 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 挂载分布式复制卷 ②永久挂载 node1:dis-volume /test/dis glusterfs defaults,_netdev 0 0 node1:stripe-volume /test/stripe glusterfs defaults,_netdev 0 0 node1:rep-volume /test/rep glusterfs defaults,_netdev 0 0 node1:dis-stripe /test/dis_stripe glusterfs defaults,_netdev 0 0 node1:dis-rep /test/dis_rep glusterfs defaults,_netdev 0 0 #刷新永久挂载 mount -a


5、GFS文件系统的维护命令
5-1、查看GlusterFS卷
[root@node1 ~]# gluster volume list
5-2、查看所有卷的信息
[root@node1 ~]# gluster volume info
5-3、查看所有卷状态
[root@node1 ~]# gluster volume status
5-4、#停止一个卷
[root@node1 ~]# gluster volume stop dis-stripe
5-5、删除一个卷
[root@node1 ~]# gluster volume delete dis-stripe
5-6、黑白名单
[root@node1 ~]# gluster volume set dis-rep auth.allow 192.168.159.* 设置192.168.159.0网段的所有IP地址 都能访问dis-rep卷(分布式复制卷)
6、测试Gluster文件系统(在Gluster客户端进行操作)
6-1、向卷中写入文件
#在opt目录下创建5个大小为40M的文件 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 #查看 ls -lh

6-2、向卷中复制文件
#向5个卷中复制刚创建的5个40M的文件 cp demo* /test/dis cp demo* /test/stripe/ cp demo* /test/rep/ cp demo* /test/dis_stripe/ cp demo* /test/dis_rep/

7、查看文件分布
查看卷对应的磁盘分区中的文件数据,验证结果
7-1、查看分布式文件分布
①在node1:/dev/sdb1
ll -h /data/sdb1

②在node2:/dev/sdb1
ll -h /data/sdb1

现象:分布式只会将demo文件分开存储(5个文件不在同一磁盘分区上),不会将数据分片和备份。
7-2、查看条带卷文件分布
①在node1:/dev/sdc1
ll -h /data/sdc1

②在node2:/dev/sdc1
ll -h /data/sdc1

现象:条带卷会将每个demo文件中的数据分片存储(两个分区各有20M的文件),没有备份。
7-3、查看复制卷文件分布
①在node3:/dev/sdb1
ll -h /data/sdb1

②在node4:/dev/sdb1
ll -h /data/sdb1

现象:复制卷会将每个文件放入卷中的磁盘分区中(两分区的文件一样)
7-4、查看分布式条带卷分布
①在node1:/dev/sdd1
ll -h /data/sdd1

②在node2:/dev/sdd1
ll -h /data/sdd1

③在node3:/dev/sdd1
ll -h /data/sdd1

④在node4:/dev/sdd1
ll -h /data/sdd1

现象:分布式条带卷中,带有分布式和条带卷的特点,即将数据分片,又将文件分开存储,没有备份。
7-5、查看分布式复制卷分布
①在node1:/dev/sde1
ll -h /data/sde1

②在node2:/dev/sde1
ll -h /data/sde1

③在node3:/dev/sde1
ll -h /data/sde1

④在node4:/dev/sde1
ll -h /data/sde1

现象:分布式复制卷中,带有分布式和复制卷的特点,即将文件分开存储,又复制一遍文件(备份)。
四、冗余测试
1、挂起 node2 节点或者关闭glusterd服务来模拟故障
systemctl stop glusterd.service

2、在客户端上查看文件是否正常
2-1、分布式卷
ll -lh /test/dis
结论:数据查看,缺少demo5,文件demo5是存储在node2上的,所以分布式卷不具备冗余。
2-2、 条带卷
ll -lh /test/stripe/

结论:文件中没有数据,说明数据全部丢失,所以条带卷不具备冗余。
2-3、分布式条带卷
ll -lh /test/dis_stripe/

结论:存储在node1和node2上的4个文件不见了(数据是分片存储的),所以分布式条带卷不具备冗余。
2-4、分布式复制卷
ll -lh /test/dis_rep/

结论:文件和数据都在,所以分布式复制卷具有冗余。
2-5、 复制卷
在node3和node4中选一个关闭的,关闭node4进行测试,具有冗余。
ll -lh /test/rep/

结论:文件和数据都在,所以复制卷具有冗余。
总结
1、分布式卷:属于文件级的RAID0,不具备容错能力,如果有一块磁盘损坏,数据就丢失。
2、条带卷:类似RAID0,文件将被分成数据块并以轮询方式分布到Brick server上。
3、复制卷:将文件同步到多个Brick上,属于文件RAID1,数据分数在多个Brick中。
4、分布式条带卷:Brick server 数量是条带数兼具分布式卷和条带卷的特定。
5、分布式复制卷:Brick server数量是镜像数,兼具分布式卷和复制卷的特点。
6、条带复制卷:类似RAID10,同时具有条带卷和复制卷的特点。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227992.html原文链接:https://javaforall.net
