GlusterFS概述

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

特点

扩展性和高性能
高可用性
全局统一命名空间
弹性卷管理
基于标准协议

术语:brick、volume、fuse、vfs、glusterd
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

工作原理

弹性HASH算法
通过HASH算法得到32位整数
划分N个连续的子空间,每个空间对应一个Brck
弹性HASH算法优点
保证数据平均分布在每一个Brick中
解决了对元数据服务的依赖,进而解决了单点故障以及访问瓶颈
在这里插入图片描述

卷的类型

分布式卷
没有对文件进行分块处理
通过扩展文件属性保存HASH值
支持底层文件系统EXT3、4、ZFS、XFS等
特点
文件分布在不同服务器不具备冗余性
更容易和廉价地扩展卷的大小
单点故障会造成数据丢失
依赖底层数据保护
gluster volume create dis-volume server1:/dir1 server2:/dir2…

条带卷
根据偏移量将文件分成N块(N个条带节点),轮询的方式存储在每一个Brick Server节点
存储大文件时,性能尤为突出
不具备冗余性,类似Raid0
特点
数据被分割成更小块分布到服务器群中不同条带区
分布减少了负载更小的文件加速了存取速度
没有数据冗余
gluster volume create stripe-volume stripe 2 server1:/dir1 server2:/dir2…

复制卷
同一个文件保存一份或多分副本
因为要保存副本,所以磁盘利用率较低
若多个节点上存储空间不一致,将按照木桶效应取最低节点容量作为该卷的总容量
特点
卷中所有的服务器均保存一个完整的副本
卷的副本数量可由客户创建时决定
至少有两块服务器或更多
具备冗余性
gluster volume create rep-volume replica 2 server1:/dir1 server2:/dir2…

分布式条带卷
兼顾分布式和条带功能
主要用于大文件访问处理
至少4台服务器
gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2…

分布式复制卷
兼顾分布式卷和复制卷功能
用于需要冗余的情况
gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2…

部署实验
准备环境、关闭防火墙selinux、配置hosts文件、安装软件、启动GFS、添加节点、查看集群
部署客户端
安装客户端软件、创建挂载目录、修改hosts文件、挂载gluster文件系统、修改fstab配置文件

首先在4台虚拟机中先添加4块硬盘然后全部格式化分区之后修改hosts
首先setenforce 0和stop firewalld关闭防护

[root@node1 ~]# vi /etc/hosts
20.0.0.25       node1
20.0.0.26       node2
20.0.0.27       node3
20.0.0.28       node4

然后设置共享目录右键属性共享第二个里面点击下拉有个everyone然后共享成功
在这里插入图片描述

还有一个要win+R打开运行控制台然后输入secpol.msc修改本地策略把Guest删除
在这里插入图片描述
还是不行就打开网络共享中心把所有的都设置为共享允许然后密码访问选择没有
在这里插入图片描述

设置对应主机名

[root@localhost ~]# hostnamectl set-hostname +主机名

做开局设置关闭防火墙关底层防护
stopfirewalld stenforce 0
内核三种模式

enforcing - 强制模式,代表selinux在运行中,且已经开始显示domain/type之间的验证关系
permissive - 宽容模式,代表selninux在运行中,不过不会限制domain/type之间的验证关系,即使验证不正确,进程仍可对文件进行操作,不过如果验证不正确会发出警告
disabled - 关闭模式,selinux并没有实际运行

做映射

[root@node1 ~]#vi /etc/hosts   ###做映射  
20.0.0.40 node1
20.0.0.41 node2
20.0.0.42 node3
20.0.0.43 node4

制作一个一件格式化的脚本

#!/bin/bash
echo "the disks exist list:"
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)
        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 systeml
        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
wq保存退出
然后chmod+x给权限./运行脚本
1) sdb
2) sdc
3) sdd
4) sde
5) quit
选择磁盘自动格式化
然后df -Th查看,会多出4个磁盘
/dev/sdb1               xfs        20G   33M   20G   1% /data/sdb1
/dev/sdc1               xfs        20G   33M   20G   1% /data/sdc1
/dev/sdd1               xfs        20G   33M   20G   1% /data/sdd1
/dev/sde1               xfs        20G   33M   20G   1% /data/sde1

每一个主机都要做

之后就是虚拟机挂载共享目录

[root@localhost ~]# smbclient -L //192.168.100.2/  ##查看一下共享目录
Enter SAMBA\root's password: ##无密码直接回车
               Sharename       Type      Comment
 ---------       ----      -------
 ADMIN$          Disk      远程管理
 C$              Disk      默认共享
 D$              Disk      默认共享
 E$              Disk      默认共享
 F$              Disk      默认共享
 chen          Disk      
 IPC$            IPC       远程 IPC
 Users           Disk      
Reconnecting with SMB1 for workgroup listing.
Connection to 192.168.100.33 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Failed to connect with SMB1 -- no workgroup availabl

然后挂载目录

[root@node1 ~]# mkdir /chen   ###创建挂载目录
[root@node1 ~]# mount.cifs //192.168.10.2/gfsrepo  /chen     ###挂载

之后就是布置yum源

root@node1 chen]# cd /etc/yum.repos.d/                     ###进入到etc/yum.repos.d/ 目录里
[root@node1 yum.repos.d]# mkdir  bac                 ###创建一个bac目录
[root@node1 yum.repos.d]# mv CentOs-*   bac/   ###把CentOs放到backup目录里
[root@node1 yum.repos.d]# vim glfs.repo
[GLFS]
name=glfs
baseurl=file:///chen        ###本地源 http://mirror.centos.org/centos/$releasever/storage/$basearch/gluster-3.12/  ###现网源
gpgcheck=0
enabled=1
[root@node1 yum.repos.d]# yum clean all         ###清除缓存
[root@node1 yum.repos.d]# yum list                 ###重新加载

上面的步骤每一台都需要操作
————————————————————
服务器安装glusterfs

[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
[root@node1 yum.repos.d]# systemctl start glusterd.service    ###启动服务
[root@node1 yum.repos.d]# systemctl enable glusterd             ###开机自启
[root@node1 yum.repos.d]# systemctl status  glusterd             ###查看状态
[root@node1 yum.repos.d]# ntpdate ntp1.aliyun.com ##时间同步

之后添加信任存储只需要在一台上面做就行

[root@node1 yum.repos.d]# gluster peer probe node3
peer probe: success. 
[root@node1 yum.repos.d]# gluster peer probe node4
peer probe: success. 
[root@node1 yum.repos.d]# gluster peer probe node2
peer probe: success. 
[root@node1 yum.repos.d]# gluster peer status  ##查看池子状态
Number of Peers: 3

分布式卷

[root@node4 yum.repos.d]# gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force  ###创建分布式卷,卷名叫dis-vol,用了node1:/data/sdb1和node2:/data/sdb1 

[root@node4 yum.repos.d]# gluster volume info dis-vol    ###查看详细信息和状态
Volume Name: dis-vol          ###名称
Type: Distribute                     ###分布式卷的类型
Volume ID: 5b75e4bd-d830-4e3f-9714-456261c276be  ###id,独一无二的
Status: Created                      ###Created(创建)状态不能使用
Snapshot Count: 0        
Xlator 1: BD
Capability 1: thin
Capability 2: offload_copy
Capability 3: offload_snapshot
Number of Bricks: 2               ###两个块组成
Transport-type: tcp                ###tcp协议
Bricks:
Brick1: node1:/data/sdb1      ###node1的sdb1
Brick1 VG: 
Brick2: node2:/data/sdb1      ###node2的sbd1
Brick2 VG: 
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
 
[root@node4 yum.repos.d]# gluster volume start dis-vol      ###开启
[root@node4 yum.repos.d]# gluster volume info dis-vol       ###再用这条查看状态就是Started12

条带卷

[root@node4 yum.repos.d]# gluster volume create stripe-vol stripe 2 node1:/data/sdc1 node2:/data/sdc1 force   ##创建条带卷
[root@node4 yum.repos.d]# gluster volume start stripe-vol    ###开启条带卷

复制卷

[root@node4 yum.repos.d]# gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force
yum.repos.d]# gluster volume start rep-vol     ###开启

分布式条带卷

[root@node4 yum.repos.d]# gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
[root@node4 yum.repos.d]# gluster volume start dis-stripe     ###开启

分布式复制卷

[root@node4 yum.repos.d]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
[root@node4 yum.repos.d]# gluster volume start  dis-rep     ###开启

查看状态

[root@node4 yum.repos.d]# gluster volume  list  
dis-rep
dis-stripe
dis-vol
rep-vol
stripe-vol

之后在客户端上面开始挂盘了

[root@client yum.repos.d]# yum -y install glusterfs glusterfs-fuse 
创建五个挂载目录,并且挂载
ot@client yum.repos.d]# mkdir -p /test/dis         ### 挂载分布式卷
[root@client yum.repos.d]# mount.glusterfs node1:dis-vol /test/dis/

[root@client yum.repos.d]# mkdir -p /test/stripe
[root@client yum.repos.d]# mount.glusterfs node1:stripe-vol /test/stripe/    ### 挂载条带卷

[root@client yum.repos.d]# mkdir -p /test/rep
[root@client yum.repos.d]# mount.glusterfs node1:rep-vol /test/rep/    ### 挂载复制卷

[root@client yum.repos.d]# mkdir -p /test/dis-stripe
[root@client yum.repos.d]# mount.glusterfs node1:dis-stripe /test/dis-stripe/   ### 挂载分布条带卷

[root@client yum.repos.d]# mkdir -p /test/dis-rep
[root@client yum.repos.d]# mount.glusterfs node1:dis-rep /test/dis-rep/    ###挂载分布式复制 

[root@master ~]# df -Th   ##挂载情况
Filesystem              Type            Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs             291G  4.2G  287G   2% /
devtmpfs                devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs                   tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs                   tmpfs           1.9G   13M  1.9G   1% /run
tmpfs                   tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sde1               xfs              20G   33M   20G   1% /data/sde1
/dev/sdd1               xfs              20G   33M   20G   1% /data/sdd1
/dev/sdc1               xfs              20G   33M   20G   1% /data/sdc1
/dev/sdb1               xfs              20G   33M   20G   1% /data/sdb1
/dev/sda1               xfs            1014M  179M  836M  18% /boot
tmpfs                   tmpfs           378M     0  378M   0% /run/user/0
tmpfs                   tmpfs           378M   12K  378M   1% /run/user/42
//192.168.100.2/chen    cifs            477G  395M  477G   1% /root/chen
node1:dis-vol           fuse.glusterfs   40G  265M   40G   1% /test/dis
node1:stripe-vol        fuse.glusterfs   40G  265M   40G   1% /test/stripe
node1:rep-vol           fuse.glusterfs   20G  233M   20G   2% /test/rep
node1:dis-stripe        fuse.glusterfs   80G  330M   80G   1% /test/dis-stripe
node1:dis-rep           fuse.glusterfs   40G  265M   40G   1% /test/dis-rep

就完成了

查看卷命令

[root@node1 yum.repos.d]# ls -h +磁盘
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐