博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习GlusterFS分布式文件存储一篇就够了
阅读量:2026 次
发布时间:2019-04-28

本文共 14425 字,大约阅读时间需要 48 分钟。

文章目录

一:GlusterFS简介

  • 开源的分布式文件系统
  • 由存储服务器、客户端以及NFS/Samba存储网关组成
  • 无元数据服务器

GlusterFS 特点:

  • 扩展性和高性能;

  • 高可用性;

  • 全局统一命名空间;

  • 弹性卷管理;

  • 基于标准协议

    GlusterFS术语

  • Brick

  • Volume

  • FUSE

  • VFS

  • Glusterd

模块化堆栈式架构

模块化、堆栈式的架构通过对模块的组合,实现复杂的功能
在这里插入图片描述

二:GlusterFS工作原理

2.1:GlusterFS工作流程

在这里插入图片描述

  • 客户端或应用程序通过GlusterFS的挂载点访问数据
  • linux系统内核通过VFS API收到请求并处理
  • VFS将数据递交给FUSE内核文件系统,fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client端
  • GlusterFS client收到数据后,client根据配置文件的配置对数据进行处理
  • 通过网络将数据传递至远端的GlusterFS Server,并且将数据写入到服务器存储设备上

2.2:弹性HASH算法

  • 通过HASH算法得到一个32位的整数
  • 划分为N个连续的子空间,每个空间对应一个Brick(存储块)
  • 弹性HASH算法的优点

保证数据平均分布在每一个Brick中

解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈

三:GlusterFS的卷类型

  • 分布式卷
  • 条带卷
  • 复制卷
  • 分布式条带卷
  • 分布式复制卷
  • 条带复制卷
  • 分布式条带复制卷

3.1 分布式卷

  • 没有对文件进行分块处理
  • 通过扩展文件属性保存HASH值
  • 支持的底层文件系统有EXT3、EXT4、ZFS、XFS等
    在这里插入图片描述
    如图:没有分块处理,文件只能存在一个server中,效率不提升,分布式卷,不是轮询存储,而是HASA算法随机存储。
  • 分布式卷的特点

文件分布在不同的服务器,不具备冗余性;

更容易和廉价地扩展卷的大小;
单点故障会造成数据丢失;
依赖底层的数据保护。

  • 创建分布式卷命令
#创建一个名为dis-volume的分布式卷,文件将根据HASH分布在server1:/dir1、server2:/dir2和server3:/dir3中gluster volume create dis-volume server1:/dir1 server2:/dir2 server3:/dir3

3.2:条带卷

  • 同一文件保存一份或多分副本
  • 因为要保存副本,所以磁盘利用率较低 若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量

在这里插入图片描述

从多个server中同时读取文件,效率提升。

特点

数据被分割成更小块分布到块服务器群中的不同条带区
分布减少了负载且更小的文件加速了存取的速度
没有数据冗余

  • 创建复制卷
创建名为rep-volume的复制卷,文件将同时存储两个副本,分别在Server1:/dir1和Server2:/dir2两个Brick中gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

3.3:复制卷

  • 分布式复制卷

兼顾分布式卷和复制卷的功能

用于需要冗余的情况

在这里插入图片描述

  • 创建复制卷
创建名为rep-volume的复制卷,文件将同时存储两个副本,分别在Server1:/dir1和Server2:/dir2两个Brick中gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

3.4 分布式条带卷

  • 分布式条带卷

兼顾分布式卷和条带卷的功能

主要用于大文件访问处理
至少最少需要4台服务器
在这里插入图片描述

创建了名为dis-stripe的分布式条带卷,配置分布式的条带卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1server2:/dir2 server3:/dir3 server4:/dir4

3.5:分布式复制卷

  • 分布式复制卷

兼顾分布式卷和复制卷的功能

用于需要冗余的情况
在这里插入图片描述
创建分布式复制卷

创建名为dis-rep的分布式条带卷,配置分布式复制卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2;ldir2 server3:/dir3 server4:/dir4

四:GlusterFS部署实操

五台虚拟机:一台作为客户机,另外四台作为节点,每个虚拟机新增4块磁盘(每块磁盘20G)

磁盘预划分:

卷名称 卷类型 磁盘
dis-volume 分布式卷 node1(/sdb1) node2(/sdb1)
stripe-volume 条带卷 node3(/sdb1)node4(/sdb1)
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
  • 所有节点进行磁盘的分区、格式化和挂载,通过shell脚本运行,如下:
    每个node节点上设置四个磁盘,每个磁盘20G
#!/bin/bashfor V in $(ls /dev/sd[b-z])do  echo -e "n\np\n\n\n\nw\n" |fdisk $V  mkfs.xfs -i size=512 ${
V}1 &>/dev/null sleep 1 M=$(echo "$V" |awk -F "/" '{print $3}') mkdir -p /data/${
M}1 &>/dev/null echo -e "${V}1 /data/${M}1 xfs defaults 0 0\n" >>/etc/fstab mount -a &>/dev/nulldone[root@node1~]# chmod +x fdisk.sh [root@node1 ~]# ./fdisk.sh ./fdisk.sh:行1: [root@localhost: 未找到命令进行磁盘创建,格式化,挂载磁盘 /dev/sdd:2147 MB, 2147483648 字节,4194304 个扇区磁盘 /dev/sdc:2147 MB, 2147483648 字节,4194304 个扇区磁盘 /dev/sdb:2147 MB, 2147483648 字节,4194304 个扇区磁盘 /dev/sde:2147 MB, 2147483648 字节,4194304 个扇区------------------------------------你想选择上面那块磁盘挂载:sdb //此处输入需要挂载的磁盘

在这里插入图片描述

4.1:每台节点都设置主机名,方便管理,并设置好映射关系(4个节点都做)

[root@localhost ~]# hostnamectl set-hostname node1[root@localhost ~]# su[root@node1 ~]# vi /etc/hosts   ##设置主机映射关系192.168.10.50   node1192.168.10.20   node2192.168.10.80   node3192.168.10.90   node4[root@node1 ~]# scp /etc/hosts 192.168.10.20:/etc/hosts   ##将hosts文件拷贝到其他节点直接用root@192.168.10.20's password: hosts                                                                               100%  238   153.7KB/s   00:00    [root@node1 ~]# scp /etc/hosts 192.168.10.80:/etc/hostsroot@192.168.10.80's password: hosts                                                                               100%  238   121.3KB/s   00:00    [root@node1 ~]# scp /etc/hosts 192.168.10.90:/etc/hostsroot@192.168.10.90's password: hosts

4.2:搭建yum源,因为版本原因,建议不直接用线网源,找到对应版本安装(4个节点都做)

[root@node1 ~]# cd /etc/yum.repos.d/[root@node1 yum.repos.d]# mv C* backup/[root@node1 yum.repos.d]# lsbackup  GLFS.repo[root@node1 yum.repos.d]# vi GLFS.repo[GLFS]name=glfsbaseurl=http://mirror.centos.org/centos/$releasever/storage/$basearch/gluster-3.12/gpgcheck=0enabled=1

4.3:安装gluster服务器,并设时间同步(4个节点都做)

[root@node1 ~]# systemctl start glusterd.service [root@node1 ~]# systemctl enable glusterd.service [root@node1 ~]# systemctl status glusterd.service● glusterd.service - GlusterFS, a clustered file-system server   Loaded: loaded (/usr/lib/systemd/system/glusterd.service; enabled; vendor preset: disabled)   Active: active (running) since 二 2020-11-17 08:57:47 CST; 13s ago  Process: 13516 ExecStart=/usr/sbin/glusterd -p /var/run/glusterd.pid --log-level $LOG_LEVEL $GLUSTERD_OPTIONS (code=exited, status=0/SUCCESS) Main PID: 13517 (glusterd)   CGroup: /system.slice/glusterd.service           └─13517 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO11月 17 08:57:47 node1 systemd[1]: Starting GlusterFS, a clustered file-system server...11月 17 08:57:47 node1 systemd[1]: Started GlusterFS, a clustered file-system server.[root@node1 yum.repos.d]# ntpdate ntp1.aliyun.com 17 Nov 08:58:15 ntpdate[13535]: adjust time server 120.25.115.20 offset -0.002099 sec

4.4:添加另外三台到存储信任池(只需要在其中一个节点做即可,另外三个自动匹配)

##########这里以node1为例#####################[root@server1 yum.repos.d]# gluster peer probe node2 peer probe: success. [root@server1 yum.repos.d]# gluster peer probe node3peer probe: success. [root@server1 yum.repos.d]# gluster peer probe node4peer probe: success. [root@server1 yum.repos.d]# gluster peer status Number of Peers: 3[root@server1 yum.repos.d]# gluster peer status Number of Peers: 3Hostname: node2Uuid: ed0abdb5-f32d-4a72-bf18-b502c67e3505State: Peer in Cluster (Connected)Hostname: node3Uuid: 41860f92-143c-421d-afd0-2f1bea14df59State: Peer in Cluster (Connected)Hostname: node4Uuid: f9a8ca50-1e36-41cb-96b2-f300a1bd8404State: Peer in Cluster (Connected)

4.5:分布式卷

[root@node1 ~]# gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force[root@node1 ~]# gluster volume start dis-volvolume start: dis-vol: success[root@node1 ~]# gluster volume info dis-vol Volume Name: dis-volType: DistributeVolume ID: 25e08068-8f2e-4a9d-ad88-40ffb3faa4d1Status: StartedSnapshot Count: 0Number of Bricks: 2Transport-type: tcpBricks:Brick1: node1:/data/sdb1Brick2: node2:/data/sdb1Options Reconfigured:transport.address-family: inetnfs.disable: on

4.6:条带卷

[root@server1 ~]# gluster volume create stripe-vol stripe 2 node3:/data/sdc1 node2:/data/sdc1 forcevolume create: stripe-vol: success: please start the volume to access data[root@server1 ~]# gluster volume start stripe-vol volume start: stripe-vol: success[root@server1 ~]# gluster volume info stripe-vol  Volume Name: stripe-volType: StripeVolume ID: d9c60597-70d7-49b1-a40c-ae4b384e8e67Status: StartedSnapshot Count: 0Number of Bricks: 1 x 2 = 2Transport-type: tcpBricks:Brick1: node3:/data/sdc1Brick2: node2:/data/sdc1Options Reconfigured:transport.address-family: inetnfs.disable: on

4.7:复制卷

[root@server1 ~]# gluster volume create rep-vol replica 2 node3:/data/sda1 node4:/data/sda1 forcevolume create: rep-vol: success: please start the volume to access data[root@server1 ~]# gluster volume start rep-vol volume start: rep-vol: success[root@server1 ~]# gluster volume info rep-vol  Volume Name: rep-volType: ReplicateVolume ID: 2a6334f9-143a-4b5f-a1c0-1db36b637d4aStatus: StartedSnapshot Count: 0Number of Bricks: 1 x 2 = 2Transport-type: tcpBricks:Brick1: node3:/data/sda1Brick2: node4:/data/sda1Options Reconfigured:transport.address-family: inetnfs.disable: onperformance.client-io-threads: off

4.8:分布式条带卷

[root@node1 ~]# gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 forcevolume create: dis-stripe: success: please start the volume to access data[root@node1 ~]# gluster volume start dis-stripevolume start: dis-stripe: success[root@node1 ~]# gluster volume info dis-stripe Volume Name: dis-stripeType: Distributed-StripeVolume ID: 5547fe4e-44e6-4d07-bf0a-cc92f74028caStatus: StartedSnapshot Count: 0Number of Bricks: 2 x 2 = 4Transport-type: tcpBricks:Brick1: node1:/data/sdd1Brick2: node2:/data/sdd1Brick3: node3:/data/sdd1Brick4: node4:/data/sdd1Options Reconfigured:transport.address-family: inetnfs.disable: on

4.9:分布式复制卷

[root@node1 ~]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 forcevolume create: dis-rep: success: please start the volume to access data[root@node1 ~]# gluster volume info dis-rep Volume Name: dis-repType: Distributed-ReplicateVolume ID: 45e3c958-eca2-46d6-b292-45e19230653cStatus: CreatedSnapshot Count: 0Number of Bricks: 2 x 2 = 4Transport-type: tcpBricks:Brick1: node1:/data/sde1Brick2: node2:/data/sde1Brick3: node3:/data/sde1Brick4: node4:/data/sde1Options Reconfigured:transport.address-family: inetnfs.disable: onperformance.client-io-threads: off

4.10:查看卷列表

[root@node1 ~]# gluster volume listdis-repdis-stripedis-volrep-volstripe-vol

4.11:其他操作:

  • 删除卷(先停止,再删除)
gluster volume stop 卷名gluster volume delete 卷名
  • 黑白名单设置
gluster volume set 卷名 auth.reject 192.168.220.100 //拒绝某台主机挂载gluster volume set 卷名 auth.allow 192.168.220.100 //允许某台主机挂载

五:客户端挂载测试

5.1:安装相关软件包并做主机映射

[root@localhost ~]# yum -y install glusterfs  glusterfs-fuse    ##安装这两个软件,支持gluster挂载[root@localhost ~]# vi /etc/hosts   ##先给几个节点添加主机名映射192.168.158.10   node1192.168.158.20   node2192.168.158.30   node3192.168.158.40   node4

5.2:创建挂载目录并挂载

[root@localhost ~]# mount.glusterfs node1:dis-vol /text/dis [root@localhost ~]# mount.glusterfs node1:stripe-vol /text/stripe [root@localhost ~]# mount.glusterfs node1:rep-vol /text/rep [root@localhost ~]# mount.glusterfs node1:dis-stripe /text/dis-stripe[root@localhost ~]# mount.glusterfs node1:dis-rep /text/dis-rep

5.3:查看挂载信息

[root@localhost ~]# df -Th文件系统                类型            容量  已用  可用 已用% 挂载点...省略node1:dis-vol           fuse.glusterfs   40G   65M   40G    1% /text/disnode1:stripe-vol        fuse.glusterfs   40G   65M   40G    1% /text/stripenode1:rep-vol           fuse.glusterfs   20G   33M   20G    1% /text/repnode1:dis-stripe        fuse.glusterfs   80G  130M   80G    1% /text/dis-stripenode1:dis-rep           fuse.glusterfs   40G   65M   40G    1% /text/dis-rep

挂载信息总结: 分布式、条带式、分布条带式卷可用空间为各个磁盘空间的总和,而复制卷和分布式复制卷的可用空间大小为空间的一半,但是安全性更高

六、测试各类型卷

6.1:在客户机创建5个测试文件,每个大小为40M

[root@localhost ~]# dd if=/dev/zero of=/demo1.log bs=40M count=1[root@localhost ~]# dd if=/dev/zero of=/demo2.log bs=40M count=1[root@localhost ~]# dd if=/dev/zero of=/demo3.log bs=40M count=1[root@localhost ~]#  dd if=/dev/zero of=/demo4.log bs=40M count=1[root@localhost ~]# dd if=/dev/zero of=/demo5.log bs=40M count=1[root@localhost ~]# ls /demo*/demo1.log  /demo2.log  /demo3.log  /demo4.log  /demo5.log[root@localhost ~]# cp /demo* /text/dis[root@localhost ~]# cp /demo* /text/stripe[root@localhost ~]# cp /demo* /text/rep/[root@localhost ~]# cp /demo* /text/dis-stripe/[root@localhost ~]# cp /demo* /text/dis-rep/

6.2:查看分布式卷分布情况(node1:/data/sdb1,node2:/data/sdb1)

  • 查看node1节点
[root@node1 ~]# ls -lh /data/sdb1总用量 160M-rw-r--r--. 2 root root 40M 11月 17 14:49 demo1.log-rw-r--r--. 2 root root 40M 11月 17 14:49 demo2.log-rw-r--r--. 2 root root 40M 11月 17 14:49 demo3.log-rw-r--r--. 2 root root 40M 11月 17 14:49 demo4.log
  • node2查看
[root@node2 ~]# ls -lh /data/sdb1总用量 40M-rw-r--r--. 2 root root 40M 11月 17 14:49 demo5.log

总结:分布式卷中文件以完整的文件形式存放在各个节点中,每个节点存放一部分文件

6.3:查看条带卷分布情况(node3:/data/sdb1,node4:/data/sdb1)

[root@server3 ~]# ls -lh /data/sdb1总用量 100M-rw-r--r--. 2 root root 20M 11月 17 14:49 demo1.log-rw-r--r--. 2 root root 20M 11月 17 14:49 demo2.log-rw-r--r--. 2 root root 20M 11月 17 14:49 demo3.log-rw-r--r--. 2 root root 20M 11月 17 14:49 demo4.log-rw-r--r--. 2 root root 20M 11月 17 14:49 demo5.log
[root@localhost ~]# ls -lh /data/sdb1总用量 100M-rw-r--r--. 2 root root 20M 11月 17 14:49 demo1.log-rw-r--r--. 2 root root 20M 11月 17 14:49 demo2.log-rw-r--r--. 2 root root 20M 11月 17 14:49 demo3.log-rw-r--r--. 2 root root 20M 11月 17 14:49 demo4.log-rw-r--r--. 2 root root 20M 11月 17 14:49 demo5.log

总结,条带卷中每个文件被拆成N(条带数)个部分,分别存放在不同节点中,每个节点都只存放文件的1/N

6.4:查看复制卷分布情况(node1:/data/sdc1,node2:/data/sdc1)

[root@node1 ~]# ls -lh /data/sdc1总用量 200M-rw-r--r--. 2 root root 40M 11月 17 14:50 demo1.log-rw-r--r--. 2 root root 40M 11月 17 14:50 demo2.log-rw-r--r--. 2 root root 40M 11月 17 14:50 demo3.log-rw-r--r--. 2 root root 40M 11月 17 14:50 demo4.log-rw-r--r--. 2 root root 40M 11月 17 14:50 demo5.log
[root@node2 ~]# ls -lh /data/sdc1总用量 200M-rw-r--r--. 2 root root 40M 11月 17 14:50 demo1.log-rw-r--r--. 2 root root 40M 11月 17 14:50 demo2.log-rw-r--r--. 2 root root 40M 11月 17 14:50 demo3.log-rw-r--r--. 2 root root 40M 11月 17 14:50 demo4.log-rw-r--r--. 2 root root 40M 11月 17 14:50 demo5.log

总结:在复制卷中,每个文件会以备份的形式存放在各个节点中,每个节点都有一套完整的文件

6.5:查看分布式条带卷分布情况(node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1)

[root@node1 ~]# ls -lh /data/sdd1总用量 80M-rw-r--r--. 2 root root 20M 11月 17 14:50 demo1.log-rw-r--r--. 2 root root 20M 11月 17 14:50 demo2.log-rw-r--r--. 2 root root 20M 11月 17 14:50 demo3.log-rw-r--r--. 2 root root 20M 11月 17 14:50 demo4.log
[root@client1 ~]# ls -lh /data/sdd1总用量 80M-rw-r--r--. 2 root root 20M 11月 17 14:50 demo1.log-rw-r--r--. 2 root root 20M 11月 17 14:50 demo2.log-rw-r--r--. 2 root root 20M 11月 17 14:50 demo3.log-rw-r--r--. 2 root root 20M 11月 17 14:50 demo4.log
[root@node3 ~]# ls -lh /data/sdd1总用量 20M-rw-r--r--. 2 root root 20M 11月 17 14:50 demo5.log
[root@node4 ~]# ls -lh /data/sdd1总用量 20M-rw-r--r--. 2 root root 20M 11月 17 14:50 demo5.log

总结:分布式条带卷先以分布式卷的形式,两两一组,保存完整的文件,再对各组的文件进行条带式拆分存储,将组内的文件分成两部分存在组内的服务器上,即一个组内的两台服务器存放的文件可以组成一部分完整的文件,另一组同理,两个组各自持有的那部分文件相加就是完全完整的文件

6.6:查看分布式复制卷分布情况(node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1)

[root@node1 ~]# ls -lh /data/sde1总用量 160M-rw-r--r--. 2 root root 40M 11月 17 14:50 demo1.log-rw-r--r--. 2 root root 40M 11月 17 14:50 demo2.log-rw-r--r--. 2 root root 40M 11月 17 14:50 demo3.log-rw-r--r--. 2 root root 40M 11月 17 14:50 demo4.log
[root@node2 ~]# ls -lh /data/sde1总用量 160M-rw-r--r--. 2 root root 40M 11月 17 14:50 demo1.log-rw-r--r--. 2 root root 40M 11月 17 14:50 demo2.log-rw-r--r--. 2 root root 40M 11月 17 14:50 demo3.log-rw-r--r--. 2 root root 40M 11月 17 14:50 demo4.log
[root@node3 ~]# ls -lh /data/sde1总用量 40M-rw-r--r--. 2 root root 40M 11月 17 14:50 demo5.log
[root@node4 ~]# ls -lh /data/sde1总用量 40M-rw-r--r--. 2 root root 40M 11月 17 14:50 demo5.log

总结:分布式复制卷两两一组,每组保存整套完整的文件,组组之间进行备份,当一台节点挂掉,数据不受影响

如果局的对你有用的话没给个三连吧

转载地址:http://bfdaf.baihongyu.com/

你可能感兴趣的文章
PythonStudy——Python 内置函数 Built-in function
查看>>
PythonStudy——nonlocal关键字
查看>>
【MySQL】【4】数据库时间与实际时间相差8小时
查看>>
【Git】【1】简单介绍
查看>>
【记录】【2】各种在线网址
查看>>
【Oracle】【9】取前N条记录——rownum和row_number() over()的使用
查看>>
【Java】【15】判断url对应的图片是否存在
查看>>
【Java】【22】读写properties文件
查看>>
【Spring】【1】mybatis spring的自动扫描配置
查看>>
【Java】【25】去除空格
查看>>
【其他】【PL/SQL Developer】【2】报错Initialization error Could not load ".../oci.dll"解决方法...
查看>>
【Java】【28】提高List的removeAll方法的效率
查看>>
【JS】【28】让输入框只能输入正整数
查看>>
【记录】【4】各种工具
查看>>
【JS】【31】读取json文件
查看>>
Ubuntu Boost 编译
查看>>
MySQL中的行级锁,表级锁,页级锁
查看>>
ORACLE 修改SID
查看>>
OpenCV模块分析(转)
查看>>
聊聊我对写好程序的认识
查看>>