GlusterFS

GlusterFS

一、 GlusterFS简介

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

二、 GlusterFS特点

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

三、GlusterFS术语

  • Brick
  • Volume
  • FUSE
  • VFS
  • Glusterd

四、模块化堆栈式架构

  • 模块化、堆栈式的架构
  • 通过对模块的组合,实现复杂的功能

GlusterFS_第1张图片

五、GlusterFS工作原理

GlusterFS_第2张图片

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

六、弹性HASH算法

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

七、GlusterFS的卷类型

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

7.1 分布式卷

  • 分布式卷
  • 没有对文件进行分块处理
  • 通过扩展文件属性保存HASH值
  • 支持的底层文件系统有EXT3、EXT4、ZFS、XFS等

分布式卷的特点

  • 文件分布在不同的服务器,不具备冗余性
  • 更容易和廉价地扩展卷的大小
  • 单点故障会造成数据丢失
  • 依赖底层的数据保护

格式


gluster volume create dis-volume server1:/dir1 server2:/dir2 server3:/dir3 

  • 没有分块处理,文件只能存在一个server中,效率不提升

7.2 条带卷

  • 根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
  • 存储大文件时,性能尤为突出
  • 不具备冗余性,类似Raid0
  • 从多个server中同时读取文件,效率提升

特点

  • 数据被分割成更小块分布到块服务器群中的不同条带区
  • 分布减少了负载且更小的文件加速了存取的速度
  • 没有数据冗余
  • 创建条带卷
  • 创建了一个名为Stripe-volume的条带卷,文件将被分块轮询的存储在Server1:/dir1和Server2:/dir2两个Brick中

gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2 force #(直接执行)

7.3 复制卷

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

特点

  • 卷中所有的服务器均保存一个完整的副本

  • 卷的副本数量可由客户创建的时候决定

  • 至少有两个块服务器或更多服务器

  • 具备冗余性

  • 创建复制卷

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


gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

7.4 分布式条带卷

分布式条带卷

  • 兼顾分布式卷和条带卷的功能
  • 主要用于大文件访问处理
  • 至少最少需要 4 台服务器

创建分布式条带卷

  • 创建了名为dis-stripe的分布式条带卷,配置分布式的条带卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)

 gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4

7.5 分布式复制卷

  • 兼顾分布式卷和复制卷的功能
  • 用于需要冗余的情况

创建分布式复制卷

  • 创建名为dis-rep的分布式条带卷,配置分布式复制卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)

gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4

八、GlusterFS部署

8.1 实验环境

  • 5台虚拟机作为node 节点服务器
  • 客户端:node1:192.168.75.144
  • 四个节点服务器作为分布式文件系统GFS服务器
  • node2:192.168.75.200
  • node3:192.168.75.131
  • node4:192.168.75.134
  • node5:192.168.75.155

8.2 实验步骤

  • 所有服务器进行设置主机名
hostnamectl set-hostname node1
su
hostnamectl set-hostname node2
su
hostnamectl set-hostname node3
su
hostnamectl set-hostname node4
su
hostnamectl set-hostname node5
su
  • 关闭防火墙核心防护

systemctl stop firewalld
setenforce 0

  • 对节点服务器配置修改host文件

vim /etc/hosts
192.168.75.134 node4
192.168.75.200 node2
192.168.75.131 node3
192.168.75.144 node1
192.168.75.155 node5
~     
             
  • 对节点服务器配置添加4个硬盘———分区——格式化——挂载操作

1.手动添加4个20G硬盘为所有节点
2.使用脚本一键部署(分区、格式化、挂载操作)
3. df -h  //查看挂载情况

vim disk.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 disk.sh
./disk.sh
		
df -Th   //查看磁盘挂载情况

  • 为所有服务器添加GFSyum仓库为了之后安装glusters glusterfs-server glusterfs-fuse glusterfs-rdma
所有节点服务器设置
window 的共享文件夹设置everyone

mount -t cifs -o username=ty,password=ty //192.168.1.8/gfsrepo /opt/GFS

[root@node5 yum.repos.d]# df -Th
文件系统              类型      容量  已用  可用 已用% 挂载点
/dev/sda3             xfs        50G  5.0G   46G   10% /
devtmpfs              devtmpfs  906M     0  906M    0% /dev
tmpfs                 tmpfs     922M     0  922M    0% /dev/shm
tmpfs                 tmpfs     922M   11M  911M    2% /run
tmpfs                 tmpfs     922M     0  922M    0% /sys/fs/cgroup
/dev/sda5             xfs       246G   33M  246G    1% /home
/dev/sda1             xfs      1014M  163M  852M   17% /boot
tmpfs                 tmpfs     185M   36K  185M    1% /run/user/0
/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
/dev/sr0              iso9660   4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
//192.168.1.8/gfsrepo cifs      297G  244G   53G   83% /opt/GFS


设置yum 仓库

vim GLFS.repo 
[GLFS]
name=glfs
baseurl=file:///opt/GFS/
gpgcheck=0
enabled=1


 yum clean all

 yum makecache 
yum list

安装包红色不是报错

  • 安装gluster服务(GFS服务器需要安装)

yum -y install glusters glusterfs-server glusterfs-fuse glusterfs-rdma

出现故障


  可用: glusterfs-client-xlators-3.10.2-1.el7.x86_64 (GLFS)
              glusterfs-client-xlators = 3.10.2-1.el7
 您可以尝试添加 --skip-broken 选项来解决该问题
 您可以尝试执行:rpm -Va --nofiles --nodigest
[root@node2 GFS]# 

解决方法


[root@node3 yum.repos.d]# yum remove glusterfs-libs.x86_64

之后再次执行yum -y install glusters glusterfs-server glusterfs-fuse glusterfs-rdma

  • 开启gluster服务

systemctl restart glusterd

  • 设置时间同步(gluster-server需要设置)

ntpdate ntp1.aliyun.com

  • 添加入存储信任池只要在一台主机上添加其他节点即可 ##如果建立信任池出错,查看防火墙和服务是否开启

gluster peer probe node3
gluster peer probe node4
gluster peer probe node5

  • 查看所有节点

[root@node2 GFS]# gluster peer status
Number of Peers: 3

Hostname: node4
Uuid: 902d4c1e-cccf-42f3-8946-61dc83b3f4d1
State: Peer in Cluster (Connected)

Hostname: node3
Uuid: 126ac64f-026f-4ade-bcf8-e0e537be729f
State: Peer in Cluster (Connected)

Hostname: node5
Uuid: faa7791c-7e9f-451c-a1ca-11535b45264d
State: Peer in Cluster (Connected)
[root@node2 GFS]# 


  • 客户端node1:192.168.75.144设置

安装yum仓库

window 的共享文件夹gfsrepo设置everyone   ##gfsrepo是装有gluster安装包的

 mkdir GFS

mount -t cifs -o username=ty,password=ty //192.168.1.8/gfsrepo /opt/GFS

[root@node5 yum.repos.d]# df -Th
文件系统              类型      容量  已用  可用 已用% 挂载点
/dev/sda3             xfs        50G  5.0G   46G   10% /
devtmpfs              devtmpfs  906M     0  906M    0% /dev
tmpfs                 tmpfs     922M     0  922M    0% /dev/shm
tmpfs                 tmpfs     922M   11M  911M    2% /run
tmpfs                 tmpfs     922M     0  922M    0% /sys/fs/cgroup
/dev/sda5             xfs       246G   33M  246G    1% /home
/dev/sda1             xfs      1014M  163M  852M   17% /boot
tmpfs                 tmpfs     185M   36K  185M    1% /run/user/0
/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
/dev/sr0              iso9660   4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
//192.168.1.8/gfsrepo cifs      297G  244G   53G   83% /opt/GFS

cd /etc/yum.repo
mkdir bak
mv C* bak

设置yum 仓库

vim GLFS.repo 
[GLFS]
name=glfs
baseurl=file:///opt/GFS/
gpgcheck=0
enabled=1


 yum clean all

 yum makecache 
yum list

yum -y install glusterfs glusterfs-fuse

vim /etc/hosts

192.168.75.134 node4
192.168.75.200 node2
192.168.75.131 node3
192.168.75.144 node1
192.168.75.155 node5



安装包红色不是报错

##############################################################
yum -y install glusters glusterfs-server glusterfs-fuse glusterfs-rdma


出现故障

          可用: glusterfs-client-xlators-3.10.2-1.el7.x86_64 (GLFS)
              glusterfs-client-xlators = 3.10.2-1.el7
 您可以尝试添加 --skip-broken 选项来解决该问题
 您可以尝试执行:rpm -Va --nofiles --nodigest
[root@node2 GFS]# 


解决方法:[root@node3 yum.repos.d]# yum remove glusterfs-libs.x86_64

之后再次执行yum -y install glusterfs glusterfs-fuse

//开启gluster服务
systemctl restart glusterd

  • 在节点服务node 4操作(任意节点)

  • 新建一个分布卷


gluster volume create dis-vol node2:/data/sdb1 node3:/data/sdb1 force

//dis-vol 是指卷组名
force  直接执行

//gluster volume info dis-vol  ##查看卷组信息,created是指还没有在运行

//gulster volume start dis-vol  ## 启动卷组

//gulster volume list   ## 查看卷组的列表

//gluster volume delete dis-vol  ## 删除卷组


注意:新建卷组是在gluster节点服务器。
然后再客户端挂载卷组使用

  • 客户端挂载验证

分布式卷========

  • 分布式卷
  • 没有对文件进行分块处理
  • 通过扩展文件属性保存HASH值
  • 支持的底层文件系统有ext3、ext4、ZFS、XFS

######分布式卷具有如下特点#########

  • 文件分布在不同的服务器,不具备冗余性
  • 更容易和廉价地扩展卷的大小
  • 单点故障会造成数据丢失
  • 依赖底层的数据保护

1.在node 2上新建一个分布式卷dis-vol


[root@node2 GFS] gluster volume create dis-vol node2:/data/sdb1 node3:/data/sdb1 force
volume create: dis-vol: success: please start the volume to access data

[root@node2 GFS] gluster volume info dis-vol 
 
Volume Name: dis-vol
Type: Distribute
Volume ID: d065aa57-a6b4-44bd-a82b-0c062ccc1515
Status: Created
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node2:/data/sdb1
Brick2: node3:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node2 GFS] gluster volume start dis-vol    //启动卷组
volume start: dis-vol: success


  • 客户端挂载验证

[root@node4-client opt] mkdir -p /test/dis
[root@node4-client opt] mount.glusterfs node2:dis-vol /test/dis

################新建测试文件#################################cd /opt/test/dis
[root@node4-client dis] dd if=/dev/zero of=/demo1.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0159063 秒,2.6 GB/秒
[root@node4-client dis] dd if=/dev/zero of=/demo2.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0257849 秒,1.6 GB/秒
[root@node4-client dis] dd if=/dev/zero of=/demo3.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0834383 秒,503 MB/秒
[root@node4-client dis] dd if=/dev/zero of=/demo4.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0850667 秒,493 MB/秒
[root@node4-client dis] dd if=/dev/zero of=/demo5.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0478089 秒,877 MB/秒
[root@node4-client /] mv demo* /test/dis
[root@node4-client /] cd /test/dis/
[root@node4-client dis] ll -h
总用量 200M
-rw-r--r--. 1 root root 40M 9月  13 23:01 demo1.log
-rw-r--r--. 1 root root 40M 9月  13 23:01 demo2.log
-rw-r--r--. 1 root root 40M 9月  13 23:01 demo3.log
-rw-r--r--. 1 root root 40M 9月  13 23:01 demo4.log
-rw-r--r--. 1 root root 40M 9月  13 23:01 demo5.log

  • node 2节点查看文件
[root@node2 GFS] cd /data/sdb1/
[root@node2 sdb1] ll
总用量 163840
-rw-r--r--. 2 root root 41943040 9月  13 23:01 demo1.log
-rw-r--r--. 2 root root 41943040 9月  13 23:01 demo2.log
-rw-r--r--. 2 root root 41943040 9月  13 23:01 demo3.log
-rw-r--r--. 2 root root 41943040 9月  13 23:01 demo4.log


  • node 3节点查看文件
[root@node3 yum.repos.d] cd /data/sdb1
[root@node3 sdb1] ll
总用量 40960
-rw-r--r--. 2 root root 41943040 9月  13 23:01 demo5.log
[root@node3 sdb1]

================ 条带卷 ================

条带卷

  • 根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
  • 存储大文件是,性能尤为突出
  • 不具备冗余性。类似RAID0

-----------条带卷特点------------

  • 数据被分割成更小块分布到块服务器群中的不同条带区
  • 分布减少了负载且更小的文件加速了存取的速度
  • 没有数据冗余
gluster volume create strip-vol stripe 2 node1:/data/sdc1 node2:/data/sdc1 force

gluster volume start stripe-vol

gluster volume info stripe-vol

复制卷

复制卷

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

---------特点----------------

  • 卷中所有的服务器均保存在一个完整的副本
  • 卷的副本数量可由客户创建的时候决定
  • 至少由两个块服务器或更多服务器
  • 具备冗余性

gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force

gluster volume start rep-vol

gluster volume info rep-vol

=分布式条带卷

  • 条带卷的功能
  • 访问处理
  • 节点服务器

gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 force

gluster volume start dis-stripe

gluster volume info dis-stripe

gluster volume list

================ 分布式复制卷 ============

  • 分布式复制卷
  • 兼顾分布式卷和复制卷的功能
  • 用于需要冗余的情况下

gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 force

gluster volume start dis-rep

gluster volume info dis-rep

gluster volume list


条带复制卷==========

将文件分割并备份随机存放在不同的服务器里,File被分割4段,1、3存放在server1(exp1)上,2、4存放在server2(exp4),server1上的(exp3)存放server2(exp4)的备份文件,server2上的(exp2)存放server1(exp1)的备份文件。

创建l例子:gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4

分布式条带复制卷

三种基本卷的复合卷。

创建语法: gluster volume create [disperse []] [redundancy ] [transport tcp | rdma | tcp,rdma]

例子:gluster volume create test1 disperse 3 server1:/brick{1…6} force

  • 客户端临时挂载

mount.glusters node1:dis-vol /text/dis    //挂载分布式卷

mount.glusters node1:stripe-vol /text/strip //挂载条带卷

mount.glusters node1:rep-vol /text/rep  //挂载复制卷

mount.glusters node1:dis-stripe /text/dis_stripe  //挂载分布条带卷

mount.glusters node1:dis-rep /text/dis_rep  //挂载分布复制卷


//然后回到之前创建卷区的节点服务器的,查看文件分布存储情况。

访问控制

  • 仅拒绝

gluster volume set dis-vol auth.reject 192.168.175.142
volume set:success

  • 仅允许

gluster volume set dis-vol auth.allow 192.168.175.142
volume set:success

你可能感兴趣的:(分布式文件系统,服务器,运维)