GFS分布式存储平台

GFS概述

GFS,全称 Gluster File System,开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端.在传统的解决 方案中Glusterfs能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储。
由存储服务器(Brick Server)、客户端以及NFS/Samba 存储网关组成
无元数据服务器

GlusterFS特点

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

常用术语
Brick:GFS中的存储单元,通过是一个受信存储池中的服务器的一个导出目录。可以通过主机名和目录名来标识,如’SERVER:EXPORT’
Volume:卷
FUSE:内核文件系统,Filesystem Userspace是一个可加载的内核模块,其支持非特权用户创建自己的文件系统而不需要修改内核代码。通过在用户空间运行文件系统的代码通过FUSE代码与内核进行桥接。
VFS:虚拟文件系统
Glusterd:Gluster management daemon,要在trusted storage pool中所有的服务器上运行。

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

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

GFS常见卷类型
分布式卷
条带卷
复制卷
分布式条带卷
分布式复制卷
条带复制卷
分布式条带复制卷

)

GFS常见卷类型介绍

分布式卷

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

特点

扫描二维码关注公众号,回复: 11783022 查看本文章
  • 文件分布在不同的服务器,不具备冗余性
  • 更容易和廉价地扩展卷的大小
  • 单点故障会造成数据丢失
  • 依赖底层的数据保护

创建命令
gluster volume create dis-volume server1:/dir1 server2:/dir2

条带卷

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

特点

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

创建命令
gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2

复制卷

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

特点

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

创建命令
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

分布式条带卷

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

创建命令
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

分布式复制卷

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

创建命令
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

GFS工作原理

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

来吧!展示!!

实验环境介绍

使用VMware虚拟机软件
节点主机共 4 台,每台添加 4 块硬盘(直接默认吧,不改了)
4台节点机的 ip 地址分别为:
20.0.0.7,主机名为 JD1
20.0.0.4,主机名为 JD2
20.0.0.5,主机名为 JD3
20.0.0.6,主机名为 JD4
在这里插入图片描述

客户机 一台
IP地址为 20.0.0.8,主机名 client01

开始展示!

以下步骤 四台都要做
查看硬盘情况,可以看到四块硬盘分别为 sdb,sdc,sdd,sde**(我这边是实验环境,现网中不一定每一台服务器硬盘数量都一样,所以要看清楚 硬盘名称)**

[root@jd1 ~]# fdisk -l
……省略部分……仅保留新加入硬盘信息……
磁盘 /dev/sdd:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节



磁盘 /dev/sde:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

硬盘分区

[root@jd1 ~]# mkdir /script
[root@jd1 ~]# cd /script/
[root@jd1 script]# vim disk.sh	##硬盘分区脚本
#!/bin/bash
echo "the disks exist list:"
fdisk -l | grep '磁盘 /dev/sd[a-z]'
echo "==================================="
PS3="chose which disk you want to cteate:"
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 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

[root@jd1 script]# chmod +x disk.sh 
[root@jd1 script]# ./disk.sh 	##运行硬盘分区脚本,我只运行一次,实际上每台主机的四块硬盘都要用一次
the disks exist list:
磁盘 /dev/sdd:21.5 GB, 21474836480 字节,41943040 个扇区
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
磁盘 /dev/sda:214.7 GB, 214748364800 字节,419430400 个扇区
磁盘 /dev/sde:21.5 GB, 21474836480 字节,41943040 个扇区
===================================
1) sdb
2) sdc
3) sdd
4) sde
5) quit
chose which disk you want to cteate:1
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x9aeb95b2 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 分区号 (1-4,默认 1):起始 扇区 (2048-41943039,默认为 2048):将使用默认值 2048
Last 扇区, +扇区 or +size{
    
    K,M,G} (2048-41943039,默认为 41943039):将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB

命令(输入 m 获取帮助):The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

分区四次后查看硬盘是否分区成功
[root@jd1 script]# ll /dev/ |grep sd
brw-rw----. 1 root disk      8,   0 9月  13 19:19 sda
brw-rw----. 1 root disk      8,   1 9月  13 19:19 sda1
brw-rw----. 1 root disk      8,   2 9月  13 19:19 sda2
brw-rw----. 1 root disk      8,  16 9月  13 19:31 sdb
brw-rw----. 1 root disk      8,  17 9月  13 19:31 sdb1
brw-rw----. 1 root disk      8,  32 9月  13 19:33 sdc
brw-rw----. 1 root disk      8,  33 9月  13 19:33 sdc1
brw-rw----. 1 root disk      8,  48 9月  13 19:33 sdd
brw-rw----. 1 root disk      8,  49 9月  13 19:33 sdd1
brw-rw----. 1 root disk      8,  64 9月  13 19:33 sde
brw-rw----. 1 root disk      8,  65 9月  13 19:33 sde1

[root@jd1 script]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
……省略部分……
/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

设置GFS

[root@jd1 script]# setenforce 0
[root@jd1 script]# iptables -F
[root@jd1 script]# vim /etc/hosts	##本地解析文件,四台都要
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
20.0.0.7 jd1
20.0.0.4 jd2
20.0.0.5 jd3
20.0.0.6 jd4

安装GLFS软件(客户机也要安装)

[root@jd1 ~]# yum -y install centos-release-gluster6	##安装安装工具
[root@jd1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
[root@jd1 ~]# systemctl start glusterd	##启动服务
[root@jd1 ~]# systemctl enable glusterd	##设置开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/glusterd.service to /usr/lib/systemd/system/glusterd.service.

在四台主机中添加其他节点

[root@jd1 ~]# gluster peer probe jd1
peer probe: success. Probe on localhost not needed
[root@jd1 ~]# gluster peer probe jd2
peer probe: success. 
[root@jd1 ~]# gluster peer probe jd3
peer probe: success. 
[root@jd1 ~]# gluster peer probe jd4
peer probe: success. 

创建分布式卷

[root@jd1 ~]# gluster volume create fbj jd1:/data/sdb1 jd2:/data/sdb1 force
volume create: fbj: success: please start the volume to access data
[root@jd1 ~]# gluster volume start fbj
volume start: fbj: success
[root@jd1 ~]# gluster volume info fbj
 
Volume Name: fbj
Type: Distribute
Volume ID: f71bf71f-90af-41a1-a89d-d2f3ca9e9d7e
Status: Started
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: jd1:/data/sdb1
Brick2: jd2:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

客户机验证
[root@client ~]# cd /
[root@client /]# mkdir /gfs
[root@client /]# mkdir fbj fzj fbtdj fbfzj tdj
[root@client fbj]# touch 1.txt 2.txt 3.txt

在两台主机中的 /data/sdb1里找,两个里一个有就成功了,随机分布的
[root@jd2 sdb1]# ls
1.txt  2.txt  3.txt

创建条带卷

别看了,6.10之后的新版本条带卷

创建复制卷

[root@jd1 sdb1]# gluster volume create fzj replica 2 jd1:/data/sdc1 jd2:/data/sdc1 force
volume create: fzj: success: please start the volume to access data
[root@jd1 sdb1]# gluster volume start fzj
volume start: fzj: success
[root@jd1 sdb1]# gluster volume info fzj
 
Volume Name: fzj
Type: Replicate
Volume ID: 99a14b64-1a02-4a97-bf7d-3604475300fe
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: jd1:/data/sdc1
Brick2: jd2:/data/sdc1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

客户机
[root@client fbj]# mount -t glusterfs jd1:fzj /gfs/fzj
[root@client fbj]# cd ..
[root@client gfs]# cd fzj
[root@client fzj]# touch 1.txt 2.txt 6.txt

验证,两台都有
[root@jd1 sdc1]# ls
1.txt  2.txt  6.txt

[root@jd2 sdc1]# ls
1.txt  2.txt  6.txt

创建分布式条带卷

还看,条带卷都创建不了,分布式怎么可能创的了!!!

[root@jd1 sdc1]# gluster volume create fbtdj stripe 2 jd1:/data/sdd1 jd2:/data/sdd1 jd3:/data/sdd1 jd4:/data/sdd1 force
stripe option not supported

分布式复制卷

[root@jd1 sdc1]# gluster volume create fbfzj replica 2 jd1:/data/sdd1 jd2:/data/sdd1 jd3:/data/sdd1 jd4:/data/sdd1 force
volume create: fbfzj: success: please start the volume to access data
[root@jd1 sdc1]# gluster volume start fbfzj
volume start: fbfzj: success
[root@jd1 sdc1]# gluster volume info fbfzj
 
Volume Name: fbfzj
Type: Distributed-Replicate
Volume ID: 6e0725be-204f-41d5-b63a-10beb4817953
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: jd1:/data/sdd1
Brick2: jd2:/data/sdd1
Brick3: jd3:/data/sdd1
Brick4: jd4:/data/sdd1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off


客户机验证
[root@client gfs]# mount -t glusterfs jd1:fbfzj /gfs/fbfzj/
[root@client gfs]# cd ..
[root@client /]# cd /gfs/fbfzj/
[root@client fbfzj]# touch 123.txt 234.txt

在主机里找
[root@jd1 sdd1]# ls
234.txt
[root@jd2 data]# cd sdd1/
[root@jd2 sdd1]# ls
234.txt
[root@jd3 script]# cd /data/sdd1/
[root@jd3 sdd1]# ls
123.txt
[root@jd4 ~]# cd /data/sdd1/
[root@jd4 sdd1]# ls
123.txt

破坏性测试

停止 jd2 的网络
[root@jd2 sdd1]# systemctl stop network

查看复制卷

[root@client gfs]# cd fzj
[root@client fzj]# ls
1.txt  2.txt  6.txt
复制卷文件还在

查看分布卷

[root@client gfs]# cd fbj
[root@client fbj]# ls
[root@client fbj]# 
文件没了

查看分布式复制卷

[root@client gfs]# cd fbfzj/
[root@client fbfzj]# ls
123.txt  234.txt
数据还在

实验总结

上述实验测试,凡是带复制数据,相比而言,数据比较安全

其他常见 GFS 命令

查看GlusterFS卷:gluster volume list 
查看所有卷的信息:gluster volume info
查看所有卷的状态:gluster volume status
停止/删除卷:gluster volume stop 卷名               ##停止一个卷
		   gluster volume delete 卷名             ##删除一个卷
设置卷的访问控制:gluster volume set dis-rep auth.allow 192.168.32.*     ##设置192.168.30.0网段的所有IP地址 都能访问dis-rep卷(分布式复制卷)

猜你喜欢

转载自blog.csdn.net/Ora_G/article/details/108561805
今日推荐