linux cpu占用率如何看
278
2022-10-31
GFS分布式文件系统概述以及集群部署
一、文件系统简介
1.1文件系统的组成
接口:文件系统接口功能模块(管理、存储的工具):对对象管理里的软件集合对象及属性:(使用此文件系统的消费者)
1.2文件系统的作用
从系统角度来看,文件系统时对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统主要负责为用户建立文件、存入、读出、修改、转储文件,控制文件的存取
1.3文件系统的挂载使用
除跟文件系统以外的文件系统创建后要使用需要先挂载至挂载点后才可以被访问挂载点即分区设备文件关联的某个目录文件类比NFS(外部的文件系统),使用挂载的方式才可以让本地系统来使用外部的文件系统的功能例如:配置永久挂载时,我们会写入挂载点与挂载目录,还有文件系统的名称(xfs),文件类型格式等。我们在远程跨服务器使用GFS分布式文件系统,挂载时也需要指定其文件格式(GlusterFS)
二、GFS分布式文件系统
2.1 GFS简介
1)GFS是一个可扩展、开源的分布式文件系统(可以很好的体现出弹性伸缩的特点),用于大型的、分布式的、对大量数据进行访问的应用,在传统的解决方案中,GFS 能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储
2)GFS由三个组件组成:
①存储服务器(Brick Server)
② 客户端(不在本地)(且,有客户端,也会有服务端,这点类似于 NFS,但是更为复杂)
③ 存储网关(NFS/Samaba)
无元数据服务器:元数据是核心,描述对象的信息,影响其属性;例如NFS,存放数据本身,是一个典型的元数据服务器可能存在单点故障,故要求服务器性能较高,服务器一旦出现故障就会导致数据丢失;反过来看,所以无元数据服务不会有单点故障。那么数据存放在哪里呢?会借用分布式的原则,分散存储,不会有一个统一的数据服务器
2.2 GFS的特点
扩展性和高性能:可扩展性,扩展节点,通过多节点提高性能。GlusterFS采用弹性哈希算法在存储池中可以智能地定位任意数据分片(将数据分片存储在不同节点上),不需要查看索引或者向元数据服务器查询。高可用性:不存在单点故障,有备份机制,类似Raid的容灾机制,当数据出现不一致时,自我修复功能能够把数据恢复到正确的状态,数据的修复是以增量的方式在后台执行,几乎不会产生性能负载全局同意命名空间:类比 API 的性质/概念,系统里根据他命名所定义的隔离区域,是一个独立空间;统一的名称空间,与客户端交互,把请求存放至后端的块数据服务器弹性卷管理:方便扩容及对后端存储集群的管理与维护,较为复杂。逻辑存储池可以在线进行增加和移除,不会导致业务中断。逻辑卷可以根据需求在线增长和缩减,并可以在多个节点中实现负载均衡基于标准协议:Gluster 存储服务支持 NFS、CIFS、HTTP、FTP、SMB 及 Gluster原生协议,完全与 POSIX 标准(可移植操作系统接口)兼容。现有应用程序不需要做任何修改就可以对Gluster 中的数据进行访问,也可以使用专用 API 进行访问。
2.3 GFS专业术语
Brick 存储服务器:实际存储用户数据的服务器Volume:本地文件系统的"分区”FUSE:用户 空间的文件系统(类比EXT4),“这是一个伪文件系统”;以本地文件系统为例,用户想要读写一个文件,会借助于EXT4文件系统,然后把数据写在磁盘上;而如果是远端的GFS,客户端的请求则应该交给FUSE(为文件系统),就可以实现跨界点存储在GFS上VFS(虚拟端口) :内核态的虚拟文件系统,用户是先提交请求交给VFS然后VFS交给FUSE,再交给GFS客户端,最后由客户端交给远端的存储Glusterd(服务):是允许在存储节点的进程(客户端运行的是gluster client)GFS使用过程中整个GFS之间的交换由Gluster client 和glusterd完成
2.4 GFS 工作流程
① 客户端或应用程序通过 GlusterFS 的挂载点访问数据;
② linux系统内核**通过 VFS API 虚拟接口收到请求并处理;
③ VFS 将数据递交给 FUSE 内核文件系统,这是一个伪文件系统,这个伪文件系统主要用来转存,它提供一个虚拟接口,映射出来/dev/fuse这样一个虚拟路径,而 FUSE 文件系统则是将数据通过 /dev/fuse 设备文件递交给了 GlusterFS client 端。可以将 FUSE 文件系统理解为一个代理
④ GlusterFS client 会实时监听/dev/fuse下的数据,一旦数据更新,会把数据拿过来,client 根据配置文件的配置对数据进行处理
⑤ 经过 GlusterFS client 处理后,通过网络将数据传递至远端的 GlusterFS Server,server会先转存到本地的vfs虚拟文件系统中**,然后再通过vfs转存到EXT3上。EXT3指的是各个block块中的EXT3文件系统中。
GFS-server 端功能模块的划分:
① 卷的类型(使用分布式、复制、条带)
② 存储管理(卷的创建、启用、关闭)
③ I/O调用(存储后,读取数据,如何读取)
④ 与GFS-client 端对接
GFS-client 端
① 用户通过用户态模式下,存储数据(写入数据)
② 写入的数据,使用GFS挂载的形式完成(网络挂载samba/NFS)
③数据的写入会由GFS-client转存到GFS-server端(对应的卷中)
网络通讯
① Infinlband ——— IB
② RDMA——— 面向连接传输协议—— 数据完整性(丢包率低)
③ TCP/IP
④ RDMA———》以后的服务中可以做为跨节点共享内存资源的协议
三、Gluster构成
模块化堆栈式架构
模块化、堆栈式的架构通过对模块的组合,实现复杂的功能
1、API:应用程序编程接口
2、模块化:每个模块可以提供不同的功能
3、堆栈式:同时启用多个模块,多个功能可以组合,实现复杂的功能
I/O cache:I/O缓存read ahead:内核文件预读distribute/stripe:分布式、条带化Gige:千兆网/千兆接口TCP/IP:网络协议InfiniBand:网络协议,与TCP/IP相比,TCP/IP具有转发丢失数据包的特性,基于此通信协议可能导致通信变慢,而IB使用基于信任的、流控制的机制来保证连接完整性RDMA:负责数据传输,有一种数据传输协议,功能:为了解决传输过程中客户端与服务器端数据处理的延迟
上半部分为客户端,中间为网络层,下半部分为服务端
1、封装多个功能模块,组成堆栈式的结构,来实现复杂的功能
2、然后以请求的方式与客户端进行交互,客户端与服务端进行交互,由于可能会存在系统兼容问题,需要通过posix来解决系统兼容性问题,让客户端的命令通过posix过滤后可以在服务端执行
四、后端存储如何定位文件
弹性HASH算法通过HASH算法得到一个固定长度的数据(这里是32位整数)通常情况下,不同数据得到的结果是不同的为了解决分布式文件数据索引、定位的复杂程度,而使用了HASH算法来辅助
五、GFS支持的七种卷
1、分布式卷(默认):文件通过HASH算法分布到所有Brick Server上,这种卷是GFS的基础;以文件为单位根据HASH算法散列到不同的Brick,其实只是扩大了磁盘空间,并不具备容错能力,属于文件级RAID 0
特点:
文件分布在不同的服务器,不具备冗余性。 更容易和廉价地扩展卷的大小。单点故障会造成数据丢失。依赖底层的数据保护。
2、条带卷(默认):类似RAID 0,文件被分成数据库并以轮询的方式分布到多个Brick Server上,文件存储以数据块为单位,支持大文件存储,文件越大,读取效率越高
特点:
数据被分割成更小块分布到块服务器群中的不同条带区。 分布减少了负载且更小的文件加速了存取的速度。 没有数据冗余。
3、复制卷(Replica volume):将文件同步到多个Brick上,使其具备多个文件副本,属于文件级RAID 1,具有容错能力。因为数据分散在多个Brick中,所以读性能得到很大提升,但写性能下降
特点:
卷中所有的服务器均保存一个完整的副本。 卷的副本数量可由客户创建的时候决定,但复制数必须等于卷中 Brick 所包含的存储服务器数。 至少由两个块服务器或更多服务器。 具备冗余性。
4、分布式条带卷(Distribute Stripe volume):Brick Server数量是条带数(数据块分布的Brick数量)的倍数,兼具分布式卷和条带的特点
5、分布式复制卷(Distribute Replica volume):Brick Server数量是镜像数(数据副本 数量)的倍数,兼具分布式卷和复制卷的特点
6、条带复制卷(Stripe Replca volume):类似RAID 10,同时具有条带卷和复制卷的特点
7、分布式条带复制卷(Distribute Stripe Replicavolume):三种基本卷的复合卷通常用于类Map Reduce应用
六、部署GlusterFS 群集
Node1节点: node1/192.168.100.100 磁盘:/dev/sdb1 挂载点:/data/sdb1 /dev/sdc1 /data/sdc1 /dev/sdd1 /data/sdd1 /dev/sde1 /data/sde1Node2节点: node2/192.168.100.110 磁盘: /dev/sdb1 挂载点: /data/sdb1 /dev/sdc1 /data/sdc1 /dev/sdd1 /data/sdd1 /dev/sde1 /data/sde1Node3节点: node3/192.168.100.120 磁盘:/dev/sdb1 挂载点:/data/sdb1 /dev/sdc1 /data/sdc1 /dev/sdd1 /data/sdd1 /dev/sde1 /data/sde1Node4节点: node4/192.168.100.130 磁盘:/dev/sdb1 挂载点:/data/sdb1 /dev/sdc1 /data/sdc1 /dev/sdd1 /data/sdd1 /dev/sde1 /data/sde1客户端节点: 192.168.100.10
准备环境(所有node节点上操作)
1.关闭防火墙
systemctl stop firewalldsetenforce 0
2.磁盘分区,并挂载
vim /opt/fdisk.sh
#!/bin/bashNEWDEV=`ls /dev/sd* | grep -o 'sd[b-z]' | uniq`for VAR in $NEWDEVdoecho -e "n\np\n\n\n\nw\n"| fdisk /dev/$VAR &> /dev/nullmkfs.xfs /dev/${VAR}"1" &> /dev/nullmkdir -p /data/${VAR}"1" &> /dev/nullecho "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0" >> /etc/fstabdonemount -a &> /dev/nullchmod +x /opt/fdisk.shcd /opt/./fdisk.sh
3.修改主机名,配置/etc/hosts文件
#以Node1节点为例:hostnamectl set-hostname node1suecho "192.168.100.100 node1" >> /etc/hostsecho "192.168.100.110 node2" >> /etc/hostsecho "192.168.100.120 node3" >> /etc/hostsecho "192.168.100.130 node4" >> /etc/hosts
七、安装、启动GlusterFS(所有node节点上操作)
1 将gfsrepo软件上传到/opt目录下
cd /etc/yum.repos.d/mkdir repo.bakmv *.repo repo.bakvim glfs.repo[glfs]name=glfsbaseurl=file:///opt/gfsrepogpgcheck=0enabled=1yum clean all && yum makecacheyum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
如采用官方YUM源安装,可以直接指向互联网仓库yum -y install centos-release-glusteryum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
systemctl start glusterd.servicesystemctl enable glusterd.servicesystemctl status glusterd.service
2.添加节点到存储信任池中(在node1节点上操作)
只要在一台Node节点上添加其它节点即可gluster peer probe node1gluster peer probe node2gluster peer probe node3gluster peer probe node4
在每个Node节点上查看群集状态gluster peer status
八、创建卷
根据规划创建如下卷:
卷名称 卷类型 Brickdis-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)
1.创建分布式卷
创建分布式卷,没有指定类型,默认创建的是分布式卷
gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force
查看卷列表
gluster volume list
启动新建分布式卷
gluster volume start dis-volume
查看创建分布式卷信息
gluster volume info dis-volume
2.创建条带卷
指定类型为stripe,数值为2,且后面跟了2个Brick Server,所以创建的是条带卷
gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 forcegluster volume start stripe-volumegluster volume info stripe-volume
3.创建复制卷
指定类型为replica,数值为2,且后面跟了2个Brick Server,所以创建的是复制卷
gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 forcegluster volume start rep-volumegluster volume info rep-volume
4.创建分布式条带卷
指定类型为stripe,数值为2,而且后面跟了4个BrickServer,是2的两倍,所以创建的是分布式条带卷
gluster volume create dis-stripe stripe 2 nodel:/data/sdd1 node2:/data/ sdd1 node3:/data/sdd1 node4:/data/sdd1 forcegluster volume start dis-stripegluster volume info dis-stripe
5.创建分布式复制卷
指定类型为replica,数值为2,而且后面跟了4个BrickServer,是2的两倍,所以创建的是分布式复制卷
gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 forcegluster volume start dis-repgluster volume info dis-rep
查看当前所有卷的列表
gluster volume list
九、部署Gluster 客户端
1.安装客户端软件
将gfsrepo软件上传到/opt目下
cd /etc/yum.repos.d/mkdir repo.bakmv *.repo repo.bakvim glfs.repo[glfs]name=glfsbaseurl=file:///opt/gfsrepogpgcheck=0enabled=1yum clean all && yum makecacheyum -y install glusterfs glusterfs-fuse
2.创建挂载目录
mkdir -p /test/{dis, stripe, rep,dis_stripe,dis_ rep}ls /test
3.配置/etc/hosts文件
echo "192.168.100.100 node1" >> /etc/hostsecho "192.168.100.110 node2" >> /etc/hostsecho "192.168.100.120 node3" >> /etc/hostsecho "192.168.100.130 node4" >> /etc/hosts
4.挂载Gluster 文件系统
临时挂载
mount.glusterfs node1:dis-volume /test/dis mount.glusterfs node1:stripe-volume /test/stripemount.glusterfs node1:rep-volume /test/repmount.glusterfs node1:dis-stripe /test/dis_stripemount.glusterfs node1:dis-rep /test/dis_repdf -Th
永久挂载
vim /etc/fstabnode1:dis-volume /test/dis glusterfs defaults,netdev 0 0node1:stripe-volume /test/stripe glusterfs defaults,netdev 0 0node1:rep-volume /test/rep glusterfs defaults,netdev 0 0node1:dis-stripe /test/dis_stripe glusterfs defaults,netdev 0 0node1:dis-rep /test/dis_rep glusterfs defaults,netdev 0 0
十、测试Gluster 文件系统
1.卷中写入文件,客户端操作
cd /optdd if=/dev/zero of=/opt/demo1.log bs=1M count=40dd if=/dev/zero of=/opt/demo2.log bs=1M count=40dd if=/dev/zero of=/opt/demo3.log bs=1M count=40dd if=/dev/zero of=/opt/demo4.log bs=1M count=40dd if=/dev/ ero of=/opt/demo5.log bs=1M count=40 ls -lh /optcp /opt/demo* /test/discp /opt/demo* /test/stripe/cp /opt/demo* /test/rep/cp /opt/demo* /test/dis_stripe/cp /opt/demo* /test/dis_rep/
2.查看文件分布
查看分布式文件分布
[root@node1 ~]# ls -lh /data/sdb1 #数据没有被分片
总用量160M
查看条带卷文件分布
[root@node1 ~]# ls -lh /data/sdc1 #数据被分片50%没副本没冗余
总用量101M
查看复制卷分布
[ root@node3 ~]# ll -h /data/sdb1 #数据没有被分片有副本有冗余
总用量201M
[ root@node4 ~]# ll -h /data/sdb1 #数据没有被分片有副本有冗余
总用量201M
查看分布式条带卷分布
[root@node1 ~]# ll -h /data/sdd1 #数据被分片50%没副本没冗余
总用量81M
[root@node2 ~]# ll -h /data/sdd1
总用量81M
[ root@node3 ~] # ll -h /data/sdd1
总用量21M
[ root@node4 ~] # ll -h /data/sdd1
总用量21M
查看分布式复制卷分布
[root@node1 ~]# ll -h /data/sde1 #数据没有被分片 有副本 有冗余
总用量161M
十一、破坏性测试
挂起node2节点或者关闭glusterd服务来模拟故障
[ root@node2 ~] # systemctl stop glusterd.service
在客户端上查看文件是否正常
分布式卷数据查看
[root@localhost test]# ll /test/dis/ #在客户机上发现少了demo5.log文件,这个是在node2上的
总用量163840
条带卷
[root@ localhost test]# cd /test/stripe/ #无法访问,条带卷不具备冗余性
[ root@localhost stripe]# ll
总用量0
分布式条带卷
[root@localhost test]# ll /test/dis_stripe/ #无法访问,分布条带卷不具备冗余性
总用量40960
-rw-r–r-- 1 root root 41943040 12月18 14:51 demo5. log
分布式复制卷
[root@localhost test]# ll /test/dis_rep/ #可以访问,分布式复制卷具备冗余性
总用量204800
挂起node2和node4节点,在客户端上查看文件是否正常
测试复制卷是否正常
[root@localhost rep]# ls -l /test/rep/
#在客户机上测试正常 数据有
总用量204800
测试分布式条卷是否正常
[ root@localhost dis_stripe]# ll /test/dis_stripe/ #在客户机上测试没有数据
总用量 0
测试分布式复制卷是否正常
[root@localhost dis_rep]# ll /test/dis_rep/ #在客户机上测试正常 有数据
总用量204800
上述实验测试,凡是带复制数据,相比而言,数据比较安全
其他的维护命令
1.查看GlusterFS卷
gluster volume list
2.查看所有卷的信息
gluster volume info
3.查看所有卷的状态
gluster volume status
4.停止一个卷
gluster volume stop dis-stripe
5.删除一个卷,注意:删除卷时,需要先停止卷,且信任池中不能有主机处于宕机状态,否则删除不成功
gluster volume delete dis-stripe
6.设置卷的访问控制
仅拒绝gluster volume set dis-rep auth.deny 192.168.100.100
仅允许gluster volume set dis-rep auth.allow 192.168.100.*#设置192.168.80.0网段的所有IP地址都能访问dis-rep卷(分布式复制卷)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~